From d713d4f61a8c9c6882536bff7a03b8b749a5e67b Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Mon, 12 Sep 2022 16:40:28 +0000 Subject: [PATCH] New changes from l2g w --- dataassim/math/algebra/d_svdfit.f | 39 + dataassim/math/algebra/d_svdvar.f | 22 + dataassim/math/algebra/eigen.f | 111 + dataassim/math/algebra/eigen1.f | 205 + dataassim/math/algebra/eigen_sym_up.f | 2 +- dataassim/math/algebra/lfit.f | 1 - dataassim/math/algebra/matrixoper.f | 504 +- dataassim/math/algebra/test.f | 74 + dataassim/math/nonlinsystems/cpfixedpoint.f | 2 +- dataassim/math/nonlinsystems/d1mach.f | 209 + dataassim/math/nonlinsystems/derv1.f | 34 + dataassim/math/nonlinsystems/dnqsol.f | 1964 ++ dataassim/math/nonlinsystems/dnrm2.f | 67 + dataassim/math/nonlinsystems/erfin.f | 16 + dataassim/math/nonlinsystems/ermsg.f | 89 + dataassim/math/nonlinsystems/fixedpoint.f | 2 +- dataassim/math/nonlinsystems/ierm1.f | 15 + dataassim/math/nonlinsystems/ierv1.f | 32 + dataassim/math/nonlinsystems/math77 | Bin 0 -> 8345600 bytes dataassim/math/nonlinsystems/nonsyssolver.f | 71 +- dataassim/math/numrec/Document.txt | 110 + dataassim/math/numrec/PrinCompAna.f | 112 + dataassim/math/numrec/Table8.3.txt | 91 + dataassim/math/numrec/daxpy.f | 69 + dataassim/math/numrec/dcopy.f | 70 + dataassim/math/numrec/ddot.f | 72 + dataassim/math/numrec/dgeev.f | 18122 ++++++++++++++++ dataassim/math/numrec/dgemm.f | 316 + dataassim/math/numrec/dgemv.f | 265 + dataassim/math/numrec/dger.f | 162 + dataassim/math/numrec/dnrm2.f | 67 + dataassim/math/numrec/dscal.f | 64 + dataassim/math/numrec/dswap.f | 77 + dataassim/math/numrec/dsyev.f | 10505 +++++++++ dataassim/math/numrec/dsymv.f | 266 + dataassim/math/numrec/dsyr2.f | 233 + dataassim/math/numrec/dsyr2k.f | 329 + dataassim/math/numrec/dtrmm.f | 349 + dataassim/math/numrec/dtrmv.f | 282 + dataassim/math/numrec/f77_sources/d_svdfit.f | 38 + dataassim/math/optimization/CompassSearch.f | 8 +- dataassim/math/optimization/GenericOptim.f | 35 + dataassim/math/optimization/GenericRegres.f | 315 +- dataassim/math/optimization/cpCompassSearch.f | 4 +- dataassim/math/optimization/cpnongradopt.f | 2 +- dataassim/math/optimization/cppowell.f | 4 +- dataassim/math/optimization/lbfgsroutines.f | 30 +- dataassim/math/optimization/mcts.f | 173 + dataassim/math/optimization/nongradopt.f | 31 +- dataassim/math/optimization/odr_leastsquare.f | 7 +- dataassim/math/optimization/odrpack.f | 305 +- .../math/optimization/odrpack95/d_drive1.f | 226 + .../math/optimization/odrpack95/d_drive2.f | 160 + .../math/optimization/odrpack95/d_drive3.f | 248 + .../math/optimization/odrpack95/d_lpkbls.f | 2249 ++ .../math/optimization/odrpack95/d_mprec0.f | 203 + dataassim/math/optimization/odrpack95/d_odr.f | 10985 ++++++++++ .../math/optimization/odrpack95/data1.dat | 14 + .../math/optimization/odrpack95/data2.dat | 22 + .../math/optimization/odrpack95/data3.dat | 25 + .../math/optimization/odrpack95/drive1.f | 236 + .../math/optimization/odrpack95/drive2.f | 170 + .../math/optimization/odrpack95/drive3.f | 301 + .../math/optimization/odrpack95/drive4.f | 151 + .../math/optimization/odrpack95/lpkbls.f | 2355 ++ .../math/optimization/odrpack95/makefile.txt | 108 + dataassim/math/optimization/odrpack95/odr.f | 12136 +++++++++++ .../optimization/odrpack95/real_precision.f | 5 + .../optimization/odrpack95/restart_example.f | 172 + .../optimization/odrpack95/simple_example.f90 | 66 + dataassim/math/optimization/odrpack95/test.f | 2742 +++ .../math/optimization/odrpack95/tester.f | 241 + dataassim/math/optimization/odrpack_old.f | 13610 ++++++++++++ dataassim/math/optimization/powell.f | 4 +- dataassim/math/optimization/qpso.f90 | 291 + .../math/othersupmath/charfloatlineparser.f | 99 + dataassim/math/othersupmath/charlineparser.f | 7 +- dataassim/math/othersupmath/doytotime.f | 147 + .../math/othersupmath/extCharToFloatNum.f | 3 +- dataassim/math/othersupmath/fort.2 | 1996 ++ dataassim/math/othersupmath/gasdev.f | 58 +- dataassim/math/othersupmath/sigmoid.f | 2 +- dataassim/math/othersupmath/supmath.f | 112 +- dataassim/math/othersupmath/univparser.f | 3 +- dataassim/math/othersupmath/y_aPLUSbx.f | 44 + dataassim/mathrun/Makefile | 33 + dataassim/mathrun/fort.112 | 14 + dataassim/mathrun/fort.9 | 117 + dataassim/mathrun/mathtest | Bin 0 -> 982162 bytes dataassim/mathrun/sensfit | Bin 0 -> 70928 bytes dataassim/mathrun/testdata.txt | 111 + leafres/testarea/C4PhotoFit.f | 75 + leafres/testarea/C4SetUpLeafGasFit.f | 1578 ++ leafres/testarea/HybridCombinatorial.f | 2 +- leafres/testarea/LeafGasFit_Stom.f | 12 +- leafres/testarea/LeafGasPISCAL_mpi.f | 150 +- leafres/testarea/LeafGasPISCAL_single.f | 210 +- leafres/testarea/LeafGasParams.h | 4 +- leafres/testarea/LeafGasPrintToFiles.f | 41 +- leafres/testarea/SetUpLeafGasFit.f | 35 +- leafres/testarea/ToLeafGasOptimization.f | 225 +- leafres/testarea/UnivParamsAlloc.f | 2 +- leafres/testarea/UnivPhotoFit.f | 405 +- leafres/testarea/c4leafanetmodel.f | 89 + leafres/testarea/cica5.f | 2 +- leafres/testarea/cica_Regression5.f | 2 +- leafres/testarea/fluorescencejmax.f | 364 +- leafres/testarea/funkmin_C4Fit.f | 128 + leafres/testarea/stomoptimization.f | 2 +- leafres/testrun/Makefile | 6 +- 110 files changed, 87672 insertions(+), 1098 deletions(-) create mode 100644 dataassim/math/algebra/d_svdfit.f create mode 100644 dataassim/math/algebra/d_svdvar.f create mode 100644 dataassim/math/algebra/eigen.f create mode 100644 dataassim/math/algebra/eigen1.f create mode 100644 dataassim/math/algebra/test.f create mode 100644 dataassim/math/nonlinsystems/d1mach.f create mode 100644 dataassim/math/nonlinsystems/derv1.f create mode 100644 dataassim/math/nonlinsystems/dnqsol.f create mode 100644 dataassim/math/nonlinsystems/dnrm2.f create mode 100644 dataassim/math/nonlinsystems/erfin.f create mode 100644 dataassim/math/nonlinsystems/ermsg.f create mode 100644 dataassim/math/nonlinsystems/ierm1.f create mode 100644 dataassim/math/nonlinsystems/ierv1.f create mode 100644 dataassim/math/nonlinsystems/math77 create mode 100644 dataassim/math/numrec/Document.txt create mode 100644 dataassim/math/numrec/PrinCompAna.f create mode 100644 dataassim/math/numrec/Table8.3.txt create mode 100644 dataassim/math/numrec/daxpy.f create mode 100644 dataassim/math/numrec/dcopy.f create mode 100644 dataassim/math/numrec/ddot.f create mode 100644 dataassim/math/numrec/dgeev.f create mode 100644 dataassim/math/numrec/dgemm.f create mode 100644 dataassim/math/numrec/dgemv.f create mode 100644 dataassim/math/numrec/dger.f create mode 100644 dataassim/math/numrec/dnrm2.f create mode 100644 dataassim/math/numrec/dscal.f create mode 100644 dataassim/math/numrec/dswap.f create mode 100644 dataassim/math/numrec/dsyev.f create mode 100644 dataassim/math/numrec/dsymv.f create mode 100644 dataassim/math/numrec/dsyr2.f create mode 100644 dataassim/math/numrec/dsyr2k.f create mode 100644 dataassim/math/numrec/dtrmm.f create mode 100644 dataassim/math/numrec/dtrmv.f create mode 100644 dataassim/math/numrec/f77_sources/d_svdfit.f create mode 100644 dataassim/math/optimization/GenericOptim.f create mode 100644 dataassim/math/optimization/mcts.f create mode 100644 dataassim/math/optimization/odrpack95/d_drive1.f create mode 100644 dataassim/math/optimization/odrpack95/d_drive2.f create mode 100644 dataassim/math/optimization/odrpack95/d_drive3.f create mode 100644 dataassim/math/optimization/odrpack95/d_lpkbls.f create mode 100644 dataassim/math/optimization/odrpack95/d_mprec0.f create mode 100644 dataassim/math/optimization/odrpack95/d_odr.f create mode 100644 dataassim/math/optimization/odrpack95/data1.dat create mode 100644 dataassim/math/optimization/odrpack95/data2.dat create mode 100644 dataassim/math/optimization/odrpack95/data3.dat create mode 100644 dataassim/math/optimization/odrpack95/drive1.f create mode 100644 dataassim/math/optimization/odrpack95/drive2.f create mode 100644 dataassim/math/optimization/odrpack95/drive3.f create mode 100644 dataassim/math/optimization/odrpack95/drive4.f create mode 100644 dataassim/math/optimization/odrpack95/lpkbls.f create mode 100644 dataassim/math/optimization/odrpack95/makefile.txt create mode 100644 dataassim/math/optimization/odrpack95/odr.f create mode 100644 dataassim/math/optimization/odrpack95/real_precision.f create mode 100644 dataassim/math/optimization/odrpack95/restart_example.f create mode 100644 dataassim/math/optimization/odrpack95/simple_example.f90 create mode 100644 dataassim/math/optimization/odrpack95/test.f create mode 100644 dataassim/math/optimization/odrpack95/tester.f create mode 100644 dataassim/math/optimization/odrpack_old.f create mode 100644 dataassim/math/optimization/qpso.f90 create mode 100644 dataassim/math/othersupmath/charfloatlineparser.f create mode 100644 dataassim/math/othersupmath/doytotime.f create mode 100644 dataassim/math/othersupmath/fort.2 create mode 100644 dataassim/math/othersupmath/y_aPLUSbx.f create mode 100644 dataassim/mathrun/Makefile create mode 100644 dataassim/mathrun/fort.112 create mode 100644 dataassim/mathrun/fort.9 create mode 100644 dataassim/mathrun/mathtest create mode 100644 dataassim/mathrun/sensfit create mode 100644 dataassim/mathrun/testdata.txt create mode 100644 leafres/testarea/C4PhotoFit.f create mode 100644 leafres/testarea/C4SetUpLeafGasFit.f create mode 100644 leafres/testarea/c4leafanetmodel.f create mode 100644 leafres/testarea/funkmin_C4Fit.f diff --git a/dataassim/math/algebra/d_svdfit.f b/dataassim/math/algebra/d_svdfit.f new file mode 100644 index 0000000..09da430 --- /dev/null +++ b/dataassim/math/algebra/d_svdfit.f @@ -0,0 +1,39 @@ + SUBROUTINE svdfit(x,y,sig,ndata,a,ma,u,v,w,mp,np,chisq,funcs) + INTEGER ma,mp,ndata,np,NMAX,MMAX + double precision chisq,a(ma),sig(ndata),u(mp,np),v(np,np),w(np), + *x(ndata),y(ndata),TOL +c mp>=ndata, np>=ma. ma is the number of coefficients + EXTERNAL funcs + PARAMETER (NMAX=1000,MMAX=50,TOL=1.0d-10) +CU USES svbksb,svdcmp + INTEGER i,j + double precision sumup,thresh,tmp,wmax,afunc(MMAX),b(NMAX) + do 12 i=1,ndata + call funcs(x(i),afunc,ma,i) + tmp=1.0d0/sig(i) + do 11 j=1,ma + u(i,j)=afunc(j)*tmp +11 continue + b(i)=y(i)*tmp +12 continue + call svdcmp(u,ndata,ma,mp,np,w,v) + wmax=0.0d0 + do 13 j=1,ma + if(w(j).gt.wmax)wmax=w(j) +13 continue + thresh=TOL*wmax + do 14 j=1,ma + if(w(j).lt.thresh)w(j)=0.0d0 +14 continue + call svbksb(u,w,v,ndata,ma,mp,np,b,a) + chisq=0.0d0 + do 16 i=1,ndata + call funcs(x(i),afunc,ma,i) + sumup=0.0d0 + do 15 j=1,ma + sumup=sumup+a(j)*afunc(j) +15 continue + chisq=chisq+((y(i)-sumup)/sig(i))**2 +16 continue + return + END diff --git a/dataassim/math/algebra/d_svdvar.f b/dataassim/math/algebra/d_svdvar.f new file mode 100644 index 0000000..b022927 --- /dev/null +++ b/dataassim/math/algebra/d_svdvar.f @@ -0,0 +1,22 @@ + SUBROUTINE svdvar(v,ma,np,w,cvm,ncvm) + INTEGER ma,ncvm,np,MMAX + double precision cvm(ncvm,ncvm),v(np,np),w(np) + PARAMETER (MMAX=20) + INTEGER i,j,k + double precision sumup,wti(MMAX) + do 11 i=1,ma + wti(i)=0. + if(w(i).ne.0.) wti(i)=1./(w(i)*w(i)) +11 continue + do 14 i=1,ma + do 13 j=1,i + sumup=0.0d0 + do 12 k=1,ma + sumup=sumup+v(i,k)*v(j,k)*wti(k) +12 continue + cvm(i,j)=sumup + cvm(j,i)=sumup +13 continue +14 continue + return + END diff --git a/dataassim/math/algebra/eigen.f b/dataassim/math/algebra/eigen.f new file mode 100644 index 0000000..39b4195 --- /dev/null +++ b/dataassim/math/algebra/eigen.f @@ -0,0 +1,111 @@ + SUBROUTINE EIGEN(NM,N,A,WR,WI,Z) + COMMON/CSTAK/DSTAK(500) +C + REAL A(NM,N),WR(N),WI(N),Z(NM,N) + REAL RSTAK(1000) +C + EQUIVALENCE (DSTAK(1),RSTAK(1)) +C +C EIGEN FINDS THE EIGENVALUES AND EIGENVECTORS +C OF A REAL MATRIX (NOT IMAGINARY) BY +C CALLING THE SEQUENCE OF SUBROUTINES +C ORTHE,ORTRA, AND HQR2, WHICH, IN TURN, ARE +C THE EISPACK ROUTINES ORTHES, ORTRAN, AND HQR2, +C ADJUSTED FOR USE IN THE PORT LIBRARY. +C +C ON INPUT - +C +C NM - AN INTEGER INPUT VARIABLE SET EQUAL TO +C THE ROW DIMENSION OF THE TWO-DIMENSIONAL ARRAYS +C A AND Z AS SPECIFIED IN THE DIMENSION STATEMENTS +C FOR A AND Z IN THE CALLING PROGRAM. +C +C N - AN INTEGER INPUT VARIABLE SET EQUAL TO THE +C ORDER OF THE MATRIX A. +C +C N MUST NOT BE GREATER THAN NM. +C +C A - THE MATRIX, A REAL TWO-DIMENSIONAL +C ARRAY WITH ROW DIMENSION NM AND COLUMN +C DIMENSION AT LEAST N. +C +C A IS OVERWRITTEN. +C +C +C +C ON OUTPUT - +C +C WR - A REAL ARRAY OF DIMENSION +C AT LEAST N CONTAINING THE REAL PARTS OF THE EIGENVALUES +C +C WI - A REAL ARRAY OF DIMENSION +C AT LEAST N CONTAINING THE IMAGINARY PARTS OF THE EIGENVALUES. +C +C THE EIGENVALUES ARE UNORDERED EXCEPT THAT +C COMPLEX CONJUGATE PAIRS OF EIGENVALUES +C APPEAR CONSECUTIVELY WITH THE EIGENVALUE HAVING +C THE POSITIVE IMAGINARY PART FIRST. +C +C Z - A REAL TWO-DIMENSIONAL ARRAY +C WITH ROW DIMENSION NM AND COLUMN DIMENSION +C AT LEAST N CONTAINING THE REAL AND IMAGINARY PARTS +C OF THE EIGENVECTORS. +C +C IF THE J-TH EIGENVALUE IS REAL, THE J-TH +C COLUMN OF Z CONTAINS ITS EIGENVECTOR. +C +C IF THE J-TH EIGENVALUE IS COMPLEX WITH +C POSITIVE REAL PART, THE J-TH AND (J+1)-TH +C COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY +C PARTS OF ITS EIGENVECTOR. +C +C THE CONJUGATE OF THIS VECTOR IS THE +C EIGENVECTOR FOR THE CONJUGATE EIGENVALUE. +C THE EIGENVECTORS ARE NOT NORMALIZED. +C +C +C ERROR STATES - +C +C 1 - N IS GREATER THAN NM +C +C K - THE K-TH EIGENVALUE COULD NOT BE COMPUTED +C WITHIN 30 ITERATIONS. +C +C THE EIGENVALUES IN THE WR AND WRI ARRAYS +C SHOULD BE CORRECT FOR INDICES +C K+1, K+2,...,N, BUT NO EIGENVECTORS ARE COMPUTED. +C +C +C +C +C CHECK FOR INPUT ERROR IN N +C +C/6S +C IF (N .GT. NM) CALL SETERR( +C 1 29H EIGEN - N IS GREATER THAN NM,29,1,2) +C/7S + IF (N .GT. NM) CALL SETERR( + 1 ' EIGEN - N IS GREATER THAN NM',29,1,2) +C/ +C +C ALLOCATE A SCRATCH VECTOR + IORT = ISTKGT(N,3) +C + CALL ORTHE (NM,N,1,N,A,RSTAK(IORT)) + CALL ORTRA (NM,N,1,N,A,RSTAK(IORT),Z) + CALL HQR2 (NM,N,1,N,A,WR,WI,Z,IERR) +C + IF (IERR .NE. 0) GO TO 10 + CALL ISTKRL(1) + RETURN +C/6S +C 10 CALL SETERR( +C 1 34H EIGEN - FAILED ON THAT EIGENVALUE,34,IERR,1) +C/7S + 10 CALL SETERR( + 1 ' EIGEN - FAILED ON THAT EIGENVALUE',34,IERR,1) +C/ +C + CALL ISTKRL(1) + RETURN + END diff --git a/dataassim/math/algebra/eigen1.f b/dataassim/math/algebra/eigen1.f new file mode 100644 index 0000000..1dd75b8 --- /dev/null +++ b/dataassim/math/algebra/eigen1.f @@ -0,0 +1,205 @@ + SUBROUTINE EIGEN (NVEC,NA,N,A,EVR,EVI,VECS,SCR1,SCR2,IERR) + INTEGER NVEC,NA,N,IERR + DOUBLE PRECISION A(NA,N),EVR(N),EVI(N),VECS(NA,N),SCR1(N),SCR2(N) +C +C ***** PURPOSE: +C THIS SUBROUTINE COMPUTES THE EIGENVALUES AND EIGENVECTORS +C (IF DESIRED) OF A REAL GENERAL MATRIX A BY THE DOUBLE FRANCIS +C QR ALGORITHM AS IMPLEMENTED IN EISPACK. +C REFERENCE: SMITH, B.T., ET. AL., MATRIX EIGENSYSTEM ROUTINES-- +C EISPACK GUIDE, SECOND EDITION, LECTURE NOTES IN +C COMPUTER SCIENCE, VOL. 6, SPRINGER-VERLAG, 1976. +C +C ON ENTRY: +C +C NVEC INTEGER +C SET = 0 IF NO EIGENVECTORS ARE DESIRED, I.E., TO +C COMPUTE EIGENVALUES ONLY; OTHERWISE SET TO ANY +C NONZERO INTEGER IF BOTH EIGENVALUES AND EIGENVECTORS +C ARE DESIRED. +C +C NA INTEGER +C ROW DIMENSION OF THE ARRAYS CONTAINING A AND VECS +C AS DECLARED IN THE MAIN CALLING PROGRAM. +C +C N INTEGER +C THE ORDER OF THE MATRIX A. +C +C A DOUBLE PRECISION(NA,N) +C A REAL GENERAL MATRIX WHOSE EIGENVALUES AND EIGEN- +C VECTORS (IF DESIRED) ARE TO BE COMPUTED. +C +C ON RETURN: +C +C EVR DOUBLE PRECISION(N) +C THE REAL PARTS OF THE EIGENVALUES OF A. +C +C EVI DOUBLE PRECISION(N) +C THE CORRESPONDING IMAGINARY PARTS OF THE EIGENVALUES +C OF A. NOTE THAT COMPLEX CONJUGATE PAIRS OF EIGENVALUES +C APPEAR CONSECUTIVELY WITH THE EIGENVALUE HAVING THE +C POSITIVE IMAGINARY PART FIRST. +C +C VECS DOUBLE PRECISION(NA,N) +C IF NVEC IS NONZERO, THIS ARRAY CONTAINS THE REAL AND +C IMAGINARY PARTS OF THE EIGENVECTORS OF A. IF THE J-TH +C EIGENVALUE IS REAL, THE J-TH COLUMN OF VECS CONTAINS +C THE CORRESPONDING EIGENVECTOR (NORMALIZED TO HAVE +C EUCLIDEAN OR 2- NORM = 1 AND POSITIVE MAXIMUM COMP- +C ONENT). IF THE J-THE EIGENVALUE IS COMPLEX WITH +C POSITIVE IMAGINARY PART, THE J-TH AND (J+1)-TH +C COLUMNS OF VECS CONTAIN THE REAL AND IMAGINARY +C PARTS OF THE CORRESPONDING COMPLEX EIGENVECTOR +C (NORMALIZED TO HAVE COMPLEX EUCLIDEAN OR 2- NORM +C =1 AND REAL, POSITIVE MAXIMUM COMPONENT). THE CONJ- +C UGATE OF THIS VECTOR IS THE EIGENVECTOR FOR THE +C CONJUGATE EIGENVALUE. +C +C SCR1 DOUBLE PRECISION(N) +C THE I-TH COMPONENT OF THIS VECTOR CONTAINS THE +C UNDAMPED NATURAL FREQUENCY (MODULUS) OF THE I-TH +C EIGENVALUE; SCR1 IS ALSO USED INTERNALLY +C AS A SCRATCH VECTOR FOR THE EISPACK SUBROUTINE +C BALANC. +C +C SCR2 DOUBLE PRECISION(N) +C THE I-TH COMPONENT OF THIS VECTOR CONTAINS THE +C DAMPING RATIO OF THE I-TH EIGENVALUE; SCR2 IS ALSO +C USED INTERNALLY AS A SCRATCH VECTOR FOR THE +C EISPACK SUBROUTINE ORTHES. +C +C IERR INTEGER +C ERROR COMPLETION CODE RETURNED BY EISPACK SUBROUTINE +C HQR OR HQR2. NORMAL RETURN VALUE IS ZERO. SEE THE +C EISPACK GUIDE, P. 331, FOR A DISCUSSION OF NONZERO +C VALUES OF IERR. +C +C PROGRAM WRITTEN BY ALAN J. LAUB, DEP'T. OF ELEC. AND COMP.ENGRG., +C UNIVERSITY OF CALIFORNIA, SANTA BARBARA, CA 93106, +C PH.: (805) 961-3616. +C JUNE 1981. +C MOST RECENT MODIFICATION: JAN. 2, 1985 +C +C INTERNAL VARIABLES: +C + INTEGER I,IGH,J,JM1,K,LOW + DOUBLE PRECISION ANORM,EI,EPS,EPSP1,ER,T,TIM,TRE,T1,T2 +C +C FORTRAN FUNCTIONS CALLED: +C + DOUBLE PRECISION DABS,DSQRT +C +C SUBROUTINES AND FUNCTIONS CALLED: +C +C BALANC,BALBAK,HQR,HQR2,ORTHES,ORTRAN (ALL FROM EISPACK) +C +C ------------------------------------------------------------------ +C +C DETERMINE MACHINE PRECISION +C + EPS = 1.0D0 + 10 CONTINUE + EPS = EPS/2.0D0 + EPSP1 = EPS+1.0D0 + IF (EPSP1 .GT. 1.0D0) GO TO 10 + EPS = 2.0D0*EPS +C +C BALANCE A +C + CALL BALANC (NA,N,A,LOW,IGH,SCR1) +C +C COMPUTE 1-NORM OF THE BALANCED A +C + ANORM = 0.0D0 + DO 30 J = 1,N + T = 0.0D0 + DO 20 I = 1,N + T = T+DABS(A(I,J)) + 20 CONTINUE + IF (T .GT. ANORM) ANORM = T + 30 CONTINUE +C +C REDUCE A TO UPPER HESSENBERG FORM +C + CALL ORTHES (NA,N,LOW,IGH,A,SCR2) + IF (NVEC .NE. 0) GO TO 40 +C +C COMPUTE EIGENVALUES USING QR ALGORITHM +C + CALL HQR (NA,N,LOW,IGH,A,EVR,EVI,IERR) + IF (IERR .NE. 0) RETURN + GO TO 110 + 40 CONTINUE +C +C COMPUTE EIGENVALUES AND EIGENVECTORS USING QR ALGORITHM +C + CALL ORTRAN (NA,N,LOW,IGH,A,SCR2,VECS) + CALL HQR2 (NA,N,LOW,IGH,A,EVR,EVI,VECS,IERR) + IF (IERR .NE. 0) RETURN + CALL BALBAK (NA,N,LOW,IGH,SCR1,N,VECS) +C +C NORMALIZE EIGENVECTORS TO HAVE EUCLIDEAN OR 2- NORM EQUAL TO 1 +C + DO 100 J = 1,N + IF (EVI(J) .NE. 0.0D0) GO TO 70 + T = 0.0D0 + T1 = 0.0D0 + DO 50 I = 1,N + T2 = VECS(I,J)**2 + IF (T2 .LE. T1) GO TO 45 + K = I + T1 = T2 + 45 CONTINUE + T = T+T2 + 50 CONTINUE + T = DSIGN(DSQRT(T),VECS(K,J)) + DO 60 I = 1,N + VECS(I,J) = VECS(I,J)/T + 60 CONTINUE + GO TO 100 + 70 CONTINUE + IF (EVI(J) .GT. 0.0D0) GO TO 100 + JM1 = J-1 + T = 0.0D0 + T1 = 0.0D0 + DO 80 I = 1,N + T2 = VECS(I,JM1)**2 + VECS(I,J)**2 + IF (T2 .LE. T1) GO TO 75 + K = I + T1 = T2 + 75 CONTINUE + T = T+T2 + 80 CONTINUE + T = DSQRT(T) + T1 = DSQRT(T1) + DO 90 I = 1,N + TRE = VECS(I,JM1)*VECS(K,JM1) + VECS(I,J)*VECS(K,J) + TIM = VECS(I,J)*VECS(K,JM1) - VECS(I,JM1)*VECS(K,J) + VECS(I,JM1) = (TRE/T1)/T + VECS(I,J) = (TIM/T1)/T + 90 CONTINUE + 100 CONTINUE + 110 CONTINUE +C +C COMPUTE NATURAL FREQUENCIES AND DAMPING RATIOS. SET +C EIGENVALUES WITH NORM LESS THAN EPS*ANORM TO (0.0D0,0.0D0) +C + EPS = EPS*ANORM + DO 130 I = 1,N + T = DABS(EVR(I))+DABS(EVI(I)) + IF (T .GT. EPS) GO TO 120 + EVR(I) = 0.0D0 + EVI(I) = 0.0D0 + SCR1(I) = 0.0D0 + SCR2(I) = 1.0D0 + GO TO 130 + 120 CONTINUE + ER = EVR(I)/T + EI = EVI(I)/T + SCR1(I) = DSQRT(ER**2 + EI**2) + SCR2(I) = -ER/SCR1(I) + SCR1(I) = T*SCR1(I) + IF (DABS(EVI(I)) .LT. EPS) EVI(I) = 0.0D0 + 130 CONTINUE + RETURN + END diff --git a/dataassim/math/algebra/eigen_sym_up.f b/dataassim/math/algebra/eigen_sym_up.f index 953c462..fae8ddf 100644 --- a/dataassim/math/algebra/eigen_sym_up.f +++ b/dataassim/math/algebra/eigen_sym_up.f @@ -48,4 +48,4 @@ enddo !--------------------------------------------- return - end \ No newline at end of file + end diff --git a/dataassim/math/algebra/lfit.f b/dataassim/math/algebra/lfit.f index cceb39b..7229bc2 100644 --- a/dataassim/math/algebra/lfit.f +++ b/dataassim/math/algebra/lfit.f @@ -17,7 +17,6 @@ CU USES covsrt,gaussj ia(j)=1 if(ia(j).ne.0) mfit=mfit+1 11 continue - if(mfit.eq.0) pause 'lfit: no parameters to be fitted' do 13 j=1,mfit do 12 k=1,mfit covar(j,k)=0.0d0 diff --git a/dataassim/math/algebra/matrixoper.f b/dataassim/math/algebra/matrixoper.f index fe04a19..2622001 100644 --- a/dataassim/math/algebra/matrixoper.f +++ b/dataassim/math/algebra/matrixoper.f @@ -255,282 +255,282 @@ end !&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& - SUBROUTINE svbksb(u,w,v,m,n,mp,np,b,x) + SUBROUTINE svbksb(u,w,v,m,n,mp,np,b,x) implicit none - INTEGER m,mp,n,np,NMAX - double precision b(mp),u(mp,np),v(np,np),w(np),x(np) - PARAMETER (NMAX=1500) - INTEGER i,j,jj - double precision s,tmp(NMAX) - do 12 j=1,n + INTEGER m,mp,n,np,NMAX + double precision b(mp),u(mp,np),v(np,np),w(np),x(np) + PARAMETER (NMAX=1500) + INTEGER i,j,jj + double precision s,tmp(NMAX) + do 12 j=1,n s=0.0d0 - if(w(j).ne.0.0d0)then - do 11 i=1,m - s=s+u(i,j)*b(i) -11 continue - s=s/w(j) - endif - tmp(j)=s -12 continue - do 14 j=1,n + if(w(j).ne.0.0d0)then + do 11 i=1,m + s=s+u(i,j)*b(i) +11 continue + s=s/w(j) + endif + tmp(j)=s +12 continue + do 14 j=1,n s=0.0d0 - do 13 jj=1,n - s=s+v(j,jj)*tmp(jj) -13 continue - x(j)=s -14 continue - return - END -C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. + do 13 jj=1,n + s=s+v(j,jj)*tmp(jj) +13 continue + x(j)=s +14 continue + return + END +C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. - SUBROUTINE svdcmp(a,m,n,mp,np,w,v,ierr) + SUBROUTINE svdcmp(a,m,n,mp,np,w,v,ierr) implicit none - INTEGER m,mp,n,np,NMAX ,ierr - double precision a(mp,np),v(np,np),w(np) - PARAMETER (NMAX=1500) -CU USES pythag - INTEGER i,its,j,jj,k,l,nm - double precision anorm,c,f,g,h,s,scale,x,y,z, - & rv1(NMAX),pythag + INTEGER m,mp,n,np,NMAX,ierr + double precision a(mp,np),v(np,np),w(np) + PARAMETER (NMAX=1500) +CU USES pythag + INTEGER i,its,j,jj,k,l,nm + double precision anorm,c,f,g,h,s,scaling,x,y,z, + & rv1(NMAX),pythag g=0.0d0 - scale=0.0d0 + scaling=0.0d0 anorm=0.0d0 - do 25 i=1,n - l=i+1 - rv1(i)=scale*g + do 25 i=1,n + l=i+1 + rv1(i)=scaling*g g=0.0d0 s=0.0d0 - scale=0.0d0 - if(i.le.m)then - do 11 k=i,m - scale=scale+dabs(a(k,i)) -11 continue - if(scale.ne.0.0d0)then - do 12 k=i,m - a(k,i)=a(k,i)/scale - s=s+a(k,i)*a(k,i) -12 continue - f=a(i,i) - g=-dsign(dsqrt(s),f) - h=f*g-s - a(i,i)=f-g - do 15 j=l,n + scaling=0.0d0 + if(i.le.m)then + do 11 k=i,m + scaling=scaling+dabs(a(k,i)) +11 continue + if(scaling.ne.0.0d0)then + do 12 k=i,m + a(k,i)=a(k,i)/scaling + s=s+a(k,i)*a(k,i) +12 continue + f=a(i,i) + g=-dsign(dsqrt(s),f) + h=f*g-s + a(i,i)=f-g + do 15 j=l,n s=0.0d0 - do 13 k=i,m - s=s+a(k,i)*a(k,j) -13 continue - f=s/h - do 14 k=i,m - a(k,j)=a(k,j)+f*a(k,i) -14 continue -15 continue - do 16 k=i,m - a(k,i)=scale*a(k,i) -16 continue - endif - endif - w(i)=scale*g + do 13 k=i,m + s=s+a(k,i)*a(k,j) +13 continue + f=s/h + do 14 k=i,m + a(k,j)=a(k,j)+f*a(k,i) +14 continue +15 continue + do 16 k=i,m + a(k,i)=scaling*a(k,i) +16 continue + endif + endif + w(i)=scaling*g g=0.0d0 s=0.0d0 - scale=0.0d0 - if((i.le.m).and.(i.ne.n))then - do 17 k=l,n - scale=scale+dabs(a(i,k)) -17 continue - if(scale.ne.0.0d0)then - do 18 k=l,n - a(i,k)=a(i,k)/scale - s=s+a(i,k)*a(i,k) -18 continue - f=a(i,l) - g=-dsign(dsqrt(s),f) - h=f*g-s - a(i,l)=f-g - do 19 k=l,n - rv1(k)=a(i,k)/h -19 continue - do 23 j=l,m + scaling=0.0d0 + if((i.le.m).and.(i.ne.n))then + do 17 k=l,n + scaling=scaling+dabs(a(i,k)) +17 continue + if(scaling.ne.0.0d0)then + do 18 k=l,n + a(i,k)=a(i,k)/scaling + s=s+a(i,k)*a(i,k) +18 continue + f=a(i,l) + g=-dsign(dsqrt(s),f) + h=f*g-s + a(i,l)=f-g + do 19 k=l,n + rv1(k)=a(i,k)/h +19 continue + do 23 j=l,m s=0.0d0 - do 21 k=l,n - s=s+a(j,k)*a(i,k) -21 continue - do 22 k=l,n - a(j,k)=a(j,k)+s*rv1(k) -22 continue -23 continue - do 24 k=l,n - a(i,k)=scale*a(i,k) -24 continue - endif - endif - anorm=dmax1(anorm,(dabs(w(i))+dabs(rv1(i)))) -25 continue - do 32 i=n,1,-1 - if(i.lt.n)then - if(g.ne.0.0d0)then - do 26 j=l,n - v(j,i)=(a(i,j)/a(i,l))/g -26 continue - do 29 j=l,n + do 21 k=l,n + s=s+a(j,k)*a(i,k) +21 continue + do 22 k=l,n + a(j,k)=a(j,k)+s*rv1(k) +22 continue +23 continue + do 24 k=l,n + a(i,k)=scaling*a(i,k) +24 continue + endif + endif + anorm=dmax1(anorm,(dabs(w(i))+dabs(rv1(i)))) +25 continue + do 32 i=n,1,-1 + if(i.lt.n)then + if(g.ne.0.0d0)then + do 26 j=l,n + v(j,i)=(a(i,j)/a(i,l))/g +26 continue + do 29 j=l,n s=0.0d0 - do 27 k=l,n - s=s+a(i,k)*v(k,j) -27 continue - do 28 k=l,n - v(k,j)=v(k,j)+s*v(k,i) -28 continue -29 continue - endif - do 31 j=l,n + do 27 k=l,n + s=s+a(i,k)*v(k,j) +27 continue + do 28 k=l,n + v(k,j)=v(k,j)+s*v(k,i) +28 continue +29 continue + endif + do 31 j=l,n v(i,j)=0.0d0 v(j,i)=0.0d0 -31 continue - endif +31 continue + endif v(i,i)=1.0d0 - g=rv1(i) - l=i -32 continue - do 39 i=min(m,n),1,-1 - l=i+1 - g=w(i) - do 33 j=l,n + g=rv1(i) + l=i +32 continue + do 39 i=min(m,n),1,-1 + l=i+1 + g=w(i) + do 33 j=l,n a(i,j)=0.0d0 -33 continue - if(g.ne.0.0d0)then - g=1.0d0/g - do 36 j=l,n +33 continue + if(g.ne.0.0d0)then + g=1.0d0/g + do 36 j=l,n s=0.0d0 - do 34 k=l,m - s=s+a(k,i)*a(k,j) -34 continue - f=(s/a(i,i))*g - do 35 k=i,m - a(k,j)=a(k,j)+f*a(k,i) -35 continue -36 continue - do 37 j=i,m - a(j,i)=a(j,i)*g -37 continue - else - do 38 j= i,m + do 34 k=l,m + s=s+a(k,i)*a(k,j) +34 continue + f=(s/a(i,i))*g + do 35 k=i,m + a(k,j)=a(k,j)+f*a(k,i) +35 continue +36 continue + do 37 j=i,m + a(j,i)=a(j,i)*g +37 continue + else + do 38 j= i,m a(j,i)=0.0d0 -38 continue - endif +38 continue + endif a(i,i)=a(i,i)+1.0d0 -39 continue - do 49 k=n,1,-1 - do 48 its=1,30 - do 41 l=k,1,-1 - nm=l-1 - if((dabs(rv1(l))+anorm).eq.anorm) goto 2 - if((dabs(w(nm))+anorm).eq.anorm) goto 1 -41 continue +39 continue + do 49 k=n,1,-1 + do 48 its=1,30 + do 41 l=k,1,-1 + nm=l-1 + if((dabs(rv1(l))+anorm).eq.anorm) goto 2 + if((dabs(w(nm))+anorm).eq.anorm) goto 1 +41 continue 1 c=0.0d0 s=1.0d0 - do 43 i=l,k - f=s*rv1(i) - rv1(i)=c*rv1(i) - if((dabs(f)+anorm).eq.anorm) goto 2 - g=w(i) - h=pythag(f,g) - w(i)=h - h=1.0d0/h - c= (g*h) - s=-(f*h) - do 42 j=1,m - y=a(j,nm) - z=a(j,i) - a(j,nm)=(y*c)+(z*s) - a(j,i)=-(y*s)+(z*c) -42 continue -43 continue -2 z=w(k) - if(l.eq.k)then - if(z.lt.0.0d0)then - w(k)=-z - do 44 j=1,n - v(j,k)=-v(j,k) -44 continue - endif - goto 3 - endif + do 43 i=l,k + f=s*rv1(i) + rv1(i)=c*rv1(i) + if((dabs(f)+anorm).eq.anorm) goto 2 + g=w(i) + h=pythag(f,g) + w(i)=h + h=1.0d0/h + c= (g*h) + s=-(f*h) + do 42 j=1,m + y=a(j,nm) + z=a(j,i) + a(j,nm)=(y*c)+(z*s) + a(j,i)=-(y*s)+(z*c) +42 continue +43 continue +2 z=w(k) + if(l.eq.k)then + if(z.lt.0.0d0)then + w(k)=-z + do 44 j=1,n + v(j,k)=-v(j,k) +44 continue + endif + goto 3 + endif if(its.eq.30)then ierr=0 return endif - x=w(l) - nm=k-1 - y=w(nm) - g=rv1(nm) - h=rv1(k) - f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0d0*h*y) - g=pythag(f,1.0d0) - f=((x-z)*(x+z)+h*((y/(f+dsign(g,f)))-h))/x + x=w(l) + nm=k-1 + y=w(nm) + g=rv1(nm) + h=rv1(k) + f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0d0*h*y) + g=pythag(f,1.0d0) + f=((x-z)*(x+z)+h*((y/(f+dsign(g,f)))-h))/x c=1.0d0 s=1.0d0 - do 47 j=l,nm - i=j+1 - g=rv1(i) - y=w(i) - h=s*g - g=c*g - z=pythag(f,h) - rv1(j)=z - c=f/z - s=h/z - f= (x*c)+(g*s) - g=-(x*s)+(g*c) - h=y*s - y=y*c - do 45 jj=1,n - x=v(jj,j) - z=v(jj,i) - v(jj,j)= (x*c)+(z*s) - v(jj,i)=-(x*s)+(z*c) -45 continue - z=pythag(f,h) - w(j)=z - if(z.ne.0.0d0)then - z=1.0d0/z - c=f*z - s=h*z - endif - f= (c*g)+(s*y) - x=-(s*g)+(c*y) - do 46 jj=1,m - y=a(jj,j) - z=a(jj,i) - a(jj,j)= (y*c)+(z*s) - a(jj,i)=-(y*s)+(z*c) -46 continue -47 continue + do 47 j=l,nm + i=j+1 + g=rv1(i) + y=w(i) + h=s*g + g=c*g + z=pythag(f,h) + rv1(j)=z + c=f/z + s=h/z + f= (x*c)+(g*s) + g=-(x*s)+(g*c) + h=y*s + y=y*c + do 45 jj=1,n + x=v(jj,j) + z=v(jj,i) + v(jj,j)= (x*c)+(z*s) + v(jj,i)=-(x*s)+(z*c) +45 continue + z=pythag(f,h) + w(j)=z + if(z.ne.0.0d0)then + z=1.0d0/z + c=f*z + s=h*z + endif + f= (c*g)+(s*y) + x=-(s*g)+(c*y) + do 46 jj=1,m + y=a(jj,j) + z=a(jj,i) + a(jj,j)= (y*c)+(z*s) + a(jj,i)=-(y*s)+(z*c) +46 continue +47 continue rv1(l)=0.0d0 - rv1(k)=f - w(k)=x -48 continue -3 continue -49 continue - return - END -C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. + rv1(k)=f + w(k)=x +48 continue +3 continue +49 continue + return + END +C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. - double precision FUNCTION pythag(a,b) + double precision FUNCTION pythag(a,b) double precision a,b - double precision absa,absb - absa=dabs(a) - absb=dabs(b) - if(absa.gt.absb)then - pythag=absa*dsqrt(1.0d0+(absb/absa)**2) - else - if(absb.eq.0.0d0)then + double precision absa,absb + absa=dabs(a) + absb=dabs(b) + if(absa.gt.absb)then + pythag=absa*dsqrt(1.0d0+(absb/absa)**2) + else + if(absb.eq.0.0d0)then pythag=0.0d0 - else - pythag=absb*dsqrt(1.0d0+(absa/absb)**2) - endif - endif - return - END -C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. + else + pythag=absb*dsqrt(1.0d0+(absa/absb)**2) + endif + endif + return + END +C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. subroutine xmprove(N,NP,a,b,x,mark) @@ -687,7 +687,7 @@ CU USES lubksb u(i,j)=a(i,j) enddo enddo - call svdcmp(u(1:n,1:n),n,n,np,np,w,v(1:n,1:n),ierr) + call svdcmp(u(1:n,1:n),n,n,np,np,w,v(1:n,1:n),ierr) wmax=0.0d0 do j=1,n if(w(j).gt.wmax)wmax=w(j) @@ -696,7 +696,7 @@ CU USES lubksb do j=1,n if(w(j).lt.wmin)w(j)=0.0d0 enddo - call svbksb(u(1:n,1:n),w,v(1:n,1:n),n,n,np,np,b,x) + call svbksb(u(1:n,1:n),w,v(1:n,1:n),n,n,np,np,b,x) return end @@ -708,20 +708,20 @@ CU USES lubksb DOUBLE PRECISION a(np,np),c(n),d(n) LOGICAL sing INTEGER i,j,k - DOUBLE PRECISION scale,sigma,sum,tau + DOUBLE PRECISION scaling,sigma,sum,tau sing=.false. do 17 k=1,n-1 - scale=0.0d0 + scaling=0.0d0 do 11 i=k,n - scale=dmax1(scale,dabs(a(i,k))) + scaling=dmax1(scaling,dabs(a(i,k))) 11 continue - if(scale.eq.0.0d0)then + if(scaling.eq.0.0d0)then sing=.true. c(k)=0.0d0 d(k)=0.0d0 else do 12 i=k,n - a(i,k)=a(i,k)/scale + a(i,k)=a(i,k)/scaling 12 continue sum=0.0d0 do 13 i=k,n @@ -730,7 +730,7 @@ CU USES lubksb sigma=dsign(dsqrt(sum),a(k,k)) a(k,k)=a(k,k)+sigma c(k)=sigma*a(k,k) - d(k)=-scale*sigma + d(k)=-scaling*sigma do 16 j=k+1,n sum=0.0d0 do 14 i=k,n @@ -997,4 +997,4 @@ c endif goto 10 end -!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& \ No newline at end of file +!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& diff --git a/dataassim/math/algebra/test.f b/dataassim/math/algebra/test.f new file mode 100644 index 0000000..2d73c28 --- /dev/null +++ b/dataassim/math/algebra/test.f @@ -0,0 +1,74 @@ + program main + implicit none + double precision lamta(100),fmeas(100),sigma(100),chisq, + &u(100,10),v(10,10),w(10),beta(10),fmod(100) + integer i,ma,mp,np,ndata,nsifparams + double precision solar(100) + Common /irradiance/solar,nsifparams + external getsifbasisfunc +!u(mp,np),v(np,np),w(np),x(ndata),y(ndata),TOL + + lamta(1)=730.0d0 + ndata=90 + do i= 2,ndata + lamta(i)=lamta(i-1)+1.0d0 + enddo + do i=1,ndata + solar(i)=100.0d0*dabs(dsin(dble(i)*6.28d0/5.0d0)) + sigma(i)=1.0d0 + enddo + beta(1)=3.20d0 + beta(2)=-10.23d0 + beta(3)=-99.9d0 + beta(4)=25.0d0 + beta(5)=-200.0d0 + beta(6)=157.0d0 + ma=6 + nsifparams=3 +c mp>=ndata, np>=ma. ma is the number of coefficients + mp=ndata + np=ma + + do i=1,ndata + call SIFforwardmodel(lamta(i),i,fmeas(i),beta,ma) + enddo + call svdfit(lamta,fmeas,sigma,ndata,beta,ma,u(1:mp,1:np), + *v(1:np,1:np),w,mp,np,chisq,getsifbasisfunc) + do i=1,ma + write(*,*)beta(i),w(i) + enddo + do i=1,ndata + call SIFforwardmodel(lamta(i),i,fmod(i),beta,ma) + write(*,*)lamta(i),fmeas(i),fmod(i) + enddo + end + + subroutine SIFforwardmodel(lamta,ipos,irradmeas,beta,ma) + implicit none + integer ma,ipos,i + double precision lamta,irradmeas,beta(ma),basisfunc(ma) + call getsifbasisfunc(lamta,basisfunc,ma,ipos) + irradmeas=0.0d0 + do i=1,ma + irradmeas=irradmeas+beta(i)*basisfunc(i) + enddo + return + end + + subroutine getsifbasisfunc(x,basisfunc,ma,ipos) + implicit none + double precision x,basisfunc(ma) + integer ma,ipos,i + integer nsifparams + double precision solar(100) + Common /irradiance/solar,nsifparams + basisfunc(1)=1.0d0 + do i=2,nsifparams + basisfunc(i)=basisfunc(i-1)*x + enddo + basisfunc(nsifparams+1)=solar(ipos) + do i=nsifparams+2,ma + basisfunc(i)=basisfunc(i-1)*x + enddo + return + end diff --git a/dataassim/math/nonlinsystems/cpfixedpoint.f b/dataassim/math/nonlinsystems/cpfixedpoint.f index ecdd1b6..88fa0d0 100644 --- a/dataassim/math/nonlinsystems/cpfixedpoint.f +++ b/dataassim/math/nonlinsystems/cpfixedpoint.f @@ -258,7 +258,7 @@ call cplnsrch(nunknowns,xpold,fsqsumold, & gfuncsum,deltax,xp,fsqsumnew,stpmax, & check,funcnleq1,fequ) - if(check.eq..true..or.check.eq..TRUE.)then + if(check.eqv..true..or.check.eqv..TRUE.)then do i=1,nunknowns call reinitialization(x0min(i),xpold(i), & x0max(i),xp(i),6678) diff --git a/dataassim/math/nonlinsystems/d1mach.f b/dataassim/math/nonlinsystems/d1mach.f new file mode 100644 index 0000000..232582a --- /dev/null +++ b/dataassim/math/nonlinsystems/d1mach.f @@ -0,0 +1,209 @@ + DOUBLE PRECISION FUNCTION D1MACH(I) + INTEGER I +C +C DOUBLE-PRECISION MACHINE CONSTANTS +C D1MACH( 1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. +C D1MACH( 2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. +C D1MACH( 3) = B**(-T), THE SMALLEST RELATIVE SPACING. +C D1MACH( 4) = B**(1-T), THE LARGEST RELATIVE SPACING. +C D1MACH( 5) = LOG10(B) +C + INTEGER SMALL(2) + INTEGER LARGE(2) + INTEGER RIGHT(2) + INTEGER DIVER(2) + INTEGER LOG10(2) + INTEGER SC, CRAY1(38), J + COMMON /D9MACH/ CRAY1 + SAVE SMALL, LARGE, RIGHT, DIVER, LOG10, SC + DOUBLE PRECISION DMACH(5) + EQUIVALENCE (DMACH(1),SMALL(1)) + EQUIVALENCE (DMACH(2),LARGE(1)) + EQUIVALENCE (DMACH(3),RIGHT(1)) + EQUIVALENCE (DMACH(4),DIVER(1)) + EQUIVALENCE (DMACH(5),LOG10(1)) +C THIS VERSION ADAPTS AUTOMATICALLY TO MOST CURRENT MACHINES. +C R1MACH CAN HANDLE AUTO-DOUBLE COMPILING, BUT THIS VERSION OF +C D1MACH DOES NOT, BECAUSE WE DO NOT HAVE QUAD CONSTANTS FOR +C MANY MACHINES YET. +C TO COMPILE ON OLDER MACHINES, ADD A C IN COLUMN 1 +C ON THE NEXT LINE + DATA SC/0/ +C AND REMOVE THE C FROM COLUMN 1 IN ONE OF THE SECTIONS BELOW. +C CONSTANTS FOR EVEN OLDER MACHINES CAN BE OBTAINED BY +C mail netlib@research.bell-labs.com +C send old1mach from blas +C PLEASE SEND CORRECTIONS TO dmg OR ehg@bell-labs.com. +C +C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. +C DATA SMALL(1),SMALL(2) / O402400000000, O000000000000 / +C DATA LARGE(1),LARGE(2) / O376777777777, O777777777777 / +C DATA RIGHT(1),RIGHT(2) / O604400000000, O000000000000 / +C DATA DIVER(1),DIVER(2) / O606400000000, O000000000000 / +C DATA LOG10(1),LOG10(2) / O776464202324, O117571775714 /, SC/987/ +C +C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING +C 32-BIT INTEGERS. +C DATA SMALL(1),SMALL(2) / 8388608, 0 / +C DATA LARGE(1),LARGE(2) / 2147483647, -1 / +C DATA RIGHT(1),RIGHT(2) / 612368384, 0 / +C DATA DIVER(1),DIVER(2) / 620756992, 0 / +C DATA LOG10(1),LOG10(2) / 1067065498, -2063872008 /, SC/987/ +C +C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. +C DATA SMALL(1),SMALL(2) / O000040000000, O000000000000 / +C DATA LARGE(1),LARGE(2) / O377777777777, O777777777777 / +C DATA RIGHT(1),RIGHT(2) / O170540000000, O000000000000 / +C DATA DIVER(1),DIVER(2) / O170640000000, O000000000000 / +C DATA LOG10(1),LOG10(2) / O177746420232, O411757177572 /, SC/987/ +C +C ON FIRST CALL, IF NO DATA UNCOMMENTED, TEST MACHINE TYPES. + IF (SC .NE. 987) THEN + DMACH(1) = 1.D13 + IF ( SMALL(1) .EQ. 1117925532 + * .AND. SMALL(2) .EQ. -448790528) THEN +* *** IEEE BIG ENDIAN *** + SMALL(1) = 1048576 + SMALL(2) = 0 + LARGE(1) = 2146435071 + LARGE(2) = -1 + RIGHT(1) = 1017118720 + RIGHT(2) = 0 + DIVER(1) = 1018167296 + DIVER(2) = 0 + LOG10(1) = 1070810131 + LOG10(2) = 1352628735 + ELSE IF ( SMALL(2) .EQ. 1117925532 + * .AND. SMALL(1) .EQ. -448790528) THEN +* *** IEEE LITTLE ENDIAN *** + SMALL(2) = 1048576 + SMALL(1) = 0 + LARGE(2) = 2146435071 + LARGE(1) = -1 + RIGHT(2) = 1017118720 + RIGHT(1) = 0 + DIVER(2) = 1018167296 + DIVER(1) = 0 + LOG10(2) = 1070810131 + LOG10(1) = 1352628735 + ELSE IF ( SMALL(1) .EQ. -2065213935 + * .AND. SMALL(2) .EQ. 10752) THEN +* *** VAX WITH D_FLOATING *** + SMALL(1) = 128 + SMALL(2) = 0 + LARGE(1) = -32769 + LARGE(2) = -1 + RIGHT(1) = 9344 + RIGHT(2) = 0 + DIVER(1) = 9472 + DIVER(2) = 0 + LOG10(1) = 546979738 + LOG10(2) = -805796613 + ELSE IF ( SMALL(1) .EQ. 1267827943 + * .AND. SMALL(2) .EQ. 704643072) THEN +* *** IBM MAINFRAME *** + SMALL(1) = 1048576 + SMALL(2) = 0 + LARGE(1) = 2147483647 + LARGE(2) = -1 + RIGHT(1) = 856686592 + RIGHT(2) = 0 + DIVER(1) = 873463808 + DIVER(2) = 0 + LOG10(1) = 1091781651 + LOG10(2) = 1352628735 + ELSE IF ( SMALL(1) .EQ. 1120022684 + * .AND. SMALL(2) .EQ. -448790528) THEN +* *** CONVEX C-1 *** + SMALL(1) = 1048576 + SMALL(2) = 0 + LARGE(1) = 2147483647 + LARGE(2) = -1 + RIGHT(1) = 1019215872 + RIGHT(2) = 0 + DIVER(1) = 1020264448 + DIVER(2) = 0 + LOG10(1) = 1072907283 + LOG10(2) = 1352628735 + ELSE IF ( SMALL(1) .EQ. 815547074 + * .AND. SMALL(2) .EQ. 58688) THEN +* *** VAX G-FLOATING *** + SMALL(1) = 16 + SMALL(2) = 0 + LARGE(1) = -32769 + LARGE(2) = -1 + RIGHT(1) = 15552 + RIGHT(2) = 0 + DIVER(1) = 15568 + DIVER(2) = 0 + LOG10(1) = 1142112243 + LOG10(2) = 2046775455 + ELSE + DMACH(2) = 1.D27 + 1 + DMACH(3) = 1.D27 + LARGE(2) = LARGE(2) - RIGHT(2) + IF (LARGE(2) .EQ. 64 .AND. SMALL(2) .EQ. 0) THEN + CRAY1(1) = 67291416 + DO 10 J = 1, 20 + CRAY1(J+1) = CRAY1(J) + CRAY1(J) + 10 CONTINUE + CRAY1(22) = CRAY1(21) + 321322 + DO 20 J = 22, 37 + CRAY1(J+1) = CRAY1(J) + CRAY1(J) + 20 CONTINUE + IF (CRAY1(38) .EQ. SMALL(1)) THEN +* *** CRAY *** + CALL I1MCRY(SMALL(1), J, 8285, 8388608, 0) + SMALL(2) = 0 + CALL I1MCRY(LARGE(1), J, 24574, 16777215, 16777215) + CALL I1MCRY(LARGE(2), J, 0, 16777215, 16777214) + CALL I1MCRY(RIGHT(1), J, 16291, 8388608, 0) + RIGHT(2) = 0 + CALL I1MCRY(DIVER(1), J, 16292, 8388608, 0) + DIVER(2) = 0 + CALL I1MCRY(LOG10(1), J, 16383, 10100890, 8715215) + CALL I1MCRY(LOG10(2), J, 0, 16226447, 9001388) + ELSE + WRITE(*,9000) + STOP 779 + END IF + ELSE + WRITE(*,9000) + STOP 779 + END IF + END IF + SC = 987 + END IF +* SANITY CHECK + IF (DMACH(4) .GE. 1.0D0) STOP 778 + IF (I .LT. 1 .OR. I .GT. 5) THEN + WRITE(*,*) 'D1MACH(I): I =',I,' is out of bounds.' + STOP + END IF + D1MACH = DMACH(I) + RETURN + 9000 FORMAT(/' Adjust D1MACH by uncommenting data statements'/ + *' appropriate for your machine.') +* /* Standard C source for D1MACH -- remove the * in column 1 */ +*#include +*#include +*#include +*double d1mach_(long *i) +*{ +* switch(*i){ +* case 1: return DBL_MIN; +* case 2: return DBL_MAX; +* case 3: return DBL_EPSILON/FLT_RADIX; +* case 4: return DBL_EPSILON; +* case 5: return log10((double)FLT_RADIX); +* } +* fprintf(stderr, "invalid argument: d1mach(%ld)\n", *i); +* exit(1); return 0; /* some compilers demand return values */ +*} + END + SUBROUTINE I1MCRY(A, A1, B, C, D) +**** SPECIAL COMPUTATION FOR OLD CRAY MACHINES **** + INTEGER A, A1, B, C, D + A1 = 16777216*B + C + A = 16777216*A1 + D + END diff --git a/dataassim/math/nonlinsystems/derv1.f b/dataassim/math/nonlinsystems/derv1.f new file mode 100644 index 0000000..3d125e0 --- /dev/null +++ b/dataassim/math/nonlinsystems/derv1.f @@ -0,0 +1,34 @@ + SUBROUTINE DERV1(LABEL,VALUE,FLAG) +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +C>> 1994-10-20 DERV1 Krogh Changes to use M77CON +C>> 1994-04-20 DERV1 CLL Edited to make DP & SP files similar. +C>> 1985-09-20 DERV1 Lawson Initial code. +c--D replaces "?": ?ERV1 +C +C ------------------------------------------------------------ +C SUBROUTINE ARGUMENTS +C -------------------- +C LABEL An identifing name to be printed with VALUE. +C +C VALUE A floating point number to be printed. +C +C FLAG See write up for FLAG in ERMSG. +C +C ------------------------------------------------------------ +C + COMMON/M77ERR/IDELTA,IALPHA + INTEGER IDELTA,IALPHA + DOUBLE PRECISION VALUE + CHARACTER*(*) LABEL + CHARACTER*1 FLAG + SAVE /M77ERR/ +C + IF (IALPHA.GE.-1) THEN + WRITE (*,*) ' ',LABEL,' = ',VALUE + IF (FLAG.EQ.'.') CALL ERFIN + ENDIF + RETURN +C + END diff --git a/dataassim/math/nonlinsystems/dnqsol.f b/dataassim/math/nonlinsystems/dnqsol.f new file mode 100644 index 0000000..ad39436 --- /dev/null +++ b/dataassim/math/nonlinsystems/dnqsol.f @@ -0,0 +1,1964 @@ + subroutine DNQSOL(DNQFJ, N, X, FVEC, XTOL, IOPT, W, IDIMW) +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +c>> 2001-05-25 DNQSOL Krogh Minor change for making .f90 version. +c>> 2000-12-01 DNQSOL Krogh Removed unused parameter P001. +c>> 1996-05-16 DNQSOL Krogh Changes to use .C. and C%%. +c>> 1996-03-30 DNQSOL Krogh Added external stmts. SIN => VSIN, etc. +c>> 1994-11-02 DNQSOL Krogh Changes to use M77CON +c>> 1992-04-27 DNQSOL CLL Deleted unreferenced stmt label. +c>> 1992-04-07 CAO Extra comma in Print removed (error from VAX compile) +c>> 1992-01-15 CLL +c>> 1991-12-18 CLL & FTK Adding treatment of slow convergence to 0. +c>> 1991-12-05 CLL & FTK Adding Option vector interface. +c>> 1990-04-20 CLL@JPL Adapting code from Minpack for MATH77 +c +c Solves a system of N nonlinear equations in N unknowns. +c DNQSOL is the the user-interface subroutine. It calls DNQSL1 which +c contains the top-level logic of the solution algorithm. +c DNQSOL & DNQSL1 also need: +c Other subroutines that are in this file: +c DNQFDJ, DNQDOG, DNQQFM, DNQQRF, DNQUPD. +c Other subprograms from the MATH77 library: DNRM2, DERV1, +c [D/R]1MACH (Fortan 77 only), IERV1, & IERM1. +C A user-provided subroutine: DNQFJ. +c +c Most of these subprograms are derived from MINPACK-1. +c MINPACK-1, 1980, was developed by Jorge J. More', +c Burton S. Garbow, and Kenneth E. Hillstrom, Argonne Nat'l Lab. +c The MINPACK-1 code was obtained as FILE05 from MINPACK/EX from +c Netlib, downloaded to JPL on Tue Feb 6 12:17:45 EST 1990. +c +c Old Name New Name +c -------- -------- +c HYBRJ1, HYBRD1 DNQSOL (Completely redesigned.) +c HYBRJ, HYBRD DNQSL1 (Algorithm and code changes.) +c DOGLEG DNQDOG +c ENORM DNRM2 in BLAS and MATH77 +c FDJAC1 DNQFDJ +c QFORM DNQQFM +c QRFAC DNQQRF +c R1MPYQ DNQAQ +c R1UPDT DNQUPD +c [D/S]PMPAR [D/R]1MACH in file amach.f (Fortran 77 only) +c FCN DNQFJ +c -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Arguments for DNQSOL +c +c call DNQSOL(DNQFJ, N, X, FVEC, XTOL, IOPT, W, IDIMW) +c +c DNQFJ Name of user-supplied subroutine. +c +c N [in] Problem size +c X(N) [inout] Initial and final x-vector. +c FVEC(N) [out] Final F values. +c XTOL [in] Rel. Conv. tolerance on weighted X +c IOPT() [inout] First 3 elements contain output values. +c IOPT(1) = INFO. Output status. +c IOPT(2) = NFEV. No. of F evals used. +c IOPT(3) = NJEV. No. of evals of Jacobian. +c +c Ramaining elements in IOPT() select options. +c +c Option No. of Affected variables Affected variables +c Number arguments in DNQSOL. in DNQSL1. +c 1 0 HAVEJ HAVEJ +c 2 1 DMODE, HAVED, W(4:3+N) HAVED, DIAG(1:N) +c 3 1 NPRINT NPRINT +c 4 1 MAXFEV MAXFEV +c 5 2 ML, MU ML, MU +c 6 0 W(1) EPSFCN +c 7 0 W(2) FACTOR +c 8 0 TRACE TRACE +c +c Functionality of options, listed by option numbers in square brackets. +c [1] If set, user is not computing a Jacobian. +c This subr sets HAVEJ = .false. +c [2] Arg: DMODE = 1, 2, or 3. +c 1. This subr sets DIAG() to all ones and HAVED = .true. +c 2. User has set DIAG(). This subr sets HAVED = .true. +c 3. This subr sets HAVED = .false. so DNQSL1 will set +c DIAG() dynamically. +c [3] Arg: NPRINT Print control. +c [4] Arg: MAXFEV Limit on no. of F evals. +c [5] Args: ML & MU Band structure. +c [6] If set means EPSFCN has been set in W(1). +c [7] If set means FACTOR has been set in W(2). +c [8] If set, this subr sets TRACE = .true., else this subr +c sets TRACE = .false. When TRACE is .true., DNQSL1 prints +c detailed intermediate results. +c +c W() [inout] W(1) and W(2) may be used to pass EPSFCN and FACTOR +c to the subroutine. W(3) contains TOLTST on return. +c W( 4 : 3+(15*N + 3*N**2)/2 ) is used as work space. +c +c EPSFCN W(1) Error in F evals. Used in computing +c approx derivs. +c FACTOR W(2) Algorithm parameter. +c TOLTST W(3) Output. Final value of quantity compared +c with XTOL for convergence test. +c DIAG(N) W(4:N+3) Scaling values. May be input or +c computed. See option 2. +c WA1(N) W() Work space of length N. +c WA2(N) W() Work space of length N. +c WA3(N) W() Work space of length N. +c WA4(N) W() Work space of length N. +c GNSTEP(N) W() Work space of length N. +c QTF(N) W() Wrk space. At end has (Q**t)*F. +c FJAC(N,N) W() Work space for Jacobian. At end has Q of +c QR factorization. +c R( (N + N**2)/2 ) W() Wrk spc. At end has Packed R of +c QR factorization. +c IDIMW [in] Dimension of W(). Require IDIMW .ge. 3+(15*N+3*N**2)/2 +c ------------------------------------------------------------------ +c--D replaces "?": ?NQSOL,?NQSL1,?ERV1,?NQFJ,?NQDOG,?NRM2,?NQFDJ +c--& ?NQQFM,?NQQRF,?NQAQ,?NQUPD +c Also uses IERM1, IERV1 +c ------------------------------------------------------------------ + external D1MACH, DNQFJ + integer N, IOPT(*), IDIMW + double precision X(N), FVEC(N), XTOL, W(IDIMW) +c + integer IWTOLT, IWDIAG, IWA1, IWA2, IWA3, IWA4, IWGNST + integer IWQTF, IWFJAC, IWR + parameter(IWTOLT = 3, IWDIAG = 4 ) + double precision D1MACH, EPSFCN, EPSMCH, FAC1, FACTOR + integer DMODE, J, JABS, K, NI, NPRINT, MAXF1, MAXFEV, ML, MU + logical JPOS, HAVEJ, HAVED, TRACE + parameter(FAC1 = 0.75d0, MAXF1 = 200) + save EPSMCH + data EPSMCH / 0.0d0 / +c ------------------------------------------------------------------ +c + if(EPSMCH .eq. 0.0d0) EPSMCH = D1MACH(4) + NI = N + IOPT(1) = 1 + if (NI .le. 0) then + call IERM1('DNQSOL',IOPT(1),0,'Require N > 0','N',NI,'.') + go to 900 + endif + if (IDIMW .lt. 3 + (NI*(15+3*NI))/2) then + call IERM1('DNQSOL',IOPT(1),0,'Require IDIMW .ge. NEED', + * 'IDIMW',IDIMW,',') + call IERV1('NEED =', 3 + (NI*(15+3*NI))/2,'.') + go to 900 + endif +c Set default values. + HAVEJ = .true. + DMODE = 1 + NPRINT = 0 + MAXFEV = MAXF1 * (NI + 1) + ML = NI - 1 + MU = ML + EPSFCN = EPSMCH + FACTOR = FAC1 + TRACE = .false. +c +c Loop on K beginning with K = 4 and +c terminating when an option code, J, is zero. + K = 4 + 20 continue + J = IOPT(K) + JABS = abs(J) + JPOS = J .gt. 0 + go to (40, 31, 32, 33, 34, 35, 36, 37, 38), JABS+1 +c +c ANSI Standard Fortran 77 drops thru to here if JABS is +c larger than 7. This is an error condition. +c + call IERM1('DNQSOL',IOPT(1),0,'IOPT(K) must be in [-7..7]', + * 'K',K,',') + call IERV1('IOPT(K)',J,'.') + go to 900 +c + 31 HAVEJ = .not. JPOS + K = K+1 + go to 20 +c Option 2. Argument = 1, 2, or 3. Default = 1. +c 1. This subr sets DIAG() to all ones. +c 2. User has set DIAG(). +c 3. Subr DNQSL1 sets DIAG() dynamically. + + 32 if( JPOS .and. IOPT(K+1) .eq. 2) then + DMODE = 2 + elseif( JPOS .and. IOPT(K+1) .eq. 3) then + DMODE = 3 + elseif(.not. JPOS .or. IOPT(K+1) .eq. 1) then + DMODE = 1 + else +c Error. + call IERM1('DNQSOL',IOPT(1),0,'Bad argument for Option 2.', + * 'Argument',IOPT(K+1),'.') + go to 900 + endif + K = K+2 + go to 20 + 33 if(JPOS) then + NPRINT = IOPT(K+1) + else + NPRINT = 0 + endif + K = K+2 + go to 20 + 34 if(JPOS) then + MAXFEV = IOPT(K+1) + else + MAXFEV = MAXF1 * (NI + 1) + endif + K = K+2 + go to 20 + 35 if(JPOS) then + ML = IOPT(K+1) + MU = IOPT(K+2) + else + ML = NI+1 + MU = ML + endif + K = K+3 + go to 20 + 36 if(JPOS) then + EPSFCN = W(1) + else + EPSFCN = EPSMCH + endif + K = K+1 + go to 20 + 37 If(JPOS) then + FACTOR = W(2) + else + FACTOR = FAC1 + endif + K = K+1 + go to 20 + 38 If(JPOS) then + TRACE = .true. + else + TRACE = .false. + endif + K = K+1 + go to 20 +c End loop on K + 40 continue +c +c Option 2. DMODE = 1, 2, or 3. +c 1. This subr sets DIAG() to all ones. +c 2. User has set DIAG(). +c 3. Subr DNQSL1 sets DIAG() dynamically. + + if(DMODE .eq. 1) then + HAVED = .true. + do 50 K = IWDIAG, IWDIAG+NI-1 + W(K) = 1.0d0 + 50 continue + else + HAVED = DMODE .eq. 2 + endif +c + IWA1 = IWDIAG + NI + IWA2 = IWA1 + NI + IWA3 = IWA2 + NI + IWA4 = IWA3 + NI + IWGNST = IWA4 + NI + IWQTF = IWGNST + NI + IWFJAC = IWQTF + NI + IWR = IWFJAC + NI*NI +c IWNEXT = IWR + (N * (N+1)) / 2 Next available loc in W(). +c + call DNQSL1(DNQFJ, NI, X, FVEC, XTOL, + 1 IOPT(1), IOPT(2), IOPT(3), + 2 NPRINT, HAVEJ, MAXFEV, HAVED, ML, MU, + 3 EPSFCN, FACTOR, TRACE, W(IWTOLT), W(IWDIAG), + 4 W(IWA1), W(IWA2), W(IWA3), W(IWA4), W(IWGNST), W(IWQTF), + 5 W(IWFJAC), W(IWR)) + return +c Error return + 900 continue + IOPT(2) = 0 + IOPT(3) = 0 + W(3) = 0.0d0 + return + end +c ================================================================== + subroutine DNQSL1(DNQFJ, N, X, FVEC, XTOL, + * INFO, NFEV, NJEV, + * NPRINT, HAVEJ, MAXFEV, HAVED, ML, MU, + * EPSFCN, FACTOR, TRACE, TOLTST, DIAG, + * WA1, WA2, WA3, WA4, GNSTEP, QTF, FJAC, R) +c>> 1991-12-04 CLL +c>> 1991-12-02 CLL +c>> 1991-06-18 CLL@JPL Adapting code from Minpack for MATH77 + +c 26 arguments. +c Dimension of R() must be (N + N**2)/2. +c Total space occupied by EPSFCN, FACTOR, and TOLTST through R is +c 3 + (15*N + 3*N**2)/2 + + external DNQFJ + integer N, MAXFEV, NPRINT, INFO, NFEV, NJEV, ML, MU + logical HAVEJ, HAVED, TRACE + double precision XTOL, EPSFCN, FACTOR, TOLTST + double precision X(N), FVEC(N), FJAC(N,N), DIAG(N), R(*) + double precision QTF(N), WA1(N), WA2(N), WA3(N), WA4(N) + double precision GNSTEP(N) +C ********** +C +C SUBROUTINE DNQSL1 +C +C THE PURPOSE OF DNQSL1 IS TO FIND A ZERO OF A SYSTEM OF +C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION +C OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A +C SUBROUTINE WHICH CALCULATES THE FUNCTIONS and THE JACOBIAN. +C +C ------------------------------------------------------------------ +c Arguments +c +c DNQFJ is THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH +c CALCULATES THE FUNCTIONS and THE JACOBIAN. DNQFJ MUST +c BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER +c CALLING PROGRAM. DNQFJ will not be called with IFLAG = 2 +c if HAVEJ is .false. DNQFJ will not be called with IFLAG = 0 +c if NPRINT is <= 0. +c DNQFJ is specified as follows: +C +c subroutine DNQFJ(N, X, FVEC, FJAC, IFLAG) +c integer N, IFLAG +c double precision X(N), FVEC(N), FJAC(N,N) +c ---------- +c if IFLAG = 0, Print X() and FVEC() and return. +c IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND +c RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. +c IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND +c RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. +c Set IFLAG to a negative value to force an immediate +c termination of the solution procedure. Otherwise do not +c alter IFLAG. +c --------- +c RETURN +c END +C +c N is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +c OF FUNCTIONS and VARIABLES. +C +c X is AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN +c AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X +c CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. +C +c FVEC is AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS +c THE FUNCTIONS EVALUATED AT THE OUTPUT X. +C +c XTOL is A NONNEGATIVE INPUT VARIABLE. TERMINATION +c OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE +c ITERATES is AT MOST XTOL. +C +c INFO [integer,out] If the user has terminated execution by setting +c IFLAG negative in DNQFJ, INFO is set to IFLAG. +c Otherwise, INFO is set as follows: +C +c INFO = 0 Successful termination. Radius of trust region has +c been reduced to at most max(XTOL, machine precision). +C +c INFO = 1 IMPROPER INPUT PARAMETERS. +C +c INFO = 2 Number of calls to DNQFJ for function evaluations has +c reached MAXFEV. +C +c INFO = 3 XTOL is TOO SMALL. NO FURTHER IMPROVEMENT IN +c THE APPROXIMATE SOLUTION X is POSSIBLE. +C +c INFO = 4 Iteration is not making good progress, as +c measured by the improvement through the last +c five Jacobian evaluations. +C +c INFO = 5 Iteration is not making good progress, as +c measured by the improvement through last +c ten function evaluations. +C +c NFEV [out,integer] The number of calls to DNQFJ with IFLAG = 1. +C +c NJEV [out,integer] The number of evaluations of the Jacobian matrix. +c If HAVEJ is .true. this will be the number of calls to DNQFJ with +c IFLAG = 2. Otherwise it is the number of times the Jacobian has +c been approximately computed by differencing. +C +c NPRINT [in, integer] Enables controlled printing of iterates if it +c is positive. In this case, DNQFJ is called with IFLAG = 0 at the +c beginning of the first iteration and every NPRINTth time a new X +c vector is accepted as an improvement, and at termination. +c On these calls the new best X and FVEC are made available for +c printing. FVEC and FJAC should not be altered. +c If NPRINT is not positive, no special calls to DNQFJ with +c IFLAG = 0 will be made. +C +c HAVEJ [in, logical] True means the user subroutine DNQFJ contains +c code for computing the Jacobian matrix, and false means it does +c not. +c +c MAXFEV is A POSITIVE INTEGER INPUT VARIABLE. TERMINATION +c OCCURS WHEN THE NUMBER OF CALLS TO DNQFJ WITH IFLAG = 1 +c HAS REACHED MAXFEV. +C +c HAVED = true means initial values of DIAG() are given by the +c calling program. False means this subroutine must compute +c initial values of DIAG(). It will set DIAG(j) = the euclidean +c norm of column j, unless this is zero, in which case it will +c set DIAG(j) = 0.0. +C +c ML and MU specify the band structure, if any, of the Jacobian +c matrix. All nonzero elements of the Jacobian matrix lie +c within the first ML subdiagonals, the main diagonal, and the +c first MU superdiagonals. +c ML and MU are only used when HAVEJ is .false. and are only useful +c if ML+MU+1 < N. In this case they are used to +c reduce the number of function evaluations in estimating +c derivatives. If the Jacobian has no band structure set +c ML = MU = N-1. +C +c EPSFCN is an input variable used in determining a suitable +c step length for the forward-difference approximation. This +c approximation assumes that the relative errors in the +c functions are of the order of max(EPSFCN, Machine precision). +C +c FACTOR is a positive input variable used in determining the +c initial step bound. This bound is set to the product of +c FACTOR and the euclidean norm of DIAG*X if nonzero, or else +c to FACTOR itself. In most cases FACTOR should lie in the +c interval (0.1, 10.0). Default: FACTOR = 0.75. +C +c TRACE [in, logical] If true, this subr will print detailed +c intermediate output. Otherwise it will not. +c +c TOLTST [out] Final value of quantity that is compared with +c XTOL for convergence test. +c +c DIAG is an array of length N. If HAVED = false, +c DIAG is internally set. If HAVED = true, DIAG() +c MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS +c MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. +C +c WA1, WA2, WA3, and WA4 are work arrays of length N. +c +c GNSTEP() [scratch] Work array of length N to save the +c Gauss-Newton step vector computed in DNQDOG. +c +c QTF is AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS +c THE VECTOR (Q TRANSPOSE)*FVEC. +C +c FJAC is AN OUTPUT N BY N ARRAY WHICH CONTAINS THE +c ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION +c OF THE FINAL APPROXIMATE JACOBIAN. +C +c R is AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE packed +c UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION +c OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE. +C -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +C SUBPROGRAMS CALLED +C +C USER-SUPPLIED ...... DNQFJ +C +C MINPACK-SUPPLIED ... DNQDOG,D1MACH,DNRM2,DNQFDJ, +C DNQQFM,DNQQRF,DNQAQ,DNQUPD +C +C FORTRAN-SUPPLIED ... abs,max,min,mod +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE' +c Argonne Reports: ANL-80-68 and ANL-80-74, 1980. +C +c 1991-12-09 CLL at JPL. Replacing integer argument MODE that had +c values 2 or 1 with logical argument HAVED related to MODE by +c HAVED = MODE .eq. 2. Thus the user must set HAVED = .true. when +c supplying the DIAG() values, and .false. otherwise. +C ********** +c ------------------------------------------------------------------ +c Description of some of the local variables. +c +c DELTA [flpt] Diameter of trust region. +c HLIM0 [flpt] Upper limit on DELTA when working with a computed +c Jacobian. +c HLIM1 [flpt] Upper limit on DELTA when working with an updated +c Jacobian. +c JACT [integer] Can have values of COMPUT, UPDATE, or KEEP. +c Initially set to COMPUT. At the beginning of the main loop +c we either compute a new Jacobian, update the Jacobian, or keep +c the old Jacobian, depending on the setting of JACT. +c JACT0 [integer] Saves the value of JACT at the beginning of the +c main loop. As JACT gets changed in the loop, JACT0 is still +c available as a record of what it was at the beginning of the loop. +c JEVAL [logical] Set true whenever the Jacobian is computed, and set +c false when it is updated. +c NBEST [integer] Counter, incremented each time an x-vector is +c accepted as being a better approximation to the solution. Used +c in connection with NPRINT to trigger calles to DNQFJ for printing. +c NCFAIL [integer] Counts consecutive "failed" steps since the last +c computation of the Jacobian. NCFAIL is set to 0 when the Jacobian +c is computed or when a step "succeeds" in the sense that +c RATIO .ge. 0.1. It is incremented when RATIO .lt. 0.1. +c NLOOP [integer] Counter for main iteration loop. +c NUPDAT [integer] Counts number of consecutive times the Jacobian +c matrix is updated. +c TRYZER [logical] Initially set to true. While true, the algorithm +c will monitor X's to see if they seem to be all approaching zero. +c If so will try setting them all to zero. If this gives an exactly +c zero function vector then we are finished. If not, we set TRYZER +c to false and restore X to its previous value (even if the function +c value at X = 0 was an improvement) and omit any further testing +c for X's approaching zero. (We tryed accepting the X reached by +c this exceptional step if the function value was an improvement, +c but in one test case this caused the algorithm to end at a local +c nonzero minimum rather than finding a zero.) +c ------------------------------------------------------------------ + external D1MACH, DNRM2 + integer COMPUT, I, IFLAG, IWA(1), J, JACT, JACT0 + integer KEEP, L, LDFJAC, LR + integer MSUM, NBEST, NCFAIL, NCSUC, NEXTPR + integer NLOOP, NSLOW1, NSLOW2, NUMNWT, NUPDAT, UPDATE + logical JEVAL, NEWX, NEWTOK, SING, TRYZER + double precision D1MACH,DNRM2 + double precision ACTRED,DELTA,EPSMCH,FNORM,FNORM1, HLIM0, HLIM1 + double precision ONE,PNORM, PRERED,P1,P5,P0001,RATIO + double precision SUM,TEMP,XNORM, ZERO + parameter(COMPUT = 1, UPDATE = 2, KEEP = 3) + parameter(ONE = 1.0d0, P1 = 0.1d0, P5 = 0.5d0) + parameter(P0001 = 0.0001d0, ZERO = 0.0d0) + save EPSMCH + data EPSMCH /0.0d0 / +c ------------------------------------------------------------------ +C Set EPSMCH to the machine precision. +C + if(EPSMCH .eq. 0.0d0) EPSMCH = D1MACH(4) +C +C Initialize values of output arguments. +C + INFO = 1 + NFEV = 0 + NJEV = 0 + TOLTST = 0.0d0 + TRYZER = .true. +C +C CHECK THE INPUT PARAMETERS FOR ERRORS. +C We assume the condition N > 0 has already been checked in +c the user-interface subroutine that called this one. + + IF ( XTOL .lt. ZERO .or. MAXFEV .le. 0 + * .or. FACTOR .le. ZERO ) then + call IERM1('DNQSL1',INFO,0, + * 'Require MAXFEV > 0, XTOL .gt. 0.0, FACTOR > 0.0', + * 'MAXFEV',MAXFEV,',') + call DERV1('XTOL',XTOL,',') + call DERV1('FACTOR',FACTOR,'.') + go to 300 + endif + if( .not. HAVEJ .and. (ML .lt. 0 .or. MU .lt. 0)) then + call IERM1('DNQSL1',INFO,0, + * 'With HAVEJ false, require ML .ge. 0 and MU .ge. 0', + * 'ML',ML,',') + call IERV1('MU',MU,',') + go to 300 + endif +c HAVED = true means the user has set DIAG(). + IF ( HAVED ) then + DO 10 J = 1, N + IF (DIAG(J) .le. ZERO) then + call IERM1('DNQSL1',INFO,0, + * 'With HAVED = .true., require all DIAG(J) > 0.0', + * 'J',J,',') + call DERV1('DIAG(J)',DIAG(J),'.') + go to 300 + endif + 10 CONTINUE + endif +c Initialize algorithm variables. + INFO = 0 + JACT = COMPUT + LDFJAC = N + LR = (N*(N+1)) / 2 + MSUM = min(ML + MU + 1, N) + NBEST = 1 + NCSUC = 0 + NEXTPR = 1 + NLOOP = 0 + NSLOW1 = 0 + NSLOW2 = 0 + NUMNWT = 0 +C +C Evaluate the function at the starting point. +C Calculate and test its norm. +C + IFLAG = 1 +C%% (*dnqfj)( n, x, fvec, fjac, &iflag ); + CALL DNQFJ(N, X, FVEC, FJAC, IFLAG) + NFEV = 1 + IF (IFLAG .lt. 0) GO TO 300 + FNORM = DNRM2(N,FVEC,1) + if(TRACE) then + print'(1x,i5,a/(6x,5g15.6))',NLOOP, + * ' Initial X:',(X(J),J=1,N) + print'(1x,5x,a,g15.6)', + * ' Initial FNORM:',FNORM + endif + if(FNORM .eq. 0.0d0) then + go to 300 + endif +C +C Beginning of main loop. +C + 30 continue + NLOOP = NLOOP + 1 + JACT0 = JACT +C +C Compute, Update, or Keep Jacobian, depending on JACT. +C + if (JACT .eq. COMPUT) then + JEVAL = .TRUE. + NUPDAT = 0 + NCFAIL = 0 +C +C CALCULATE THE JACOBIAN MATRIX. +C + if(TRACE) print'(1x,i5,a)',NLOOP, + * ' Computing new Jacobian matrix.' + NJEV = NJEV + 1 + if(HAVEJ) then + IFLAG = 2 +C%% (*dnqfj)( n, x, fvec, fjac, &iflag ); + CALL DNQFJ(N, X, FVEC, FJAC, IFLAG) + else + CALL DNQFDJ(DNQFJ,N,X,FVEC,FJAC,LDFJAC, + * IFLAG,ML,MU,EPSFCN,WA1, WA2) + NFEV = NFEV + MSUM + endif + IF (IFLAG .lt. 0) GO TO 300 +C +C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. +C + CALL DNQQRF(N,N,FJAC,LDFJAC, .false., IWA,1,WA1,WA2,WA3) +C +C On the first iteration and if HAVED is .false., scale according +C to the norms of the columns of the initial Jacobian. +C Also on the first iteration calculate the norm of the scaled X +C and initialize the trust region diameter, DELTA. +C + IF (NLOOP .eq. 1) then + IF ( .not. HAVED ) then + DO 40 J = 1, N + DIAG(J) = WA2(J) + IF (WA2(J) .eq. ZERO) DIAG(J) = ONE + 40 CONTINUE + endif +C + DO 60 J = 1, N + WA3(J) = DIAG(J)*X(J) + 60 CONTINUE + XNORM = DNRM2(N,WA3,1) + DELTA = FACTOR*XNORM + IF (DELTA .eq. ZERO) DELTA = FACTOR + endif +C +C FORM (Q TRANSPOSE)*FVEC and STORE IN QTF. +C + DO 80 I = 1, N + QTF(I) = FVEC(I) + 80 CONTINUE + DO 120 J = 1, N + IF (FJAC(J,J) .eq. ZERO) GO TO 110 + SUM = ZERO + DO 90 I = J, N + SUM = SUM + FJAC(I,J)*QTF(I) + 90 CONTINUE + TEMP = -SUM/FJAC(J,J) + DO 100 I = J, N + QTF(I) = QTF(I) + FJAC(I,J)*TEMP + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE +C +C COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R. +c The diagonal elts come from WA1(). The strictly upper +c triangular elts come from FJAC(,). The upper triangular matrix +c will be stored, packed by rows, in R(). +C + SING = .FALSE. + DO 150 J = 1, N + L = J + DO 130 I = 1, J-1 + R(L) = FJAC(I,J) + L = L + N - I + 130 CONTINUE + R(L) = WA1(J) + IF (WA1(J) .eq. ZERO) SING = .true. + 150 CONTINUE +C +C ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC. +C + CALL DNQQFM(N,N,FJAC,LDFJAC,WA1) +C +C RESCALE IF NECESSARY. +C + if ( .not. HAVED ) then + DO 160 J = 1, N + DIAG(J) = max(DIAG(J),WA2(J)) + 160 CONTINUE + endif +c -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + elseif(JACT .eq. UPDATE) then + +C +C CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN +C and UPDATE QTF IF NECESSARY. +C + if(TRACE) print'(1x,i5,a)',NLOOP, + * ' Updating Jacobian matrix.' + NUPDAT = NUPDAT + 1 + JEVAL = .FALSE. + DO 280 J = 1, N + SUM = ZERO + DO 270 I = 1, N + SUM = SUM + FJAC(I,J)*WA4(I) + 270 CONTINUE + WA2(J) = (SUM - WA3(J))/PNORM + WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM) + IF (RATIO .ge. P0001) QTF(J) = SUM + 280 CONTINUE +C +C COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN. +C + CALL DNQUPD(N,N,R,LR,WA1,WA2,WA3,SING) + CALL DNQAQ(N,N,FJAC,LDFJAC,WA2,WA3) + CALL DNQAQ(1,N,QTF,1,WA2,WA3) + else + if(TRACE) print'(1x,i5,a)',NLOOP, + * ' Keeping Jacobian matrix unchanged.' + endif +C +C Now have a new or updated or retained Jacobian matrix. +C +C IF REQUESTED, CALL DNQFJ TO ENABLE PRINTING OF ITERATES. +C + if (NPRINT .gt. 0) then + if (NBEST .eq. NEXTPR) then + IFLAG = 0 +C%% (*dnqfj)( n, x, fvec, fjac, &iflag ); + CALL DNQFJ(N, X, FVEC, FJAC, IFLAG) + IF (IFLAG .lt. 0) GO TO 300 + NEXTPR = NEXTPR + NPRINT + endif + endif +C +C Determine the direction P, using a dogleg method, and +c returning -P in WA1(). +C + CALL DNQDOG(N,R,LR,DIAG,QTF,DELTA,WA1,NEWTOK,WA2,WA3, + * JACT0 .eq. KEEP, GNSTEP) +c +c -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + if(TRYZER) then +c NUMNWT counts number of consecutive +c full Newton steps. + if(NEWTOK) then + NUMNWT = NUMNWT + 1 + else + NUMNWT = 0 + endif +c +c Test for convergence of some x components toward 0. +c If this seems to be happening try setting such +c components to 0. +c + if(NUMNWT .ge. 5 .and. NCSUC .ge. 4) then + NUMNWT = 0 + do 204 J = 1,N + WA2(J) = X(J) - WA1(J) + if(abs(WA2(J)) .le. 0.75d0 * abs(X(J)) ) then + WA2(J) = 0.0d0 + else + go to 203 + endif + 204 continue + if(TRACE) print'(1x,i5,a)',NLOOP, + * ' Trial setting of X() to zero.' +C +C EVALUATE THE FUNCTION AT WA2() and CALCULATE ITS NORM. +C + IFLAG = 1 +c%% (*dnqfj)( n, wa2, wa4, fjac, &iflag ); + CALL DNQFJ(N, WA2, WA4, FJAC, IFLAG) + NFEV = NFEV + 1 + IF (IFLAG .lt. 0) GO TO 300 + FNORM1 = DNRM2(N,WA4,1) + if(TRACE) print'(1x,i5,a,g15.6)',NLOOP, + * ' FNORM1 = ', FNORM1 + if(FNORM1 .eq. 0.0d0) then +c +C Accept new point as final solution. +c Update X() and FVEC() and go to termination. +C + INFO = 0 + TOLTST = 0.0d0 + do 201 J = 1, N + X(J) = WA2(J) + FVEC(J) = WA4(J) + 201 continue + if(TRACE) print'(1x,i5,a,(6x,5g15.6))',NLOOP, + * ' Accepting X = all zeros.' + go to 300 + else + TRYZER = .false. + endif + endif +c The following "endif" matches "if(TRYZER)then" + endif +c -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +C +C STORE THE DIRECTION P and X + P. CALCULATE THE NORM OF P. +C + 203 continue + DO 200 J = 1, N + WA1(J) = -WA1(J) + WA2(J) = X(J) + WA1(J) + WA3(J) = DIAG(J)*WA1(J) + 200 continue + + PNORM = DNRM2(N,WA3,1) + if(TRACE) then + print'(1x,i5,a,/1x,5x,2g15.6)',NLOOP, + * ' DELTA PNORM',DELTA,PNORM + print'(6x,a/(6x,5g15.6))',' Trial X:',(WA2(J),J=1,N) + endif +C +C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. +C + IF (NLOOP .eq. 1) then + DELTA = min(DELTA,PNORM) + HLIM0 = DELTA + HLIM1 = DELTA + endif +C +C EVALUATE THE FUNCTION AT X + P and CALCULATE ITS NORM. +C + IFLAG = 1 +c%% (*dnqfj)( n, wa2, wa4, fjac, &iflag ); + CALL DNQFJ(N, WA2, WA4, FJAC, IFLAG) + NFEV = NFEV + 1 + IF (IFLAG .lt. 0) GO TO 300 + FNORM1 = DNRM2(N,WA4,1) +C +C COMPUTE THE SCALED ACTUAL REDUCTION. +C + ACTRED = -ONE + IF (FNORM1 .lt. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 +C +C COMPUTE THE SCALED PREDICTED REDUCTION. +C + L = 1 + DO 220 I = 1, N + SUM = ZERO + DO 210 J = I, N + SUM = SUM + R(L)*WA1(J) + L = L + 1 + 210 CONTINUE + WA3(I) = QTF(I) + SUM + 220 CONTINUE + TEMP = DNRM2(N,WA3,1) + PRERED = ZERO + IF (TEMP .lt. FNORM) PRERED = ONE - (TEMP/FNORM)**2 +C +C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED +C REDUCTION. +C + RATIO = ZERO + IF (PRERED .gt. ZERO) RATIO = ACTRED/PRERED + if(TRACE) print'(1x,i5,a,/1x,5x,4g15.6)',NLOOP, + * ' FNORM1 ACTRED PRERED RATIO', + * FNORM1,ACTRED,PRERED,RATIO +C +c Analyze RATIO, NCSUC and JEVAL to decide on accepting or +c rejecting the new X, and assigning new values to +c NCSUC, JACT, and DELTA. +c + if( RATIO .lt. 0.0000D0) then + NCSUC = 0 + NCFAIL = NCFAIL + 1 + NEWX = .false. + if(JEVAL) HLIM0 = min(HLIM0, 0.707107d0 * PNORM) + HLIM1 = min(HLIM1, 0.707107d0 * PNORM) + if( JEVAL .or. (NCFAIL .le. 1 .and. NUPDAT .le. 2)) then + JACT = KEEP + DELTA = 0.5d0 * PNORM + else + JACT = COMPUT + DELTA = HLIM0 + endif + elseif( RATIO .lt. 0.1D0) then + NCSUC = 0 + NCFAIL = NCFAIL + 1 + NEWX = .true. + if(NCFAIL .le. 1 .and. NUPDAT .le. 2) then + JACT = UPDATE + DELTA = 0.5d0 * PNORM + else + JACT = COMPUT + DELTA = HLIM0 + endif + else +c Here we have RATIO .ge. 0.1 + NCSUC = NCSUC + 1 + NCFAIL = 0 + NEWX = .true. + JACT = UPDATE + if(RATIO .lt. 0.5d0) then + if(NCSUC .ge. 5) + * HLIM1 = max(HLIM1, 1.414214d0 * PNORM) + if(NCSUC .ge. 2) + * DELTA = min(HLIM1, max(DELTA, 1.414214d0 * PNORM)) + elseif(RATIO .lt. 0.9d0) then + if(JACT0 .eq. COMPUT) + * HLIM0 = max(HLIM0, 1.414214d0 * PNORM) + if(NCSUC .ge. 4) + * HLIM1 = max(HLIM1, 1.414214d0 * PNORM) + if(NCSUC .ge. 2) + * DELTA = min(HLIM1, max(DELTA, 1.414214d0 * PNORM)) + elseif(RATIO .lt. 1.1d0) then + if(JACT0 .eq. COMPUT) + * HLIM0 = max(HLIM0, 2.0d0 * PNORM) + if(NCSUC .eq. 1) then + DELTA = 1.414214d0 * PNORM + else + DELTA = 2.0d0 * PNORM + endif + HLIM1 = max(HLIM1, DELTA) + endif + endif + HLIM0 = max(HLIM0, HLIM1) + if(TRACE) print'(1x,i5,a,a,/1x,5x,3i8,3g13.4)',NLOOP, + * ' NCSUC NCFAIL NUPDAT', + * ' DELTA HLIM0 HLIM1', + * NCSUC, NCFAIL, NUPDAT, DELTA,HLIM0, HLIM1 +C + if(NEWX) then +c Accept new X, FVEC, and their norms. + DO 250 J = 1, N + X(J) = WA2(J) + WA2(J) = DIAG(J)*X(J) + FVEC(J) = WA4(J) + 250 CONTINUE + XNORM = DNRM2(N,WA2,1) + FNORM = FNORM1 + NBEST = NBEST + 1 + if(TRACE) print'(1x,i5,a,g15.6)',NLOOP, + * ' Accepting new X with XNORM = ',XNORM + endif +C +C DETERMINE THE PROGRESS OF THE ITERATION. +C + if( ACTRED .ge. 0.001d0) then + NSLOW1 = 0 + else + NSLOW1 = NSLOW1 + 1 + endif + if( ACTRED .ge. 0.1d0) then + NSLOW2 = 0 + elseif( JACT0 .eq. COMPUT) then + NSLOW2 = NSLOW2 + 1 + endif + if(TRACE) print'(1x,i5,a,/1x,5x,2(i11,4x))',NLOOP, + * ' NSLOW1 NSLOW2', + * NSLOW1, NSLOW2 +C +C TEST FOR CONVERGENCE. +C + IF (DELTA .le. XTOL*XNORM .or. FNORM .eq. ZERO) then + INFO = 0 + if(TRACE) print'(1x,i5,a,/1x,5x,i14,g15.6)',NLOOP, + * ' INFO XNORM', INFO, XNORM + go to 295 + endif +C +C TESTS FOR TERMINATION and STRINGENT TOLERANCES. +C + IF (NFEV .ge. MAXFEV) INFO = 2 + IF (P1*max(P1*DELTA,PNORM) .le. EPSMCH*XNORM) INFO = 3 + IF (NSLOW2 .eq. 5) INFO = 4 + IF (NSLOW1 .eq. 10) INFO = 5 + IF (INFO .ne. 0) then + if(TRACE) print'(1x,i5,a,/1x,5x,i14,g15.6)',NLOOP, + * ' INFO XNORM', INFO, XNORM + call IERM1('DNQSL1',INFO, 0,'Unsuccessful termination.', + * 'INFO',INFO,'.') + go to 295 + endif + go to 30 +C End of main loop. +C +c Come to following stmt when INFO has been set to +c 2, 3, 4, or 5, or to 0 due to successful XTOL test. + 295 continue + if(XNORM .ne. 0.0d0) then + TOLTST = DELTA / XNORM + else + TOLTST = DELTA + endif +c +c Jump to following statement with IFLAG negative +c or INFO = 1 or INFO = 0 due to FNORM being zero. +c Here we have TOLTST = 0.0. + 300 continue +C +C TERMINATION, EITHER NORMAL OR USER IMPOSED. +C + IF (IFLAG .lt. 0) INFO = IFLAG + if(TRACE) print'(1x,i5,a,i3)',NLOOP, + * ' Quitting with INFO = ',INFO + IFLAG = 0 +c%% if (nprint > 0) (*dnqfj)( n, x, fvec, fjac, &iflag ); + IF (NPRINT .gt. 0) CALL DNQFJ(N,X,FVEC,FJAC, IFLAG) + if(INFO .lt. 0) then + call IERM1('DNQSL1',INFO, 0, + * 'Quitting because user code set IFLAG negative.', + * 'IFLAG',INFO,'.') + endif + return +C +C Last line of subroutine DNQSL1. +C + END +c ================================================================== + subroutine DNQFDJ(DNQFJ,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, + * WA1,WA2) +c>> 1991-12-04 CLL Changed arg list of user supplied subroutine. +c>> 1991-06-18 CLL@JPL Adapting code from Minpack for MATH77 + external DNQFJ + integer N,LDFJAC,IFLAG,ML,MU + double precision EPSFCN + double precision X(N),FVEC(N),FJAC(LDFJAC,N),WA1(N),WA2(N) +C ********** +C +C SUBROUTINE DNQFDJ +C +C THIS SUBROUTINE COMPUTES A FORWARD-DIFFERENCE APPROXIMATION +C TO THE N BY N JACOBIAN MATRIX ASSOCIATED WITH A SPECIFIED +C PROBLEM OF N FUNCTIONS IN N VARIABLES. IF THE JACOBIAN HAS +C A BANDED FORM, THEN FUNCTION EVALUATIONS ARE SAVED BY ONLY +C APPROXIMATING THE NONZERO TERMS. +C +C THE SUBROUTINE STATEMENT IS +C +C subroutine DNQFDJ(DNQFJ,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, +C WA1,WA2) +C +C WHERE +C +C DNQFJ IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH +C CALCULATES THE FUNCTIONS. DNQFJ MUST BE DECLARED +C IN AN EXTERNAL STATEMENT IN THE USER CALLING +C PROGRAM, and SHOULD BE WRITTEN AS FOLLOWS. +C +C subroutine DNQFJ(N,X,FVEC,IFLAG) +C integer N,IFLAG +C double precision X(N),FVEC(N) +C ---------- +C CALCULATE THE FUNCTIONS AT X AND +C RETURN THIS VECTOR IN FVEC. +C ---------- +C RETURN +C END +C +C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY DNQFJ UNLESS +C THE USER WANTS TO TERMINATE EXECUTION OF DNQFDJ. +C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. +C +C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF FUNCTIONS and VARIABLES. +C +C X IS AN INPUT ARRAY OF LENGTH N. +C +C FVEC IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE +C FUNCTIONS EVALUATED AT X. +C +C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE +C APPROXIMATION TO THE JACOBIAN MATRIX EVALUATED AT X. +C +C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N +C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. +C +C IFLAG IS AN INTEGER VARIABLE WHICH CAN BE USED TO TERMINATE +C THE EXECUTION OF DNQFDJ. SEE DESCRIPTION OF DNQFJ. +C +C ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES +C THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE +C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET +C ML TO AT LEAST N - 1. +C +C MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES +C THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE +C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET +C MU TO AT LEAST N - 1. +C +C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE +C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS +C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE +C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS +C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE +C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE +C PRECISION. +C +C WA1 and WA2 ARE WORK ARRAYS OF LENGTH N. IF ML + MU + 1 IS AT +C LEAST N, THEN THE JACOBIAN IS CONSIDERED DENSE, and WA2 IS +C NOT REFERENCED. +C +C SUBPROGRAMS CALLED +C +C MINPACK-SUPPLIED ... D1MACH +C +C FORTRAN-SUPPLIED ... abs,max,sqrt +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE +C +C ********** +c ------------------------------------------------------------------ + external D1MACH + integer I,J,K,MSUM + double precision EPS,EPSMCH,H,TEMP,ZERO +c++ CODE for ~.C. is active + double precision DUMMY(1,1) +c++ CODE for .C. & (.N. == 'S') is inactive +c%% float *dummy; +c++ CODE for .C. & (.N. == 'D') is inactive +c%% double *dummy; +C++ End + double precision D1MACH + parameter(ZERO = 0.0d0) +C +C EPSMCH IS THE MACHINE PRECISION. +C + EPSMCH = D1MACH(4) +C + EPS = sqrt(max(EPSFCN,EPSMCH)) + IFLAG = 1 + MSUM = ML + MU + 1 + IF (MSUM .lt. N) GO TO 40 +C +C COMPUTATION OF DENSE APPROXIMATE JACOBIAN. +C + DO 20 J = 1, N + TEMP = X(J) + H = EPS*abs(TEMP) + IF (H .eq. ZERO) H = EPS + X(J) = TEMP + H +c%% (*dnqfj)( n, x, wa1, dummy, iflag ); + CALL DNQFJ(N, X, WA1, DUMMY, IFLAG) + IF (IFLAG .lt. 0) GO TO 30 + X(J) = TEMP + DO 10 I = 1, N + FJAC(I,J) = (WA1(I) - FVEC(I))/H + 10 CONTINUE + 20 CONTINUE + 30 CONTINUE + GO TO 110 + 40 CONTINUE +C +C COMPUTATION OF BANDED APPROXIMATE JACOBIAN. +C + DO 90 K = 1, MSUM + DO 60 J = K, N, MSUM + WA2(J) = X(J) + H = EPS*abs(WA2(J)) + IF (H .eq. ZERO) H = EPS + X(J) = WA2(J) + H + 60 CONTINUE +c%% (*dnqfj)( n, x, wa1, dummy, iflag ); + CALL DNQFJ(N, X, WA1, DUMMY, IFLAG) + IF (IFLAG .lt. 0) GO TO 100 + DO 80 J = K, N, MSUM + X(J) = WA2(J) + H = EPS*abs(WA2(J)) + IF (H .eq. ZERO) H = EPS + DO 70 I = 1, N + FJAC(I,J) = ZERO + IF (I .ge. J - MU .and. I .le. J + ML) + * FJAC(I,J) = (WA1(I) - FVEC(I))/H + 70 CONTINUE + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + 110 CONTINUE + RETURN +C +C Last line of subroutine DNQFDJ. +C + END +c ================================================================== + subroutine DNQAQ(M,N,A,LDA,V,W) + integer M,N,LDA + double precision A(LDA,N),V(N),W(N) +C ********** +C +C SUBROUTINE DNQAQ +C +C GIVEN AN M BY N MATRIX A, THIS SUBROUTINE COMPUTES A*Q WHERE +C Q IS THE PRODUCT OF 2*(N - 1) TRANSFORMATIONS +C +C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) +C +C and GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE WHICH +C ELIMINATE ELEMENTS IN THE I-TH and N-TH PLANES, RESPECTIVELY. +C Q ITSELF IS NOT GIVEN, RATHER THE INFORMATION TO RECOVER THE +C GV, GW ROTATIONS IS SUPPLIED. +C +C THE SUBROUTINE STATEMENT IS +C +C subroutine DNQAQ(M,N,A,LDA,V,W) +C +C WHERE +C +C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF ROWS OF A. +C +C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF COLUMNS OF A. +C +C A IS AN M BY N ARRAY. ON INPUT A MUST CONTAIN THE MATRIX +C TO BE POSTMULTIPLIED BY THE ORTHOGONAL MATRIX Q +C DESCRIBED ABOVE. ON OUTPUT A*Q HAS REPLACED A. +C +C LDA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M +C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. +C +C V IS AN INPUT ARRAY OF LENGTH N. V(I) MUST CONTAIN THE +C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GV(I) +C DESCRIBED ABOVE. +C +C W IS AN INPUT ARRAY OF LENGTH N. W(I) MUST CONTAIN THE +C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) +C DESCRIBED ABOVE. +C +C SUBROUTINES CALLED +C +C FORTRAN-SUPPLIED ... abs,sqrt +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE +C +C ********** +c ------------------------------------------------------------------ + integer I,J,NMJ,NM1 + double precision VCOS,ONE,VSIN,TEMP + parameter(ONE = 1.0d0) +C +C APPLY THE FIRST SET OF GIVENS ROTATIONS TO A. +C + NM1 = N - 1 + IF (NM1 .lt. 1) GO TO 50 + DO 20 NMJ = 1, NM1 + J = N - NMJ + IF (abs(V(J)) .gt. ONE) VCOS = ONE/V(J) + IF (abs(V(J)) .gt. ONE) VSIN = sqrt(ONE-VCOS**2) + IF (abs(V(J)) .le. ONE) VSIN = V(J) + IF (abs(V(J)) .le. ONE) VCOS = sqrt(ONE-VSIN**2) + DO 10 I = 1, M + TEMP = VCOS*A(I,J) - VSIN*A(I,N) + A(I,N) = VSIN*A(I,J) + VCOS*A(I,N) + A(I,J) = TEMP + 10 CONTINUE + 20 CONTINUE +C +C APPLY THE SECOND SET OF GIVENS ROTATIONS TO A. +C + DO 40 J = 1, NM1 + IF (abs(W(J)) .gt. ONE) VCOS = ONE/W(J) + IF (abs(W(J)) .gt. ONE) VSIN = sqrt(ONE-VCOS**2) + IF (abs(W(J)) .le. ONE) VSIN = W(J) + IF (abs(W(J)) .le. ONE) VCOS = sqrt(ONE-VSIN**2) + DO 30 I = 1, M + TEMP = VCOS*A(I,J) + VSIN*A(I,N) + A(I,N) = -VSIN*A(I,J) + VCOS*A(I,N) + A(I,J) = TEMP + 30 CONTINUE + 40 CONTINUE + 50 CONTINUE + RETURN +C +C Last line of subroutine DNQAQ. +C + END +c ================================================================== + subroutine DNQDOG(N,R,LR,DIAG,QTB,DELTA,X,NEWTOK,WA1,WA2, + * SAMEJ, GNSTEP) +c>> 1992-01-03 CLL + integer N,LR + logical SAMEJ, NEWTOK + double precision DELTA, GNSTEP(N) + double precision R(LR),DIAG(N),QTB(N),X(N),WA1(N),WA2(N) +C ********** +C +C subroutine DNQDOG +C +c Given an M by N matrix A, an N by N nonsingular diagonal +c matrix D, an M-vector B, and a positive number DELTA, the +c problem is to determine the convex combination X of the +c gauss-newton and scaled gradient directions that minimizes +c (A*X - B) in the least squares sense, subject to the +c restriction that the euclidean norm of D*X be at most DELTA. +c +c This subroutine completes the solution of the problem +c if it is provided with the necessary information from the +c QR factorization of A. that is, if A = Q*R, where Q has +c orthogonal columns and R is an upper triangular matrix, +c then DNQDOG needs the full upper triangle of R and +c the first N components of (Q transpose)*B. +c +c The subroutine statement is +C +C subroutine DNQDOG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2) +C +C where +C +c N is A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. +C +c R() [in] An ARRAY OF LENGTH LR WHICH MUST CONTAIN THE UPPER +c TRIANGULAR MATRIX R STORED BY ROWS. +C +c LR is A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN +c (N*(N+1))/2. +C +c DIAG() [in] An ARRAY OF LENGTH N WHICH MUST CONTAIN THE +c DIAGONAL ELEMENTS OF THE MATRIX D. +C +c QTB() [in] An ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST +c N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. +C +c DELTA is a POSITIVE INPUT VARIABLE WHICH SPECIFIES AN UPPER +c BOUND ON THE EUCLIDEAN NORM OF D*X. +C +c X() [out] An ARRAY OF LENGTH N WHICH CONTAINS THE DESIRED +c CONVEX COMBINATION OF THE GAUSS-NEWTON DIRECTION and THE +c SCALED GRADIENT DIRECTION. +c +c NEWTOK [logical, out] True means the full Newton step was +c used. False means a modified, shorter, step was used. +c +c WA1() and WA2() are work arrays of length N. +c +c SAMEJ [logical, in] True means we have the same Jacobian matrix as +c on the previous call to this subr. The Gauss-Newton vector in +c GNSTEP() can be reused. +c +c GNSTEP() [inout] On return holds the Gauss-Newton vector. On entry +c with SAMEJ = .true., contains the GN vector from the previous call. +C ------------------------------------------------------------------ +C SUBPROGRAMS CALLED +C +c MINPACK-SUPPLIED ... D1MACH,DNRM2 +C +C FORTRAN-SUPPLIED ... abs,max,min,sqrt +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE +C +c ------------------------------------------------------------------ + external D1MACH, DNRM2 + integer I,J,JJ,JP1,K,L, NP1 + double precision ALPHA,BNORM,EPSMCH,GNORM,ONE,QNORM,SGNORM,SUM + double precision TEMP,ZERO + double precision D1MACH,DNRM2 + parameter(ONE = 1.0d0, ZERO = 0.0d0) + save EPSMCH + data EPSMCH / 0.0d0 / +c ------------------------------------------------------------------ +C Set EPSMCH to the machine precision. +C + if(EPSMCH .eq. 0.0d0) EPSMCH = D1MACH(4) + if(.not. SAMEJ) then +C +C FIRST, CALCULATE THE GAUSS-NEWTON DIRECTION. +C + NP1 = N+1 + JJ = (N*(N + 1))/2 + 1 + DO 50 K = 1, N + J = NP1 - K + JP1 = J + 1 + JJ = JJ - K + L = JJ + 1 + SUM = ZERO + DO 10 I = JP1, N + SUM = SUM + R(L)*GNSTEP(I) + L = L + 1 + 10 CONTINUE + TEMP = R(JJ) + IF (TEMP .eq. ZERO) then + L = J + DO 30 I = 1, J-1 + TEMP = max(TEMP,abs(R(L))) + L = L + N - I + 30 CONTINUE + TEMP = EPSMCH*TEMP + endif + if (TEMP .eq. ZERO) then + GNSTEP(J) = 0.0d0 + else + GNSTEP(J) = (QTB(J) - SUM)/TEMP + endif + 50 CONTINUE + endif +C +C TEST WHETHER THE GAUSS-NEWTON DIRECTION is ACCEPTABLE. +C + DO 60 J = 1, N + WA1(J) = ZERO + WA2(J) = DIAG(J)*GNSTEP(J) + 60 CONTINUE + QNORM = DNRM2(N,WA2,1) + NEWTOK = QNORM .le. DELTA + if (NEWTOK) then + do 65 J = 1,N + X(J) = GNSTEP(J) + 65 continue + go to 140 + endif +C +C THE GAUSS-NEWTON DIRECTION is NOT ACCEPTABLE. +C NEXT, CALCULATE THE SCALED GRADIENT DIRECTION. +C + L = 1 + DO 80 J = 1, N + TEMP = QTB(J) + DO 70 I = J, N + WA1(I) = WA1(I) + R(L)*TEMP + L = L + 1 + 70 CONTINUE + WA1(J) = WA1(J)/DIAG(J) + 80 CONTINUE +C +C CALCULATE THE NORM OF THE SCALED GRADIENT and TEST FOR +C THE SPECIAL CASE IN WHICH THE SCALED GRADIENT is ZERO. +C + GNORM = DNRM2(N,WA1,1) + if (GNORM .eq. ZERO) then + ALPHA = DELTA/QNORM + do 85 J = 1, N + X(J) = ALPHA*GNSTEP(J) + 85 continue + go to 140 + endif +C +C CALCULATE THE POINT ALONG THE SCALED GRADIENT +C AT WHICH THE QUADRATIC is MINIMIZED. +C + DO 90 J = 1, N + WA1(J) = (WA1(J)/GNORM)/DIAG(J) + 90 CONTINUE + L = 1 + DO 110 J = 1, N + SUM = ZERO + DO 100 I = J, N + SUM = SUM + R(L)*WA1(I) + L = L + 1 + 100 CONTINUE + WA2(J) = SUM + 110 CONTINUE + TEMP = DNRM2(N,WA2,1) + SGNORM = (GNORM/TEMP)/TEMP +C +C TEST WHETHER THE SCALED GRADIENT DIRECTION is ACCEPTABLE. +C + ALPHA = ZERO + if (SGNORM .lt. DELTA) then +C +C THE SCALED GRADIENT DIRECTION is NOT ACCEPTABLE. +C FINALLY, CALCULATE THE POINT ALONG THE dogleg +C AT WHICH THE QUADRATIC is MINIMIZED. +C + BNORM = DNRM2(N,QTB,1) + TEMP = (BNORM/GNORM)*(BNORM/QNORM)*(SGNORM/DELTA) + TEMP = TEMP - (DELTA/QNORM)*(SGNORM/DELTA)**2 + * + sqrt((TEMP-(DELTA/QNORM))**2 + * +(ONE-(DELTA/QNORM)**2)*(ONE-(SGNORM/DELTA)**2)) + ALPHA = ((DELTA/QNORM)*(ONE - (SGNORM/DELTA)**2))/TEMP + endif +C +C FORM APPROPRIATE CONVEX COMBINATION OF THE GAUSS-NEWTON +C DIRECTION and THE SCALED GRADIENT DIRECTION. +C + TEMP = (ONE - ALPHA)*min(SGNORM,DELTA) + DO 130 J = 1, N + X(J) = TEMP*WA1(J) + ALPHA*GNSTEP(J) + 130 CONTINUE + 140 CONTINUE + RETURN +C +C Last line of subroutine DNQDOG. +C + END + subroutine DNQQFM(M,N,Q,LDQ,WA) + integer M,N,LDQ + double precision Q(LDQ,M),WA(M) +C ********** +C +C SUBROUTINE DNQQFM +C +C THIS SUBROUTINE PROCEEDS FROM THE COMPUTED QR FACTORIZATION OF +C AN M BY N MATRIX A TO ACCUMULATE THE M BY M ORTHOGONAL MATRIX +C Q FROM ITS FACTORED FORM. +C +C THE SUBROUTINE STATEMENT IS +C +C subroutine DNQQFM(M,N,Q,LDQ,WA) +C +C WHERE +C +C M is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF ROWS OF A and THE ORDER OF Q. +C +C N is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF COLUMNS OF A. +C +C Q is AN M BY M ARRAY. ON INPUT THE FULL LOWER TRAPEZOID IN +C THE FIRST MIN(M,N) COLUMNS OF Q CONTAINS THE FACTORED FORM. +C ON OUTPUT Q HAS BEEN ACCUMULATED INTO A SQUARE MATRIX. +C +C LDQ is A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M +C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY Q. +C +C WA is A WORK ARRAY OF LENGTH M. +C +C SUBPROGRAMS CALLED +C +C FORTRAN-SUPPLIED ... min +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE +C +c ------------------------------------------------------------------ + integer I,J,JM1,K,L,MINMN,NP1 + double precision ONE,SUM,TEMP,ZERO + parameter(ONE = 1.0d0, ZERO = 0.0d0) +C +C ZERO OUT UPPER TRIANGLE OF Q IN THE FIRST MIN(M,N) COLUMNS. +C + MINMN = min(M,N) + IF (MINMN .lt. 2) GO TO 30 + DO 20 J = 2, MINMN + JM1 = J - 1 + DO 10 I = 1, JM1 + Q(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + 30 CONTINUE +C +C INITIALIZE REMAINING COLUMNS TO THOSE OF THE IDENTITY MATRIX. +C + NP1 = N + 1 + IF (M .lt. NP1) GO TO 60 + DO 50 J = NP1, M + DO 40 I = 1, M + Q(I,J) = ZERO + 40 CONTINUE + Q(J,J) = ONE + 50 CONTINUE + 60 CONTINUE +C +C ACCUMULATE Q FROM ITS FACTORED FORM. +C + DO 120 L = 1, MINMN + K = MINMN - L + 1 + DO 70 I = K, M + WA(I) = Q(I,K) + Q(I,K) = ZERO + 70 CONTINUE + Q(K,K) = ONE + IF (WA(K) .eq. ZERO) GO TO 110 + DO 100 J = K, M + SUM = ZERO + DO 80 I = K, M + SUM = SUM + Q(I,J)*WA(I) + 80 CONTINUE + TEMP = SUM/WA(K) + DO 90 I = K, M + Q(I,J) = Q(I,J) - TEMP*WA(I) + 90 CONTINUE + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE + RETURN +C +C Last line of subroutine DNQQFM. +C + END + subroutine DNQQRF(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) + integer M,N,LDA,LIPVT + integer IPVT(LIPVT) + logical PIVOT + double precision A(LDA,N),RDIAG(N),ACNORM(N),WA(N) +C ********** +C +C SUBROUTINE DNQQRF +C +C THIS SUBROUTINE USES HOUSEHOLDER TRANSFORMATIONS WITH COLUMN +C PIVOTING (OPTIONAL) TO COMPUTE A QR FACTORIZATION OF THE +C M BY N MATRIX A. THAT IS, DNQQRF DETERMINES AN ORTHOGONAL +C MATRIX Q, A PERMUTATION MATRIX P, and AN UPPER TRAPEZOIDAL +C MATRIX R WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE, +C SUCH THAT A*P = Q*R. THE HOUSEHOLDER TRANSFORMATION FOR +C COLUMN K, K = 1,2,...,MIN(M,N), is OF THE FORM +C +C T +C I - (1/U(K))*U*U +C +C WHERE U HAS ZEROS IN THE FIRST K-1 POSITIONS. THE FORM OF +C THIS TRANSFORMATION and THE METHOD OF PIVOTING FIRST +C APPEARED IN THE CORRESPONDING LINPACK SUBROUTINE. +C +C THE SUBROUTINE STATEMENT IS +C +C subroutine DNQQRF(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) +C +C WHERE +C +C M is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF ROWS OF A. +C +C N is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF COLUMNS OF A. +C +C A is AN M BY N ARRAY. ON INPUT A CONTAINS THE MATRIX FOR +C WHICH THE QR FACTORIZATION is TO BE COMPUTED. ON OUTPUT +C THE STRICT UPPER TRAPEZOIDAL PART OF A CONTAINS THE STRICT +C UPPER TRAPEZOIDAL PART OF R, and THE LOWER TRAPEZOIDAL +C PART OF A CONTAINS A FACTORED FORM OF Q (THE NON-TRIVIAL +C ELEMENTS OF THE U VECTORS DESCRIBED ABOVE). +C +C LDA is A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M +C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. +C +C PIVOT is A LOGICAL INPUT VARIABLE. IF PIVOT is SET TRUE, +C THEN COLUMN PIVOTING is ENFORCED. IF PIVOT is SET FALSE, +C THEN NO COLUMN PIVOTING is DONE. +C +C IPVT is AN INTEGER OUTPUT ARRAY OF LENGTH LIPVT. IPVT +C DEFINES THE PERMUTATION MATRIX P SUCH THAT A*P = Q*R. +C COLUMN J OF P is COLUMN IPVT(J) OF THE IDENTITY MATRIX. +C IF PIVOT is FALSE, IPVT is NOT REFERENCED. +C +C LIPVT is A POSITIVE INTEGER INPUT VARIABLE. IF PIVOT is FALSE, +C THEN LIPVT MAY BE AS SMALL AS 1. IF PIVOT is TRUE, THEN +C LIPVT MUST BE AT LEAST N. +C +C RDIAG is AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE +C DIAGONAL ELEMENTS OF R. +C +C ACNORM is AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE +C NORMS OF THE CORRESPONDING COLUMNS OF THE INPUT MATRIX A. +C IF THIS INFORMATION is NOT NEEDED, THEN ACNORM CAN COINCIDE +C WITH RDIAG. +C +C WA is A WORK ARRAY OF LENGTH N. IF PIVOT is FALSE, THEN WA +C CAN COINCIDE WITH RDIAG. +C +C SUBPROGRAMS CALLED +C +C MINPACK-SUPPLIED ... D1MACH,DNRM2 +C +C FORTRAN-SUPPLIED ... max,sqrt,min +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE +C +C ********** +c ------------------------------------------------------------------ + external D1MACH, DNRM2 + integer I,J,JP1,K,KMAX,MINMN + double precision AJNORM,EPSMCH,ONE,P05,SUM,TEMP,ZERO + double precision D1MACH,DNRM2 + parameter(ONE = 1.0d0, P05 = 0.05d0, ZERO = 0.0d0) +C +C EPSMCH is THE MACHINE PRECISION. +C + EPSMCH = D1MACH(4) +C +C COMPUTE THE INITIAL COLUMN NORMS and INITIALIZE SEVERAL ARRAYS. +C + DO 10 J = 1, N + ACNORM(J) = DNRM2(M,A(1,J),1) + RDIAG(J) = ACNORM(J) + WA(J) = RDIAG(J) + IF (PIVOT) IPVT(J) = J + 10 CONTINUE +C +C REDUCE A TO R WITH HOUSEHOLDER TRANSFORMATIONS. +C + MINMN = min(M,N) + DO 110 J = 1, MINMN + IF (.NOT.PIVOT) GO TO 40 +C +C BRING THE COLUMN OF LARGEST NORM INTO THE PIVOT POSITION. +C + KMAX = J + DO 20 K = J, N + IF (RDIAG(K) .gt. RDIAG(KMAX)) KMAX = K + 20 CONTINUE + IF (KMAX .eq. J) GO TO 40 + DO 30 I = 1, M + TEMP = A(I,J) + A(I,J) = A(I,KMAX) + A(I,KMAX) = TEMP + 30 CONTINUE + RDIAG(KMAX) = RDIAG(J) + WA(KMAX) = WA(J) + K = IPVT(J) + IPVT(J) = IPVT(KMAX) + IPVT(KMAX) = K + 40 CONTINUE +C +C COMPUTE THE HOUSEHOLDER TRANSFORMATION TO REDUCE THE +C J-TH COLUMN OF A TO A MULTIPLE OF THE J-TH UNIT VECTOR. +C + AJNORM = DNRM2(M-J+1,A(J,J),1) + IF (AJNORM .eq. ZERO) GO TO 100 + IF (A(J,J) .lt. ZERO) AJNORM = -AJNORM + DO 50 I = J, M + A(I,J) = A(I,J)/AJNORM + 50 CONTINUE + A(J,J) = A(J,J) + ONE +C +C APPLY THE TRANSFORMATION TO THE REMAINING COLUMNS +C and UPDATE THE NORMS. +C + JP1 = J + 1 + IF (N .lt. JP1) GO TO 100 + DO 90 K = JP1, N + SUM = ZERO + DO 60 I = J, M + SUM = SUM + A(I,J)*A(I,K) + 60 CONTINUE + TEMP = SUM/A(J,J) + DO 70 I = J, M + A(I,K) = A(I,K) - TEMP*A(I,J) + 70 CONTINUE + IF (.NOT.PIVOT .or. RDIAG(K) .eq. ZERO) GO TO 80 + TEMP = A(J,K)/RDIAG(K) + RDIAG(K) = RDIAG(K)*sqrt(max(ZERO,ONE-TEMP**2)) + IF (P05*(RDIAG(K)/WA(K))**2 .gt. EPSMCH) GO TO 80 + RDIAG(K) = DNRM2(M-J,A(JP1,K),1) + WA(K) = RDIAG(K) + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + RDIAG(J) = -AJNORM + 110 CONTINUE + RETURN +C +C Last line of subroutine DNQQRF. +C + END + subroutine DNQUPD(M,N,S,LS,U,V,W,SING) + integer M,N,LS + logical SING + double precision S(LS),U(M),V(N),W(M) +C ********** +C +C SUBROUTINE DNQUPD +C +C GIVEN AN M BY N LOWER TRAPEZOIDAL MATRIX S, AN M-VECTOR U, +C and AN N-VECTOR V, THE PROBLEM is TO DETERMINE AN +C ORTHOGONAL MATRIX Q SUCH THAT +C +C T +C (S + U*V )*Q +C +C is AGAIN LOWER TRAPEZOIDAL. +C +C THIS SUBROUTINE DETERMINES Q AS THE PRODUCT OF 2*(N - 1) +C TRANSFORMATIONS +C +C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) +C +C WHERE GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE +C WHICH ELIMINATE ELEMENTS IN THE I-TH and N-TH PLANES, +C RESPECTIVELY. Q ITSELF is NOT ACCUMULATED, RATHER THE +C INFORMATION TO RECOVER THE GV, GW ROTATIONS is RETURNED. +C +C THE SUBROUTINE STATEMENT IS +C +C subroutine DNQUPD(M,N,S,LS,U,V,W,SING) +C +C WHERE +C +C M is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF ROWS OF S. +C +C N is A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER +C OF COLUMNS OF S. N MUST NOT EXCEED M. +C +C S is AN ARRAY OF LENGTH LS. ON INPUT S MUST CONTAIN THE LOWER +C TRAPEZOIDAL MATRIX S STORED BY COLUMNS. ON OUTPUT S CONTAINS +C THE LOWER TRAPEZOIDAL MATRIX PRODUCED AS DESCRIBED ABOVE. +C +C LS is A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN +C (N*(2*M-N+1))/2. +C +C U is AN INPUT ARRAY OF LENGTH M WHICH MUST CONTAIN THE +C VECTOR U. +C +C V is AN ARRAY OF LENGTH N. ON INPUT V MUST CONTAIN THE VECTOR +C V. ON OUTPUT V(I) CONTAINS THE INFORMATION NECESSARY TO +C RECOVER THE GIVENS ROTATION GV(I) DESCRIBED ABOVE. +C +C W is AN OUTPUT ARRAY OF LENGTH M. W(I) CONTAINS INFORMATION +C NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) DESCRIBED +C ABOVE. +C +C SING is A LOGICAL OUTPUT VARIABLE. SING is SET TRUE IF ANY +C OF THE DIAGONAL ELEMENTS OF THE OUTPUT S ARE ZERO. OTHERWISE +C SING is SET FALSE. +C +C SUBPROGRAMS CALLED +C +C MINPACK-SUPPLIED ... D1MACH +C +C FORTRAN-SUPPLIED ... abs,sqrt +C +C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. +C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE, +C JOHN L. NAZARETH +C +C ********** +c ------------------------------------------------------------------ + external D1MACH + integer I,J,JJ,L,NMJ,NM1 + double precision VCOS,COTAN,GIANT,ONE,P5,P25,VSIN,VTAN,TAU,TEMP, + * ZERO + double precision D1MACH + parameter(ONE = 1.0d0, P5 = 0.5d0, P25 = 0.25d0, ZERO = 0.0d0) + save GIANT + data GIANT / 0.0d0 / +C +C GIANT is THE LARGEST MAGNITUDE. +C + if(GIANT .eq. 0.0d0) GIANT = D1MACH(2) +C +C INITIALIZE THE DIAGONAL ELEMENT POINTER. +C + JJ = (N*(2*M - N + 1))/2 - (M - N) +C +C MOVE THE NONTRIVIAL PART OF THE LAST COLUMN OF S INTO W. +C + L = JJ + DO 10 I = N, M + W(I) = S(L) + L = L + 1 + 10 CONTINUE +C +C ROTATE THE VECTOR V INTO A MULTIPLE OF THE N-TH UNIT VECTOR +C IN SUCH A WAY THAT A SPIKE is INTRODUCED INTO W. +C + NM1 = N - 1 + IF (NM1 .lt. 1) GO TO 70 + DO 60 NMJ = 1, NM1 + J = N - NMJ + JJ = JJ - (M - J + 1) + W(J) = ZERO + IF (V(J) .eq. ZERO) GO TO 50 +C +C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE +C J-TH ELEMENT OF V. +C + IF (abs(V(N)) .ge. abs(V(J))) GO TO 20 + COTAN = V(N)/V(J) + VSIN = P5/sqrt(P25+P25*COTAN**2) + VCOS = VSIN*COTAN + TAU = ONE + IF (abs(VCOS)*GIANT .gt. ONE) TAU = ONE/VCOS + GO TO 30 + 20 CONTINUE + VTAN = V(J)/V(N) + VCOS = P5/sqrt(P25+P25*VTAN**2) + VSIN = VCOS*VTAN + TAU = VSIN + 30 CONTINUE +C +C APPLY THE TRANSFORMATION TO V and STORE THE INFORMATION +C NECESSARY TO RECOVER THE GIVENS ROTATION. +C + V(N) = VSIN*V(J) + VCOS*V(N) + V(J) = TAU +C +C APPLY THE TRANSFORMATION TO S and EXTEND THE SPIKE IN W. +C + L = JJ + DO 40 I = J, M + TEMP = VCOS*S(L) - VSIN*W(I) + W(I) = VSIN*S(L) + VCOS*W(I) + S(L) = TEMP + L = L + 1 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE +C +C ADD THE SPIKE FROM THE RANK 1 UPDATE TO W. +C + DO 80 I = 1, M + W(I) = W(I) + V(N)*U(I) + 80 CONTINUE +C +C ELIMINATE THE SPIKE. +C + SING = .FALSE. + IF (NM1 .lt. 1) GO TO 140 + DO 130 J = 1, NM1 + IF (W(J) .eq. ZERO) GO TO 120 +C +C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE +C J-TH ELEMENT OF THE SPIKE. +C + IF (abs(S(JJ)) .ge. abs(W(J))) GO TO 90 + COTAN = S(JJ)/W(J) + VSIN = P5/sqrt(P25+P25*COTAN**2) + VCOS = VSIN*COTAN + TAU = ONE + IF (abs(VCOS)*GIANT .gt. ONE) TAU = ONE/VCOS + GO TO 100 + 90 CONTINUE + VTAN = W(J)/S(JJ) + VCOS = P5/sqrt(P25+P25*VTAN**2) + VSIN = VCOS*VTAN + TAU = VSIN + 100 CONTINUE +C +C APPLY THE TRANSFORMATION TO S and REDUCE THE SPIKE IN W. +C + L = JJ + DO 110 I = J, M + TEMP = VCOS*S(L) + VSIN*W(I) + W(I) = -VSIN*S(L) + VCOS*W(I) + S(L) = TEMP + L = L + 1 + 110 CONTINUE +C +C STORE THE INFORMATION NECESSARY TO RECOVER THE +C GIVENS ROTATION. +C + W(J) = TAU + 120 CONTINUE +C +C TEST FOR ZERO DIAGONAL ELEMENTS IN THE OUTPUT S. +C + IF (S(JJ) .eq. ZERO) SING = .TRUE. + JJ = JJ + (M - J + 1) + 130 CONTINUE + 140 CONTINUE +C +C MOVE W BACK INTO THE LAST COLUMN OF THE OUTPUT S. +C + L = JJ + DO 150 I = N, M + S(L) = W(I) + L = L + 1 + 150 CONTINUE + IF (S(JJ) .eq. ZERO) SING = .TRUE. + RETURN +C +C Last line of subroutine DNQUPD. +C + END diff --git a/dataassim/math/nonlinsystems/dnrm2.f b/dataassim/math/nonlinsystems/dnrm2.f new file mode 100644 index 0000000..480c912 --- /dev/null +++ b/dataassim/math/nonlinsystems/dnrm2.f @@ -0,0 +1,67 @@ + DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) +* .. Scalar Arguments .. + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION X(*) +* .. +* +* Purpose +* ======= +* +* DNRM2 returns the euclidean norm of a vector via the function +* name, so that +* +* DNRM2 := sqrt( x'*x ) +* +* Further Details +* =============== +* +* -- This version written on 25-October-1982. +* Modified on 14-October-1993 to inline the call to DLASSQ. +* Sven Hammarling, Nag Ltd. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ + INTEGER IX +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS,SQRT +* .. + IF (N.LT.1 .OR. INCX.LT.1) THEN + NORM = ZERO + ELSE IF (N.EQ.1) THEN + NORM = ABS(X(1)) + ELSE + SCALE = ZERO + SSQ = ONE +* The following loop is equivalent to this call to the LAPACK +* auxiliary routine: +* CALL DLASSQ( N, X, INCX, SCALE, SSQ ) +* + DO 10 IX = 1,1 + (N-1)*INCX,INCX + IF (X(IX).NE.ZERO) THEN + ABSXI = ABS(X(IX)) + IF (SCALE.LT.ABSXI) THEN + SSQ = ONE + SSQ* (SCALE/ABSXI)**2 + SCALE = ABSXI + ELSE + SSQ = SSQ + (ABSXI/SCALE)**2 + END IF + END IF + 10 CONTINUE + NORM = SCALE*SQRT(SSQ) + END IF +* + DNRM2 = NORM + RETURN +* +* End of DNRM2. +* + END diff --git a/dataassim/math/nonlinsystems/erfin.f b/dataassim/math/nonlinsystems/erfin.f new file mode 100644 index 0000000..4fc7eb1 --- /dev/null +++ b/dataassim/math/nonlinsystems/erfin.f @@ -0,0 +1,16 @@ + SUBROUTINE ERFIN +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +C>> 1994-11-11 CLL Typing all variables. +C>> 1985-09-23 ERFIN Lawson Initial code. +C + integer idelta, ialpha + COMMON/M77ERR/IDELTA,IALPHA + SAVE /M77ERR/ +C + 1003 FORMAT(1X,72('$')/' ') + PRINT 1003 + IF (IALPHA.GE.2) STOP + RETURN + END diff --git a/dataassim/math/nonlinsystems/ermsg.f b/dataassim/math/nonlinsystems/ermsg.f new file mode 100644 index 0000000..a23b60e --- /dev/null +++ b/dataassim/math/nonlinsystems/ermsg.f @@ -0,0 +1,89 @@ + SUBROUTINE ERMSG(SUBNAM,INDIC,LEVEL,MSG,FLAG) +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +c>> 1995-11-22 ERMSG Krogh Got rid of multiple entries. +c>> 1995-09-15 ERMSG Krogh Remove '0' in format. +C>> 1994-11-11 ERMSG Krogh Declared all vars. +C>> 1992-10-20 ERMSG WV Snyder added ERLSET, ERLGET +C>> 1985-09-25 ERMSG Lawson Initial code. +C +C -------------------------------------------------------------- +C +C Four entries: ERMSG, ERMSET, ERLGET, ERLSET +C ERMSG initiates an error message. This subr also manages the +C saved value IDELOC and the saved COMMON block M77ERR to +C control the level of action. This is intended to be the +C only subr that assigns a value to IALPHA in COMMON. +C ERMSET resets IDELOC & IDELTA. ERLGET returns the last value +C of LEVEL passed to ERMSG. ERLSET sets the last value of LEVEL. +C ERLSET and ERLGET may be used together to determine the level +C of error that occurs during execution of a routine that uses +C ERMSG. +C +C -------------------------------------------------------------- +C SUBROUTINE ARGUMENTS +C -------------------- +C SUBNAM A name that identifies the subprogram in which +C the error occurs. +C +C INDIC An integer printed as part of the mininal error +C message. It together with SUBNAM can be used to +C uniquely identify an error. +C +C LEVEL The user sets LEVEL=2,0,or -2 to specify the +C nominal action to be taken by ERMSG. The +C subroutine ERMSG contains an internal variable +C IDELTA, whose nominal value is zero. The +C subroutine will compute IALPHA = LEVEL + IDELTA +C and proceed as follows: +C If (IALPHA.GE.2) Print message and STOP. +C If (IALPHA=-1,0,1) Print message and return. +C If (IALPHA.LE.-2) Just RETURN. +C +C MSG Message to be printed as part of the diagnostic. +C +C FLAG A single character,which when set to '.' will +C call the subroutine ERFIN and will just RETURN +C when set to any other character. +C +C -------------------------------------------------------------- +C +C C.Lawson & S.Chan, JPL, 1983 Nov +C +C ------------------------------------------------------------------ + INTEGER IDELOC, LEVEL, IDELTA, IALPHA, INDIC + COMMON /M77ERR/ IDELTA,IALPHA + CHARACTER*(*) SUBNAM,MSG + CHARACTER*1 FLAG + SAVE /M77ERR/, IDELOC + DATA IDELOC / 0 / + 1001 FORMAT(1X/' ',72('$')/' SUBPROGRAM ',A,' REPORTS ERROR NO. ',I4) +c + if (LEVEL .lt. -1000) then +c Setting a new IDELOC. + IDELTA = LEVEL + 10000 + IDELOC = IDELTA + return + end if + IDELTA = IDELOC + IALPHA = LEVEL + IDELTA + IF (IALPHA.GE.-1) THEN +c +c Setting FILE = 'CON' works for MS/DOS systems. +c +c + WRITE (*,1001) SUBNAM,INDIC + WRITE (*,*) MSG + IF (FLAG.EQ.'.') CALL ERFIN + END IF + RETURN +C + end +C + subroutine ERMSET(IDEL) + integer IDEL +c Call ERMSG to set IDELTA and IDELOC + call ERMSG(' ', 0,IDEL-10000,' ',' ') + RETURN + END diff --git a/dataassim/math/nonlinsystems/fixedpoint.f b/dataassim/math/nonlinsystems/fixedpoint.f index 8147bc3..ffe383c 100644 --- a/dataassim/math/nonlinsystems/fixedpoint.f +++ b/dataassim/math/nonlinsystems/fixedpoint.f @@ -311,7 +311,7 @@ call lnsrch(nunknowns,xpold,fsqsumold, & gfuncsum,deltax,xp,fsqsumnew,stpmax, & check,funcnleq1,fequ) - if(check.eq..true..or.check.eq..TRUE.)then + if(check.eqv..true..or.check.eqv..TRUE.)then do i=1,nunknowns call reinitialization(x0min(i),xpold(i), & x0max(i),xp(i),6678) diff --git a/dataassim/math/nonlinsystems/ierm1.f b/dataassim/math/nonlinsystems/ierm1.f new file mode 100644 index 0000000..cf7b840 --- /dev/null +++ b/dataassim/math/nonlinsystems/ierm1.f @@ -0,0 +1,15 @@ + subroutine IERM1(SUBNAM,INDIC,LEVEL,MSG,LABEL,VALUE,FLAG) +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +C>> 1990-01-18 CLL Added Integer stmt for VALUE. Typed all variables. +C>> 1985-08-02 IERM1 Lawson Initial code. +C + integer INDIC, LEVEL, VALUE + character*(*) SUBNAM,MSG,LABEL + character*1 FLAG + call ERMSG(SUBNAM,INDIC,LEVEL,MSG,',') + call IERV1(LABEL,VALUE,FLAG) +C + return + end diff --git a/dataassim/math/nonlinsystems/ierv1.f b/dataassim/math/nonlinsystems/ierv1.f new file mode 100644 index 0000000..9a3d52c --- /dev/null +++ b/dataassim/math/nonlinsystems/ierv1.f @@ -0,0 +1,32 @@ + SUBROUTINE IERV1(LABEL,VALUE,FLAG) +c Copyright (c) 1996 California Institute of Technology, Pasadena, CA. +c ALL RIGHTS RESERVED. +c Based on Government Sponsored Research NAS7-03001. +c>> 1995-11-15 IERV1 Krogh Moved format up for C conversion. +C>> 1985-09-20 IERV1 Lawson Initial code. +C +C ------------------------------------------------------------ +C SUBROUTINE ARGUMENTS +C -------------------- +C LABEL An identifing name to be printed with VALUE. +C +C VALUE A integer to be printed. +C +C FLAG See write up for FLAG in ERMSG. +C +C ------------------------------------------------------------ +C + COMMON/M77ERR/IDELTA,IALPHA + INTEGER IDELTA,IALPHA,VALUE + CHARACTER*(*) LABEL + CHARACTER*1 FLAG + SAVE /M77ERR/ + 1002 FORMAT(3X,A,' = ',I5) +C + IF (IALPHA.GE.-1) THEN + WRITE (*,1002) LABEL,VALUE + IF (FLAG .EQ. '.') CALL ERFIN + ENDIF + RETURN +C + END diff --git a/dataassim/math/nonlinsystems/math77 b/dataassim/math/nonlinsystems/math77 new file mode 100644 index 0000000000000000000000000000000000000000..813f3c86c2048956086b17fff3b92d2c8fbd048b GIT binary patch literal 8345600 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

q@2_6K*~WpC@DTSYgo|7$muu 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

$>U&fG<$6=)`x#a&4#6)q_ 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%0APk)~_G&p2g9fCa;qc($ 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%0DYR~;=fzQ`7Q2$DFF$d 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 Bkp}` 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

sj9KP01=f5SUv{;5 zPxD&nujfLK{@=Uve^mYtlBm}=7W}{U-|PSUBERmpHg^6hp8th_MGt=0EfQHt|C9%P za?8$S{@8KcmuCLBD9ijY+vq1`{+Mmp^BO$(Zpt%%^kN>1nE7L_d1>a4)X03uP4dDe;a#;8$F%d=RjKEx? z6=%~?gbPvt4cD*A5>dqb03``2;&mbtX2f9Y#Z(j|gAFL8>rVuESwf1kL==X6gl35- zLTl1doXqE=5Iw$@i6S&F%|}61(NHi9Knh(h$wU#_hf0>jl^63-WW?^jAnyfLOo=#v zLzFTBLJx+$6D}j@zUa# zQf5frl0iTby!2!lGSn0A$#s$XirFrd?n{{(JPA+~9QF~(d`NgfQ{}mMrwfcG(esP^ zyT3GhgpJm3rU?hXZ1$_&rj7S`xvw(VCyhqP4>{nnBf?-K($agio#8l}xg;x@pMZ2v z4am;mHTU%sgs@yn(qM$m zZQ6xA7no!}C&2{)Qm3|!#{JO~KFRV5w6ICFR2FvS;tQ!Ol(QnHxIjY?+N8L!WEGbB zLWxLcVZ=lh`7)tu$lL5cvNduxHQOHc9d4wFqiTG0%0IsxxoT6*{lmtyMqUA6Av7xL zz`;ac%!9E|hpiCE74u-k)#BMy4Buan_rk}Ul0tmB$XfU|ZhZNA{l!Tk7D!c01K}58 zirE_i0T){BpC~DV-$*>&JE01Y(l5NFK2m#6am=ykKp{av%$uOvV4OdxNLciM7oQ3V z1?(vj3Y0$-5(?NuBorurC?piHhm=qte`+S7fbm*LBtYU8A57*$iNo)5SRn$k+o3z*#w6EMjQ$BpYo=eG}67a74D3amKG4#q#; z-d>S1k@J#BMQYP~dyd4fEkGqyjA?NuOk@DfIkX@1)rZ?#qFHWkA3l5(B*ln$%P=2Y z3`tE-88TDJ(!f3@5CIn{n)UI7ENB)Pz^hi(+yyIhP&=>%BGmQLVpN+-aQ zo=+#BTP-GB0toPp(XL)k#|&{#9`HmPOHCJ%r6Z||y4T8CydP|_vMD9NdNCzHIEyYE z7|#dJe(93`;s{*MJlDN^2D}=p5!IuxWI(R(q(VjU8vjM%jMn8Cqnh705xxxrozur< z9nbm}jC8ZRSH217k1gX_4FQRy>s>U3b8|sEbB)z5RJk%RJH6?mf0$lk5Yk6qpWo8i z4dvy-h5mTe91SI1@&CrDUd{?O3FWu)14|T=5qy~?tTI5zGVWCWxm>NQ_i%Mmy1st1 zewMSB57+Q2zZoBfTSyD=ZNvQule}aRhiOj3{imE=OZXqw*g7ihdUh)QHX)V856Hvd zOZMvwzl0Vorry_8xCi~@=V{e3`-SbQ^&~ibtzXDc6)Wb;}WI+vdg-iaF7kIHmy#$3CH<2h~pMD^wm5$B`<-fH?Q@ zvrv_ZZ_r4Jrg-?)PI&xV4trD6@GU2l29>rcyM>-{$gTX_LV2tBt>s~N$Qz50+j-me z;g7Opq&Go-} z-R}Q3evkk9In()*+qjG==zq=$Sw+7utK1~{D_7X6*(3jdx|>{cp>1+=d0Wjcxo}d= z?ry%bnMwn$aySmVi`wJetnDFyXH`Dm!?ngce?f4`){ycQ40WM4kFmT*GN* z-#y$=2nkSXv`bpybyo?OK?aXM{fXzdp4IEmYK<%qz=O!T$_qwJ*WLJXU9R_sn~U+~ zA#If2E1>SW-<_?q%ejz;I1 zFzL(!xP7myl)4vqcY7UZU>EvOBB$I)M1}lxHx`)|a`XRLEBiBtk+#D9H}m@E>5pfh z^a~{TrSiZ0k`>79zqK`{^3P|}hig9j@c#15eoghDP_&aT#&DQ+>1-`|~ashI0qe*5;aa$kL{ zK0eX*qsTqK7JSG3PH15%c`fWfcSmn^8VEo4LU5iizxHd*H$(+o1%*}dI|jLq&*Hw-^Io$k55FZ-b&Wxid^wydgcIXdV9?+Xbcc$>GI(!jht+E6D~)Ob=_S6 zh4Cj%=Ghgr_)kQ@<$pffwQ7Dp3Ab3UIf^=a5BKT1HMG-3z}ttZLx4tc0_{pS*VWE$ zzE|+SL5LTdKiy8D_z$|Vn(a8HB3T3WISDQ&pSkSIm9Cq|I5g47@d>?N>E^IyZ1Gq~ z&Gy;(#|ah6W+ySu8Fym~Jav2b0owcx2-92Um_eM0vF_j}PWCRi)_&m}B5paGa%F*Y zJZ{26uCefS){OwgaJ$)$lpu!9jHMzA3i5Oeg`xSCE^3FH>?Onw)GL4&4I^!Zon5j9 z#`KKIy}Ua6pu67QlSV1tv_E(Mm?8%_63lkSpNOuv8_hS_M{boWw+|75A9x~#B47EPcxNnT z0|@{-+Ds4bZNZ4VAadvpE6M+kdNkPk8zuqRvu!Fq+14O)WCDFowy7_kZ8hYQ|DC9b(zwVtqM8O}f#wV8;E zTbRNm1UKXn?GTXj=nvfUR$fdV@NsF~hRX#$xf%H^$<)B10J6Qs-Oz6UXW7AL%Q_^c}y{z${&$t^y>4(UyeKO@~rRcr?^aW{A@Dr#?yx@ zJ7c$uj+Oc!F~1Xpb`C-O!dGiQSoR0;Syl<_2UH4@$&r~Ofm)Y$Wutpek+Otq=t+ql z=rCr>a8^#lokc#8h$uk~pz6c$<#sW?VQqbPc7FSQg02J2cbWM25CX*0#|eaEJ_|n+ z-2J_$`zM&E4qNxH$St6y4!?qP0W)bq zju*ioC@6$b#nJfBZ_$Xw9x?bwA3EQK-V31TRZ5?+jLJ=x zHH5)huacfDPi?Ld2I9d0Yw!Q`z(o-01ML4lPEY^~TaRU}Q1T54fq6`PUy3S&?*(tP zXXwc!cC7Cpi=tSlX8#@3hW~!vg3AYLa~AWONJT<}x*LCZAo0xPZ>}EMuEwTTT%th& z7%MZpFggQW$G5evoDntA($rX?mG(y4vjXE^qw9@7O$mT%tP>_3Zx$bWMcrH4-T9NA z5hcMVSA@x|PgiH>o;rFK=YUV%CkC7;6nKwOnn2O_p1Q`7f4dA zG>EvMSUstl34 zu`(N>37@mLuazuX9Kf`4<5EJX87XjDE&K~nTc^3vl<_wkP8 zL@wz9U&N$6F8J7aOgl@4S0ZDSefd3U+n}T!@y1s=x|Z*^QgD=iC$uh@4d^K5){!b% zs>KJa!C5S98$-a9BP-J$Qi`c4ejW8*<&RZVIb#Nr0)?()acJQA#-|-H-(QtI2ovWjy1~m=QSf#l;6>9^-ejJijEBdc&&TGZD*C)KCBj3>nc=-NMnvQKfzJc(nT_-V;srVK1DiRXp11)a z%+0Q@)NL2kEY$Jt%0J|Lp4s#Mbg+S!2_Rc{#Qcoc&^Tctu|RaExZPZFA7V64eW0dT zn2izBQFbZexqcwr8EuwRtDdM84Y#7kpSlH&Z>3mj^A8zjt2oTFPoKtT z_>Pw8JBBJj;>9*%cH2=+Fw6CxTe>2_S+>)qeyuN)wzV`d?H7 zMEfz6OgsYU{gB`?8l}cIQRW5Cna2G%@WAY^d6!9||LkM-*Gz8}_GfpK=*ES)SiszU z^Et!4lr-Jn8B>ujiroB5-m$u!&#LbkEt|f+>{!T zL-{+K9)|NTt&tSKTkCXR!%_fFXkMGvh2A!1dYjXy&48os=Ov!i)hb7rQC1bGuGKNG??!eAUL19+ic#9mBrKgWPV(J+ z)*>I$U0iO(ZjG;lNG|jbZ2Sc0-xqwHp*i39tXSpJsBP=mSS}fm5EOT1XieGJ3X3Ni zu5UQTmm+m}b<5Vx8}m>VFo*{eIVHkK3c@>eFt@fM$3}_?tcyD>pdw1FlzEI|I@W-I z+MYO@_T zaD;MuKCyJ&Cck~I>MogdfZ*@k|HQ~WeQ*)$;&GwG8|NX$e3Y-_lEJ=?M_C;TA(%|% z@zoTX=B6CpcW391@Y`XGL13qfnZV)Qc+BoqT@C86|KemX1MqA4E~BGh)}5BGTX!0f zbd4z}stdj@Ea7wzXTm%!isZ1_8DE~+q0lsAIP-o#hoak*0`Jlfj$r>XhcIu?u24pA zlsm_@7(335ox=wq!lTsLw>@~FtkG-P@fa8R-5KsW2SP`F1no(%t#cOJ2h1S!>RwYtPDz3+hB%`P6Uukk`h*0E*h-4LFGK4yIxQ^PC4QZj$G zVCXe*2OUF=h3q1CF|BrdaErO4IhWS%Y^Q1U6CcXlRpeaI0(a2#vBF$-{?KK(Lbh3fgoTLK3phD0$F{zfn7 zIim@BECCl`Uetzvwy&}OB6&=Cu{uwV3dyEb_;<^zhimzPR;9wsdMC)m8rRZ}p8Ghaa>R+Q={ zWqg7H!!msZd}bL)bESjY(QVkXgvHbPAMKazr12EOR^v49FA@l1(LMBr{c|RaTcAU- zs0`!lBBo-iYgtf40^m|F;P`Ok+a7+wAYZ;ot26euIc7VU=0}mp7Wb4mo#iZ9LTKNf zazdx!7LY3tdQPyV1D0^!?D#<1aM+@bMO*vr#MK@-PnbeqVKVQospgTyysP;s(j>|y zxe*FYZOMtpOy9B{a*ia)X{1&~d0n~!zw6;A@f8#fV1D8vs#gc9J(zDdw6`Jw;t4yt zQap(7l4&6q1{Bw{bG5!e7o{1J_@v9 zJI_avX^>p_qn4boM2p`rNz>E+%%+K}J2!z@NqNtLw@xCL;M9xFTnEZGCW%>(kW0>1 zuj69Eq)5CNM;LUSsN-b!k5Wad#rU?Ul1{^ImlU692bJN&n0QIS=n5}abh&m+qKT^( zWUk=ytI3a5i!bNX&~DgAIWN8l45$)Mt9BmEu6O4Z!Q_oas_PSrZBH@nA;#Sngd2Jb z1Co)Tk~I8MAI=SUz|T+o;$QXpQ}ssd9J)%BysImOpgOg9?x_WQPc7bi zYBAtb3;MPg^eR7z>*go1-f8?(ivZ`RV!iFPK-bX4`^g7*p?dybp)>fcs)be6LJVz5 z^Ee>ahVL&`7miTX0W;p|^LXQ)*3YFnhwlW42ps+nf#80Y?+ZG`o%_bZ>UHk{T8N#h z(?%+*mTTB}3#u0@*HtB7TGCBiyh)Mw$WU~M;FUG4&Vz8g%7%#rf^Mc01wx1Ykp5FwQOfc+F!LeH&6~A~W<;bbzS`ibG4oqQl@z zaD8fFSP^T6ACKT%b4ZAbW1lx7=J6p5g~D#RMWp==Bj~?P%lPmApS^c&iX%z3Md$PU ziacX>hF5_o(6jHYIfi&Ol0Xcgmaf{`t|35bx)Eq7XsP#y^V{!Q%iZIVnT3#A(|hl0 zr@BQ|Wo1N0czF2RJzz3)Go~7lpIdhT7Q)`fh%%Gb+_s}-s+Q2?x1*6L0Fv3@%%kBe zQO%GNK<5Ev1%tN+Jvw|dp4Q$9N}(r?;I#PHLew8I)U<0T8R09%e9;AHg$vVavT$*^ zU^k+A0qdUnZBV)y+W~jzXqZd-kXFGHo9?j^0?Q8q#j83uEJLp;;y@e)KgEGLM;83h zFL{M1Y?2qgjj76!9lWIJAF@}E2ApoDx*H)f*9enilpOhGNAChcgdvd}@eC2lc!;eI z=1$@@G6*1_@Tft-J6Mr$P84x6+$0vrQ^Zzaw6^kiq%R@{gys_Ny&_f$Yz9(@<;Fwb zpZOD+qv)^q*M2RfenvIeWhD8+BJs0l`=a@Us+$`ixmee4qC1bBHERzgwuz+0mpmS3NHu+T zaqs~3Ncr#4BG@F^B{EJ)I}zP`dWq*kQ-Hzh`0_&1G#-rdVhllI`CW#zA@9Z$Z)}4x z=u8F;H=J@Y%^F%LZLr;7^$|d&Bl-@TH{gwmh*UJBBpWTEnHRa=IX7hfpbdI|!&qbv zqMi;82*A*3t3t*TimlN~VJe)IZ^65FLlE=Bm?Jl{Ab!D6yf-IDhrp~fS-{cksv1Nv(7YEi?bZ0x~4?hKV&UBE}! zc!kt(DA}&MJ2R57;0R_H@6C{RYFOJmtQf{@M!H7OB?S@bv6v|S7c`K{ac&V=lNeVE zyDAQ?npqOmnCVmI2%0FRA7#%oH+euop-(!H{La zq66DRZ^ZRmalPvgJi$^ckI)yk)TDFbmkkUJEqhLjqkYZJQ%Hnq_F8VsEntWkkAj5W z12Lk{>cG_ydZN;f;KA%IL?zOCH&VdXeH`ZrBO06qZg>W3yD~|n!V!h&zLT~{iT!jm96&HmG|xdlC*aRG;o^P$;q7N3M3kKQ0MX_wy*MbrbHpzMF zSfv#mOh`Sb#v)`JAsbQ-G=V(gYeAgQDlI^XH7P8HTbSfsyy4@;`4rDXM5|-?K7f6o ztCnMx$tCRJmlvOyZU=iGEr&*5;cr4SL(#)`u;zhAV*s2C+%XYCJW#Yv;D8oUqQL{SkBgE8d@ygOlb8BZ zOZ_0hN}X?XRN;Tgp^x)5!rBQa}SI z$0j1V#eOrYz1DNbbY7(MvTNR!hm!ws8mVd>tifp{t8M-V`oQn>Ds`{3c>h=rn9 zAtW^`0Sp-@pD<)FLpL3#$KXSBTtkm{n22z%T%1bu z!t?Nql0h`29TFK%T5i|sYFrFLl|fcjk#XoHDrHg|SIgZm9^IB#k_`AHPz)n!BbiW4 zn;hjf5(ztUFRai5Y$&qMAb%-+S&Gsp^JqC6Aqi4w=neuq(GCv+Zo%S%5gf(zs(}LWI-9ErrSVJkZSE3wO*5^;Fo#(w-Iyf3+!yUJl1B}VG%$Fu68!k%$ znQ3H58D+LgGV62dM;QOnDPC4%`Yux%&QO*c(pLiz-vBzI`}0sXWWz4 z7z05^!Cfz|2FDN1-*?kjcx z3qW(w7XK>M2l6fxdvMkE9BpF3iOfB*zfSYVIe0weQnofMUij<(NQd+Op$}c`t_&4G zQ6A$PVkEV!L)gP&jOJJ5=E68lnd9E)I6FRHlGHs|eUL5A-&+=?z2;k=~dG4rJk@JdYOdYC>~dY8ci=B3pa zU{9XK!me32Myr;4nzOT)vG3D4nk1!Uek>*wKY}p&4V)lWeTxdYhgpHi(ov-RGRWxX zC*-UMjWJE@9Ow<*6e)oa8n`jIrMN@If+4b!7b!*Agqsgw4`5aZW{qML;3;Uw<}%lK zW^Rn%$T){ZW^+1YWxHkSZY0uz_QLdzfKmin@*{8Mw@^^nkx4ZdAH9oezwmcS$%dr` zbd0Q@&W!L2@D&ef|7cg+0$E4)%6O@Lz)_eJV%8+{Q}`@2hhdf)SDhffM=aDSXkFMx zpld*l^yRof@T6O`0b@uAQnZ8KaAxt+4Cg_t?(|I4ltX$F1k(9acxRys5T2(c8=VS_gvknOHDax1(&aw7ZJ@g4^HAxuANiHO?n3*Yu zb1f4nA460DFJ{sX_1!9^hr@piL+rdt7f9>m#&Y=|xR+&SvDYE(l9ZMQ!$INRa5_03 z3uc(mB`D>xpU#6U2Qf)>I-%a%w=ySI#JcW&H1B(ogDT)d=1RNu`8$Ybxw1jHoup9H z#wfNGqGMhTN=Y>L_01AwO**f*qVdII!ML%0xsj3B1b*q;M)glOZMYT`T7)TM4JJ`Q z<=cvwzV(6?b!2nMx28lT5!c)iVQqs>r-&Nv3^-Z1)0rP58dNK>0K`1D#Q^1t*b5!#f3P(_e;G@@}CW$^kLi zTe6FG`xUf^4|syb50%sat+<;su%Im%(mU9ZARM8GH3WS#xC8yr=dMT5;@9;Ou)>yn zKHPTJ7aCQ$z*t4Sh+c?aAcEbcN(#O7dJdIBTQUpr7bf7ge#$Ov`)Ndo)^V-YWup+2 z;`$Ppp3_@)r{=+%^bLO;*Lnf`idiQNv_K_9_m!wK1bHC76B?r^425zvRnQ2e63oDC$3lKc%sBD&_m*rN zupw0kwpbwUf|t{fyo5A~{msW42p&E?7B@J7{Zc+QFesU}BWjL)tbkdl@`BlpfSBAi zClb;ruEo6|<2=_0;=1X>XnF)872oCLhoi=bZKQiQHsFnY7A)#qYh$BO5#2b z*~p!lO9+uj3EN0KKCp2N`TiEzXzfrk5-(>%3CGjnY)%#a#~(6fq{f)x3-kYRUZN|a zpo17xQ>@7kkp*uV`J(p*QfxM9DR#{_i! ziI`S>%8~CJdvX;u!NF+|CpU`x-+U-E^J;6l5~td3+^U`WL(E9RLcpkyT!@nH1H2B% ztK+W%G`)C2wL(vB01&awht?C<4o$ zVfIptFUWWdNny$&oE$<&*M`xQu_p)zhdEXDeyxBS*amSU7DL(mRgAf%K6dzkEa#ye zlJ>)p9-5(}tO5F{dCl0E5|{$8w*A1f@e~IIY@tvDZ306!5L+CCdv(E%^H2pJR}nPJ zn1k7CBkXAiw@X2Y3DV*#+i=eRMd)%qnC=_XW!RDPtcmOHE8wCSaHCLeau9rHJi7V6 z=NYbu6Gs63S;Y~&V3?ZI*t#(g>KNr?o771x*Cf1hJp(1>aVF}{l%F;LY(k|1O4^}& zB=Op=8@^KCXlonEE=YQ*r46Tjh0j196#VZohMW$Svjkk8e}7#X{ZE%hNKcmk=$Ee>%igh-&xT5_Do-g!ctVxOSGeDj9mD$up!DIj)fR4n7BpEu2E0jJ%v?bzg2DJJtK@{e_Tlh9a8gJ_aHP!# zc4jmZTS@AqOxxI=vOd#$Uv-y)3`RY3l&B zXM%=H$5jHo%vxE@F$Jv_$4eazV~_z=qo*0k+ryJgw{wob%F&h7F{8#OBV;v=bsca4|hP}hEybeRDm@^iDATBT|EB#mux1DL6X6$B3eod5fU3vDbQHCI;B#bT0Um{S+ z$_I{@_IfsM!$yZa6SW&G|HIIcRUtbPs}B_DszSiTwIE;EM%o&MtZE};zGBNp>D-}Z zDaTsLwnppV;UBV-qtwJ7x07>4zKNZD3D&Kf?Bo_ek}Tv!wy zyw$~5jD_vp0kim5I;6|s7+D!@ zw};~zE*BihV@a#@yf6v#5=TemA(LRrkY)S1<+1!E2aI+MeyPjnie=(s$^6}9oQji zoVi^F7{sg*rkG_k>P1d!lFN^9bSA}vme8(sXo^DKDYhZ|g9Yx#4eQtAzR$lX9R5W4 zgjGd2ezc-Ug^`h><*87BOc+MKhzoc#aU<{Y_aj$0)2gCS0E%arx{6^wkf=&7d30kc@xH5io`PW1jsd94R?GgJ{Oh((DtIo#ue?iI9s41;jta z=r2#a*pRjiaS?qh!aunT-dyv%IC_)eFMFFj2zkbeL|TFgn(R=<*)(;6-ze~M;eyYS zU0xo$>t63&?3=Gb{@WE-n>b(MSh;qwNa4de{|&{#fpyt`>16zg;V6&-A${~hx!M4* zq_uBR7o?A}>>iNzF>85g3w$^{RZzJP5UtHd4mmsnQ!---#;-Agkg34bb~;j7iwf|k zW4PI2|G?7?TzR&dno!0Eq}49R(zk9)vvAuh$ac(VmtFPBflCOKfMsh-f>j zOBy&+T0xd(H5S*G1OWZ<-?ApqPZSFSoDi!n~B zk)@OJOHhUhJx69{7wBqA4_K#3@} zSgw87QDKI{4e*zNVfb?!eOE@1&^JS_aT^T<#-EWTU?M2M-J^1?o#5abXcJ^;VXL96 zqHqD#OK;n2BttS-fz!e=13c+e|6Zh9RHulq_2)l za#1W9US*|H>_I7(8OdU}7{f-r>It?=((P!MFii}*ggZqituVH$j_+4$uI({aLA^i` zlSl`EXr=^b_V2Z({6HndN}PN;IfBuQ5o5W42@f8)9v^}tLY`o?3smgIFj5Ztr5~XJ z^?*hew4G2d!J^SfQc-86;8(&mm}pb#EA~IT*#O$RtPoCQj1bm3IR8i@+GQ7cud4oJ zs-3F!lxjy*>sboc?bUj06B(gX{Q$pERv3^qBNta9{lT_kY-pSMq<-%E*6P}}+H@yH zF|8o|D4+l9nxRT=Vv(f&)hA8?Sfmj_Qd^Gquw@~d)JwNhfk%3Z>@_|*&ZG=fv$>n! z%0p2w(QY7$xI3WrAkDHn&(c&E{Z@p=;!ZG&1Llfpf@v`e>=(+jbmsZVJLn}m%sIN_ z@ZX=&=e4+iVp;F6^>OlWhb8^*+8o;}Q>gzCGL#vX5(Yw95A(b2VpYp6B2zHAbPR|V z%P~7rj?>n*sHK!l!)VIH3-M@^?4x((#$Mt;`gD}VEGuEo!4etTUtV>YKy$~bTW`NcJ7QNP8baEU!3aPV%LGVT z2WI}wz$>?mkWSFC(4y|fXk%0&21QU&8^_Y_Hy47j0g&8+5)j2quuU$C8~5$y#}xVG zX+Q0RjWn=FX)Ar@{+%2LAxPO!9%PfpWL)}VLn-Td=*g!g5Ev^^!yrLmnDgJ-%Qs=E zLet`7Se%AzfHLsJC*-0Aw|zoFHA^wza^Coa9CUfhComEJDvFcgxH!Z_Qm}ky3A{*3 zKxKWF%Hp0$A4uhUuyU%M3EGjQPn1Qvqy7CZLuHy=Yyf9fi4k3+! z$$LP5gs4!(#~Mc6M3aNPG0+Ta@|XYfnh1gIm4ojeJh(G{e|EI+cH&)s?1x3X?%%!p zm&L{5;)7+rFAkTNm-)W9xb)y2GMWD}T)KB}@xi_2;Skq{OUn=L{iRv_V~@REYeXue zkWllNx2M0J+|&YD8}BGU-gM7@!{2Np?!S1vhr>;`cGjEy?Psft!)BWA8=He>XRtlk zUjOG{W$e=Aci@~eG%Id1erOjF&)!!`~^S*O{)*IU^uRx4m;s`DN;rmPa zzG?4O92)%QGtKbPqx;P&N>zeNou3{e>JT;St{5ePoqcd}^z-?}*~L3JLv|0xNbx;C z9Kbe4Nt)p)ds~~|AMC^ZvA@3e!}=O8KRzVY2Mya~5y^AWh<#KS9<#D@vxiEHDsi*3 zvj1Ry5q4Th<($9<&Y=8GFjyeL#A};JLPZHp6&FHQGMa#ryNahgI`cwK#76 zwt!Ql7yd@7{I_O-AJvMGn_t8%>Q>uU1%w%8_CU^Nm171xc*GN+gdtn&<$0JNx!y74 zy_5HV+i`=nb7v_JhZtYIzgobtyvOu6Lfz-7Nvxt~{oI=$V)m`6s~4L(IPnLuzIqe{ z97b_ht%ubp+~|lR31EPzRu3@yvvl|3Qgye%Ng-bJ({4X_0K0oMSejqFJHPb68mvBh zR$U)HXzEMLytTfB4iGsGWUB_%I=UoP)K3FNGXMpsogX=z=Nd!WLT7(R#@y3p{TQMT z*fIj2h^Tp*xb-fVCfypt)(^u+t!@F8d+PA-YJqa7$m`wM+S@;Xm;j-{iqmsPajlV; z=ggb z!+Z9#f3uDj@7r(Q!z26V7az4cT6|zXKeUeQZD>y&+E9kL1(b;P0lrqwn9T$n9_#D+ z-uCmoL4&t_P}eQIBX|yPxPMhQq#W0;{@@Rme0+HJ4yPqu{ro?K`lY^4zI5+ z6bpefBq+r5m8lu`OfjGbpeEV_E235BC#d`%=r4}M9*xmazK)x`kD>^-Z4}!?k2yG+Kv+Q)h};K~=BZV_ zN8MeV^#}e3%7|zcJ7ijY<9=P;UD@+)ix^g+C3GSN#>5l&0D}&%uyggz&1hO9w`YnJ zz@888F|J;iSgVpW3d%7DZ!td@K z6eHhF@P2FFv1~;GK)B+nNN>@$w6npJ7T?E4$NIGF02&-*%HGhi6{@%GXjGH2T6r-_%T~Kxr8Hv-E(E=QD=Lsj@f0Z z4ba+`qUFAHw&;$AU@TTZJXNcDb5gC~F>*SHv3QIX!Lu~~g5Y8b;&9C$nc*pd zgL27EZ$!(v@u5M*;u&Qz84)aiy-;pVOm3lhiSQ6=7=*==AK~0kt}i521mLUq7LZzT z1H!C*U?0k2SaoIrjr@q+WPXT6BU%@~KL=&gZ zn{5!>7dy@L>f$}I1$+Fn{XKA3TznLyU-v8VmALP2Vkg#1z&aRwSrG*5;4B@N%tVK2 z1OsBRpE#|++b&}+TcF4!;)j$yDW<6QyN%@S$wyF}1TB_EDjr3Y5knL)#nj};Zr+bc zC!2p=pI+%8W0ZCim7=6pJlC3rxP#UucXoQ@%K;7e5B^8V91HvS1mY}~XZ))zfw8P4 zitQj$SCRY$y)Xpya!y1_=$MR87E#tgtmyZ7$jRsGA#jLAbegr@roPIH`+m_UxVe4+ zR7lOzhc(iUVftzxjIel1Vi1(^&Py$qT9=JhjL|OH8$Ohqv@#yZj?t z!js^mT{(cPntzN>d?r+!`lXgh>s(u#{LDTa8uAb?zE;+rfOpqj^P8U8heN}_Ask>n z`I&t<1Yf^Bb8Bbo;Ps0M&+Nk?cx$cY(}N$@SGx^uw0$@<3>?~D+uG|{6l>XsL&Jna z2kX0!d+<*X>cgR7;Lz*G8=E}{Z_n(*p<&?A#wKFEdM3(eZfv#yKup-!bO@0&iPu15 zCEK2#|A%g8OGR~-joFfxAzdq5QunJ`_F>-=uun939U?*xMgHq5Z5)!=A!10LhANFS zsO-E1@(ZZ2N54i$Q#uWcdJ3(lhi6CEJZY2Nkmo{thD?w&C6py_T^y$&P$f?8G%)%x zPk@kK{5Y2v?e6tegO8)hT zW46_8emp(@39dOXCu&cbyOFt(H^b&99R>NmDQ$(OSawmrTGoG{(=^0nnC&+P4Qy0m z=d{_kUU8P?PWPuD*Pg$4{A|71-CJMX+TQ~4gK)Tq(>Q->UQO>H$dWzdLw783Jft4# z9VcT6FqkVq3kp{(Y%=xwbT#DA!thYat`{GuazZ|*<~q(6o!@{67YNzeoW=mD58_df zUu2as9Psf_+k__gJLVF?oQA~ul=7#h<5@AtkFdVEaF~be9pOm?4D^Ks$ZTep1@wJh zV~&K%wPK1S%2CBO>1xz0z+e`Jf!sD7j~Box`>2|~MUP3u-=b{_dlH)qN`<6O%|CXd zq)98>p2OcvM@lNc<7J*Dc5}x>)*O~+A8{1{=74M1)@&tWe;shsX>DK-b5jdv6-8r! z{bwiV?;wfp0F1o5*bH8Yh^Q;I%ykfUd3Xj7JNJ&TlWXbY@QH9a=}K6AzP$|$R*2~I z7%QTh_FmN9@$miiIZYWc6Xk`WO6Et_rzIW{Kc<}I0i9t*G=r=?3jQPP z0+uIDSss3BP9)>d+(K$#0wBjI8-PmvFyj1POn|ro(-p#fFa+amL`9-66y7t0-mn9x zJbL)!=>VJU5k9K`fcaQ)yH$vHMylzHqELlCx$0RI@EI19poNZhb_2&z23kWv9 z+i5JYJX!#5v7;^11_qQseh@Gg-}ONhC!xU%6kF%y7`2uz3*5l8wq{0{(iUoV!KiR~ za`GRx54Yw)dIJ$Ks5ah=1A^m{=CrXx{ll@1l_V+|0Qtc#>A4LsODntMEBnfkpNo>w zKgN<>uQYg3Rb&K|puc3L^43=g~$j|j(RLk=v( z3_RihgUcL=rZt{V2xP;yIzp{1^LKr?Kti^OX3;fH$s`(Kax_EIu88FYwVV!d+BKbM|5RG z$~Qz;{_>9W^xsg`U7|T`HkyMI61RWJa80JjkPJ)$Q6`-EA%K1c>7B>6dIKY|<^%)Q z(uWS*4Y@53&L1A@5u~_636GkzwF1P7zP)+z1Vxj)@cx zNx0-)1oun;={S~zsK77O<3JprS0F&Y#J@_5*xXxLo8Fii(f&MsCAHcw|H@r3LW>n?h?ZOdf_YuNa& zLCY?Y#E5sUz!Q52u%8aApnWdB0x5YHIl z5NXN{s_tDE$F6Ib*ojOgPcq{A25u&55%gtz4X-rRRq#wa%Y>E04GoY!4X5X@5I#K! z83(%11r&Zzh1prSU+_SzeR&5)=FNBJGl$Ep0ngM~poujUTb&RyGNRob(4-hRMm);z zq?vEvhyYynAr`P;x4|`(BoKBAX=AuF$8RYzorW_$^^Btr{nY96i&Jb+P(cDS*(qEp zA&a1iAAG1e^nsXNo7{&j5>aQ$p==kRG74&wm&hE97%^_gVWjlh24L8_OQS_?%>~=g zv;f-1VDpnp*ceu$nuUBS1e5%Q*$q38)rRni3Ab$N-th=dUV2+*d3MblzQE8p`%s@Y z5T-PHS051{vp&0|kIz>24}AK&$$fYZzWIhme^7fJ=Sww{=b0yDGjkHK{w>v;Q0opb zar)Y^XyTjUAtL=4gX^p25E%W|E=SDvUsxx7@l)cNX$& z;Vd)%2EfI%LYtKnRB_x+Cks!_B4QT=K;{+2r<1Frn4thFUq7BmU-J+?R)lMC!nSr? z{BsxtY2g*F`PA^Nv_r4(=@3Ww8LSjlPh3|U%*gOCL6yTmgc(mpn)J|$W2fl=!xpfY zdZ!9`eW6KyL|c&Z5sNXe8zb@|J_{T?`mVL|j=vFUx!Ru@-M3kR~WIIw1luRh2O`7$(MKuzxg2j=p9ALpyQIROXPojlF-5S(Ak z_pJ->hCO9=HjnlmIxlP~7k@XZ|IUFW~^04Z(KPw?v zoJ~0;cJ2WwQQ(gFSfEwLc-Jz`kmhVbKQ9>}0Quf!5IGCL6Ph2vW_Et6hjH(_yK_eE(r6Mv z1Pw%Q`YH)o+Y0`4?#9j_AS=lm;TGF%uz4hQqJ7#sLJMQ)d}6x?og6Dw&qt#BLwRyh z96v>DK7NKOo4A0X21%F$&VWTjHKs1Xfs^sb#vg~@ZU2NV%F0v8&YiGJb$0rA&41#>MnNF31D@bZVCY(dwi7-2AS#zc57i~4JDAF zkD%|Dhl~;Qkg7Cl_MqbyD5k~2nME|rO2D0^#Wk6rN zF>ZmuW-=+BOo?kMY>}K4hHTwGW59@KznotBZa4>XW!eO}i$teP*?=2~T5%~6p!M7i z+G7n{Jv_bs`F#H1`si1nS!gJ3&th3GDnRXy(1~@`-j*CupEg{{ENM+$h2lno-w>3@ zcnN6&$N;DSVl6lih&(n9mzpU5gwBZl!2Lv{8TMspNkLY?`j0M8<#HpIL3I-}pWOl* zZ$L&g7b-40Dh}_@?%?AN)WTS-ZxLXWwtDqp&yMVLT@8~WQ^!UyBBO99(IaT)rXWt_ z@ugXW?MC#fPt=`(b%lNk9RxLdj-kn(m)*F<%#=|07Npq4@bwHvfAl^BDU^5sSvQk> zjV-wrimT;A-d^>Syy7c0uYX{*;uFi^@trUtA-P ziboEZ9!vgkgizR1;^vHc@uD!^#wvE5JCWNmaE)3?0|bKXnwoMzet z?~o6P2w`Z=2KE`!6En7*hbPv}ZD53X*+F!!StXWWcSB}=R)cg1=o=JGi|OEb$}jL$ zazrGWF@FXzpiU{0#hIqy zPbfeHkDuFsFzAmL*JlwDpm1$P%Ld&qse~+KA7RW4#!GC9pkTzb9S~UV8sX+ornAXm z>%mD&;v|Vf19U+|2u`iZe7H*YHLQt&P|8bDBHg5X^*HJj}z;7UOth%q7);obNZ!E-Q!7adCY@B?yGN33$dti}h9qZ@&AbB!<|4I6$ z`+=br1GwAyx6fUj)p`{+%v`qZH9NwFK-CY86s2ZOB1&lF%NUN;ilo}E3S$c0-{2CU z%y4AGL=YZ8lc>HSSeFRa6_~48JIxs^O!+@wV9mic3!etJ0;{)uxVTLAGAs^Wid%%O z8HOIvf<)VtAIP+DauDpG!{q9eQ%#rCB!9YYQt2+Y1K^y9)y) zS~5%f>UZ{@5-^c=a*A@nNEf_<^ZhD_O!~c9eZ1T}T1Sfg`uRJUhmMmiG6fob^#`w~ z5n1298=^#qTiAq^O7nmAvh~vzF!eDuF5Xa)Loc_`p*oS$>b95-y9or}+T>j%(tHEu z=bLP~AS!kh7u%i4MuR&+CivGj1#6%@Wj8PI@8vXx287>wiIm}H>(%3}&2}fR_~h68 zcYx76J=l4^#~tUJ4*O3gS8oNPd1f>5zbn%O!0e1lBVc#o)4}>SGN!P_@EM^K{L4QW z3W^|Dv*c8m79e0SMy8TI8lU0h+S zz8V!$!>mMBV5q;eN@mf9z@3#4#3vCIo=)F#m5?0@5v?#Y@R&GM9!y<(tD;mK8J}fS zPfr>3nBx42J&S{>Z0KO`U_w_H$ft!{^K49kDj9Ev4U6_*3D74j`*=ZC7fVv8o@;95<=jX*~-C|bVQFbS1D}mM0 zN-W?&ThvW$&qX#D`26yAMKfcd4jYG*diyq1-UinByNg0uiV)!#L7rjZYG7Wt0foPC zUmB?yZEeo&_}oZ}u;J_nE_PghJDS(bkLH6-nnvBr9KA8;PRM z!Lpbyf^dzt*7EnwZFGH54C)p7*+i2V%qIKY$9Lmx72t^EI4>2JN2qg_s5^%22+!*| zHByNAq@@ed6+WZy34M9Ted|D@qc21Obl>7Ejv(rPYwG4*y^d2S#REcLQB-A;3CD+T z5!#dk$r*6TaEFfkm&1~ln5xLgda2A7^I+o267p9e4^Sedq=RAsJ`xQ8BBI0T_@Y75 z&sIVWOwfi1glKRceOiK-jDCY(bzyN`su!^!y;;$~8xtA<8-yFOipimSRbD)KUSh};fO>swC@%Y;2+EpPTbGIW4c<*1$vc%tfwP51%%kqPQSf38bE31gz0OJBL?oKqS-U z*#&9@QQgH1NpOo{7}5Q^hfV0TB6`+Y>5-Zey}VL>vNM_R%1=-B&N7xD|15~5N#>5Z zux86l2Gmw`RE#mnpW`$Y7HO=<8N|6br9iJz~yNTA6%Mg~zY;`-G?@d38p+jXYCDM}+S2t#cz{^q)8;n*yyEpu{^1YWNCv0yxo*gpJ^coO7Bg-x z2go)wLl9WFfwd48E#r-npB5=_OuuAkECG|NIehgtOAR^P?rSYO2t`m-_5kB0B~VNP z9rMWwhDorS&F$xF>kNI07{&JDTRB?B%>ZFQ-JBY8TC(&a{5}r{ULE?8iuqcS-H)ov za(D(mHVA;pP!qSNM;kw|r1}qGYDHa~m$Dx6C`r*x&H1&V0ej$gJ%k z5I6`uKC?@ssTDOpFvBB%tw59pIzN^fJ?#TJoIF%Z@MwAJGKQt}3 z)`&JdK$(Ud>n6#!OC?c%0VjFFCkayJ>>fMeqPZs;i8$?X5p#&^Q3%vzX+k7ZPE|g+v+w7w%fMn zB{ksQM+4Nd=rd>#tY(lTbIFcV?CNbv`=9_>X@+%c$1IV4geh?wrbKb3rP5mY_%Kqc$gV)0Fg||3;JVhz?I{%Ky~$EJHP{(U zHe{kxbO4`HVZX!xH=iFoZ|=rwdbM^{Zy*fYuVT*yDS{RKg+Pkc&LB;82vjOXjR7cs zUQJkfCWi5Bz`amvj-+fsWLT13dqwG@2#tJ)WQdDAPCQHJS;Ay8TwfdvWjdL)Aw?gw zSt^FUF{`C5rg4$-lA-M^rs^nG-%cd%H+zbwPfg#s|7kEarQ$@gmKA!et@yxILgV?m zHvDdCDnA#GwoZ1M(bUx7^e*}vfO*&7fQ8isfJ@)2e%=j-3(MA-K|{Cbs&&fgj2iT> zYcnl0@yqF&neklU`HneW}Eq7!+*E>@%>I^|s?R-+K0Q^@VcCh?Dh+P-e03 z>1%fSjF8 zILE6zeQkM7KDbtH=#J182B{h7W9Z$qkJ}% zF^ez7y{NoU$DQN=s5bJ|nAals+|EQK%QpnnQ_>_Ka~r(UtZiEZXkC2SCFT}~4MW_) ziL#4Gf`vF9awBnw02}d--Arv3uY_4Mqo$@8S~#HSX5O1cRMCG|R4z`SlH7A^R9?;TVv4A!BKSUoz|Z#AMb^1R zt-1t)u0^H7x(vuGp_qt`_$2srz9cpYt*L#L*%xLDZeT;~E|d`DS~0AKft_}@(xA?>PM_*PN30T9tO9YYHL~`RZO%xi!ZQU$|81py zVLF(;N&*dV1o=nUNLVA%!oV;p9Ii7~WRAPGnoSx^xSWg(PMg6jDD2##08e0MQ?+Cy zP%!JC)|=J;`9A~cr)PQY$lG@_)6Myy`Gm8sG4Mh2ZqWRlF=y|Zng1*E2;mMNuz|`^ zR-Q_MBe24Fg{tT_Y}OYcUz{lVnQ@_#{os`Vxio|*Y}S$m zs|F=iV}d`&8rxrDqT3NrCJZZJMiEKz+!vlL5H6qKeQ0cQV(RNgwzGXIZ;n-;=y3?upb&16%->q!MfycG72?B~bGX-36mZYN>s3BuMQ<-#J~b5JvujWjo5x7q)3 z5Cpc0Re5#n%%TO<8beV+ay!eW#i1zzlHiq=*L`bDji%v>q6OZVSIc*|XHhRAs9$G^ zGr89!jhhW)kOdRUBzZA+u_|u+NDnqEmPsm&TZd{Xrt;32WiGYWwu66_!cEAWdkT@Y zTw&G8;z?nbC;*;p3XmVQA1LCxGP1C;gA)e`lSz_4)@s_k6gsQyj zR}+4v4_uYuGFQ&(Tl&hy?`Z{bk2H(P!l8RK1@Z)n=%;wsDw6#a*sq_3^UI-I^U?__ zv9$&yAuwztxHKz+gLgC~LH}#$Rw1?Fl4^Ga3ul zUJHDHr5$@H)l$Jv%evtqZ?LQol5p#XYobR<8;4B{ob)_TLqC_)kWtpKS~T%oe_>3 zIW#G4Bxg^6$6MwJOiTE$z*Vq6GUO^&HwcUHG7oaHA z2nu-0i2)WOik8+dN@p=_4zbdhJNxD<2G;FV8_n^!i$4#0*G1>JWYa+3y6jnyJyOtB zRt*^a{_s-~y5HmD8CUi`g8KXl<~%oG*UP1;tAahE6M5WvEXR7m5aZ2 z&~Ma>2)~pUKV$uGZqG~vl02o*7O{}PA<0iFf)J)N&>E0=4c{areBRx2fTlq?m2ku8 z0#2hjd2{^^@2e0uo7JTu1Gg#G(s8!BxP)Dl#xE#H3N2(C7Rp?>m1y&oa!tS$!@%L~ z?FdH~ApUSj&&a3Qj_LVQTbOkNOUBCfV3paOnR~lM1wk#^c<1oc_1W-3-irAKe zYtpS@_T2j({-gaD=pKJo9^=ao+b^Dl&8+hTxx(Z)Tao)tK&R{M8^a7HlY20ktp5|{ zI)KM#A=8VrU>q8UkmHuM36PQ1uvC%^$~(KTrlfAT#j=!yII=9?N}|gst7T@f6$?E=eM;D_9IUqTqr*4jX}cajWO(-*v0Elp7&iF=W}v(x zN@4<8QAjfb3>Gjf9xu49OQ<$VQK5e4*6U>X;uSmu)~eEO%d6H@f9GCLZ@r$G)nnN? z?&b^KFci6Xe$i(31uCxEMRcd&a90o+ymknPaC z1uvol{>|g=S&g;0*)hZ3=7=EauCmXkqo-v=sdmOw=s)WV4PW^g*QvZ{z4>F;N$3mCk+9 z;6P26YMpr&HjB{FzM6NYhQ44m6Rr8DTWn-iFkUK0h79bj=H#dc>oi927I4(9owZkw zBaf@Y?ph4Bo%}?zDMCUR7vj(9^dMdtp(kae%%lbu7NfOc-?lvbWGi#SqZrO%p)SGP z_i?(z>SM8X7)I=UACm@ZOnQ77>+-Fcx^|%U8(m;L?^dP^oY0#Ya6Xkc8<*Iw?MHWn z1=a_i#}bfivqiGM$eTzU@i~jD$!*0-&E~cWS`fA$mmWihqw0n-TB=Ta%F4>lO~J>6 zMR`_Mc|1##2vYu8a3SH&@!v3Rj&hSk^J7YJujyx}3K!FdvEa74CB+=EF18 zW?Z`Mbn6CN+_!wsPDePY$_8-0tgV-Kw3+=UySi;84s%8xb?9%4TN*b&?kr0&o=pC~Bc?gH%UofI`ifbmL4$Pm#T>2EEabF;F! z$yu;yg-J1XVr_+mjmL|QFzwMwoWR-wZJOoeI{Oo>Tm!^Yuw6nj20;itjBzWvKlp$Q=JRbHB|N`%7fJplwdaZm{*srV>V?)Q{PMfQAeJ{U(-v z^MK&6^a~`VYY&&%H?aI&z~T2E(a|*1kTyn%9yuow#P6Ik))ng?0#GYS2jK^>meDpt zJuMx{qCgg0a5>nrM%20YoPyr*i0E<&hfafs#tG*hCaL_sNbxb;d9lypRURR0$_(ME|6!d(+Yd6eehwO;g=N-eN!T`Md>#gx2&j!H zd9wH7@XaI^e)Weu_*gBy-;f=%g7k#`%os+HNpJM581_w>Q05R1&144U-V;VM^fiR_kddc0QE@qxDO9d!gu&?BP_E^`n+D8cQO#7%p}jI#;mYm9sKxobcp1M4D5vZ_zC)}q$;I37+~bw zLVW~`5LplY&8h@TcEuQ48Akh7%r#{d^(5!qL{K?0Y-fav6R@qmQ!Wy1&P>dLVJLClNeS!82oo!^O)qvtg0gSL;rDZK_!Cq` z=J5P(K~oB$Wk!8TR@Cz-&dZ9(M8n`m{fSa3!>G0F8(3!`ZQ7lNf1WR-dvnsz?j?>0 z!GW>AV|Qa2uv^PqCeseEj~N;qJch6{hK9X@Y;~?HnE~&?7oHpftxDs!n&o7)EM{XR z#Bffludpym+XAIP0t@#!^Gh5n?6d`#2k$7c1D{ehCh;(E!F%&^UnEkB6lrqRC(&Y$ z9LnU$@X_%ul}?T5q0b)-7FLoNhh_j}{l8f98hle#dCOZRudO}b-P<{6itMtNG-Vq% zG5Y3MVZy*z;S|`XRv!tA;Hv^e9>buj-bPwja7LviV^y6aus<#v6b2+zk|Cr;n%s;3 z^1b=kswWuD7SfIpZ^ZPvM7FU}ORnp^1n-R{jeVE62|U!Q<1Z;dgZ1ssqYQ&RND^}V zF_!0hE^oL0=GYAa_|*bhYUpZGO0nA;Zm+C<50PJc+<(1=UC?Eoet9=(71BClXiEbgyN1^M(;a6s0; zwYBH0?6kJEu`#IwCFC{hyRiJ>yvPllVEIE7C*X;doP@ek3f`nnh{?1*hE0+0uh5<0 z^<=}RD`vD}V9Bx}@c%4Fbyi~u9ytHB10tr2s3RCeJ#ApKltT-_Mz`}emB z^i6TTtNDRO*hdkdj3>~2WNXB`e4P*yYwOfJc=Ql!g|Z9GlUjPWw7f99cV~L|=u>=| zVMdcW@LpsJ9moqg)7vxp+pr`l^~TlQm~bObu<{qftZzSrO;}@N2)>q_ovqx+-YUBv zkY@ow+zSr-Y`ujK!{|Fw{cL$Gug-e)DYNg^%QLO*Q69)?w`8jtzKaOT)4egbF{c#S zh+SxPsIOqd3gIJ_RT@6AioxgSs3!%f*5!b{E$iJSCCGFMG>1(cWtUDVZAh>^zJO4C zLl4Ic8A^f)q#_!9mhUXxzw;M@4S0ydYJyb}O$bQ;3F#V}~V6@|ma4Eic?7 zvOvQx)-*{_3yMYZUo5yx>4>!Ds)$;%0AUS#RnnS~iFUwQmiRio^*+)E`JeyOkX)vRU56pI2m*8~W|S7Us8qN_%1 zm8n)XNqB2eQK<69*7Ib&{ieU(K73Rer#V{`>cebx%)Emz(L?;y>ofuP2Zgjj(Sag= zl#2kGgLMSkxAA+$Sm&}w`T6!qeiLq*Bxi?2%`6R`SH-~b!g@uHW=$1>r(gSXRq;FO zNF39fK&j1oLSTT{)6679Q-Eag2*d6+noRo#^2r0|4a(@0a@K|oLM*a7t8k&w9cfg}L@`Tskdw00h=bJ>$v!O+ z+FZk$K?(`tZ4MU0OkU{0&ila5#+MPo<*blwNeDweRsNDU3Ui<6FxIc22h6#kWIBrz z5XU&`v%S~(Y!{46n0Ml{b<=3Mcu* z#+4Zxy;F&y*&I55+dguuI8SM!9w9E2j@iaCXk2PwSQkISzseNzqk6mKO@N!_$g%ghC=-2V9j&KT^e$0fbG`}mvn4U z0R)*1LYOy`i$o6;pr(rN_LoY|7kP%Ap@?vB#LiuJiOQoP^(`9;>B23Eik7w9{QoX0 zgMf=1N)*sh=qX|wQs}A2IpBBRkAI5QWGKxnj5~;w@iq4jx?p(tXc1u0%VEKeq=L2> zzuknbV2jCUODDZ^`ATkCapd*`Vh8kh;&^3^jE~UfRXnERnp%>IWEW{>?BqrwwufSp za7Qr2D3d3IEFlsjK^dPv6OI%l(R-u!VGOT1Y}Usom#4ph8N-l-SnbP;PdstmRFd}o zK|N2|CKT4lcnK;Jmb_@O5;@6%)eH{HC@oMgx!&wxZWz_+6oHQgV)oS~P8sq8KR`F~ zEbEP9o3q0bV3uKB3yYj8`d%$aaBtw=U^K_&5c>`as5TZRo zeU2(9n?Ll#Nc;WsJ7|H>ZoJpn6Y>S`vsWdD@lv8+w+|q5ZKtP0;Tj@+#EKtu7`_5P zMli!zQ)4~;1q9!%0spo%n@ZX1i?}qkFBQGDk%8@s27gr)qIE%aHo_6{42IuTQHV!^ zhwI~Qjz`xI3W*lQ&wQkhuTzq{bw96S_ zQE+|WkMf!-9|X7-u1|VC%UYLquMQZ(LjhT&6%#(G%hL1ktr0?tsY){QibF2tfBojV zSBE@hou^;lzC#c^ynR#*?ubB2T5A3Y7e~N)9 zikek@amS2}M|a0Kcx!7cyu|TzlacgDr5a)OU-C$`sUEqrhAH}dD-=_(%##^{IH|?- zldE#Q3qF<<2O%pEBQHO1tMHeAwAE-9b_(kY@5A*w_M4ByB^HS}2(os4)Sj)->j}0S zJcAE*p|uiNTV@^tS8Hoa+b>MH`(L%1$9$(gb2h zB|_Gt1erW8{gPx*HB|H}CabM;)27FUo{(oMR?RG{J6P(u(7`XlTe{h4RTaFVwz9kz$#3yCTvzz zg3DY=V{YiQUDwS-GgXLyZ1DWZP)thd;)9zUcGTP|HO-7V2Dn*u8h+?HMI1d%i zr(Ieps9?xJ_PrZLMHD@OsFkPJ*Mp6b5;V~MmDgZVp0p|OYV?lCq%=~^mLt=ASvHY( zrY+ad8Gl3ElSb6h7-X3|7Vn9^}XEP(lz7HM$pJ)ydfK z)gKHM6+Meu?(hJx>PcV1cBVY7CbUl!Wl#LqjuM`15h*hohUh9blIG%Ic%9~EmWU8Y z=E9@xq-U9hL&p@@jbXY*Y~$8zoY6qB>$WEm{M&2+P~cmdDK-ga2z{PHf=}*gQp>3( zfDXI)Hd1yo2d#B0h1BHQBo@%*zOtGeKvGJQkmONrM+W>On(pZ2!xigiHsjNGg{(`w z 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�^4nM-!e<*TonQcckP*A-{Jw{1Y7-5q=bMxX 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

c%db+Jvp7cKVWd9w}-#j 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�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 WgABM15MCy?1&i-!in!`*%G6eO!hy_b!v>P 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

(evWt7sToKn~pK`ui|O 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 ZCaO>>m=t;91uYO84)F%Qt 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≤yD)%Uww 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 z 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


LAO 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

CdE_4549vZv+(vxp9 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�rF}%pXSKM5(#JI?k}=tp#&3T?N_O+_6}j!b3fT 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

lMk zY-jc)bb}2HhZ&j7&)?31%D4So#1{EJyzBkEWc!&Vlr}IM49=+dv$#>0(q>2-wEidG z&S4MgO!VvQ=60mW6*~(&IX^sw`;}!F9G!e{7qvGi`W)ps(qQYiLjqeLUi0_b`tl3+ zZR=}l{;Z^Y#kM|6sJPdOW>oz7p{Pt`fFaRW} zpETB>aiT0$M37B1zq8klpS+pW870NtKjwGWE1~@FFr%682zwf-^N;7HNCi=(Q*4*NJV+F8mn(k|Jz0=Vb zAG74A_0A)E<0m$JjiW^)yuRH<1DjPCC-R!Cj2Nuj7$uNun2LS8jOVr{jy zQePrOb{_T)Yu|2m_6neBF4Q~wWSTTa7%e+T8k?aB9{IhxwvHP+1fle5c#Z5XATxMh z?Af`L^+*A-4n|@OP8l+EK5vF_Xal5Sm&oI3&EdsJheR;F9u?AVVQ{|Un+(oe`z5P& zf5b=troG6NpS@Z;8(dw@aeVX3$@RNX1pB4_k87@ZLa<7y61~i;&c{0r{#P#k_h|pz4dHt!~$NR1iv3!p=i$6LhCDI>SO^;Ev@I1kgsY~=y~@y@jTw@TK4t*6Za?$_pe@)k33VmIqnK6j4wCd( zR_Z@{l|bPwGX>}#S#=26X3T^X-ZrBq@*<2kXBSw1e6iDx&czL!Spr0^fJ!SId)ocA z$NTd!Dt8%>lNzmHO&({cv_ZJfQUazhoUMX&9SCEj%9(>ynnIHDHZrAlzh^-2*sLaC zUifLU7d8c{`5tR5w4?G0)tu}>nX`o`Uxp;jQd)K64tdI7~Ii!dJFqFamu z3Pm-44T=iWgUQuvKROiNNZr6qoS#1}jumH4lMj1#k6}Lb&~|4h+ZzoRKy-FhA^-sd z1tWIiNmYt^?1dj4{HtfF9+Ct}1zCtSUcQTeFFDh%k0!vxjgl$^ea3?El zjIwG}o5(sKHSlre-KNH9-T?{XO(=#eC#le-#{EV3{Z6)X!Tj2(>$FKWK7o~J zagCUZcQYB0^M)X5qD+99&j+XPu64LU16<>X@HsLD0$T_v-7W0;NWAVkOZakk|gPl})XM>*=-dDr-SixLfl1kPPA!7psF(iic z!j{y;wC zSz@qnHoq}JhkQSo9ovbH_6}j8VIo1$0gK=xrq|?#&4T8-FhAT0IN06GW*Wg)s0}_r zeI48sTrDPCq74!d3`$efoJx;9PUu6}uY<1sg9v zI~YUs%v1TG=o8UuGpSJwXBlRThRi{K-_Os#Y^#Il$WhkLGw7(8{AhIK2uO?cKR5Eq zP~^$dPBF{bv5AUY&5|LH0^<~4EZd6$!(>cAy(m_`F5=0jFv1G zHY!UBhxt($25HCToKM6s&3a@^{|G3ic`J%ZsNlM=sXqnHbk-hs#?g#nGV_odkidj0 zV`Ea4v4dg7MHM-oyzuWorq1MQoyt`xyFK(w-+EYp%IWs?N<0Mx0MwpdnioyK0;yQ@VaY-hB>Pi zLP`i=qWir4?Fx;F+H&>H!4LagR5{|bZ`0!Vs(Zgu1oA^YYb~itd1iOmSyj_vV1m#on2cP*UfxD zVUapeme@SGEE-SOF?h}rD|4%gK~y>_5DL9d8iwCb!LVS9f6f#Nm?OGI!Ldw19Qfjj zgE$*ezSqffUMT9;^Dy6NprAhboox@ zVs$!k#Q!@8#N~zZl^MiU`?=*}a`=x3BC%JeGn?|%?cJ`OBL?lI+# zrRdfjNzt);Vq9m}bU-#m2fzJriVptMRe`yl<`Xr6QFfK)uE0~gNBH&Mo0UW1H@%YWgx8m6dZ2J-O|ex^Pk z*)M*+w4ZAWVjsus1gw|2fq*5_UtdRpABgu_F8m2SZvC;kyuE(#!}9Vyg%ZAZBo|HBjZy8613>9s`%=429H>Tp znOL9vY_wV}iwni~X1nPBxw)+PPmN~loBy}3u~J=Ovp3LxnHr1_?brS#3dirBM zdD!3RZtrqkuZI^XGgxeJ5``_JdO0}7Ja2G>`!Km+#|LNvqAH@Xpj(R6T0&8{_I+w~ zJ;z&6y;j#DmcH)w1e1Pmr}7-l9=U;op?IpsHyYPu2py5TTUg)eKkMTC&0T((ZFa#m z!LP&7Mc##jylHtm!C6=E<9ZaV@<&5VN0~?t)6QJ#LY1vTzRf2)9dj*4;D#q$gR*>rrswg<0O_z;(OFnb$(P0hxuUXwYI8WmSl>}d z>HNBw&5gyTP8C>^`Phw|g{7E}-ROwLQm_ur?^o!`0KU*z@PwS0SQLH&&UFC1Ka@i( z=w~dtPSL_jN`-8k=8D;`nA{S0Bg_)6!r40JiK=)HKKN~J#X*&P$T|$0^@*kIeLzeJ zU((s!nAhj8fuX-_8)f=`b@&=@=66i~KNSD5xzuRJT3p~Vs{O14l%T9c# zeVqRHJ3q*=oyXTAZa2##t%IZeCo=>V-p@@YN z@K9i2bj*Nc3H<;pj`u)_5cn=n9jg^)a_RV((i^k#fgb5Ki0I=9Im|1;BAQxkA zrRk+0ah62UV?n{K2i(R=ld%}3t5^ZA_K4MFp_-=Dq6!ruJoLnQLDXS*lD)A=NAO+6 zpHye8fo;f2R2%QuZ8PQ@CTGYLXpzN{#UM#DGud+jlEHlu^t;+TmS1{qbTL8^@(r%! z#YH`0xn`#I-M64?Rv_hn60+qHzwm9XYiY3|e?O<#;<^_z!tJs`F(IEY5Cj!4gbclK zcC5SYnT^D|>|N`%=$1wh8iFbLy@F+z>HpF2^yJRT|A***d#SOU(|?oyTT88_Z}R`w zU;x-H{3X$KA02H^q`NHqlNgD=2Y#9&`X_2?j?Go#+0!V8cXS63A$iF8v3+5CoMI}D zG#X?}DWJHE>MbMq*F#*-ay^gswzA#P39eBf4!YM$iK#L@#j4-$cNEI+`|ehElV9Df zy`B;`EOCF+ACGt>QTIJJ%1I{+(L|^xH zabG(0`~Cyox9(B!C0|DTTfVoFFIuZjbpyCGmp}8{;`mr%oVB0Fv(Y*FHdfYCYy$m# zEUu>Esh0C*d8U}iqu@wZ8+lN zryJ;cJgC*x@&YixJO2VLy*!CMYgQe&)ytFL+Ci|_9d~eaWE=Et^gedVb0*KXJswnKkaWG&&yqp&E2K3hV+h#?iW zERKk6n}&RqGg9x0T3Y};PFahn21LyLDAs&A+d_d?^0W=1m!@sVs z3T(f(Lb1&MUyY8hzdHZFNL<65|8F%F|8JMSwO@X6s2XG0TZMwE#HxFRACtjz5`D+7)q=1rwPgM|gY8&@QCkw^%KhsfdUfhh}1oQYsf&IDz zwa#>1Al*R~$miWPWaD;;hLLb{@sV^kFqFUzz2i2j6F&PW|M;Ke9aubjugRPIqsGDxVbx}dlw&`e;iox`-{IJ>SPL_x z4!vLZcW2sAugJS=pYdpUVyn7U`sF2V&k*j2Lw#&9HDWx|ZBAX2D>+w63K!_4b7ma@ zP_N z!wXsTZkXQit1W7q4aQkJtF6RvWeZ!b!FPX&kpLocC^@RGNK$D@I9~Y*b^rGrde-?CfM`;Ss^# z-?RR0gSFY*c}QpoxL7 zCA3z}qEd+Zt>8>$^?0S$md>!UUfHtaPZ4=#wNX)YtY2SCE*z8ph$4A)=K|md>_6Mh zc706#Yu8)fV{r%-Hj?(h;pZ<2Y-;V;8hv02Wz*2IQ;tt*s1kT*@CTF}TkzHm~ zVA~+X6^ppNN9Tu!2QT(m>UMDB1rXwv7MhFWZBW3@Q9W{B$9!AL7DEh4C$(ng8%-1B z3a!CZM+=T%_o-7N*@6(Q7I(whci(?^p9a5I8AK^P(y>Q8MG@+-KZF-Wh{x{)U$%BT zT-1Q&Tkjm;oz=fIco%Tfge7_Y0U29I0oM@irvb9FKtC9NWU_kzyi+@?y zj!1+*2ABg~W73ho^h|#}{MVM8Mm34Db&W-dMM>V1)K|;S5&iz1W&b)*xmWTOfC(x` z=%K#azyEr;z8=@e-yZPm0Tww|ha;WEu_}s z9Ny3&Iq9|${B6es{X(U_BG)Ai{Eg*l1GFDDKwn&OuC@-IAFQue?eV}L9e)s&Lhqup z+rqN&GQ>!2gmRFodMLY=Eww}WHO%=#9czuHmAD5GB4nP^+LNb(QK|Y zC0J(VubflWv{qCUIQq_Z>SUCuHw#5FiW7gTydva|ahH-lY?N}Zd~tdE2wh=o$J3{> z9tc5Q88ghan{N<3H5ySMST_C z>yOaL82^8MdUbqr*8;%%`F{c^H`?R;f3w;6cK-7<*2e_@zq8ffd}7>ulWTf9M{)kz z(t`vraRfww1#xS&wEi_k)FAT{|oG#h;2(Idm@UcsUp358vEuv8FV1#2O6PdD|t!96BE7GIB1I7X^ zVU9k&0+Pd7-5t^C3Jf{59XJh-KTr|Fj$UgINRCXvfsM7 zx3`bkWu2cBfZjwLik0Pn@w$+qV|8nd)mYWaUugb)reZ%#(5h54?tCrH+KSS2>6(J2+mEH$a0}64&3cL6*F6DF z?gI%FX#^K+sg8++dT7NZ59@Rk20}ZvW!)EV$jl#Bf3>yPX!`e+)=I0sn!dLiOEFKg zS#R_GueLr4)hyOSHH*uuE0%>S+s&os(ux;tF4dQtDoT2NrM+tTi`CR?tBvLQs%7B@ z$5LapX%`T!-S;#;ewR+YZG)U*NeeUTbf zR3?~6*GrStEUvT{7ejBBmRb#m2R-8!eIr!4(p+t~3{Lc3qf*bt2DQ>cEK*C1o2I<; z1e0&H0f?tJmK)14z1dt|X;Qt(pFsIHquo@{`@;b$tCsa=cq*n@Ld0b|!dBZ4!aMB& zI}D@~i@FO^NVh`+2|R^#cDZFIU&t9$@{PCE0UCKvoXckR(j9oGthE|Sn=wler`3f* zbfQGK1Bou@2$Y($)uU5rt>|IjEa9QhiBL~1ax1-76gSaN)%9p_c=7UNa9%4`QTW~; z$aFn6X#QnHqggAsc;frE5+h}UJtR9&KZjL_?4u2q1!o!QJ%6elCi$M}v zBw)=K6AG={j-32>(2i9!Lluj$ijc5#0mD$JXoJ2*)gU?!3ny22P19WZ0--+OS*z9f zVmFoXSDS%xg}iEzJocDA$XBn)h&xTcgxQDiD_1}g(27|x3+%HYzfIOHWWI8cD)#cx zV8kVcA*a2@PqFmsjY7_h1ER3*T!1$|LRX?7=;EaK;9nv`ELW#5;&0;#d70@A)sg75 zV=SjrtFc5ULm{!$A6wED+l3e(!0EtAWNb1cGJ&W-rJN0l(2Da3VNn5{xlIfwv;u`< zBxi%S-UjvnJL~!=UQJ6o@}4#&X8KJ#EGx7&!%-lfqwc$*YenntX=QVE_8!$UsvO|4 zXL_1ZEKU=K^^o0ihklJ6u(=$x_St{2_M4Y6*o=d2Duj1ByH9ptG`P|cJ&_*h&e$PA zY)!OD41GZwIK}h%HDkLW&X}Tp$!kLN*I=U$)-G28wY~+`(U&?6DI6&#Lq*TCTBtzs4{c`YCcQCMz(|zw3v&mN zB~Cd^^=dThwj8F1jdc+7ZL$udFtLuY92(~Vw2|?tbEtyHl(2reD0KYy(sh>ge@Cyc z4-fBJ{r92!pRmpa`)~LEgv#)n{_pqD|84wm(CI`yS#HE_$(ZfIBflo3rI`s%xdVzB z_sTM-GHwA73T+METyaD@ekRYJaIXqQTWc#)&3?E*aU>jCw5v8Er#qHYZ+xoXsAr)BYd-Q%bRVG3kRuVhN{_c}TV!$N<#VQ5Pd}7Ye zr&~8yl0kC8ACJrFiYm-S`A2IF0*QbNL6a-X>5Dhf3e>zk;kRjP>Mt4py*t#<5Du`4D}Zpbx)a}2+k)TM%PmUL-< zuF83_EfT~tlh4ktaQI|VZWALUc4LtJxDQ({_UPiuEJ*!MF{{tUtnN?x%)~;os0wtZY%UP?U`bb) zKzZNVC_tc0|KGkuH~+Qie`9fZv2gx}Ur2ONumRuhe--BGOMP`Do!kFCf3UTl?Emop z6nr;Xav=X7^xb4uc?~;vGa|6DZ^a|VF422Aj4>qJ-_X~)CK~C0#cD^7;jKi}d*d27 zolVJ#toSktN1;T**5gH@jwa#V=$ ze2SEqIv~W86z8|suetqoa+s*67_Mk8)0g?4&qReQXo8Vc)cC&u+PJ_-hL0P{sMp+i zM)WdwL=>3J7*tO8G}0MD_~`i98?e=ACE+l-Z!d@3%(C{aZdjcX3jnOD*miTj-yT+5 zP{17Bw{kPpexr)zw~EhHH{yEvy#&57L{i58N5cQ@yCwkdxBsXwHtS0{{txos(&9J# zKQ>igFwjt0#~3=X)=zflTSlU_&91b#`*1Qx=&hfIu*ge|2Ff&DFRUr@sin zM6F{eUe@FWi;du(=L#<|)TKLQDQZqIbVdmoDljslPH;|haxB$mWfSG_Y-XYjRvoz{ zgOGH7CF_eMMH>x#aj^aXmuV6gu;9B=g!JWO9{$Jv4(=|2aZw&p;Gm4)YWLVIU) zXSy_Rs||79pv`4xp96c6DvayM8tZ4iBiztQWx0HFc zhNggAYugxVp7}tQ=HSQ0eztE|D{`Faf8c5oI$QQ&te%!`(bjU$Y zNn7UJ&OJeKPoU3%%!bZlOa;Leh1+W2>R*1lIF5SfIdI)!=sOzvj)vY-(xY@m!8sTD z4DSLhJc0_>8ur<=&z60*?Gx`lyj`--Wj?(ta}H?xtgYC~Rehp{kfV~=U!C>|HnhVV zZ)nw9TJb7Zyv3D}7=EeI*idc7YObwXPpHQ7aL7H;QW&@zW8k<2DR#p_m7wiCQkM+? zUr5sdV{y;8iHJrM`^+v5SjkxxZH}C4>WBl{>9AcRr@=H@l1^@8n#<-E&7Gw-XNz2m zi7{#Y6*#IwPFoZJBV>{y!PaZyzD$>)6+?SkKWW!w=Hc8{J#XWhBv26D?(iKGFg|4emqN4X#?&<1AQI~fVp}HC!pi8 zH0089Q#Z88tnCg;r<4uIaEDru5w-$43q|070C^K&kjiM(Sw-*cPP}d2DYvVmdXVc9 zyZiS|TT7WxB{~29Z;N`j%cJ#tdC)w4-in~|WC#-S!hW^0@W;5NVHEmL(6?QA) zN>H;_Lk|it`-2EVUxd5<<5yai|E`V(SEtKgSN=o#TP*7T%>R3%@y-7Kt1KQz2z&dx z#A)3|Gv_P7L?})Y-&pT&El2x*ljN`kVbgPgD41qnWjB{5?zkU#m*i3< zX3Jl!#CD`Qr zEu7@I8xusj5xI_r?(UtgpwMg=$Ag0-JJH;TL0v#$>j$`wmr%9Om(;wM%m)!mZU>?E z2DvYEwf%@40Mg7zL&z z7nvFQOSaqvQi0pSv!|{p4zibYm~6=u(CRqgO6lkZsm?RuyY!tL*K*t`c%hCXZjEY3 z&-DP02AaD!1FYGo%gRrU3PTB9@C|l2UdhSnDfTcrhCAXa*DZ$iHup$vdLpjq+27=P z-uK;&-T{Kf_YWUz%FzDdgT5I|0EF&y4B&Tgm8eyDb-Wyi2jND#4++SFtL;}IX}?RZ z;@|bf>0b}$=lh%y9uF}6!5GTCWZcIZ(c&ku5UO^6pw8s?AAkQ#JHa> zUE-3lUaloe?cy6+#uB_Xtk2C=7SzQ=E>pjU|EZpyys4g!-c-*{t7kV=%;PR_z{vwL zKc%(v;eXbeNtP?NMm=l1op04~5fXSy6tCHvi_y>7)g{;6v#tGSm@2tZR#+#2A-y{J zHL4QgWer;@y`9ZnM8`EuCBAaFZlIaPMKPl7T2bHYNw zXVlH;^pyJ}l(806t@`4tdQ^*?U2$k>zsZ!=PEqzRbnFPvE4W|cxOF2!4vBF@dZxIW~(Qo;Z^lS zz^nl2*(w*)N7eKH+*DCoT~|+!20_;RM|N`g%eAVHHBPL^0SiO2I!0~R1It+*j`;tA ze`nR#H`P(d5Qi}GW=Ax8UA){By+ZmFX=!9A{d2(`>j>3HnQLRGFFov zv6s-FQ-L97UWSwkx8qN7f&5Z-D5p3KI6oZD+PQKAb~(a>&QaMBj-MC#Y}Z=VlO_M6 ziQ=F!<-E59a3Ut&w}4vid;*l)1G~OmsAmrx%?bktD5BX9T=hT1e%m#s&45Qa2RIYh zSE=}bK?zXXgST0CG@7Zl-lieWJlNR8t+|X{%t1o`dU(0^gAWCdHE}3+*TMY|?(4HV zC^2tcqKPb_W&fB=K7DrC?!HX!ClPOBSEg_$7&|m#SSbWE?YEQJHM0riHE83YxAO$o z1T+wU9&nbS52NhRz+c#{=dTLU$Pu5N3RsOoVez+ZCc=!Kot9FXq(pzWZ0EIvG6Ee| z)Vi>^?uUY5Bd@XQLQ2@VYr^^=>DfLPYqH8*mCZRTY!onk+~lE>ko%gV`Ber$#Euq- zC>L^M**gPJAsbHo43!9OF`05X>Ei-$V_C*n{u-9?k z!-QLTOcw^y`m!T~YiIBzTfW%a?`?M>H9Oo^w8DW~G1ev8{FsXo3^2JZmzS{Uyw1f0 z7IIo68c1q~ep?%6m`$qT1IU`|FA{v1I8e_C^eNXyh=Q!0q*=s{KCv@d<+_@^tNJwZ z&Cq%^GrV8TL|pv4s77X#$gBAWP!E|5_+T=LxUn4S{>Yi3Mmkre7R6c6fMnV zzG~atWsB=Y^#1k58;qgh!fd}uIcpAC3yUS%yNj`t$-h09LnUHhHN%=$)xh3Wz{$8< z0UVfEG?hi4qlE;l)3;eA@PJj@OqoM2g3PF+VG%&azGO-1GY1!r_#x{NYGS;6-2!IF zdH@ZEjW#<&Tn{y~3Nu415a;~;>zg&F%FB5g+`yXef#d-NEo0jLE%}`{5-+yl^-V&A z7({Lo`hb2(4@a(tyV=1m&LdNAhNCrFzgI>TD43W*7@mr=4tYmZ-EdTUbzQUVKARo< z(A`Oug_+iL&*!T%#7PE=;|m@F8t2J$txN}Z3$n`#c5R#~Vlrr!^f8y;vtsh{rN_Oj z;!jpU{~D1aLsA-LI`el)M${kr5bW@MCuyHempZr%5QZ{=D{-Fon{XxNik)UJ6maEN zM`XVdkKH{6TmF48SeDUnJ|A(iwb(u$e>vZ7v?)}OZ^XrPJ2z3RTge#v0m3C}hkYh) zPh3?$b!A4bATk_yEeK5;r&GjgN?(yr!mozc9D_g8trhG~aSx11jpJc74eT^UH(?J- zN|-u06c}_j%XY!tqc^$}CnRpCg>uk^>Oz9$F^Z2XIYdPNV|X5dF&%d#j7K~Uj#nJx zt>zfdiKTHFxKumLQXCbC=*iKIlooU~Dlj7G112SpE+%ojGluvQxKSZQnj0yHqjO&o zZMn}WCM=TRlPQv$O(n^ZrW7f$WlpGd(|igWAu~C8P z1)wlNI-&>4ffw0VtW)^7(ZD=6Jd+~Gu1M+9D7VNsy0vJioLU(MH*GIdiiR2?dk)F2k@6lEvu}p)p2%&0!w$(7Q`2rg|ye6Q>D1tU%fmY zWR-E~I!MJHXJ|q)R3Rov2kMMpy}Y6TPa$RmEzXikiUi>DKB%(T3Q#42)a&a7-N!`| zWh|cqUTQ9bcdYW9aORM>A}rF!LZZ0-ie+rECX|M*3@7Hj&47Bcu(eifYvGiIwv$K| zR^1YjyT&BV~a=!PUJlMyNL=PABfq@;zKqkahvrE|1 z)1yn2*FObjKVX))00M%EC#z9YVQhGRi>T8bVw0nVJ%PmnGe^{I($4Vha3udLQE_Cwc@~EN?^NlY1(wvLiHR;p9YC(TSzLV-t1Zg@G7ObAX zLVb4WQgK+d6KyLpOT!{3HLH>Ri!}>pz`KW{MZFp*#$M zlUxVdv`%3-Q0kQHEq;>TBI@PUH{*kxMK302+0Sby^Oc`q!sbf((QB;9+8GV{yUNdT zMfoTVCN;PR+CEx4nkR$G8#uyf@{B)?Wjuf7Im_PjeLep?yLPk?7P+^{zSdu1t4k|W zNH`>PgN}U?pmJeYr#2FEWedP+GlmJ_#~8{$v8{4GO3Y~SN0QRUrYCSe1*O;j&)%DV zw{ax-zVmbc6?Jr84?zlCuyAt^pC3emGAwQeNQqKUpL-}0q+oGTbFn1fd*^R|pKnBF zRuup)Qq$_5Iif9~kd;g177-a4OQ3w?rf8TMvb~24%%tLJz?dO~2R3m9ffLTFk1D=d zf1M07GJW`KDwV%S`HdXIlMqXz5Xajjq6!^PZyR^MZQl8IKDKL9N*@Z-69<^iaXby3 zE3eE1gTbF5BzvKrIL&d~|FKz~46*`=9W=wkThO7tje?9yCJynf`>g#OKfT=HZfrl_ z1KafMM(s~}1^Ma0`M0{S?dL}4S(j%T2^6EETeuBaZSvxpnZo*8+ulRlgBshbonD74 zoQl;rjW1%adwR`_wDxv?LN6xUY45(--az#bw~lKqE;khdYhx=^90*{~&OPll-JYRE z<~3+>k3jBFjF1B(L?%lKqZVm_)0KooMhX_u?*Rm*UVS?_K_*k}f2v*%6vplIb*OTr z>}Boj;P72|Yrbl%wpo+0%sO$3Kh95P=cDFey1NV&XoS~0-QF&@n(fs+G#eRVIq<+e z^VV*fH19fMpVEdA+Pl{2z}Dzwh6B~T?p6S*|EZLhuC2`AH)slH(-m(Vl{e5R=pBJS z5}kMi;1c%(r(4%Do&rnxJ-Vsw{D#@X#ibOTbvU$hg>8UCWAbmg3<3kinK6KoYXQw9 z?X1vLB_Q?dh|&+r)M_mGIH(O#v|FgjEwtn_qAKoT2Ty;U#yr3OY3iUhbx_3ru$|I^ z5}}#?oFLOIXbxP=cE(bPFze0bpdiqNxYt%xt9X^!%Yg>KNJo)ys8n|O>q?G1>H9(5 z3e{&XEqPRQUz%m1gg-zdq^$pQg#XWzw=>6&+tA(iAGP^rvyt0>H0EUgS6gU&xBqzD zSr}iNGs!_5kABJ;{(zq2UmYV1^ks7YpPnA|e+K6g1Gtur@WWmHKk>9l6gla>l3@re#brCUlRq?<|?_{4** z1n9Ue-CRRIC!DFyZ_eH_PjKLnIbA;5Ny`{;bk5dtw?@g=z*j%q;+4X76G~0-8=;GN z6V*2!u-vOC-z*$Rt^U3mf>bcE1>vf7Ei`K1(T!d_k`V0A{ENDKNckfh@iN-(ex-xa zNHbv^JhC6oDVdzH4o7L37c~sNlHX9gl)5+2c6YQUe9w~I9EO_bK=T5s>hV{4huhHG z{DnTP=ej^~XtY8e;4Spay@Y;+E6@>#BcrZBp8;-No=wC2j}&>3uTa&JypV8u#6r0~ zg}w2xX->tP``O)b@?5UQy^nep_de>+?tRps-TSCNyZ2F^%hfEK_fcix7-il^{n@>b zhG+9W>d)?d^ypvC`)IN&(spDM5Hba%q}}5Em5*VwL7MwhNHCL$i3+MpYzeLq{l_ap^U>&!}oIo#hw+Ozq>D8HVdbJmiyAM zaNXSKn|d!TwQL;JSTCATqO!BnGQ(3sJ;Kd*I4un={tNglg^aq3(|?N3QXj#wqaFQB z{y{!VjhV~7`z+N$@Lj$fp0MSlX@i5%K{@6#|#8*%< zC4n5+kw=$l2ftkmj<_`eqez-)Y9t)dLIwC;sD5h;}(dR_K4 zn>qkg{>B(T12FU>y)nyjgKhYY8J8Pa!*9&W+#t%|e7P@K7bg6}?yOe=47o>?u#xYi z4IIOzy`{g$^k*&J)s}_mgCq$q0K(oFYr5IjD|zS#g(OBQ8qZC{7Bn(s=qE^;_eldz8gb6m<|&ufv+T*P4= ziJyQin9e0wn@RsYZwmJ~rj{h_x(gXjU133C1FDbJi&Hg8zY%zazdRP7Cp1Dj25&J- z)(#G8BDg1 za-=0T?45w6+|S#dDv&bfHMBU6f{{@ZUy$NGA}yolfLYWC)bL-A zZs9t^iB_fySuqX6P9)rI$5=AP`cW5y=kjSI4O6>0qEGK#m|#R@?0cgu(?%x7zBl?J z2BHI@EY&|sOK4R4c5r@!^|Aex!^H=;F5}2@g4d)R(gMxN?@+tmZ|_%$ijU3b{fqS( zK^~jW`x)ySmv5-Qro%JRU&ujp+3_#omVNwX-5-!TbpLz!o{Oz-d;dE(zu2hf_rLD{ zk4xe2_rHI@bdOZ&%t5;UyrAPmNJ6Q3E8Yz~Dxs1yuewfhx z8kfN^WpZNVcel7rAfO_bzoFt-!Mgj7@GE3Dvjqi((2*kWd5m{%U_E~1P!)GMp_dOr z^B$PmE%*#{XAIox&SV?>Z{F!~ake9851{9+4?%Lbb##dt;-#sqT7-RHGh;Dx@rtyD0Ofc(7M!H%Et;eUIO5A%(+ z^`Bd-)lCecVFySKg>rtub3iiipsx&iy7lb4ju)d!ZGN(ga`d2j(`(=WHU%#ubjvtcBpbsRlSlZdw_iSzXkt#`q$t)+@jsD>-mMxC1K zICwtMQ_d#%r{)4<6B~SAB0d$dc^D>xz}O||KgYQ9uwJOZo4>6O1(#phXmn_3cJv(f zz-q$v%dFYrPwbm#u8E22{7J2bYk(iBvz6N7r|@$U_j?s(v4{*?u{)^>todYcn6V{2mFH3*07o2Y9%(D>(#$ z7{IFm>S`qcROl&uQd%f+kV{>+Em)oWVF*~1aGmqL6<9nU+zMo;TCsXHIt5^;Gy&t# zmq5|l!)=7QpWstDv=E1qd{tUvJ{C4^O!S!b8wPvGRhbjaKSZ!{+a~C&Z?vAr!|pEj zMHlB6_{zS-m(O(y7q)dVgZhM9Wp8%2c3P`1{H;#r#HS;A?+3&ZZ$Ae@f%hT)-^7gz zoqsly^=1fvclq`L%V^m}y_m_cuK$VCJtid=XM}{iq*+WMw@hGrfOj36h>e4{7nlO# z>=r{0g@2iQMDpiTol_zVoEQnCMN#>6_f}!dUC%IXZ3(dBSfgd{C-2p;5}K z8ainv36^1WR7tiH1b2~S+eb*giVTElMkb#+Gf5adrvKx|)}iy?hpWM3pZ@;szW86Y zTBDYq|4je4vCvrfe*POdto;EAzIfC5ue-L>>y!>}wPhWNNR3Cg&7$&eI`Y~1$Q}P7 z|91Psq`o^hJyOe^r#F;cmpOUHh6`sm-Yibn)0dpJ%SoDAerW>wzv#=8>-e9lYh z6Td?CH$pr(%|Ij6TPQ`yR3tyKU>;V4tRbIqB-unoOkw;Z#E1W>%F4bNL^eG%3?tFr z?o8`hZw5EB6BCKs`vfAGZq9JP*nz>CsVSC_)sV;xIRHFP}g$MM$ZvLe9|AV zR=-#I_#-fc|8=YN=mg+y`;WQ$e6t|`gBB?M6C%Oy@t+=lx<_hsrmBGdEr45)-p!}@ zPiy7}JCcAqk#|FdP|SvElnS+ue#J>BM-ZfYR|=LfIQ}f|Z>-QymJ`!;Gv64hL_UL_ zRG+987dD#L*fWc~k;INTTdhskM`2jSXS`f!U}=p6QZX@N;E`Cg7{0R9awk~FiOP_9 zYz#^jfX?VEoH0g}IQ5Rp>b>)UnL%KSXBWx1P?6w0lvfjttADSNOmPU61Wf?pKn}TcB6MjPNs!mEtxI2 zA0}pv0tcy=j`ocp?3=O|cn=9)(nXE=+gHehiRwBsprukye;q%MEBkiKg(t_IDiYV3 zawWB#>h5k*ob}2UDbw2v(^doU-`ZywtO2=U`rZPp+wBr+$v48Rf#UA~REvghg^MX?_&3`8RZtFRG@ z7Afl*F4hHQ>l7|7wJ?>DC$jl!X;E;7T-W4zF%5dLn9Bs!6=u#CwJmNIwraE`8keTd zoR*r-@Gfqw$428Y)^Nq(rBj`?X|Fcys{dAuP?`Q;^-sV3`LDT9jQ?!(zp*g?J^u3u zt^Okt90%p}zt`Td^IvUwnG3XVa8u&Fw4V}2wdZtTv=XmgX1(*zvXorC?Bg69B_UA& zJ>VSU)Qu^_8SDtJ#eQu_J&^A?F7QU{;gT*t?@1}uC~*(;^5GO$*H_t-AD{d{u^$1r z`eS$XWox6#b93GW5yeH>VR zkQ;R)P?wxL8N9>((G4gLXaWwPzo$O5;S+_WpIRUuu+BOfr2Nkh)SLL=Uzh*6W9g#E z-sN@o=i933A=yVlsar>faR=SV&RuBGT^-i8bnPTzd^A>L7hqRGdoA>OOYLo~p$iaAP{{xpRn zX8ClfULIBl_z^22Ui~)j2E&&_*T8fjQQRj<6+fX8e;G%Zag8ThPTcBE1?ZKHucjpPI7x#bnm?zzJ@k?Wh~QJ(Tra3ib7D?Xa%oArF;3^LutRIFXz|_Y5^1m<4ti z`w;XcE~MnQ4)0=d=;X~7W8u#k?%7O+ew9@eUqK;*OkXYzYgmk?Q}&(?Fb1_*R*S~r z!@I#`Oll&j$LYX9{7sfa<&A9Oy0{~09OBcvkE1?Rnh$v2n5E!b9xnN}IJ=ZDTB}XX zF>q-v-}Bo7z*u6OwfDo>01nuO%6f`TpudmB)wF_}=gs&MDkOX!$?`iXwuHi%`zq_7 z_Kydd1_sws$JPG$#f8Tp2D*InSe$Od5f7hk)|0ab%gf~j;JZCS_F)hqBR;66s$Tto zhxu`<|9$|$UXKjmB|cx-pr5LrtG`zXKk!w689se%z>bT69e*WY!tjp`*sn#v_%UZcG=BcWE1$|TWua#& zi~46VQzR8iqC%=9)=Fh!dV+Y0)YYskq#v#n!4-Wm_iYepXh$K?5D!BThseoia&hZF zlRODk0xtDkRVr(QAp_b-bQy&81>(x{-CVCN%q-}{!5ZjHYD(Fo$h7zo9aJ+Q`t!Mu zulT7Uia&h~gkNeA0EW~OV(T2Kih5n1+=#NU(XQa}|F*7hB|5$@vQ0>R(T|b7Xv~q0 z+AI2^!Hz#;U+ks&0t7>S`Dc^X5nTJPm{6wwa&`FF)c;=n51gkA$A4@r)aJk6|9y+~ zBBUXtW8qk!^P4Tvq@=tbD6Uci-5y7874;tH?M86}xkaiF)jx>aXfi>oL>e10^5ewZ zgbS3sOf2D-cXI)lOpe>yL}cOGj(q9fZdrK>zVqN%iI&8Vbt z8aaWStwW4|o~SPH<$Xf4aH6`%PjA3})*AeF5cS*YfYO8(I}MG;e3eYkC62R)`ut4I zqvwFe%NZa2KFo<%ZH`!MOpYA0<2DdStXsQ1TVSYQ56^6ra}LqHaa56ewiIR=5>Jeo zpYeyC`{3^Ax+;xbn4*k%AvujRri?4EweA~w&o!HkjOFMJ=MWgUYq1=U z1&q&(QSVmwIo{=}RIjg%@Qp1)y_#aqSw?RD!0LRCFa|k4V8`+b+7A1ep<`v!fj-qU zgq9*yOBn)Sr!!N!Y-!I`Ij!@Ve$4w1eWf@4L!Yszzd|aY+|xDt4!`oBR&V^N+q(82 zWnRY_bp8|OT1g+506DGA&6bZbN-CF^S^Mf*wnMTEi@lhb&{(HjdA6jl3w=d`;f4fD zUW__5U#2RwZ@x53>89(WnRAkB5ZHZ@?T`vZHP2PeVYOiWHk3thDG!qnr9nY-5MkG` z`&0E8#;ST!M@lot?dKfwgp+zb{ZP=|QjUh+VSAQFAPkUqNPy8Vhb=z2^+JtOQ)Ned4EysNM4Va#OgNXY>StCgOlFhtz z&v4E#FA=(K?~1+wxJln}CeYqCc#xV=LESgvu?e*Qx?#IEsTzjR+^|GVu>2+o-Os z3%n9(Hh{YNW|dKV`V_GNX7$<#|24yM!Lb*LuITtsR3YMm6r;93i}bry?bxjiOm%wk zsoLW5nU|Ohp?h4PSyn9h_%t~YqFYWmeJp%VWaA4Y8&5yq0|a82{>fz@SB6~A<57bHXczn82 zpZwpUo>IG&KWjxDSN$uSq}j{s+Fu8M`|I4_(qrv!c?*=54s@!Vuxfr6W!=bbtM6&e zYRo~P9&1Q1hU&M`R&{i3@-P2)T=y~Ji%aUR{;z!10Q`O!`|nRf;FY?6U*}cBxW32q zp}NO(eYpGod0y(Vv0@eLCyITS*L?hbm`_)#@YWT^neHE5Vf8OwVf8q|0IbKMVJHr9 z{UIxiO2&<{)&31u*q08#7pyR-Qa*>{wpUz9?AOxnis?f`n<|T&3kqdn4EdV zQ%T0fc6NK_m1Vl?!+h;p=5``rt3N#_#$as2Ou0QmlebY2_i+o?oUWVYd3e{_=GxF$ z`lD>3R`4~JjvaPw=yvAA^%c$^0W|meHFB{xYSs6n)rC!X*Pq~9?y(if<3q}W=|Q&9 zKVkRboA!$HlGzB@j{IsVWhxk$s(50EdW|ETKcOZnb3fo+>vQ#E_4iQ9xb_3ocjjbuPv+N_a&CN70yGKX1 z@@Z-cw~|juS->M$NJ-wyvP_ETpHU8t!G|N48YOP^D#AwD8Z6ppoo<+pwT2$h(-oVI z#-AuAgv%fQ}pm7!NE^R`x1;w~JkVzoRJsJ&iS*VUl zeON2v<{XiLji($9T=@!-VPP5$ABJ-bB+~#gXqOlh;{9DOaRFtkOV6xVM);I8#qf;) z8I-%cK1Kk+;6I^A_W23oQlL4%kn6V(upcoBV~o8h07ILCF?36_Hwu$Ggd_d3PX=>K z?~O5FtbXR8$55UgT%LaBq+$T65_FT#vd>deva(7GXhE%yv;&aH(1`poosYeO6(40E zaTsa&!<3CHeQFb_5R!Pr>mTLI)TS!B+&?(I;`(@a!p{4cj$RRRR7>^{H+hc9G~ma$ z-VflURf<&dVzJTfmiop&pzsIN-48 zUxXlHxq9wB$yZ1iQZ3CfNFo+%n}^tL2>aLQX~d-s`#lCsjOwR5(=FC}dmT+gjaK)OC!+_S!vs3vO+-yPMmD z4rh$p&%3RS-lW>;EFg@G>*SKPh2S~-w3TI7&E+H{^C0J9CUc;^P)xA^Br%Ukz-?~B z0>mkZVOw86VF{wr$5Lh)p({9YwVPMb$|~i;p_FyrJt(3aXPY7}NlA{S6%;NV6Tv%-WVla66Trp4yJ}a(rqyJ@X6}ry|pMToLj*4`XBK(!7dV zWDlnx*NVCk(P56f10tl-P*{CAz}?6@Fcuc_g#UF6dX<4Ok8T)HqB z_eLBAd4ZXA!l@J!QB5%e_?=eyor|1|xI+$0++B?@{wEi7r#Y84v*lvl`%cJaP9U=7 zX(Gq1e`^G~aSCQ@>)fWvsC=pm4SfyJl6V(?El9veYkL@K=#dA=@S@!;%Kt9GCeVmj{lKCgwjHCG8E^rK!ValCZrP{ z?06Fc(2*-2;P@1Bl))~dA>XW+X&wFvRdD_ir3e$_^0qpFdZU2}lonUO2jL;v7=AaR zdTfcyzgB(ltUoO-&gx7wdvuBL^x&%Y*a~3x-2cqaEf(y*JpRkv!gv3_-(;aUGD#wy z?%K1BR*zsJ$pUP_)UHE%ya#f*9n=cpS$2qN)d>O!PH1D*xpTv9uRK(8n;{t}KU$7O z|5K%Mcgy<y z$y9p)w{XYguWr+E3$#PpXYOlC5~BkK5COwlYkx-v?$vF5Nm8}8w!P~{a^h%Ib11J9 zib;Yvql6^s9Lp_m3&!K0$Z0cy{L_aOOs^PtV9nwjHwZ^^1RXm3UhT z^T#MPs+d6$dO{+HFOH<#xdpLE&=qW%8okE@VF}K1jiy{!7Qoc$8z(no3Q5PlP-uES z6bgkG#uR#nC0r^(1Ym69LLqCSnpqt~;I#|jvFc|NSfL>Y4`|1=*hWz?wrPc9ixFBY zMB#CLY!kP$TsVLk#$`G}5W#kIpH}bJJur1%PkCDp{i@9rkWmr;#CbQt%)QXkJj~ zs=wrh7=HO214ra;8@!yVQaM{iVbRu7@#59*gWzt=JOtb3!-?>16tXTWIt^!?;jC%J z)T%q7Qxy8L(QFbcCgJt*^O}2uD9kHEhX5-A7;&5yP0tLG5|G6?4_nJMNKO8gfTdv3 z=R-s%cErI7Hi{zGv-2J0ie@1)fui@ygP|!Yq%IM6 z$!Ecvb9_H)PW=5e_)VDdZ`err{C9PYy7=L@J^wWt^NU6OKePX-*S_n2e3MlGAzvSy z_J6>rwzvCSlmFM_|HD!4Z$=dk1~@;BZ(s&@pC2EdNBMewXe7PcUbTae>w2KWU=F`5 zedxSLB=tU5Ri+J(E@TZD^%2CjJ z7<$rm6@eouM_e6V;tp5>TYTSFq}_3Kb8^BRG`BhMxPFqQ5{}X47x^|=P#w6)PLO;v zsvkHQj6F$vJ<>)A@TfgMM?X8d{A>rt&1ZHua(RM+gDVgGXl+JGYU0vbx(k1^-l2+j z#Br4?67Flb)ZoJ4l56;+Vvs}uXag1Iq;M?egddK~Ib5;tsFE&E*9)sbFw38d?$#tT zz_;=#Yy_8Iw0w~{LMoodiR2*PE_u~i<}0D^wajP;R9jHI__4R$-Q9`(4VGN3SG{e5 zS_b>A#YNibW*oRye`;+#Z?9#ooo==m*xJ>Z4gQmz*W$9}gApU79=E)nyGPw2>kdt| z5F~JIwJ9$m-Im?l2JM=4iuCrLb+`9+@iWrPc7JNc^SAjN>F%xWa$4W*b^u~;1Bjk? zJHWEFM%MOLwzi#ZY;V7q-rKP>-TroWwl}Pe0Kguuz@96&6_q{=k9kIV*4yi@w^rNP zPpw|IT0@$@1u%P^-Pdu1zU~lEEG1ZWb@z96al_U|kbxK<-3?u%UgLmRi<%q2GruCS ztItzb8gCEKid6yCaC&iqqRnX*byUoqHt9QE1$O1zuDH=pKRaNp)5zJuC--2z*>exg zSNY`(m<*h9a)Vk*7%5x$Czk`i4W`mv;`mCThK04$eXd<&%vHE3Vu1q7K75%@39tE< z$}AH8cTqQp3O`)fZn5p}v#5MHBtF-Al*EQ8jR6eqKnEy|sJ2_{&@QG1_ZoftIaczP zVLb|+E?1iOt=O|}9IWfh8~3vAq9Vo||Fvky7!>Bzn#XHXhdRd(Bjaa^IeD#xVKn${ z&1md))>0eR%Ujx^K3u-rQ06ywSMes?rX&nVoWTH&0|H9$d61K0gj*VJEek7HT!CNr z94gY5S#5!qx^3TEy`MTeJ*@cK_!ZCAw>LJnU-f44O`mX)fnguxwts|^3@owdT}CYa z<-31q@8=^=R!3x^Oz(nWJU@|dqTtxOFKm`=9$dczot+NeUa~?8ZIY2@K`fzy)$Prl zJrq=SdhNZnZPL+fFE_V~+kQ5M{Y_2T7emu)GX#5%$b3-tdZ3lvZK~ha5N)lMs!?Bu zt66XF;y`R?+YnO^{A6gV)$O)k2kcjg*KywbkGoxf_2(?X(%J>jt_M`w9>$yHzEeZ5 z^Cs0$0+DyEwV%T~#hW$sN>q=|dW0uo<5EH9#0F_7(Yrj9=v~MY$s{zB{v6q?wR@}G z&W=%y?e*a<<)tY$+zP+fSGQ7q;K}Wm9ZXV#+K_5f*P?)1R4Zl{EQRHmYcK7zy1N~G zQxgNe^AbAq5~{_h8(FgHD=(R0kf@(-Z$kF`kGWbSS_-RV2k%-UhouH$yC^#qfb*i` ztKPt(#Q$Ddq?c-sjoYrGS@o>5(Rstu_Qp#s*e;ZlS44Qnc6+@O$!;v2{n*{!^~qq( zLtj52XS^_Cs?{06}N|hXW1VUBe^|f|(HeNrxI9-EXPM~DZ_BtDDAfHw4 zrVDHU6IdeTKCfjk80~e7K&{#~&`HMBMhMlJxQkO$6Xn-19V*vCSyjYb`Cnu@v`@>t zNxpr~NNte&U)i+&yUFP2ISUAGNm_=2dC za9^EGmIDi+i2DsLjSCuie*|O~FSq$R5e)IIAg15G__GY)cCkZw+2UxW7PB_419qt5ZFXH#jU7n4qP@!8(mh}tHZ5h5cdot|;v91~2f zy|YUInspm|QE{38)%4nMzKZtZYfC#`^YOfmb|sjC%Hn($dG=>*G1xhMZ?Dbdz^f+0 z1xuq2Tx->dRox=Q8%tviWfLcQyxPv5i3i`p0BtQ!wE-d+3Wa>bskf`GEdzXiwaqBh zr#5$_YTem_mwy#Ejg#PooV4zs2Oq1*I=kRC<6eA#H+NMjfP^s+xrf7vf4n9LKus;h z*|b+2DL40^By@loc}@$@US~B`>2$mR{j=@8t+iJ7weWptM0{rq1*Jz2m(Rj4?cff}2$XJB&e73dbH9P+3GMM1!UTbrQ0~i$>jS%dxvlUe5(r!cm)?d;xa#*%3PE-1V)(~zp)>K+~JZnIXXiy?@!wEL>VknjFPfe4q= z*hq1yh(4~ducZKNLm+w*8aKt=)mEb+^z6Yn)l#-G*7)6o>mt$9)=G16yf;HT|Z* z9LmF(u5~m_tO_Psb5Ym~aYTGo><8p#gwL`TFj|=BQKGiB8)GBB`l$m`7`T-PSdQ!g zju|U)q!6+i|uY1zysHbg*VRUCL2+^>VNSSnlsL>zne7O%S>_$TkXgzr839B&EY&2i=IEtdfc%0{@w zC1oWfNJ9yqRx)ms&pz`N?`mVc0ZpI11!WJ=2-{lUmhX9?^s^6q|60x7^Zzmbbl@L? zidb242Ye1-_6=a?pA#K8yQYHU!RgsWj8ZZ}e2)63l;M+7Mz^d{r+jqt>~rqsW~6MQ zNTG~TFQ1u_yc~eddzq0q%sDPE&+PZ6)4W?sU7lUxZD+F=N+FNn{u0}1JkG>%9BJv5 zkK4X~eWG`f07Ik=($8_~M#{eN3^HlL1q35^Dqn=K1U3{5=I_y_7kNaQcZ(`&c3A!7 zAubA7qDX~ndrtE9+4W~xpIp5kFmtc)hr6>DW)=+}B3nu^lQ3YX{i((1&o+PIgN4F; zzcw|`^2&eLr)n`sk|ZcWoDmu-^ZBiSb{&4bONlUD#zaQem%S( zqGgs9cgw?{M;zV-_{(1tV=9aWD6XlnA2kD}aA&xh+}se{41vm(B4Z zKKbV77M479X|cYv=#TYA!!r2TPe~zSVQ#q*@-=JCx<4)~6C}kS=NA@g;jvk-H^XCX zvEEesp(25?&|GSgLY>W}1kuvcVoa^g)fWW@85Wl3B1B8g`m!1=Kop8l=W^(T;G{kE zlE>xdvH_>m=KNCV<$P^nLDlCFEiTS4)It%d3G%3sn_Fsx$L8F;QscP#Fr%cOSJ7ZZ zLKRdtAHc6Q8!@$6Z_I}wS*R~B=@GDM^+sL5=ACNLmPQ8v=I3k8Fi?$VZ9ag%ut=?5 zy4mp2QCAn{mehU@(ZW*Az_(WBmgNJJI&0`OhSCgYO*2D=21BmuE$?zejph*5<`(C| z3ZfHpp=-_MC99Jn3rq9MO4XPx)oZb(dSjt5U%XseTB?V93;8fFEiKf;Qk+{NeR!A+ zM@gN<1NUW5!*}_2oC}{C!}^BtDQL8bA7`J-nLcvc^WlgLzSVi@eA<}(^@T}3c3BM8 zI#D^8J;05?B&cC0`M3{U1ZFen;1#{e`U{+J#VG)xgg;(^bL|RDNV0!@n4;L4?uWk@ zCtKaxsdjd%ud2?5S2+!eo^t4^Zh>q?Oe38zEpri96!&Jf+PRTOY_-^t>R>)NQ_tX5 z?GNKK3ry%?3SCXm0hw{4E&Y6y7mR=>FI*HY-{U7U7EDuwiznTfg_>Y{VwXa1tSeR@ z$HOg5zM|fRX~xWDFV-PC)vTc2;VLt73%9isrYChT4jpV&<;8jxkF+|q@)0K><-}%K zqzBTc*MZ8Lzp+H|2_T|kZpv3w6Y)y&H8Fco)w1BTG@wpWjG~Bsh4#3Y5K*gIdJcbt zd}qxD=nWug;=|bsg(gik$Eef+&9xJ{U)<@yJ*ub?iF{DLz|dx=n|4;_*?%| z_U?u&)NotpA#TOx4|M>mL0I{r*#_V;xYgrDyj4E{YBg^cnV3-flmgP@L(R6*ax8)E zB(ghZ{PVupu+Pec(X3(e`kWs9bIfc635X=cCEOmaUrG{@*6!$JaA&zI36!XP0Ct(L%spBil3_Mlhgiy6NK5y);`Vz|uc8xK6GiGmC_SeJN_f>bSuv8JJ zeg$aZj5CDFOdMdwk+;0V`eIzU7l=;{UzeI;)HcUv*9$1hEe(aYw=~sz(b=I==fF$N zK|7WL?cFcEVA@}6;Cw8ShQF-_eNfPX&A{mu>=@JQh|UAEN31`%W$ZB`WA{c>QN8hR z;4V*_S0sdN;*Sn`%+56%3K+8^Q_GA5VCSW#vo|qlddid6Zo@sZv5Q{OvtET?larE> zY6@b)@UVE{upI0Q=ZoDgCgbCC#(DPdr$ypi1c(7e2lvHzRwrbn8J56{Ni^nT2dgif z>rwLf_9?4zRIjXXR_v~&L{s;vB0RzS zDQ37G8>d_mEjw6r$HEcT;p*xZUlFdZmUDIR+;=97pzqWU=(PHC)t7W?tMJwy;|!V9 z&Lobv^D6mt#vP$=gp^0WYmeO8MqW-9IpHENluHuIA;1Ds9ZI#I5(hG6WAKFM9#7cy z?g5kIxzxm6+t(Y46FH^BeEGEC8PaD2*~NxFQ0Zm!c+>(>wja5=+2q#^GkQPVpwK2GYnGRo?S-AhDd+ZW!<;%PJej>plI zFv6?AVw(J3pT0vZfk(E1&)8JxST>PknZv&{5`S_NexVq$V4y*u(I9GE=o1oo9dhW z>YLY`hg=0Xs`5TmgIACfkO5`dgO67i=ehPR+Q9uooE32)8X`NQpQs>`S3&3Y;F3$( z&|~wWA!zZph4LbPanM;zT1~F)Lc!y~CF;&4Wkd2^g-Wh)slx?^>72e;r`;Fp952rm zSi)jTm^OMdHrY9s@+x|($fUA;*V%kcp>5Y{`47=7jYZPg4RS!`rRK|Iuaowj5|TERgrd%+;*_s#o|GR*~3__s7Y#5~70hfCKIt z2g$9$!}+ROMI$j4c(Z~XZSjcrW`AYqVE5*AIYn$y0TPaAUjPZ>)3{`Z;E?N@z8q2+ zK)!61f-g+1+z}`(+w5@q>lMs|3DjOnAA*>f`~rv(;}-VFFwlNsRDhbT;!tN#u~Y_p z-!Wk)_$yn{J_l1_Cb&c^&qB6Ru^v+OlGl?>zn;{cX*naO)`|?M8MrWZ`wzT4f-bIM3TY&VnS zU}ipDbJ0AT-z@xX+zWC9P(Vz7J(bdnoS@&+1-v4j?wgqS-PuUl{u6gDA0FNP_rKla z|EDoGSBU@GsCoRi=J)uocTU_Ry$lMH1U%o}Np8Qf=Oa3UY$q+bWWag&u7CI*|F(E} z#AeWqIc1W=5us#tSuFW*!%d7X-BWhncxZhn1bf&-k%!!P)mhsm()tF9pIql`?QO1g zo}+=yBlobm&y%Del~ugR%Hne59E$H$%}P?7D!lQU!3pDDN<^4kr4$R1j<_^ll}DiQ zw^H4TtsCQwHYGbC_oT<*wR2OEdi!;@wndDzdi72?g}yeZ5Z4f8Rtk1}Z-+gt`&Bj=(%mh`c#4}jqFLB)Yp1xBOB zRVqxu9}VyF@)rXu`Nt%N1v)1!s+ z3#qo0Hh$boe$x<2Kg&y_15JgLem1UjL>r}A)lrxlqEU?-(XgH# z4+LifBZr*~WOQ{PX5PnZ!vq@+7qE=c zRZwm$bW}j?c?S9N`2{8n2P2tx4~_8F1NjmHZF7sdluP&gq+D_MfNCbQK)k3 z4TK$EMvX9F;!%P(BMg5uBMcrT7?b^ir!N49{mq82)HR7@on5F#M6T&_ZFpC~Za<{?d#v{Lzdscw{-4 z5ytQ^pMT)we#VDGF7j;ArV-#q2!6ovEp7>X3N zJM0|i@1q&Qx3jFUus*@E!bHOk$d_7HM8P#$8M@dvd@u1)HR@asy+9ljs39+;F5ngw z(V(J`SVxpo&@YSH7bst#bsF@KnYXR}NBkUNNQZ_}N!8dycqk&rrEYT)wUUE|0zt8g zs=Nm4c(wcx00m+{Y|CL6cGY0FVI&FlrL{MKI2loSh|Pvpp;Z+&0^r8=@n9p2K+2-R zWFbCiK^1vcp-5eGx3-{1{~S?QnTWQ_BbvMNa1&j1$;NtP8u#Pm8ey28Ap?N8MKSoL^eras1g!)gc&{@{V9n`sSKmqTF&B^-xW(c&@i73J-DGsQ!Le`5JRJzAq^($#^(S z`dA|;wLe}Ts}o@HyP%+M^IacHE8A7izUyOYENo%G0E7kd&GoU0%$w_Dl~PO}D^D5H zTzO1=EaPvCvx)jxN4Y*$4uL6-I0J;XO)1^#sgG}QfZ`dB%rHoc~gh6AuvUKEE~I&o|rRo{0r)1ea#)tKT@WA|93U`?bFQhKT_Yg zvUlr$)#e)YLj1Qzo%_GW!s7S)zi~tP=xM%r^LxBr=jDF9#al+5WO}Z_1)x%~nZSd} zJ3K65#f~M##RvJg$IU>@Zdzklvy5b)Qp8pB_5RvSCD!GTl%;lXQPdlYF$2m?VJLzN zZ<@RQOk8&Pi%(ZFxV76TRxt08*^00hujs7s*};1m;LjXmTz;Jvyy{SANWA9?E26Bghl zF2%F{-!Tbd8l{7n?Gkta7n#FQF7G-d&qYg$$M{)vUvglSUh|6=X zJ2h@htiGaw5aZ3xJ+&x`l>n1OKyvRIe@jmDQ{lJnK?Q9z#KXQJX0`5E7jA`&Z9X(_ z_^8CE;?t+-CiIUFZceW=rEnH$DpmIqrPLY$aY^nGt%Jh~0fucqT9LPXLbH!fdaN#4 zpcfVd;Ls9Ugt*I^nyO4IFV@mxh<2j;J&)u}XakFK!TLSxUs;St5bYt4paZRF1vF=0 zmNt4cJBf>9v%Ti3tnF@lcN9{8O*lZ5U6o^HK1oee4XxGPd~Wl*)6KQL&CS<{8c`IMyY z@&ZMH(+ecI*}+?Ij+TqR{SN_$x<#C!(ARR{WPxNUic{#*mG=^`*J{w$HRWFipH>mkNm!o`pae5H6794G|G=(g<3-zBug@h4V1@Lh;6Ih!VnC zXK*4Iaad@b(bg)KiI(tdVI0Pz*0Ah~9oD|Je$J-`%Kc>B_@9)EN7^~ao=^9#FFuT^ zIU&l$@ik{@1Z!6Fb9!(zI5;`KV0RxDsB<=tpR@i4Q_aC>^qM6Ny>Xz5U0I40?cF4d^e9_x&@0i24ru~+(`mX(E#(5ud zdwZI$+79llnlp=zzMS;{AKje2g|gntdpNju*U{6MR)jJ@6NXRtwqNUB=h}rWYr{pC zMyM06uvO|;aX_T2&Vr;ojIK8V`3dv_W7PGk3RXo~jV{^eHg};$->Oc{7pfY*NK&Xw z?k-}3=4y|IJzP2shY28CYH#gXrO6~afwRjdI2vm>o0tpy3IikvAUAJsP9_SCrCL_E zD;<=ajAt|p_Fi*!X?=qusXpSHbZM&<++V@Azq8oOJN{m)5Loxyko zXd}f*eYFvvik%tZId-l0>j94^%Zbr^J4RmH0XADv1@Kb)yYgsb6ipx8I*K?<=_3GW z8AKP@R26;Qlh676K;ng!Cc5q3-bM%*(qfO9gZKLMv+Xq;%Xhbl z1+Y0W8xXVz-aJQy&P8r$t^R+$pS zbIG1a#3A_@8L49-)j=5>S{ry<_i33cJ>j6|V^&^yrkN9;mpE@Kua-GHupY9R0Q}5$ zcP1;Q;V`Q#LyH9q<>1SP@ocGwX%I9QlL6ssDH)SzJf8L>cwI}=xIHm@Rc*+y%trR$ zqf1Ht=TF5i7sF$vX0bnw!7Nh^v3A6v zi$Tgb{B8;PCFK<4(_dxo^+sBE9>Z=G?IBu$)6$=GCy9FsPt2LlWCLO+Jur1o0my^o ziZJNzqDH4f)f~zbJkf*taV!i;pvgkWb!#Pl+?e0d9+kzsurq&$YP4Wx-o{-19r9X) z^nZ7dVj*~+OA1v8-o(lC>ca(sV6j6V=z`>`#Rfq9d7SW43nO{&Q;xX*{VhUDn+Zga zKCD0bu>P2j!u=KBmm`p%w2W;8ytgBqQ{i3YlnHB}ZNg=2a$qBHd`7_gY%A(|7KBdO zW_^X@$Yx^&lU;Hn@EIqYq7KO_w;C%}&q_08iVb#hTj&w^ut&x^QAdz=1)w%{#^-QH z+U=}47RxF?tS6mde(|ra5)*Mol2ZJ8)9%XQd19OF*c%dIyUedjJbk;iGxp3DwEkzg zgO)%835Hx$RD-((7&QGHDO68J&{k-AJ`@Ut&F95Xp=X7N>i|tl=3s-Ctchx7bqo~> zLFx@WiJ=l$p&xoA=vmQL+X}}PBeYg10x;5YW2kTd)0~J_sJ?l245}O1E@8B41mI~WJw(PKftioq}D;GBvNl*~6 z=}7Cv1gy<-R9D1qb~PZ}kQSqJ&B7BEwxd>Mb*}nLXqY-(0s3d)L*la4NI-izRi$#a zio&9;rQ#?#e;M3_9ex0|&4&|p!%@h(?hW0Cv(9kZR;pEZLZ>M7Wl%L|3V40|yvlWZ z7@~Y$89F?#M*t&^(>(ReFn#QthppukZ;sm&uoR@7^fSsJOuRBxo!~~yus>$nMr%vA zOJm7wv^uaF(4wEf<^cv_C7a;ni27^ucxk34?^czageB4$q)_OWSg2IympjXJ$ClCD zRRh)w(_Cn$hq1RoHyI&ki1DE6LtofYE^?Zv(4j2rUVK!C2K6c)!c&(z)r!x8H|O}C zy3+7!o`&N_{0q3R`4%kl|L8W#=fA_li~jMWD}das|1novXx9I&R-e~7uu-coO8;YV zvGM)<_bnFQ@cD0bb-TSDk2~lnaH^S?_IF4soN_EDj_S;}=g29?(8aKQSg73ItrGi1>ofMacPzgi431Q{ozA z-QAjt<98L=4P%p4i!tHkd)1R3j~Oo z6yAoje>)z$@88wl(Z%`6!R6(_U3vZ+zSCaPo#e&I<-wWM$f7Kb?S`}q!JX-}k@__r zI83FkZt7`y4Vm3DBNaH5Io+*d!-Dv)Q1(vYpXt<@2u|I|UcKz8b1wbk+IGSPX^zhD z3|-KE%L}=ZU;)L6~G)@AVt%5e4DfqnYUw`cP&z0%z=c{-9-|Utj`QF9ZfPTI` zxEe@3ZLA(0fFhvca}^yleQ&NNloUzT7PtHn)kPJftfJJFg@{LEUiH}iUO?AEp%F=s zi2OS4m{o;cY5n=nlrj8uT*;n<8lGg6fBDm)y;6rO?>TME{Uv*!{l`kCk~}_ripWtH z+MyVB1Anfa9z7v4Y+g8J_|J2z(yMoDIZ;{Uf^E6-gB?yX%5ymB5V%F>EV}SQZPF71 z)C>9fcu3&XdBG2w>i8tGXmNC{NUXo>Pv$ zub8P_%@dG)$yCi&vxUNJmAg1GanGdTh9SFk*1lxgMqTFnC_G@=HdpVNHeY~Y;(XSY znJ+>wYQAopBXwI zH9=_ZYk6k;8m|`Db6n@gtolAK5CSuUiS&-^1$u{VR}?ozeag&a`N9YN)c$0#Wcw3g z<{4rQ^$(fGsy5pw)V#?amJ(q92l%piE}m5jS)5T@T3TLOs?9IX%p`{ls-hLTt+m9@ zXW^%>4lR<95GF7(hQ{jIaNv6=EJXJXLXo(fq$OqLX3p^n!u`AJI@Jp-V`!G;<{h_( z%Cx@Vy?xrFhLnDevJ!E=sNMkx@Pxwu5T{Y5|5xXy2gf&$EdjWP{u8skRyhC5{;ye| zTlh}@{~7eZx3$q)-z!jbga9T1u=L0Q+(*(eg)C2JA=;4%Jv?SrCw^gnpjbk z8H_9%?aGuzVlH}a#Qguue%^@!=;b-dqyb5l4!>BKt}ov50(i!iXh<=s@WQs^Fn#wi z!RIu%2U>oP#l*4cAfI2HD=awjqm3S2L7K6(QSX^mqE+Mt!DrY^fz%QU;5ZDm-SgAW zk4v|EqjcNm0Ky%=S6dsaU4D07_An@VWYUuB!B{f^Lq)nuRGXK$?B?I*D*qIUoKqE# zTY3zca|&%4SSk&vysYvthKf@oFP0R;WHXm3M4tnT%$)Nj|tk^G>-C}3>24V=Ia_>VlnHdBnLjb!NLmgWYr zmD4hV0#ZeQU2f>5a#MU^TJ#dU48JfMPKmjh`Em)AVyvo>7g!#Re}Rtl_!ms~$P1>~ zfCb7pXOd^(@yd9k5?2#tq_&k%EVu}9rhLrb>O!od9;#T3RfL4Ci@{YP&iKTduGdcb=NP!j z0M67*3hmHzHG|D#GuoV1&|hcYkjN_02m5Ib7hZfwVr`+;A!+_TRbMbPJfX zKELNAwJl`6aswI;i|0oNmq*!A|2GbDvUz9m&eaMz6^=A49v2WAZbj1uk_WzvNG~B1 z)|~HVt;cwYRi=)iIuacN4CQp3GnDAaBqWyLu?5TZTSBB?=yjg2w^o11uKs>`U8yKo+{?;3VYaCmIP)Pa zE*i^gifbXeDL^+SS})rW8*hC5=KRoBMKGPx z0%3QV#bLhlPWuN~AYNgtE=IsLcWp5}BK`M4O!TWjVIAr;|Dm@z8OkYbBvGSR29+(N zENzbB>b{Q*w1(k$t%c>pHI_H6PD_s}i&F+(ZDw%}56FaPVttWxV&UpsIpmKs4pye(fY#NVqHZ^pId4!TmE7-b2H1e z#kpn6GB>lhP+P8>Ug_M-LVdB}Rf19K^;*-Q0kJd}7Mf6~5;P>wHB-?BPmP9JRr>Nm z-8#tgJTGOCMUKp)reyKS>AD~%Sz%8+j2aq*^EmXNwUv4%+`m%Z@$c8$#)Tk|n zF_@z%2fj8_t2G%ALBR83Z84_T>o_i^dRemS?;bJ21715knZ>f7nM*e)7=a7pDFro# zI&tyRE5Eww=rx!BIXehAw%kl9bQO&ZQ6Mxiri>&(yQg+NX?}9bh*C@{4vFuTkkLVv<2GaHI^bW`Mrr8$fA!nZ<<+-7|FdI9 z&i{??{(rv3@&Dg^!x!%VdoNJ}i0A*p{k^5LwEccO3IOtpa0^ZV-OJs|;c3q;8E8Ds+q0o}mkMrOP|^*HVeIQknh~*%UlXAg9HT(gn95 zHt)xHbkGI>rz#OR}(_-L`!hXRz!9j!qSXIUuX?2N#(9#Rv#+UHh_!hp0*%}{o|Aes$r53}tu_=@?jz+A3 z*bvX`JfyX~P@h-x;?azW!$~-I#FhfrsFr!vm{X+yusE+;y_TtB^Lhr*dd)L7>P-PZ zH`Aysc^%C;W38y8xnPhyGDD;Yky;9&hf;^o{DhyTK7#Fn^ssEB$arD&zA>QFgn78_ zh)Rq*VxY|UhqDtHskImL+!u{D0`9iddK;MOIv>rRa7dB|EIB0l7m%YX+ z2p5MvN9HWYP_f+>U7=kxD}m1Z3EoZ?q^IJArvSa8N|T;w>{Ha_QLQfno~D+fsRfGB z&aNgsD{717XsmI}fp|fRBjtdcYMQc%L5v--z0Wuq9;$3kbKCl?vV}5e;mGYL@=cw@ zL-*P0l(Dk%S2`=%UwGv>g12^}CgVuw4!DVAOA5w`td0L12oj^$yFQX|>o@m5Cqm>N zkT|dhyb}r5t4pXG(tC-fSR+pUY|KSqa`GpMc?&;A0n0N2{->+kJ(g3Cf61h@@)Ad3 zzVWQyaDf`7?sk-(jz{Sz>1s_KX8(mL>&L+<8h8EShNy0ZiJam>Uq0~ql^%Ahd5e3p zVtpH_;Hy5up^w=+xvzLBy@6JRN$Bax77IVL`2-xzAKe^Ya}16Kv6a2askfnd3OuV! zvWa^a*~dPr(2_cRj3hlfq@F9BO)-Fc%gbPS4C8PiGmsEZx(^XVhr<@p!QdQ*Xk-GY z@Jgl5`zPl9C4l74eXi6OUJlL=As%Yg-Ra?3${^LvM0VbHe!)Z;*5KA8?T6JxJcN*z z+2yAZh~%9j%&+U}g;QN9=&u4&u&-GkR!0xqfAW`hN2thj`><6TSCzE9nO!$=s|I8i zkqCMOF0i6-soor#!k(R&h}ZQ%fF}9iaL_+DjdLmRv7>#rc-bk3t+JZTwBiN}9xmc8 zNqvY90Z-A!7*^0TMNPw(jT|9@5j5n8_9K0FvK^a^9TC!M9pl3f37>JMqV0?jT^LA0 zr=Oww%%Z)V>HmF(n8sR1=c6OzxOE8DB02Hy8@x@iOyl48(I13Q8jJ#OS4ehsJU z1fN`PoL_xDJL_}&KFs<9Zkmi~nf1s1;Whg11ut6;PNco}96%rN`W6*C>jdZF_>Gu- zho9_GeQ`()H2eWA+><3@e*%J?Kqff;aq!z%({+4!l@7XDg>;BVI^Cu-qdYR{Wh6hN zYJ7TIRSrm2*Rt}^i4R;N=)Ky#wF*1LdJQe2GUWxh;>eW)IX^R)Y0Xclj1;dz9jdH14 zY|Gl9E!<8Fm$EJbR|8IK_}v!ij1s^-@`2Szx0%z2JpeO1EC~y5bPDy>*9Vteb{$@P z_${ngP6*?V5Cl3SiP9jH%hoDSCt)xyyVQxg0EEgo=QG6_ie@1b7FRNg*l6WLHIh zltaaV-->t64o(K=2bXwq{DL}!jVjiE+q~2i?O3LKl=+;P%i4xi4U^hQP zd`&6V9*%SmPw`Y_x3V0Q&JGUWN%os!>Xud?<>6%UEHQQg@>bIY4r7ry&#cWD=F3-q z-VY3k0{CgUYX=;#`kAc zXdm+~YCWb7KB#|F*1M;nyNFt*Y-T5Ci{vD=?GFwCc?;t_76wUf9tee&({vFE8}u9s zKN%%JZXNREI+FG4e`B*cF0qY_ciLOFF?)FD;P5>nfV6o1x+3gFwx8`peU-Oj5%p*l zl$Nt$N2GP=oePDn9}G@!5N{xk2xLUcH1V%=_#0CF_$KV}|M*7A=fA5fbi-yII{?hx z=f7I5(P-x9Ka2l@82AX{!{@(VZ@t4YBOU+HwYC5-N)C6w4>RAkt7G@xSSTCs zZ`tl{i{+6L?(-X2sA1^n`R`ySckZ};ae0jlHY2jj)#vl;gHN#+1w-;eJrNQZgmGRZ ziF^}olGSltBSXyX@;L?`k$u}`B#XvpE*^3$$gc5dzCWm7)N+i=vIJFxU9_(?Gm?;~9)MQ&Ld{oh!76)H*R;tHi< z0Tg+|O06u#x>lMbNh8S8pN0mgLfOYCfzxu#Jnflb9YS;IEIYg+N=w1}H*yX9Y^}47 z+8$k+@_ISRd{sTF!YiVN9s32)vC;tQNb^1SZtpsv+>pE=MqID5wM!kZIJ>_xNB-?@ z-r12F_BF_4-|tjtPYe~eh@SM?)@2OqcK8mJ|3e)tJDaWN?Wso8s!jLT?r2BhL@;8v z&n0~#(ATHE^?pqGU~+7<%vkCvgJrH;=DKCB>upIE@H(5V&(z7x$)8V7^7g#IXMJYL zJ{S2MYNcVX=4WcWS_q#Fp1nB2gP~S@6gl-Y6-}Fr^ropVdZI?SS~MUq3Y}5Y%4YzT z1sA@;sb)x^VRJ^ZgdS4Tdps=T!y4E>E+}-z%^Y$w%e};iOkpe@4rKIrunacY67Ae?h5*UzP5EHpzfybiRQU+ zZpy`;o` zC;xZAlhz559P{fj2!1`V>a36tZ6+|-q}JWbOA~S|KvO1W)&%gC&F=aJ3Hscjbn< z)B1>2b7LkIbi4C1JPz_18tS`dH@`|VfZ!HvWlEvI)|KC^>0)iZxHef{-mbflur-j) zdJzLO`g=_9rZv+ju9={f6H#cz%SNYG>hVxt#?!>Yq%rhuHg?kQl#| z#1fP`idQ9}6(UXZb+-RHq-Dy6#gox|3x6XEB(X?4E9V~$A!0SC z;V=QcgM3oxY3;!XYkx3|t(PrJUouLghnxPv7F`eQEbXxd-=gXB<)v-Bd3l z9Jk`+acn|i+ddd6>*(~&kg{}Q_xhilnrz?!7R^V3`o#>zsWA%X3P?=3=SN4H@P zL?{=;t+&|vn5q!Y!BS&#_PJSbOlIY-FFx2=xF}za6567(Q0t>=P+ZlUP{!hQ$K0-c zr06~Y$ko<1_wQysbCgZgCUk=ZJHQoLk^v(^=Ko@uq|H=tI2P)=#gF!QpP_;mp{&hW z_--fdi?#OVHWB=~t=$ezP}dM-w!7K-b~kHpY;<;ZJF8h|Yq$Np+uG>q=G#|*?$Y;K zyX|cEr*^i{e%{_%>$WF)L`mAPdVUD`#ANSuX6szRS6)oDYcNJHYEx}~zLvg*WDdC% zXm3iWCI76t)&2Z-!Bg)n;oAWX!=Uc&L3+13(FW;&ELZ4n>vRGBXs z`DYI=Xh0(w%cLb~?4m}qIzbG{>V&VzN_$g!I`*R-e!Pj-&|ZW=^>8qugeGgU8cNuY z)CMQ&g_C)mobQaJ*p43~SOa$3LR zw`zhb?;rt!byUm1E!rLAP)Bmk&IY&G4dy0xqS%Ev%kf>Y2ZbVFk1!zZ%5af~0q>x* zeo-aZl?XQhE>Qg~%hiwqSvp%pn(yqsCTEyA7D)usbF*9{eh35P=`6`K!T*zZ%OU>n z=-}#f;oI_m^~L%5g8p}-CjW0J1$_7a_AMAd$Cm`vg&)}DBKpc!K;#4Q;%?^mTj;C#ea5o=5AZI!qoZ(XF{aLp1|MK~?<{S`McFD>wh-)gAcRp?1xFuq= zqY&!1=#ld>>DEvs=1;CzNet@9m49bzbz=|jo2jbo-?PKD_UiwGi=fz*rD>qSJzN3> z^C*PX=kRSFp7Ha9yJf4!fR?BQ$jkdt-(AHUTP#jh!@+HYjYmdA+@EK%p9qEs4a0q< zg@|@e2k7!cLDolkHmEbc6UUb>9j1R8quAyoi?9ncAF)wC z>1V&0awht`opY<#8IpjOt@R%%L10PO&iyy}kN;#pGjjc1jp)Kv4(dD@(Ip5_>^GG7*4MTwQ*?Nr-4F zI=R69@SP%%kMhYsYKFKv(syqi2T}O2wMh$jy}iHN?rya|EgurxNa()ZWco>?^OaPPG$>m3Z4f zz4#a!*=ex>+kk|8Q*E!L&|<|mw2U9Qnf{!-rz)G6h)_d>9Dhw0mq%5;pxjmd>;Jua zI`~*Uy`(J$aO(mXuHUhVHI!S~J7S`m1}Z0*F!8p$8MN$-@EC3fsl2!*VA;sI!OS?Q zSDJHbY~>t7RJFL$n0v}^Zm4YBG`ClS-}`Zie!RGRpIv>x$#AyOeFa8g^~%kenOz!a z?O&*AWov4xi94msvry05{vj^Bg6A$s`gUc0Qo%7*B)Ufn7P}rll7)%x;3Z3w9+E56 z6PG9(H||F*koByxVvA;d0c*#A9}AP?!%Krcz$gi8$QDdF=8sg*( zs=rpTvi(&3RUd=%=y5oFcQ?L)=DOU(IGi zITq)1qJ()+?DkJE(*g5!gO_9>Hgh}|(ONsAwH@&Ej$<@$s+LX6&RQj#2cP88+gF%Y zNkU>D+2yQMTrO{+++`?(*En1bYVJ!pI14~?Q$e-;Q}t&);AZVP(~pU&-l7&=33Z)Z z4vygbxu#FB5N#KQqEpvlMVBmgbNQ35ut09S56`@nvbkR#Se6SD$|VKZxpD}yk>vJUEehwU)P5u0pIO5Ony%%gPp>Bx{J zEJI`;5JgCcPz=yeq78is-t;BJ;TyB{)&|;Eu>|58DRMhCRg}MX|^QuG)fWJWVf@m$I(1AibGh){ZT-m7mz$gqtFt}g<7gb zye#!CHVc)SKS^Gfs&w5vRty*_RF=Xf59IB{5H$@PqSZ{)7Ko7Hytu@ioEo74Nr<`& z{TYIeNWj_`s-X@hOr~RwLZ7Xz+i?|#115Dkz@%H(Z(w0Q!L;XGB2sAgowU^)$;q}l zA|#UfzJE$hEl;jADb;c|Mc55m?g3}qtAQ5PUS*0UzGngr9&-#A*_w3C?_Ht=>XbKL zceu+1#f=x?aooYsLwWMWfUIvoxZzsVwbC^yIL78(-_x~8ctI~g-oku2 zPGmiCaWGs33n>&%%L!L}PNq*kWtBj#tC*+%9i)#>a{f1T$S-dnWdznrHPbQ-JNw^h zQY)2LLbZ+7IGZj9&{$2nT6I31(-IMvDYM%ztX7 z-4J@=QdA#YW)Ae_IpN?;WJLpGOhCenaa>+?JBT7HQ`Ni3b$Z0d;jb(z z`Wu&-SMl$@&|rrc7yWfvtujQq>l83@1W-XkB*C~fh~nX$;*OUXvKpEI2q!G=u>x!d zpKYr%a@j^rul%TDltc?!f356jaBw1yANHs}4KI0Qo~%G=AS`kE)cFCu1JIZ$O1!NVr#Es?@DoN_ismDMI-trQ3?@oC7Nk>DFUU+R zObZv6v|9N|K0zp9c6tKpFAN2CjJV5qu}SIRegww(@LhI=gDr??(uj#n;Cc1EnAy%T z>;MRuMNF~u8i6O!FsPIe5==gI>vW-hHB(1f4ps}Wgi^8g0Y;mRcpEFe z95xKAh<~;~jIR>a50r^?JC>W$kQ-C7jZQg>N?c&)Ky&m0>EiZ_Rdoi>S9Gt;D}TNL zV9?@X6NS<6r|=pA=ByBxqkZSl42c{ap) z?AhKX_IF|_Pj-)lZ7<>F;1%B;o29Ex$eh3sAW4%gn7<#Not+ycV48P-7jM!>lA{=f z7QG-6qWvyD7UNvoxMANuaMERiW+T_0)$lT|Py;7f8+qi552|8Ri4XOeGMUx}K%#oL zhfXF&IU|Wfc5rb5_SPv#Ml}G-Pew-cE+Sd0t=ZA^p!W%k%Te%=P75b6D35g4$>rb@ z;a%kJX*+z2UwN?}2`bf!xWyAfLhZW8)NWpU+MO(y>GtZ*tL=>dvdA?7`yF9&KgXu- z+Z@Lwm~Sv{Rc(XqAypLD;dbpzr==zV6S2kV zJ;hmNLDFZ7Jmog-LTpT7%iBr`bFmPqqqcN)dB*KJ{yMt7g9AFE?%Pbut(F~)oFGQz zZVML%waPMEsvSFWMq2Aj1kkptBa#WZvh%GyK50lL?&rxTLP#TcXI8#dP`;ue{gvB$ zh-GGI@mv^@?S*(QTywz%>2Ma$mT_&^2oS)G7#H04;9(#eR~+DD^>dOPssoz$IX-FM z>e-j94o&>U?4H@ScB+Ei9IA*-5lRX)0X<@Vc-yNS3a8($o zEm^N94cG94TPd=OkCNce9R}FKcoYuXtT_`PUF!U;Lzx9#Svo%UrAy+#X?$;2rt5Z= z?~C6vx(Z3%y4khJm^i`OU`v{89BO+#7Q378W_&w@-E7l-j_f&b z!x?u6KEje+Xc(C^rK`JSjcm_(^Bk1cbZ8@2rFn^oyY70ga)~~X_k~T|6Xd{PCYTcMtcq}&CyxpN)eN#2LIG?jT_VWg zuFX0hVj?m=0CwT%AfqwRVMK5v7CHjI;e`%wdh7n(`(QiQcARy#a;PyT2|%2^yTqfO z@RYQ_HO^r69*;wb?q2uyj|upL3@7=0Wh&+1-U`g4sHI??E2_7@EAa9XKvkxhXb)WVyZrNkluv{g z9L+DzkXbp2oGi9~lD3y~9`SBaD^Vgvy3B1*bT7F><&ng45`Z4tJ*iN!VT#zKA)TD6 zD=R&t6%(OLIuN>GxWX3-)qp{F<4kC_HAuwfzM&C#B2>7xJ!L4?FmH6=w;Sq2N%wXuFL%w9&-$JBQ?k;N?2>t?s5BerM|&u>`_VhC&6*AUoILI4v#C zQkW3(`B7TMEk5yRE6v&hl;;?cS7_0B#!BICU2l*pt>df+Y2t`6UqBN3X} zeb=uUOpjoS#w9jleB;IQO`@6>%_j;wrR#*f9{n&$Gv;$bS=w&V0qNd#JdX#eP&Ogq zil3bgRsn`u1fw}$B7lsboR^o2s%RoGuxTn(9l{lGcwOCJM1m89gTC*rmy!-fYV~fP ze#3%j3nvE20bKT3wT70cvD~aOxgOp=Ln3AsFOC-J5S_`lcbLfx6}p2dV$rjoeFOR2 zmwgeWM)T5*#7sw&IO6etZf0{c;o$_aB_2Xju3i4gwPnx$u&l@a&dVC;HkgEyn|}2^tW6Np#wHY z!V0JR^13V!WLgS8?Zb4RaxHrpsAf51tcNCx5G{-PQ8tZikjTRbX#6Q-qRgJ;pL&s~ zS^fgdcFB5w9L6*eHrBCbLnZt#n-A5mzbwh~7%oQyX&W*od6!I3GkCI9mjX>V%?72C z5zyg#lKoiemk|kN%sSCDoLEh=jhphs9Rq6ky?1uiN3R4eFWvBRM`xNRilb@X!jZf< zD>*bN61jx)PC0$mnF2S6YdD(B>D=DlB4XTLDF%Sa?JpwItt2rQpyeY7;>6zGV}E3K zP4xR2gi`Y2WXuf3PpOm~${gl|cm+Ao%9W|r=xl~oqJH^W&D?AS#jI5ID6X(M8fg*n zY6N;$1w*WgvJOt{AOhIqnngR=`l(5<({teS5SaXq0@JzB!qDWE^CSXQGCI~I9|l9C zDWY3d@L*Jd>?1B2Uod_v;~YTQ7zG1TW}&z)BG>X^WeGQ-8Wvk*!ecjl29LzEm8*nh zvct}@#(6c)JJ#pRj@y~I?05{zt||x;v=e(3SQTG4 zoG1OnZyplaJ&Y4T7z=U=W)m;(IPcS?^G1nPDxpFDy=7b3)*oNlp+DKm_N;;UcO(x< zBTde5T!Fw{dy4q?U}YqPWm*^ry({M|&RB5%SawNwFXM|@!@7kTUt~iD$hb#Hxqtv6_a9>@<5Y^fJK`b`zlK~B1&$7W5wZzF zH*%E_qL{q$VERIuOfQBPY!C^H_0t3fNfVA01cHDqN@5#0nvf3EhYnjMY@q-$3;D2k zRBzNP*pdY~g0ewbdy9ziDnu|6uxl{s1gk=9jfQGuxIzvhh^}iK%bflFFb-`QpQhLc zFQ)$Fg&1Pu=0*-C+KY)N-XSd9!#WtxbB4Ywrsz;^-O=Iu{-*~U0B@qN2&er;B zRu;dS73}Q{tQAe_O~*n(8QM6=JSZ7DIw;06f=!IS5eU1KoCFEVWFpEF*EQo9RM7v* zMP|(?F;6mLT_!MAlj$JS2$CDy1s8#FFLjKnu#Ic-6r(Qb5LcJh=(9#Eoi%PhG)Te_ zdlPTp%lb8*c(7j#;KgoF(dyNmI9fzKOAq!R_x1oeH`yF2Jjxz;3WE*z;&^4o zw=i{XbkTVFbZ&A6Gn6?QZsdJ%^A9{tXO_1}TMm)k|A;)zO_DRy;=Jsgro|YGnAxru zl3{SPHmS6i`e>HEp!n2BIgDIIU&^_&VlDZmgw|Nsasyy*^V|>O>OfO?p<3{50%i>ml zRw|wYhI&feJVm1&uM;@WAGT^%_{I`T_%>t+9(V7V{kSo&#qFwXJVW2WA{|(v0Lr1R z5ZMd01Z)@Gqgk=D^a|Bqcas##L{Ku#?X4Iqu)Pg1+S{AIT9k(u+e;hRNuv6IBPfez zjhB(<{31gqR8zuQ-iHcyqF?k6Op3}QI z5mywR8tpZ{8vQ$zlglP6kITmJU^xffHqyTQHd@RE`*!Dx`fV;0d2g;2X|Fjo!iQtw zP8_-0HwTXDzgd6tEmw|8_vTfer%L-<1O~wUQ;mz^X~fN*vyt2{J~Ye+LJn%~wGA*5 zjxrRMi>5p*1zQ&OJIXqOr!kg`lI!{QL@krF8a}*uJ3gtQX;d0qsE)HMIcOsN&SDRy zG+7tA2Yzj5x>&i$@OXtk%UhHR|BL{1;+4u8OFUq%To8dRh96X?QX5i{E1aY#!j_{Q zb_EzGJo98*$3PIbi&X%sPt8QIn4Pdi%J51RyKyj5MtD;-Egw^4!d+RC=tG9+5pj(< zaO>DB`(9wkH(f@6yitGVKf$2F6Ta&W-PDC?>g}xv3hOul6s;F+ z>wx99#_TC+EXNI(zISvQIy=VRK~kXp<%ujqx&PTMF0ao`2`Jo!MlRU{7>3c5Q4FKA zL=R-BP#M!6wUGR=pFUI(FGV(Ba=>a^1O(>+%yhT!OdIDxt#oJj2q%WV{{O4VeRlc_ zff)bm$<*vYN=*J7E%_0`NprfT_r%pb1Tjnh?0*{nPxOIU`ogR>OslkOyWTcE{`tb+ zf8nBG?!Z4oCPp_kHB|?dYZEBKW@`ETe`aXwoEDR}MIF*`xQQX6x&6eDPz2HambG%n zpO*0h8FBmhLH_%VP@!&EQBP;djOu0B%x9|paCk}Y}l zVr!-{<}xx2HT!Z;i`Gi0y#Pdy41D>d-t3Idx59*n0QCvQH6Ok{8Z&Qj^%|y=q%~$V zB*q07Ql|q-p1>VlHZ{D(wMA3TFy_pAr>(bv86i{4bA*o6nvFLhNq%2#jn$pfgX#nI zu5HQHLL2Gz#$&Lf)-Q+Au&WIa+LCX~W#~QpL*fjw@g|Q>%CTRSSFyACgLK}jwpACX z>eX1SxSOO~=4~-_CAv{iX9QFHiQva^O@18LAj>Tcux+)#Au%HJ*=W%P=|Mu0KHnC> zA>vC;*8iqw;?F-t{dr3aod4hTW{zgQ^7+3xyRa~L{-2ro7XR<7EUKaN|FibY3tXLK zF1`E+Z|ULuU-h$fCH23d^LC#9_VYHbwOS$Af)~=^*`)-J_8#d9;ZcxJJTl(^(n*vK zVQ5nx8RVlvr}WyspScmQQ%O9p+<1DHS|i%>Qd{iFxk2$Brsd+@8P^xZGu;s%2ktxS zNGm2_=nI-)(T*$ELHPB8OU@&%pn}TG*=fr559sYD6as7QM(xx1#ETg|q0eo7<2#E_ zLNe*7m6a&X3QKY9KH5=1SL@*p2crcDHXn!z%J0StXy9q}=cG4yVZDpGyDcyQy0rW>4|x`FcrWtvMY1M3{# z@{T!5OtsJz_m^gnau>4iSqm1pLh(`&ffIcF|^_cAxg z-$x48t%T^Jfac$C0iL0Ss{768SqpC*1-Uz`FO$I)P`i-=O02Q;a_grhJv{pv`C0wh zTYdh$jz_;xtdzBferOWuhjjy7nqvFXwUC%3u0-yTWD>`g`f5r3Sq%_ltqXz2945hB zkRY_0@h%UUNKk_lOHpa3khpamtIwLRNx6=c4+*{&(ieUum&}AnWHl?5j6Q*(a# zbcDN0)yny_S;t4FebdBq^Lt5xKRidmYQo6O>7|P4$lk2Q%;R2pgjz|aMWx3!Uh(mB zZR1tlXfooc@HF5vQsl+*p+}K&`g1uUiZvRYMYh5$;g=u!8K*fAP2ZuCt;VIn17bdp zacgt#5;9u^!};Du`d<|8#I*@8s@lYo+7g>!i5aov7a~<#a85f{qt}l}IiZby=J!QP zPppgfu1TxA1XY><_^kJKQ` zekaoqFX^pJc}H(50cN}Bgd_4a&LlL`V8kO}ttkG5Tl%O0fjyLaqYTBKzzU&(U|I~; z(3(7NBV4GyH}8}K@1wIvKqK{RS*Oc=WL&x>C+WZ`s zFr8Wp{>0pC@8DfKkg}oND;U`?(Kq|v#53>u>T|B&)^@gE;d8jt-e}a9H#_l^IaGYB z?LND6Ki`qlp?}QHi_VMo7MK70>mYlV_?^ck=u+rXy4)^m(i@nMVj@}c;^0t01Zzfr zi;0P1onz#vlFGoahpWUj61SowURb~MF1a7d+S}5tXln|`w{uUM^K-4aCr=liwwkRc zg!UUzmmE%0K;Z~Syp`u`+R0uT+qa`>@gw;l54XNV`nvc!c(llI6*W2Ret}p5HmVr2 ziQ)&o#)~n0l5D-&SzX~b3>?mvnLWA8qj)1QY3;qFf>*l!4v7>|V>>KJA3>SE zR(ny_Ga)$qL?d+7p6K*M;caq3KE!pccc?Y;cg{f?BCDZnGPW$C)Dj=->`~iD?5R#E zz_LX_c>{qD>LV^$_vO3G)>0g*D-CE!2$|TF2GeW=T0p$CnVc?a%-K&ht6U;dO=PTy zMk*};K{kEFA^;-blCtjDNB<7c+tmB~8s9r_H&p)kpTUg|@PDAv#=%#<|7p$4&Sml+ zph4$E*y%7;|o0RBtg{sm|= z`4E7$s4NVmXkcugoNE{O&FISOH>ND*U6a99Ue!Ytk+R4Z!I&QlR!CiMgvtq1$oTXK z<_B6#43`HoyxTtw6;L(IDDF#9M=SkYENygtUB#ifISIh_NS>|B3#jUqlN5hK(`d+J zbrW0=0bDNM)Uko?YiT5@#}HcwbwQ!WI}lVM6ULA1U3+tDrzY;nEgyUlz@#{)Cjw7g ztv`%~wB}f{DEWL)#Y$RZ8pJ)1)m!4ZHwYKL&m8~q_+N+IaiwmT9Kls(Ld?h`PlCD5K<;R5e zl*B($to2~h6Zpwm+Q45MFC%HT2||rgJZ`AKl3Gftq~LQyDN*p_T!%IbZk~o#0!$<` z9~<#CLhI!gqoHOCjS{6&Yz|`!%P$n$5b27Z zp%>r})O=tM;q0*NG3L%*M75wEDzMRHQrHd0lu`?xI>16S=>Z3|odv5S1jnQDP{(JR z7Udnd^L{e32g=LcDr(FbK`-<AQE%;&m{X$j;%tTpYE|##c=>$r|^Dkw7u`=5uDi1Z##>%S2B3n(3QHFatE-G)*Y3_HPd-vT#lmEZn zW&gWSvHzX1`@e7T-|m{Zhk5VxKV5&VY_GImuRM!{9>ZH`z2rca%xwUM!tYW2Ebw`V zVZ23c!9!upFQuW$hT^>q=1-C%vkMY)V7DK-Y{Ad+0B0e|&0qyi+jU`wZP8gcP3P=sHGu6Vn=rr#t#j?c$POTwdVwjRs zjVeIz@B`+a`a^pXk4-^IAaS^lN0!E_u&_5}tOkz5JA}*Wa|`M%?}I$uU^g}@r{EA2J2{%ybID^-`;Rr?a)X+#x!x-Hs9mS@$+DL7+si_0HG>6ZFsl(b;%)WFjQnB*xI)_rBtzlxW(`n-;qj0aX%3K<+!`M* zTLvN8-pGqokO^W9Sk#pnu5W9T%8O`2GMTM-z3YNwf*lZja)(ZuH_jY`LHC1$#*2x5OlA1+4p!VdMB64!J}6+a*U8zUtOVjF3(oiSyTGPFUat+ z_H2tp<_b9%8{C>&=EXV0piw#$7;;<3OcG0oKbF(*U%tSiww~tI|7b_>k@lZHQJ8zu zYCM^1%`7w)p3Xg)#~w%NGFDz`6w@L0N0c_2h8K%c>*%eSU%q8&$5x`O(W~}m%Es)B z5W-J6?GRFlj;|Fii6}Za{>EDXelz702Is677v%YGb(UzN5ySx&E)%9FLG~CPkT?#B zQyEW#D3JbV4=s&tuXv774@@SJwY%hJ@(G4<$&txCl#_AqzD=ojMX z329z!hY<&tN{ZBELDW1jBQID9B3sA-b(s)it5v4K8qIL3bPPbsIuUB)(bP)SZ8@ek zX;B-9>>6AWVoqq~4RwN#of(Da0$!@Wt*_Npu&%ve2+%$^>$7#km35~h^L2GCqAseF zU21G_YGW0T^5exJeUrJlqaoeuh&?E7Ck2N2t=GPJ8KeDKx{1ISDoG{+cQjB*H$nKq z(@GlCM|gBY6`@uizsPb;4R9ro#wu6xdc-_h=+i<~Sr-zpR-V;nXIWK7eb}qy<=$OT zqr51x=2O61c_!5j`x`ht#MDxfZNRS4ZdsjU*T^gE!z|$Y4KHz-xLg25A{_$a(j)^m zFI4f?NX$Vj=;#@*>bjw0AHrF@JL_HxJ3}HB>@{>NqFL`cpBh|vH%zA(e!y9?akRsk zwrshsD)5DLwS*M1j-{4&I9!ALP?9x`*~f+mc}}+qmO(g>y-?!^N*TXw@9>nw>_PWq z(kehdV=HuAouqQoSu5qSKb!r-9LM| zx=v_Ohm%mVX)Y;De4{0urB~Ch^(-x=u~%EuuebPR%1p1e^lNKapJ}V!*{aVoS-OP7;OWb8U=t$~CJXR|l@t@>$|~bt^T0 zs}>1|>SnMf4$Yyin>u6G#xtg`Tj@+x>nQIj+^GFBVj)v-lZm19)#iN$GYoB1dEVmsBs8;b*xwz7U zPAT@FBSFErNA8>S?T(!qQwvQuQ1bR-4Ok?3!Dg(XS+^P{5zdDi%yMdSZVH{r)(@L=*TzX|rBpDiR%tw`ZJL^`w6Nepyt2ZGFl{PNYx zYFQQTK=)Qwm;VnuEq%A_ItN($Jeh2Y6-7*GRKUM=f z6PSZo&2Crvpo$Q)e@aA%YpJ#FY9q^D2WpmjfLk^B8p(QquH?^C#ZPEc!5*xJ0BUpS z9Cr8X;jDZ1@$~p?SC@0&EgPsi7M^Oikdu29Pl$-ty&^6}JlzUkC}>smVZV2VINgKl z&=IR)heK(Uu1ic!H&6Rw#dKMrm}QUJcqIE&wA^=!|7bi4rP0oe!JRCAqVSZYnEQ%+ zlntA6cW)20XUd=KLe zp%cB+z2hr}McWzV;{e;I)}nAi{CV(z6UFI?0fr>cGy#q34B!J| z5!7_;G(jb0Xrv6(Jo2u|HmX=xa0hlH_RX1D->jAR@JyS-R(7%aW@mMqOOZlosDH3q z_wRT0ZsUXz*w173vhO6sut_kVc0>w*YHA0o+r%IEE!18Kk-h)hA~!c>O~jAyov;tf z8nbzb;?7tnnRz>+T7R*Kgvo3E72Qg15_Y+dkxIo-=Z&F-T@5VEF-bvmrwupzk z|6AmMDsL}7F3!$9uFXAePI$YIXU8YV%x^xk;1-oq-MvM7AFGUGf^j*lAH|?IE1R#7 zpFkK^m)o88<^~Jo_`BtimpY{CsC2L^eerlV(@^F+FLm;csr|)9It}En6cG&3e|JVV zI?88Kv;h9t|6X0*V`>cq(YqX z!;?4nec>U|nKWX48`7+IFOK>Ddwq|<>3emn@ql6kK0ne|Ea+>PU!mhKH=nncS?lFG z3oqh`jxOp)2lb=4GKS)S$JZ*hFe5P-+#FIeIVy_OXxr5Iqeyi*;wezXR-`;zE?0%s z_V&Lw>d|nSFkvhz^~PiJ)>+^9T))yzvfJV{l2fo^NfcgoydqQpV@31yZ^?0;(5usI zvEnnhZfNpy5VL)RBug@V9y&-&V5?NO1+mhx9npq3ra;c%4SwGxAdC@@_tb**3io^; z_j`x$MZD~8DOB2@8k<%n(5+zf5RmUNSAxRMrFEn8WL5(VeI;U z8)NmEr}orLPp$Mco1W&PZN>ME^ZI-j4_mWdH4z&ItM&@V#;kHRcg?e^kI!l#KGQ^) z%_61ISk{VB4)S=m;@9mqh81WEE|}akVC|iFxtH)YAv~B|i%^-!NkO0;kOL7F`3m)+ zXjx68REj^5hz)#lxJOfnLH$ubldSq1^QkJsXA0P;6kZQhgbGd!KAc}th-%Byz|{X? zQ9KB6Y{=@I8()-jkucgc{V58EMaKNNdlC4ER)(SyL>$=?v|Ub1QcWIb-1o1CXwg;5 zzLx9Tt!?a&YZJt+cR)PbWdJDjppfGmluUU^xOr#!LVi?PaHDUbbEJiY7K1U~Xg27O zf&Ac+Ry0gy>P=wE0L4lfGW>XQ>G*K}9lSkPt#;uX8H!iNx`GbF4(Zn)6}2bRR(s?C zh?WzoFBgd&dbkfUU86O_h`R+$`H_gG-x5dgi!LlWA>fh&a@L%hZlxgdPB0dgDKzrj zF47dERm`%%(ro8ArN99Kp%8F!WB=nNz`}a{{aH6QCi%}?(Q_#eWGO8y1@IwN_wr?$ z)4=QnWl`llBi!@pRn&p0Mf~s6s>9bccMkBWx)lG&t%ikk7M?_2Vt=6pD4nx)$Ni!f z**h_37^c;WYyMdW+y@*B5E#^pKtYSWw5>&9y_6Aor^e_Ez(W;A@p&#ue%jto*xrF7 zGxKDvGhccvjsVvDBuQMylDuU%fTq|xj6I0@#GOw4I*c_niz5?Dx1sSe^kIXDq3;z) zD;``!57+=qXM=M&UG+;G&K0U?C1H7Gn!a%25LiyLb*sae0;IEJjCymadKypP+SBM3l{||dJg)_Y(h$?|3~1e^UeiYx9Lo&G1%@$QtZ9F8 z7I=Kk#WLTMKCL<(OxKK9@j9hFHj-8vgCQ!u_&wBd&5g9zat-dvN?VLuYeredA3Iz_ z*ik9+cpt3P_;3s5#4Rc>owhK!4fy>jATs5Nzo*1BZ3@6PMWp(vvW6IjZPq52HJ4~6 za|3sg|0Jc{sJ4N{`Va5nCVO~*6;I`!YJXEK^l4;|c79sjNPSKv*&X8m*G>-MZHgcj zmVHNf-!^F6URwOf-aI<6roLyq`b<2j$0hGOUYvt(AO)9J_K}BMZMoTMNyz$aEc(ZZ z&+HcvAIjdF_!ud4@`XOlNKzCa3?9PMtJtj1#6xt({{8?ac^BwamCAj?B!-Xv{V~bB zVG>qNjyedPn*U^Jl>53=OD)s>t+0z0va5@QUD0{?g)6}9SWCH~&!ZoTNj zTy^=_`v9}WK7$C#csS8NW56P#wGCR7v{Y=Ba8F+$Ld3-ey`gkg4^qY`+BDH+iP4Qd zmZ+|2jBl$H_eI1tQo1vdWIH_BAUJ>2yU1y}b$nJa4wvST=&<;{IPU*eKRFDLiINx_ ztP7OLO6i182Bc&}My#W-R+qDc`Ux`3C?kT;`Mq};iAyfrq6j=zcShwFn|e@Tf^zbt z8vJF>jHSMYN*A9_J(-!GpPT6><)O|JmT1MvVV&U&jAek7-6&OBb{(+5BEsHtYSle% z1h{CO;4-!U+Z3d%Lgh{l7uEHN>Zl6=cQNrApqAnk!YROU@~X#%*y@h~Ss} zKxsZQoa~TrT%8?XoP1uHJ7UjY_>o*2sW>{wf9$0niI^+XXn0hip@FkYTm?CDhd$;} zAm`9k0lBa4#`vOmu*o3NOwv>fp?SFr3&{J~^xiz7s)O-;i{S=NZf<J4|ROjEOvJ%piZ=k`0$>f*Mt}tv(FbGPbl5a&w*d!cX zq_9v4+O~cOool8$D6mMHl}Sfp@ZpuU>6L3dOYNazY0ohvQ@*NE#H@nY6iXH-_dcYh z+ciB80m6L2W$98J8OS1dTq`U4PKPaDrlfCvIug>lB7Yh=(AGk!<^DVA6x^l z=>*|wRn0n+Rjq1PN$Pz*uXKjgtRmBtt#p8Sv;~qS&VovPDP)OrmRMpR+bBl|H%?eW z_@WT;c9SFCfh@$d#rMuGbT0}qksO!ou)&82f|>AVXWU$dxuyt*sJL|a#U{UySq#Qe zaq;AHjI#B>9M7Y;!zSTW1R$~z&1<4;!4IYbeBq}`Uf?*C2AD!xmKCSRzGo|GVV_pg zXhz+tq|uDJR7uO4S?0JIPQ`+2e%VU2WM6{p&>8~X)VH`WpJ=@KJ|-7k$d_1|m41X5 zNx9nVEjtr3i<7_r%ORW}OB11rC}SaH(t0k>on^1BrY9V7rslXA8jW2Z2keqc9qlb1 z?TuW8#jm=6^>eMUL80Eeum_TWkTi&gYV-Al`jc@9Q`_i17iR?Py`Vx!q?jxz z*!ND=8{aP#!RmmdN%^nGMs0}supy`>C&Uqz(l%BEY9Q{hTTtt^JcaCGW0qdKd=xp*M&J1xpDMylmZ{Ez4i+)#1JTsC`dSS zETnTsM@NBvVF(vVk#TXdin*PzRMSerkQREkW+>jMMM{KOxd8{?J=}*LEem-7^GaoM z6e;~;y7>p_Gh=(d^v~N3(Ms&G@+UXr?vG-#_PchQ4jFd(tf` z=QD3mw^duUAL{I53doIY+$nFFN9# z-_$5O&yIMeAM|AhJ*#4|b<>&8d%%&@)C^n@U;hi9`D{V*5l$NL5|e`m$Im-*vBsf3 zoTYH(UD7F|qNDKcpYJF&X)9;Km>W)8c64$9s2xKbpup^w6H+AT<>gj58*xxx#S*uN z7Ki8<^wkJ1Fom$j^Z2CE;J}wCo3lfspgVYqIv+koo!@YZI-JxKu0L zX-*bZD@oaTDQs!NQcy9=teV^Cr5DOF8X-vV=0*0d6;3`GQ?C9E9f!_2SSeBSlpWk| zrp8*m|1Kw@bJ$Khq70mfls@W2q;$X@PCC96l?J?r(#q382G!vc(Rppbo5~IsN~4*| ziAZTQQ#lbSZDcdUXP$FTI9glTp+`xyk{yY&^RiyjT=ufkzbA3d**f<*hMm`*4jsdk zRy~F(g&qwb!}NmQ3?IYvqJ)4?h)ate^cXh!05&Y%@eag8-qVLUzo}9&PMK!=x5xWH z0FA+)78a%zpklgv(MN0Lsy}sbpOW{_bC>;RYo?Xif13aAX5*Xv=lucv1v&R@JBHIU zrVX9#rHxm3|8e`zIkW#TKj4-g>_3WaMC^#!u?K{g*A5v-k`Dw0-gkBBP^KI*;AcH|v54?{?|!Jnv`r+!z?}zz zkP|zNT=ck1(Ea+m{mYO0+z%|7q-W{zGnvEdZ_7mtLDmC%gy7=Rqz)#2*%)Z$9(HyeEgQ{XYBHR)Hjy9*4H~~zQ^l8kWKRd5v&YDmselD?1XgKM~{_KlTGLo zws_1Sb+Z|TG`Ehxej|X-|J=c|I@>{Lj!10>i^7eVJ+{~WsomMBd6V&-8)xDl8cR-` zB;xfM8$|n-I}`ogV_bJ+3BC62aWF9d*SMGV`txz5=jVu|g)&-MdBEP#^kB&Eq7Ei$4-RbG^v2naBgnd?piXZ%a)5hx;hmShjtli#ahY)ha zZ#4f4(Eot{2VMUkH@+_YZ_cz9nkD@Y_Mh`}-~2y($-LgTtZ$Ja8rG>`KpBA%gQ<2Uiy`VCHAf zvqH)%Sw-+9SK^ilvobV|KEChmy*G(ea&m|*0GgN7tIL=DPZ+&$6Q;Xk(^0v>|D~+} zH$8kAY!RbvVrNZk6d5{eQ8#$NAaTYl5c>yFnK;}F^ z`lF@pXu6({h6a^>U|0$B=lqh&QR&@=m3a-phB8%hlMQ8Fh7tTBOG$<*C6p0R^VtM& zqh10XH=-1b7O5m=iV(fk81cp>@}>5O?4Z*|&3o>4h)S8MqzSP+xkG^ngd?f(%+&2G?wBEUvw=LS0`1CZ1tx2@(WZ<$Fq6^hy)7;1Nf7)J z7OQT}7#Pa$r>D&}O*U#6w2i%OOuxl=Oh#&N8(Tb^m#>QXq?(N8LU;qkyvVEPFfbXP zQ9bi}U;K;3`hD=<-`Y%WO?h5#?aOh=bOW2dra$7>&sNfav1I6g9Z3Coro7fLYNL~D zAA`hZ&n^IR!$^%MTJ0cHcK0N15PDt5m<}s83?#t6J-7P|Drjzbm{~M_W<4``Jpmo; zBtwOWIUdBWF5#LlwX5@rbW=HeJJJ`uOLldM#K-H(s$Cr7)_4+6l3(pOmoS)yYoiqK zUq)yon>rXU!{hPTCt*cJgF{EnWKb82%Qnr5ne|j=l^E>GAOxY_CDT+$RbqW5t*JvS zcf-QKnGS89nj`DjaH%gMp}UUxrTv&h?sisA7G+5T5&fLOL?qfuw7!NOmnJyLJPcwi zO7!{WVPGa!vuwccYaTYAuzabrjeSPwTS~))XhJIb*sxB``z{8?|1%&Pq^- z>ESvnPlrZ&e!pJLZu%%>FIC82Iv-IrItq)SW2QVN+zPHtb`Npv5xZ8}>o}ZP1{f>- z0dwQr#3_IdYy;zLGEcLvYi5WC>Ly@He(ESjeq$o$u67QSAlVG-FU_GFO)Cl1qh0Pz z{wc5v1n+BM7yJVJQB)$>nss0=~OzUarMa46%rLl z18U&hTm?Zz0EV2v>(7=_?)obz>jpqIQ`HeO4j=O21|||Wz*A{+)G(tXl13RF?PFaf zy)rqwCaRD0TLZ3*XQ`VkkmCD4a@NwAY1IsjLUXilHb~*8dIDz0{#$v8FLAl+q68q8 zYX_t3`WeF~tmM551+Ym8Tk<8E`J@RyeoR@h*I z!?Co0z%{};a;cUtq@?BT;Z9O^bg%d1t>11Dm#0|g+GIG|w%D<;lnb=HR?*yp-UVJF zVH{m0nCrI0xGlUGaI z5%ic)7$(`fHiLB6*TyB-Uf3CpFlW5&nvWbQKeO3nm)wIp<56m4y4>N`6xD1pZnopivVLT z3Rc}HNDLXdG+g1X9FvVxo@y5dMsG$ILC-4gCRuCko%OYI94!Qh_?ikzfh;K*DJ){M zVEf=nFjq+Zk2Vs}9kyJeq(N;z$udA2^WDCjXyCv?%g+n2M=76LVF(8%TfSj?i~@BupK!p$ZH)e$;F|DI z6?`!l&@XJKj|T2?@Enmr!fg@cG$eE}E(XO@IKcWA4?a4^+e}0eT)sz!Ob)^x8CV(e zqg+`TX~u8q)F18BkYRxOMEe1C-)CnE`gD=3A@`6T{mf1535@Q)j6IRZ%^R2$j`Yr? z7^U)P3<>ebPKJXoJH$B}H6qtF$GXh?8?i1`Ji{(2ag2C|fJydHK$S`DJ$QzhMW2rwd4@YoYqd@zYZxyAheQfF z3K}BQGs9$BNsR3_GCkvDIuZAKQE8ZryA4b~gG|TOpP9xF(cYO6v{z{Z7#5;1gDyFg zqoOr!iH;0IW088?MWkcCpdg*Il)i`(PTwg>ZAoBmrQ01G`bvZpIm3X5q9n;s(;nuJ z{m2tMar1m#+?o~R2*3@Irm!w5q$wjg#uZF~5J6~1*x4YLpJ^9-4 z-y3rTdu=r5=4KY=S`F9#Y0Ndh>HmCDV8t_ZBegEtKuFZAo{qH}tUkiYnO>!sP!B3}>+@<^;vKbdmq z)tF|_sB(CW-0hjOEIF#@6pGm)e%G&YL37CIHE>j`IPw?gkwbU`0&L?H?^0DkbrIYfI2|kPpQkTM4;V@?0q<%E-4vb)e9) zOc)G8xe(5!(|*2AptbL~!{ra)2?(_@Z@wtrgooutueyLp%e1;`(orc;iV{baLg&vnc_fvto2@SY|>#09%49K5k9;Q^bu= z#nds!eyfV>wmeW4?m89=$5FLU^^>c*RT+Cg`E$KLKL>}^_C~(9=9=*MpD>lJ7w3tF z7V7^eJc5`vfil^n1GbU?Ok&d*lxrYZ-q+Z!58g%<|M&aIVY**e|8r)pwUFWemf3$a z7G}TU{|BG!5f%EOQo0R+0CYOfmO3jD!J@bbVwUEir$+;jHOD3%W+UFr$R$f(CKO=W zWw4{$kYq+6R&}f*YA=#m_mArf3%FE^g^1yW(xMQ1Xcr@p;{Osch&hPjVL3*>Ai!7l z0?e?2xkx2~m-PiCsqePFSK2tXK=rS^v7+zSOD~rggRs&=m=zF=yTj$fKrrsmi68TC zI`gA<=Eu;PAFVSF*B2WTEIQs-A+WU9URm94za~@{GV7lSM5{QOtAy@)xw?k2!20IO zs!RqpR{_w5WexZdNm(!g@e-iW*^raR`G}ayY@sDy(u!Bbb26zMvK7(XU<5+T7>Yd8 zclpaYV$obzw_{7g6)>w_WTNKnJ;u2ybuqo2y9x{JuU5-)Vbnv7?7Z06#F)il@HloC zTKoohzKOTy85G_y=$Wb6{h2~}>_@ll=@44`s^oNf?=H%T1cEz1Mg$#CJGmb@f z@DmnM%a^Br`tHALo8}c@c7je@T#rQf>NQCq^pn zHU$)m8zC(ITF6f%v^G9OD-#|TM>b-2C+--LKIZt8Aw`*$g%Aj&d1`tov_6M^{~Wg)Dve9 zh$LWv;B07*8&3Aug76-b<5{lC|3;}CU0CbQ9;Du>3P*mD2GDt*B`^>P{ zK%>AT_L24n;L?QiG^MBe04Y{uYhUEJ3ZuC=`!|88=KZVPA4Ki2!iCLfOiNt*P!}zR z)j}E#$G)+_!H)?&{;ZO53;ZlZ7=M(2Z3i5is8NEfA=;9FF$wKq;L;zpVzBTHp>`ZJ zRoDl8J8mm&*@2^hA>$ZcpFeONRCb;D56l3}=CX^WVQD{$mrFUy}c|EdFz&(fD@$8*yBF@FZum zO8dXQtpGb@rO=I%%XMTo^`-G2E0x^Wh;KPJ!n07+-WAsq2uf`pYleGp(>_49L%1da zJ#nz~@HZpkKZef83J~o6S@9oZ(TW*eG*h`D{$udF*7<9Oe-uRiQ^G&`SigmTtcHIa zA>FWj8cZ!a;hS^IaQMeSl#{WgkdUH3`uDr~g-3rh+!TW~-C>d#l?%}E4z=gzf~0{s_I(I3O4#_r#0Z>fO{kLXK{E!`{Q zeS<&x683ar^b$vSn}@F?Vp8|;6BsE=W=!)B?U8}u<%^eyJ&Jz_pO{{MG~ z`M4VIvXjHz5c5$lzBuM%pvz`g>ik+!)3?~UKWK1gW_q7x&ii1|9>Zu7y0~YY$FMd2 zY+)X8bLPk@>TmuP!#vue#Mt?^Mfs&>jX*K##iRZFEzF})z*1X%Ak5?bs4$PLMJvUJ zl!gC_VIIR~bJK8F-uHN@Qla?EM0vcG-29oNJXR6OwYRfR=vw}RLYU2jhJOtBf zp5!M3pD@G@AlGx2+JSGVg)>zoIVY5{lDJf|%Vo6y8 zS!K|d#eJxB1goxUP4^G*nAI~PpoxZrJF}`s6b(sg-*dq4~?g*g1#dfqX z&Cxjl0LjU3aCji?w!eOCN3DjN2LIO!?Rc-ze%;8988-VuVmT_TV^;f6h%ZqsP-;d- z6|X5P@gU?c)HiH$99|3^#J)77qvn{uf6h_tAtO2lB_Z5U1W*i}tmIsCwEwJ!3+Oo1 zXgtpS!GMk&)zYCZ26QBC)cMYbod>$DBXD(|vX|}xyes!|7l0p_C+?;o z6#DhG^wCeOjj@?AH{v1!rsoR|7v| zHM{ki$d1&kxPyLDFpKrt5)$#B$Ll|1THP8q)AhN9rzfW+JDVAT zTW{y4o-DMi?A%nVY2C#vf1XObsA95&^%W}CU9 z1yx(B3)tDm*i5lhtIOy;s@rF|pJf>_;hkY>L)JKa&umM#QgD??e_E{P-7>P$vK(g!tN`C;0P*SEqJFJxTlj% z^ZH}mK#lTc=I{q!Z_U;~5{`mqWu6-Hdtk~)f=gD!P=qMzDbC#F>+R~ae|>VYk7qYL zX!nR0ZHA-M{)o48m>N8{V|{)p((lzXx`!gZqul}7Am9Vy_v_W=t-u!WwX(VMa2;@* zStZObSBONs5eP`e1(2RI0jbd1%cbWvUPdZ%F%;@qZ|llYFJ5n3Rvy~%VRhNw7q?aM z>*n^0kben%m$Cp3_VOP~8=Kqfq3dZ~b_6mX=}_OYcP00Mw}3*PU5ua?Pdvo*q0W(M8peQY=rxsxI2iK8d`Uc?R#hE*DxCR@H;DP?#4~42k(j)Wk!vpj&5%h7woE4&%DN4+A0H6k8Uo-meR&v;U`?f{Vo1aWNVD|6)U zt_{nSvVCJae8(G0TEOKAxO7I#SSy(St2kP0YX{T|tL`3+D%-ZjCoGN z&WPW$Qh5j(b9)$5-TNU!!E8rs}AET4FC};8@X2(YYoP6)zGTpQv58-DgW`+$tkYNFK7*){_1i_ zqpNZ4Sm|Pk623HoYySOWg-NYxiYI8AP>g&|tm1n_Ck5LY5j}eitDh`r#fnznI~@EU zpDD=InE~l!ckjK>`uWBFUQZtDD(jE(tTSTlj9h}em6uAe7|U#G|F5t?t@xrBq=esUOmf&1X$=E5KW4G4 zi=ZYlks3)4%GTy=R7?nS|2&?cte&~E&Xl*@L@CK0_KyL12CT!&DzK`#^@}kQ!R&L# zSPoI^F%9ruvi_k@0qT!!~9QZ|&|KA*M;#I>d$Xy~y^nov5$sR?Jb4RzYPs z2d6*NyYfOcR;=yzj;{#8LHLruW);!97z5z!_SbT_`hdLqLsV5g|8?d4rTKNwf6ZAO zfS2b#m;cVp&wca%^APiUR~?QcO8-B;0;2r)DM9Nen{v8if#;jy__wmZcf3m^wPNMf zI#;a|&e&}%JvU0tD%uX*T)*%`KvtI9ZZQ2ke2D}I4*r~`qe$#@1Krc zO5S=APLvf_M3t_rn}|2KqfO_~ei7Y;)1%YhQ*WNwcywT_RPy<*h@SefGt}}Ep{No4 z;zG1BK~$nHk>pRsnDoW6q+r9zixHl0 zXYhYpj-wdqil~W(XqV_L7RGDk?BnV2*=`qH95ja97t!kJMep!E;0DufU0f5#p?}#s zfScSWE*TPV1qCct=S)eA)gncVsKBdGOYl&APW}uW7Vmm&u~;MS-!&Zb_5aQkic_YTa3UC*m(%dyFE}U8T}QW1{cJQ0zeU5vY26(QBS04zZ-{rL7#j=%U0!@I2z@ zD9BA}FosvV1fC3V_xSpf^M25kfW?IDFhYy!JWwvgf>XhIiv9*{e!Dum>@i+1jDIP+ z!w3z=iUY*OkK17xi33dU1z-cF8m}2Vn8YEvvtfaxfigTn8Lgre7So%ff*z%4zIbRIs$L-CX z=YfJJ7d^rg{ex!RzgyvTbjL!J@k0X8pP%i$R~&jwTt2Z6iT$%zS8(Rzi;wl=-p4S2 zJ3RU1u3+T12U)qVr)oLsmuLrgrwEpLN$ zTQiSoG)g!sZ!bPB&dxoq%{^|SpRDmco*kbcvkFX1qt>+uah`x%tZ;Z_qulOX&{j?GsIyVRllS_2kKkQn z#f;ZwmQ6OTDq?IlR3Z$4pUwPd81hi-dl-e;5*)7|&{Ew4qletlCl5UC-usXihkC?P zKkD=Upv8Aw?#r9&>zjyP_7q&HKV6K-#f9h^lBuPgqBh-}!8dVq6SrM)3)3-_EBCxx zj&bXtT;rm3Z4_(3)#X@@_+Go~Tux0w0_*CxmqFqY%S<=sD7A5BWR^zF8odZHFGOL+ z>Z&$mAQbOKVRWG%nDFllE~~aeutxRHu;t`f{mG|#5ACg4eQCNINK|5@V?@oce0(1q z5OI(2Kz+*4Qnd^x$yjE(A@J;s)ff2MUcI=`iQxKw8)J332Q3qtg9%|azApw}%sMbQ zI>j~!UoqDue1&y5V1k`9_?2CCFveyl`ZfUk1JSoB#kJ>7d*jt=iKD*U?Mo0L;GhL8 z&(;>DHX>@mj6ihUX{tvq38ysR7X;Y!MyyI_tvMBx-;a;4ToO(|P8bfj3fMo;$atRuP*XG{PbOG369L4D_l$ByPU3SNY@4`yh6U)2PG2GW&h(P zd>Uf^_h;SM47&%fCq3{e;zm$PXaw&lwcr?qz~;^-4|+_|i>k*I&!+&>s&8sxeq}Nt zizW06jJ@s`wMahypi2}H(c*TOC?$;qYo1@h%AJWe8f}P73EMwH!Eh^fg;}s)OG06@ zG1X0jU~8~tdyB1rcoSeObC1k36aF~qzIMr-wuA#G#69Ik(A=Pu9X43Y1Di0wLUJ8N*b4g`rmbN z<743uFYc;;hR<8vaFHU=MKubzPmdAb!uPQP@%S=AF&^q%+G?gvsx|m~$ z5=9ghS|p*WQaQScqO|SYXslfX+z+Q7&2W1W2y1Pd+@ zF78xyvVCNX7MfP1hO-f;DRycg$2!O8&$2B}U0z(-;Z8|_37>}_hQY*(`C-xx-fq_5 zR*4`P9wyn&N*JH6?Y`^R;;#wgM0?|pjSuaOM>e+XhIM8N3OwZnz20$!tb$V`Qo0qP z58PcxR)A-En|>}An~srv;33-B{>8-^cOs(gyIegJTOt}MLCaHxPFeB>0U6Jgl=gCdbbXS?)C>N8FB8h z^?%pt2(U+?kf8?ik*KSQ2(Ua(ENf`zr`3(nbWyyUfiqc{?@rD{4vVzL;=EDW*e&sfRbGkRZtR`24Fo}g zY2fl-tV7(Lq0l=~8jr>s-+bKeaw6q#k+nHq$)BVl-0{Vb z@+p5-|KoSFl$)i|5tSr0)L02NK9$bJ!XXB-o$`db0UTiDe+p_Whrq+Yb2GCW4^*ST zHx#`XK{iXnx|R1A`baV`ozyl2s+kp(97(85WC9qTsne1Ya0^PQ48oeV6+B@V_V@m@eGv8oy;#;!m`0Dc|+>r`hE!wLIUoMX=gZ&to za7|SCvN8U+EH;pnMRzs2g%%4kwV*jpy@)qXg%AE*v~## zZFok&biThdn((7C8u#f^zHHizjLyks9i9=(s{NW;7=l8W^DO6{_hl$&Xd%MO@I!!? zp0ylCgREuSVD=`EX_Nw)wyS~6eu_aUXVzA5%jdLZqX|DUOdYm&O-ne-Dt^b-!faNb zbW1#c)Wlg4e_II|TWI%57?ajl0ad)bx;RY<6&-_!U`&3~MRz|SoRnJ)0&Y!H1ftDw z0Aknz>Fp>wV=y);s~vv!&Mr_yl4LJltVJN_gqrJ7Bh-<5IK4V~2U_DmYO=tLIT4q@ ze>Jumi*}&h ztcPJCYnaQ$()l?eSEEFObg1sT$QBY4uXAkQ; zRbq_^OqN{}=BO@ImhwedE#~h_d^bA#NSr6kZ`om$s4V>)ngC5__P!){qZ_M`i&1;C zJd$(|rn|_Fb(vBO29v>MPMocL8!rs-+Z@`% zWkWo;X$5wXP9RN1_1ME_lcg$9uw^=`|7q*UjMjdH*%>-Fw{AK&51yL+4lW7lzUA!Ovig`vwW|1U~h~dUM@6WD|Q7_s@9OpXo+ywgVXUk80?d{bL>|JXr>Y3(k1#Fo& z7dbEQ2+riT+dHd;Oa1QO-0Wa;<(~g?N+UMVBITluUT}f$8b%r@)-3bI+1}n&I*{f= z`{z?50S)+m^XPDwCg#89eO3Rr&n59gYybZ3Z!`SO z{|~L^-*`Je-}t8g`!!aC<23kJ+>o8fkaBCY9d&oz`@>vF4Z6SUf6VuT>J2pn8_=!} zrfBS)7U)Rrxw8axh8s_xmM$QMOPNBfE_K%z7PzR2hN?J#SeTr#K&5I(?jQPy@Piic z-uuJL>+@t{6qKLPu;k`(iyNKYcfI4@<#n-kb-E`3VDU>0WyRf-?(Vn{t7SXu_0jPS z25#LR$}>H#nUxtu)+-79iq7&1jiYQVuMZuh3<#Tacl_wbM?V0>A9;ypmUfP7g&J)!b8YuVn>esSoXA6w=o0zIlM3ngTKg+SHYOBZ*x&F*`Y#Rix%hg;x~KfaVI z=eCPl9*C{Bu{h70B{Z+uSL9fHx%7B$Vk6>!SVeoO7G8h}J6o&EwFUNW+dRy?h&b`= ziradbD7cv?M!_$!Mc>@ok+7iC{`+eES#4vy{>(n#=njCj7-xXgqvLMMtM0VP`P4$bol}&0%iTx^0rl|gW~KhZ8TF< zKyM7C1t#8nOhJ(l9z*ZL+?24A=3Zc&zmyHvs7`)J$J%hH5Zq>*G)W=uH%F zWKx}H7FhMpK%1T?<;FnypOGJ3W18e|fWrV;(~UN->FMB0Itn5k9zX(xy5~RY)JHI7w)pahII5^O@w&@>^z1(`P*>7=bIK}H1!n-3MJ zKFC1r`0TJTV`_N9=-kaFi0WdnT}+w5`M9;;W`g3RdTuK5hlz%|JTXz5)QYx0wV)EG zYDT%rTTJKq#%g0&MFeFq6%h*z&0u6!!JF{#>XfreS4k)objQX@@_qY<-n zhLGfDIQxX`ne86+t?7`gfxV?!~y*7Oc~6gqXAJxn!w*zE)!#~V+z;Qnlme*?qD6;k&D_FYs0 zgWNkXv##I~P07ot68xBQ_)8PFCd>YvDVNr{Fl&ShQ##F|ul*V}O`pq~{=EXvrr!jT z(HGv4^tD-+NbGxGZ1MBQ_0>+tgmN9zk}kRz*m1db9+S9Ku+mHs7b%{GadwQAml;Lx zOC=XSLfCU8l^OJ3_R!43W?f}zS6}Llm_a=+Z_<{xoz9ROtG~c(uC27!`FhJ&$WX4a zTAMuB8F;S6#{7g5#PV7G#aa6u`G#0=9AaS&yx81c@za};*rW?Pl)JscVK8)I$kpnO z4!JH8+^H8oF~HTAJnXEsH-eYMW@o#YRcApT!i_y+n}@a|z+~I}-QMHJok2_JS)~ry zMe4Vedq;P~&x&U(#55`|jHmopZAB@Do7o|OHfw*@@5z3@zk6uj z29OB%rBcF*wyl0$-RSYG634o}xVto~Dj{t|PH~xCD!3wn;i*rfQD%G&GECx1| z#cT5gW~A(#bxar5-%7Qn8Q$5ceVyza5M#Rwq2lT>(#w(!E_RGpac5Z#aKqYH{INdy zW37t4Emv!-3*I#R(R~3_B5V7^l*UfDc+rzoA@H&s=Iu|N){53Td&|)D$t7(#lea=H zugWVbE4R+>8D2R%H~GDgvmGSuxPjd((%>_Wr8<@9tct%29W#snR_DNzafZTJ+ktN` z>_J_!2T6n+tmP=_SOejf|Jg%JW7{j9W2Xy}lX;Zu60OAb8fmCWtErgjrWu zCDiS5BUws$$V_j{K$H;98o-I&h+v_0psiIbXMr+w$lws%UJRhte0d<2(SWsY?LpG3 zQR8IY_+N8WJG;g6$xbO5&p~NoE;Yg3^r)HCFfw()as^C#c`;fbwE{>3^eitM3<*WzzC~20C<~1R}?j$uM3b7=h0zF1Y(0z8>>_Des@UUOw1M5H`#npw72rCHp?VCfdjwP6&lYP zF2-g8zrqx%2N0omSBJUFvsBCSX045Xwe6LxCw`*WJTgx!hROIcyde^-+$4rB4V=DX zYU!EQKu`nvWe*+jk*C^+sdBFXnLk^hJYAx?V<5)B?3)5w&?V#2GP9L6_EiW-wrs|M zy*umTGSbB#@Li!>k>L3H;L`w}H0_2t8XNptK;!9(b2y(n#jjl3X5CBe?`%PsjiBiR z@r`K1gg!zCErZAcd#c8diK6q%_6|=;aI~g^i^Zf>Fj3%+-v^^kdO8R-ORs2>>wa(a z3~k2cd($+9GsSIFWc;m+3bRb|uY?~>Hz(Dke!(oU8r_}gMrUU;j(d16N-p%Rv@mh^ zq|fK`HkZ$L^c`Wa3%{QKJqL4>L-UoPv4X3HH>I$uz|}|R)ytiZoOTpT2pHG5Fk@^^ zKHFS*i#6jWMvd!Z(*Zq;+|6+i8QYn*-h=xZGy45%`n8@L_PjOydW&CA{fB;SX}i*i zM!=Mw?H zAn>OFI7RXCq6ce%7MTGf070)FwX0@-$?kgO(ItFe?XFHi%^_BTPWhT%gtGs|)gHES_X zL0P}}+d=PW|F-tRVnWCPYHE}YufBX4RT@(5HBW|qG+K`nMor=$UkuhT zn4S}H<dlRRIyzUDXlRuJVNz(?C%9$o$BI7dT9!Lys_~mu`WWlDl@r8-Kmj2wxT6NP zR&-9Ubz4~MoShvZ!5fp%M1z29LJQvSYnDY-!VPJ>*Uc|j^VUD>hBaeM0~}&^Vx+3u zf<jG64kAzc_3E~X>mb9Iy~*T99OCfX)ovH2RG}7-ASI4p zm5C_(LZ~`1G#A^)R^MA^q9icY<5nBs4R9BtM#gSl(3-eW*9MzW89lxoF7gJdv%J}< zy+z7hdo%Io@!N^F<7QU9PfVB2uMDQ2%=!MYe<6i|(5k3nXbrL`(x_W{x%vpcxf!9m z@xwktT^ktmn(kfnw|k5?&?~rbWeVk482ZH;Va+5Uy71nznMWDRTncV_HKV4ha{n!p*QbwmRs^jHb5%mj&U7Mc;nYCq{$nKHw1eW zZYm;65$_(+pjK|(Su6iyv%yu2m04^}*sI4%pYUur+l*v>NY>{w;PH)WR>Sy!?MS>N z!QZcAkhLG8eMoZ*FIRR*F;G?(#;C;<%e71|&Su5|nk~W+3n~_yEsK5rqC&7IZNnIz z6Iab+arwdj`rlanIikTQal|nhCJOaBB$a69wIQaQL#jEOSxzxeuMliXtfq>&xM_t7 z%iB33qP*Hz-jT;Pq8q)!R23bBjn(b-O?3a*t*g(smtJ;|MpJrT47oQDuNA^iTOB5| zP6jcSg!sCYQCbQjx-uom4Z#Uv8FBu!edw#8viRb<@s^t$w(_iYqVqKhs~Or3of}{f zwGUVQN-Qp;k#cnK9TA`^-7!&Pc`E6Y7b75@u(bxzMA+g&P=<_ilp^W6>!M^r_Ux#S z+<{H5n-h_aU@f+L9QLk^+4@dUWEU2Yh@*tG{^=L`HCJd)sH#0KEknjo3GpnzpXeLe z=CK>IfDnWC=SP$&t{+*L4D&eH-9ML1l@_Tn)bjf--mYZ(Kqo@e>8{(imGD&TR6=YQ z?k5?a7LFT}7cDR$z36~l@oaUBTRT+(ay%)nC$6c-erFs&bxaiy&{e>UO~zypVswj- z$i=OOD*Clzp(nAc7PBFF3murd;BFC=P9Tw?X*=DQ>V@q5m;)U3h3hW?`~VkW5&n+) zLwl!qjo2rK1-(l&B6Wpfe3UD&cl$!;-4bozj!Dynm{r6y*dh*FBc>Um4rxQxK{C1S zTUp)MgfV!t!t>kCFL7^)vUr9v(Ig&LC1xt6wuYqqnXo?kPKqR!tNwth*xO;Um}^$f ziI!~wQ8{p_dC(~kif9xl0Qw%ExQL+f6#%aVsx!=a8^vd&NY zZ~|lrMx{_z-aWf3htJtl3=!7T?(b(kd2SVxQe}m$YX4xWDzzJElGv@<2j%6KGGqac zHM_Wctoc@SiHLnuh^$BmQq;9}g`2@Ff#ybGhSulO|>-ZY?Q@#3@`fW-W9{ zWMj+Y0x;ls%N#2d zRGDy$maIJ5GZbJO9jpj7P{T=abgHEw@AoHHd+&=~`AFE^1DjpqxO%_qXM#)JxP}IC zOB#WU69_GEXQvF%Mn$!X(`s=z1(qx23D8Tq*c5S1K(51f$<~CnG8x1rN5H4DmSEyP z33Wcp^wYuR2aFd zpALxg=?`{}csl|z5k?_HoWO7k8GnXL#Q2l9{~-=5)|YmET3DDCv7GK+^xqxt_FG?B z{)6}@_y5qa`@e;6@xQ-@_~&m<&5|@=yYuYjQl}LKL8bi0)4%Wr(CQ9#e9jGEUha0e zkE^nq9|$j$1rTR23vMD124n96JzuHZ=SfvJ$u~MnomcQ#osI2v&eWX_u0r+o>(Z9< z&F#(-T6m$Jbh)SIo$!FH#E)`n=og)(H(PIG@;$DB?#Ob3qX`>2f+97hFYEu0>i-Be zd`RPuKBgaiOzj`D@!ZjYd%O-fxx7@YfHMHk`JaR^HZyaCEmZ)Ya7*jjtyq zwxRdWc+Ww2+3r7=oBq|ZFKPY5&U@O5(!yAWD%ru%R<6w`aHjxJ0 zb;e}NzemL^Uyg;)-5pg%_QMvsJcKZZa_{SI(_!rmGlJ0amsHYvfJ#;d>Oh~>dyjRr zIY9|tL?%Osb#sFt7+sOjC z8#5VzWYQ)A(wnId(hbi({sY3aY6z)F3`Kl-YU>Q1) z)EqsBP_1&vreCYhvS?FhIkVxBv+`DAKU?kmyb*6b32!WJ zS+_cteqWv)6X3bYmbnqi%iYeib62bO%Esiq&Eq=9+gSu`7z^2@;;2hnxc=G6rUjYy zW|x;Xi*0wm)-A>wW5^Ixn44aBZ*wx2U&(rz8+8Ro7{6KxIP2{DEx)^k%p0X0|QZjLXbTozL^SRkKXcOfXGvYE_aN&W7-fBXAh5!d zt=dzLk(rT^G0Jycbdiz=GTLN=jKdtY`E9b9o0Kp$x|8KiCP&=+3+WCwN7EhV>0VK~ zhE0BG%)Ly>rq~oy%m^-?unM&aXY>~qGhtF?2yU2I0(x0_^Ojg1O;R@US3{|Rb#W5& zRejD?_(JmkIb63dg4!Qd$# zkNa#F!;V<(byVJecsuva*t~|QEJRJ~>!4A0VPt2+xcPueCUC)&W7LgJ7GOL!mc5sujIcGO`74uD)1t(AnGmTcft5rJiUQUKt zNI2IU&YrdBIbth&R`0;cvb$=#Ha>fOBzrB^Ni=fHLqS=yJs)Zx*L*X)jm-}&<_xcz z?J~q8@kS413N0??9m%Ao4rGE8k*dJV@PP(uAQF7#`cL`9X0R))k$V6;kWV}$rT3c1 zZ;c+?%z=E>SfABHJ{y$5e6pd?gp)e~{XI01ANMUx_sC7)6rx2niw26=^aFlk>_a5G zuzbLcjg|(pA4Wz_PX)4NqBM6@?$<=MWlOy`2%v?KmXA>Ak(s=5hPvs8>q4mlo9QZ0 z2^bEokBqhcKHoRhU>dq)&PnN}^D*SrpguG5vXa zgjY(cnEEF;h+Da1fD+;7g?;7VeC8hhIoSv4zniP;tFzkd>F1Oi8gqY?eyq70wpgdhX$@CAZu@vB)jbkZ>ovq%=>1bw<_Ip4U+fep3$u+NkXXl$ z7+822(J_~GNsv8tBI8OgmPN#cuiVNZiDl64miwlP#s6?X4tA#>4*j~ht!pTCM3lHf zwYz8!@;_(xCQ%zh%G^QJ?%~GL*18pP{LMFN-5EyE(#Of<8Xq@F{fpjT{uI6`UxruS zH@%-4&A_w;Y_rHu(fy(sr)sl685{-00Beuijj6WRU8k_$HgpWTQ z;%l2YlLId|x98}E{Xg*DJ25x0$QHH4zhyMWpO{XOS~>!?Y9k4$R`jZ7qM*43)MxtO z6pF~XYBK->wOSJ6-Kmtio@q=(S@R)Ii}21=x_76oXv8oU=wWIojp=wln8I|vcgb%8 zt!%nbfU2Bcu@?hdwYgA}nToCV|2w-pD-}CDiQ$4I4y#UfzGzDahZ+ke`VR-?9}df# zc-OGm6dZj_F_|Wen3D+4R-M}sZE9TzAdRLOb!;wwzqq4kCVXzrNall}9nX*+rdwMg zq-3FKV)=TD6UwNviBi=KJS{T%%>&|m6WqT z3-x4^5$&+~l!S&BDt|F_gqOBP({HDz>9*soK$4%9vSmzA9#5i)LUV}<6bkDfXa{Dk1b3A4#zt(YJ- ze%xunWXCl#*)3-N1U*r2O{nzYLk4EO;!{iJ?3LwuqD9HDf4fIAY$)%cv&Q4T-NQ|` zsyUGasB<-_bIr%+aTPq2>M?XdBKj}bbO+FVJb7&Xjf2Tf*aLE@v^Ujvh7nG)UT@1Q z^4}EEW=D6g%03vOAUgn9GNQehJJ=9b$L`^1uCN8-Y{M=sE>F*abe@@kzO)TLvHZ94 z=HDVc89%ZrN_t=3DR1t?j}ozZZ~U9uCs}Iooq8}tnT@5ZZO_dnh(+_hJTZZjLxMll zPT}a5YwwA+)}F1+!GO!Qi_|R1i7*k(MYFB7Y#a8e{xCNw=5MC_(Sj^iNB)&nEXq-2 z_;FPw;KYueQ@fStvF-l#r%!43Ju_gS-PhLc z>qocyI<;GQ9^3BgPi*(tnfHyR-6>;K&i-L^{Qy4uA4t9q(SOIMw@*#|eKh`S9mSfQ z{xki*dW(=CU;Y1m0RqsGX>R|svb?r8!2R{$61)v`l>%D0X=Ls!MFz0Ti3-fwzAEf7 z;k;pGG>5iYbG!d4V%*OrkbmAR|ZIL~VQnWq{bS#KF#RH3l6d)@Zdk zUu!k%&CYy#o_If^Z&n%| zbQ8y9kU2WhX8oiiL1&6I$%oq1)W(=R(!WE6VBD7#eH!y2c^Vws2tk#MPV$ZPds_RVx9j>=&%ZfcY-5WxzbNAYhWCct5pFy^Eo`(5>iF9!Rs-JWRisT-fbymTY!RmG-8$aauDih)&5Y zI=t4rnBrR=stqucciPzKh1z(n`uAXedjpw=s(wf;y&UjK1e$f9`nK6;#}2qJ~K3dH+ND0-7tsNFYw1h@P({V#lgxJ-mRZAUTb*F-`d$t zLEj`Lz#)y`QDYr8_!pNVjeoJG_fs!sq6q}=Y;Yz@i*j0RKlRcYT+U`$;ov5rvwf{i zk<|VO9e^sri}D0*;W}L_mk1RD_UJBXZNFHXHX}5(VhAk%18Jl$unqsysu-gGB>%5I zH3j$)`G37xE&6}9_|Mf!`z!tTB__r3(d`HeP!cbX>PDQhTm@jo-bW$+{6p0No_Ht@_9U&x4)!E&?zvEYGmZe#cDBQX zgBWoOhsgHK&y+|JgYJ~lObbpCnq=D}(-`?VK9!0R*s***Co*gvmJWz?gU~$Rwv)6x zED7_v`7b9e_r`r{>qkYPMS|rXQU4c}ji1=YSjyg)KWJEzME9|Skwm&#L8e=fcC)@E z>n;j(%cJ7lM@hO3aV5s%z2ffsCAveL%m2DS3|}?c8_NzaSD=_yQTR_x$u28yr7F7MO;6&v#arjctg{ zqxsqKSibf?Z~&tq_v-SZhX$d!1-9sT95CHEu5%E*1mwsjoh_E|c(>81409X(`^td! zMV`(7W|>?pV+W6r*9w7*iP6pRb^pr4^Dbp2$W&gwc|#aljFq61T#c4Oh%9V!@nSi} z{#ZnlH~88Es#h>D$12o%IVK|aa#Wwgb?F2petALOSTc8n*KbgVa^IrgSz3VW!xn$d zDbcI7E=9aOy2&KA#X%w-6ff}WiF;0kOfZA1qza7Cyf7w4lBaJX*(FU+?TUSeuRA|e zv&hcrTef=Ax5%hM+Wm{;vpd;#spd=ADso7cn8{Un|Aq@uEIP{^ay>6)Rv?faNASz~ z-R{=To&qgfPtj9c=l{i*yIZi8e%Qu$Q+2-Grk)+e!9=}q^ZDvZwz$2MwNsY$+4WgV zH*e|cv)M*>6ANxnEx%47={8j@5|Io}Qqk%=IO3Mk_wN4E&er~(X*KSBzZm(%%Vs0K zPpH*JI7D3p6_&N%jQb9_x^hUd1$~s)aY}i zwycO(b(<%oXS@45@RwGz?-zHoBNAK=pEaXOB~oV&5=9SYGGnGFYLK z^P~4R<#%A!S%_9b;YHt)U@{zTzabdOb%2!3hBw!Jxe>HN_b^SA#wv4md*``UjcxbA zH6;@i)0%_Qq*ZaqReV=-e47_|b!n@`qI3HwDqZiC0HDlAdA-CcF*F0GqkX)|YK`(? zd>LBBl+eeM?ky3!Vq+SJV4-<2#h&d%VBKEdF)Gv;ytkfss92B55+CsQo&e@0i?iY*~ZcBThQ5A|MfL9 zq);absTRZ%3RvFS*xpAKV|#aXe`SmJ>#Iax4w(Iwbi}l@3ZYKLrlBiCqq+jEi~4f zLX_>$mc>2rEOLDm#5HC^up8{VdeeQCN*HJ&-xgPX2;cVb+-~S~V{4_m7Tc4s@j%81 zq@kDI<)N3}h5RLngl5v8Bb$}g-Q}I`w)qM{#b&5Wd2X@|*TVDK@@6Veu`z$_uB=9{ z@hVMSi*CxbYsJKBOJO?Z&g-`qclNrA>wq~b{xIZwzAf4C4NjTiCQ&}!-eBAFKgMb$ zy=u#tN-fI&b3?X_+!X`R?6cUOi`ort?66qgfL z!~4)+DHNcB7%TsaM2FVtAZ?OQp;+n2wDb>@w`?I5^vGS_69qP);7InYuMU@~tSM$X zcOTFCIBfq=szlK35F>l%#V+COhz_v9bfCFK+;6=TTnNZOD%Kd&gGs%(vC1p_7NI7% z0grWKiGOfiMayj*#tl!2cUJ$l-`xR&=H+Xv(f(qEk8pBdv2~OvYvU04+)Dn0LHT`I z4oVyFdJpaQmHn=~!rERhU)tlr;d*z2K&tl@u=0xZlVz;cl<|RNdprB`IY`N&D9yY# z9AL8Uw$&8z`^FxvH~OYg-dG}aNRJehO-Yn-w!5`qdWJxWO=o3w8HyM<{kX^+gvR#G zXKQmEPuB*i%r+w1OuD;9fpbi-2sqt694)OG@U@Fm1*m3s70Ng1HrtBVcsySvxCWSl z!s2)qY4)X65!m_uzPd7-H(t%y*ygJ`;hU03)y=J06}5ujYv1(vv;{*Q8hmqQof2XP zlwWNqWby^4-Yze0TEh>PSAjxpYC{^Fko(Z`FXN)|Ex46$t=ojmiA7{xRB4=gaR6`Z zsZbgc>eqG;g%khyyr5{z)D%b4K5?Yn*k>o91B}RXYFIkVkYdxD;npv0?QgCu?hvSX zFYXjt>zju<2dTQSVhq)0;f2`6lLjqOH-g9N!8X`%H4+v9o=cl6Ub5p4c<2<^lZSHM_ zx?X=da7z`4#_e`GOfUxTvyNGvzkw&aISDE<73>(Axv z7yduxpAP&(t-6rLh+7KUm4;nlIp|oabbd<#r~R|@%V;z} zo97?2^Es$T@~*rJJ5tDFyVpHw&4xK{am0DKzCOnn>CVoE?|Jv+x<0=_k8Wev5@8H^ zcaC}v9=2z%8_~kvliyJVTw6*j@9J-ObuRMVQi=ea&5ZtQDpyztZ^QUg5=Ve(5u%UM_C(6bjBw!f*Sx zXT7O*v|Y|WIIv_ZSehEy{vPirlTrJo20Ga#Z0xnS#7mceBPpVyV*kR(XvQQ$kVkeoqD)!RB#n&rae9& zV!{zgumI+|)Ihxm3TuYu6H`9EZPe<`0FqX1zN1^3RjuKwlH0sfb?Opy)X-+N5dc+3 zbu~1<)uvR>-KaZs)YVp{qx$nswK`R6zSV+es+U=n%-gcWTvGQw{z3ydXYyI-Ocb*UG`%>9lHLDpoqY z9|p7GC^_{qt&eghuLCDEb?`Zkg|7hFhhG@RC!_66Je+?RO!SUWh*u{h@TJa2C+Nql zuTOmCu*=>N^{H1vS+#UDcZ6}&B&eaFx9U{H7;jR(@#ok8gcAP5j@SV^aut&7-5$?I zEmv3Duy~ZO`dqZb^)0XNhs;ahuCsiS`4k~f>PXpNcrzPRy$>92muI@aK zT?)Oiu2^{-4>$L86!ONRM1#}~%~3WTR93@VzS##4N1kifc%D=bWK{{hQ}ZY)MVqt+ zLONY+>tXBD=djD;elFePOU`3rc_hantyS{pa{?b=nil*H0Mxe>{UR4i_2KkHn_Ai4 z=e>%9zP(}q!gTSK6hi`)gMOBVI%!!^oW|NWx)6zpcj<4aZPvhs993xUdZkmIn0Z`e z(Lue3xRabA4t;itVP^+hv9t2IZ22+i%MYa^-$)XfNyuC5?=V~=C)FN@Gp@W!{2Ct_ zdxVmzj;5@I0-@|gso5hbYjHLCXC_TE#IPTpG<<4QGR3?o=!nNcotpbWj#Hq|eqc_> z=F(|GJqecNj(?-G#J=Rifmh&eqg-F>%r?rkH3AW|%B$512A8$@_X976$H~g+7G|`~ z+frzh=vt#w)uu6%J$3_urTS^j1|I%5+UVe2EiOfp0VLd@pjgP+NlJVOGxNEtk1SOu z!tHC}qtyW-2w!J=zm7pmp(Rd^Qi7<>ynOpQ;w{eJ8vRO!`FZonIGpF=B;g{G$2G>_40RxcPW0Xseg~Ud#uOQ_eZ1AG-krQolzm8P z($lw^WyN$Hn4`W!?u-F{-W6;ATwCxrL|&`t)_=zgMqq%5Q9OX!&FosTvMBTyw`Om2 zED%}li9zM!8F5J#M`Q`JquCtQ|6qgR$o_C#qU_cG_7+&eSN~gBE8K#l#^hix$aCl+ zm@&bKNA9*Vd^CxvU7MWo8;peJN}C5nxE?5hgb+t=EQ6C+Y6YdhOGyx0cf&d8%?ec z>?ikB6u#b5)$WU~6v&vVBzPEFy4k!V3s zk0*3OLaJd3U>^tY#1jH6J5_8?@m^5!ya_Cx@!lG3 zQP4C3Jc(DvodL;m1xV4`p}$d5rMDG-+c-kTvon6<{gg^RoN-0y3XAgOA6g^#){*CvyXhdt3;7b) zbf{sDQ-@yqqnLpV*%&kfq2=op#etmCQGW2O;0e-iY_c;A9Z>0G ze)B-5@B74ix;4H;Lyd=r)7o8>0#um(?wiHFwH&w|sv%o2um6qBB8fB0=WjcECBrgv znPHH@RSwpezXxkL)7sZyD8v?Gu^jR~&;lP+SjS@qERGOMY>vaxQKODG#d7^kwLROK z8+|jnmL?np@waLY0nS}YTSW3is}9P3Fh#?-^N za)t~b)Z%wTD{E*1rFo-M7k`Dp)gf*0jhHBf1o}$;z#v=r?7uL3i@_0s8j&$zusX{2 zx_hY9WUtDv4$7~H8WWV5qav?#jvu4HtCr&x0#(|hcQ=<8x$Z5xz`bKmpol|N4vL^? zC!VA6cq7eRG;Z-DTaThfi`uQ$W<62-W@3Jnbede(g^Z{DYm}V_R1Hybya`~t>7Aht z>Kdmn)~FW~>f@t}>^06zrAueJ=#5xq_d=?xsH(~m`oJ|d56QIUI<0(25Xu0Nwc*v1 zYSYfl?84K#Iy*W>CG**L&%Tv<&L1d8e6bd$#fb1pW@up|ge1Ah=U!QmeW;cy-!>*q z7G%#ge@?QXC~NG;sx72M$l9MQhfLh{7b|QFw8%FmxJwbvXD&WKp3d z9MND|Tm)>C3LbYuOJJVHDLd4Tk_lim;dJKoX=`_=&oFZb52CLQyxnud?++IU>v~cd zd_UA;M)DI{3=_AoMur>h;-W&USt{P@Y}&$-gcTE3f`76Z9T%|!3YlH;p#6%2dC9|= zOnX=q05WqpIVDlrKtfKfB?Y`asbn)+>K@c&Y9#3p3~;0U2{5Rqr8?Yy<8-FgYTYZY zSbO2CR?9JVzdkwjk?zxbi^dYb7qU7O1Aq;RqwoM6VFr-^fY=NX=AZ#MRMgzE)jR~s zA^3okKLI`scKaea8G@31EzJxflPRC*V#p3HV(Hr<C=>i%NP4`6%{6132ko{->x1*=F{`{!_H#|5M{J)w1-+Jq7{I`z`+!K9v)Ee!x zux!EKXE5ZfR%EtVF|$S9M#mrfvV2U6M(zqu21F-)Xm|t*SaU*2V;Go>Fq^X8E0j>Q zd$ec*=SROtEHZn_=`#=XmTU{Loiw|{LJ`^Sx$1-%y?A30hl0Tw289H9jYk%|k6?^y zc8SHj%a+S5E@d*f(QdQz=XtRCteTBwF;BKG_i|nz-5VPKj`U~+re97EdXT!~?vZ@d z4Fs-I;drmhcCmj$X&>>$&E?r|7>vE+uEz=RB)h!EW-9Cb%Bd$nH6V{jJ44w14Kec? zdY4>Y_+`&8hg?GPG+0?lITjF=E6YN)HKk`Fl3Lz{R=KOp3ypGDxfdGtIg(bf(nPgb zMr?ju6oB9(|wz5FZ?IE69)_b8C}heoHzD%QT*L4 zSvx2YT>!O&J7jdcwK&i!~4L*6hBD``x$eILXCGo#ZYE=dDX8R==Z>L`EG*Movw&$CjR>Sqn zGIsWrYBm?nX;CS_qQ^4o0{o$=oE~DN5Nmq7Lk^k>`AZ8>_yhaFogIO zLj|K#^aU>wDrZNpS!)8QfBmbbMI`tGAZ#jYKG==gV>i%*LG>)}GHsHEt^e6gT^&2l zo?l;TWh1P-`EYaFJJ%wI<#0@y2kt!#0O@$!_E=aOWJ;WdDg>uC9~2boIc1A zKA{p&v6dY!vvF`&pA0RE;7N)6M#?PoPbab=*o;RraS`b}4qIDGT9eyun)h_S9lK8` zXzIz<&W_$#%r^wXJ{UJ+if!rCg7ZQR+sdT@%2qRu1i^P{YFb}i%0(e#JoUMr0Lv>Z zM&=HH!HXS0Lc%W`X^YPAH*A`{Yetc`j&>9X@&I~J<)!JUF zDP^0DHj>wuCxrI9zI=VwJ7?DlO^qlsO%(O*bC9+ct0BOst1|`z!y?r4(FK@BsHo;Ajbi0+>7{9;TclzPBBPR;&q|Ei+cYRJIpeh5J;=pLowQ zF1#Nh%;S*e10mRNjhSAB5eyW_L!-wK`0y1HNoT?|EyQ#b#`%iI1;j14+nVAR&sonC7COD$>ChiDqGH z#>murBC`I`#SESQ?qJ1#;rNfZ@2$0R|KB10OQrSI|KpthTI70pddh|12;oMft_psB*#!RI% zQ??H&vB%Hs_dCI@@!%j$HsEwar3r! zGV!dCp)rF4Uy3fgs?XrpAOAuOMdVMm@gFM!-#d|xCr4MJB29ordKH8J<=c43ggCkGo!mi3s<4Z@^Vggu zrKd+4_y3{y!ya3-LuKFhh~oRMhg%@1kxesQWZU%kbsHO{I&vMJON1W*sl9tkYTBdH z3iYd;w?`*=c1FhB6BYAUavRH$4ofJ=mdM`dvOQ&Xf>lNHHz4dY$|-pUDM%fI!=Dyh z41|sxv@9=!737gWAO@_?cOYOlF46Yu3!-eoYk1p$3eVcfCs4|<+q=3AS$rZhr@EUu zoHAg$c11K5uc1PmNj-Y9881LI93EgocERH4x{nxDLl}7-5?#{fQwBheaqNtdU;uC7 zGyl7X%VCQP)`m?_=>G3E4)B|y7rwNDIplZCTib`3UM~U`y8S z0fyi0Q>NwSihbR8`!J8~d421-T_Gpp6>qI6`}WJ7u9E+4-#>G;?6l32(}s9uh-fp4 z5QXgMRrqIg`}CQn+OtM9jKvcG*5;ro{>oAwV5l;%?%;d+A-_=m+u*V+{Xnj$LGVjY z{kJ`o?+2!~C3&&RQR4;f`kCzOfEte&LrGc9HBo)O$iv6PG*D1UX+J8Srb^_tO)&{0 zRFm36&g-zr5DFS0AXgszx^MM)RkTUYOY9Bz^4_jDfC_=+eZ?;V#YGxuKwHMQSBHP| zZqg}`q4R-NwgWluq!murOr&R(SeGRQvD);che!qHITxk=i6o^}Q_{tnrEIn{JuP>5 z!tl!O=k0zzFT8O(NA;Vn{6;9=9XCkQd+^b_X>(oaH4(t_5dY zY+js>#kg^P4FTrmBkc0-Mp~uE`1o@E=x{N6Z+o1bEzeDM^Y-%Y44-2?Ggg4Nn%#(n zOx?-t{_+AdEXo|G&Mb##^)Z%@5>2ugqj{n`gy@WV1)|kAmLFLeSj$a}VxJwwxbMKc}Qv%I$ zXP}vS@4SHJ`N*pA9P|w`tqYGlGK%wds9RRr46A!ey<|j(w9A!R>0;?Aowtm#{V(tG zK*OA?)TzW-MPe5rKH2L2IEZaZq1tZbTFuCz3&`l>BaE>_W106pb>nl*pIIE?jq~J; zBq*f~E`BUbYXaKk8=ysotM{uFi^I%LQ{JeS^L>%^QX5q52*5;P!jNyMJIJYHVulPf zbrC+2#S?2$kIxX5ABIZ57Yh`Hyi$y|ozfzBRSR_VFTfo;YrB9dMX&i zG1WcYg#{kEOUa+v-R$Pq>s$IfDWwQHJiy_%srlIMLSv@xsz2?-nhc$V%z2Z=v-1&4_m`@k47e{D21 zjGr)Fb)X;Y2|<*?M9i1)P?FYg5*-=`OBq1~X`(cmVahio)iX@q$*0Oav!DS|h|puE zeJ1_`dT#|RfzNInetv7vdnC5!3_ZBk)4a~-Lx7@A`7yB$qUw0uBdUUV+)3_%0BIrw zG?U^Ok=l3RkM4ICQa9i6=>IfZ-b}y%gL|GP(4#>>e6Qu=)?FQ$9^!1IM2x!iePo6} zGvuilWJ@)&U5L$*%3@Yns(h;m(Dqa_9HCEjX z(($x*lzdP5gn72eDjnD&YaiV$Nbz+2I1;)EC}(uPc>H7$f6V$3xA7ad}~`taM(IiHI?%y={x92oTJ!RLWykv-0K#eUA5j*zdhR z7SmP?i>glk9Mog?unaNN6WYA&)xse_1OV?`4c0meO)J#=lH){1b9Ls%C=Zpj54UgC z2%S9gQcRn}S};B@s2jEq?WwyFN$faoucQNp8e44Teu>)9(~3|smQ=!xoLO-W5!(~_ z7UT`fUeGT&3(fFCz_X#Sh%*c6SNFhOl;`+(G#wSwm2^8`{vJvq({x@G4e@y;27d|Ga+p(r5UI7N zt;oV|Ob%N|@rzoAQ^eGxI86gO&r9%ZolxNDM2(1ZILG|GInuGJ7E29tJZAC7dS$eP zdnR2<8aI}_F^L?Zr{w+!MM9!+hwzUd!A3|Dug+QBjCwv14dPG0Ax?P73Viq{-x(yD zDP?fAk*MT^9l68!`*%JUkyIlmV)B#{=9GjFP&V}B&5x2W6ck5@#Gi{B-cL|vR;R7{M97dO<#NQq);EYbnyrv0 z9~{qx+={joSfae9=WTj!A~8Oq(oE9_T9~Ta7uzk?WmjsV%vhVhY8PG=Fio)qYDe(a zK;8bA7FT$-%RQ(f0VPeufp!$p1;soHV~{S6V{z+ZdUlzf@8Le{pOhJN7ydLo9aK~C zRpM+72+92Gz);VO8SDB3W1R!P8Iy$-8)ry(Y&=xRm<8V)oBlq?$I=tzWA@>>_L)#G z&2*(&7~nsE9v%mE_W+P)m1Ei`K-u}yD9o3ssj2@&<0kgGaJ&ug$b~FI(;&4d!@a;C zv8VW4lUbDa`LiwE7ebduq|h-SM&z7tmT~g7xr~7LP*+*Jhc>wAvS)#YF3@=rp%xV` zP^@{~yM5Q=Bp@N^=FD%Hm|tGsu*@VlNs(9(LSob6pN9mJV_^oio5n4L1Fi~03lMet+qBS?538X)$RZaM$GzA54U z62}@dz@~c$OGK@puENUWMVPddT7cSTXps)-f4=EGx%THr?fOJ+W%3h)|-vW zSN+e=Q0shjR$o{J{mUZ`w?yMObA&OqQh^Btm5;1zSGIS7?X@`do~`UP-gdsF-EoK>Ds6eF<;&w+&LX7gne{UKTBEb& zIITaWl46rfi&Im#lh*Fzp>{{Gt&Fdl6*f>gjPd)h&`r?g@EZ+CNj_xX|;w~M$-Nn)C{#pN42k2pIpnD4#>&9W;-A05=vIdf_Z1=|!LBG~lf0Rhc3>obpjXv?k zn_yXyYK9htf~^Pppo=3+c67GC?zv|M4&diVZ(d_m{!8}L%G~bXkyRBli#FJnyIzN=D@ni?UaUd)Msk*#T-T`43o(Y169U-J=t_i0{DZ*S zA3AfRP=z58Q%{m1ggqN0^-C{zT$t2^aQ z$O4Ezy%;`mlq?x*sSf44vB(VvBMWbr!iuHS327M|WQ~#V$iGlCAF3GR$%P)}Osfz% z=Tn|B=`A^Hf^=%uRB2;rT1lrj7N?=;r@ft1PB*7tQdvql`0=7A!08H%8QYUn?xV~1hb}c~*5>J!!9L*&V=iv@z4(#Dhk}_8 zT}7|)AY4c5EE%j%6 zZx5~L#=?gTAmx#e)M3QSA9+ER>VRBh+zZ@Is5AsfItCgT;sMVquFkeatyFu;%}KQ0 ztk(R#Qzt6be7bK`TQN z(h4)kRz=98_bdX`@i~!c5rp?(4NJ~*cw@&-S@bAANCL~m_VwkP>!b5TX(6$@XA>`E zqPBq@J?!0sDTa1s?SKdcd<#!I_}DC;x*->$Oek>HP{ki72a1g-+z01bf!NUAepH}a zj_coi7ONcP^+Ew)rOFpx6l$j<YgY@0*v}9>WR^(%kvd@C|P$ zrEiGg#)?gctas$|R^yYgwMokI)US%{B^SLTwYf-REnI%ip?fNlEkW$I=?a2gTFHd`M!; zbTvB^+;Fm$dU8u0+J(gMD%}17!qS3c8VBK6a1%7iERnar??y#VQ}dCDm}yz2GeTjZ zp5Y|`?M(FFMB^8Y7z5=Sq^&oOjFF>)dY#12sL0)ArNe+94nofSY>^1c8>5gCfsZ|Z z_5*g7_)(x#;Xv59L=X{oO^hv75DpE;m%Y=|{&8P6^#iqpgHrMPQi(FKl)AorhfFXW zScq)fJBz21u1-Ic+^Tj+%-&vN zBWn#-L9r9L=ZWsw86^mVVNrYZo6gKsL=)|F6%WKgF77i(s3$bTPavx2=(o$h4$|P1 zXum7)g#ws`nBh=x^d@Pm;|UIFzRJ9oxm^xjbIYKBWzpVTce&~y=BemjFUvetconJs zuBGFcV<)79isG{P*f}Xu++&IQO&vCttARFG;|9s}kxcmGBbe^@-LO(Om+mcoH!pQJ zmWrxu7@Q{quZ1w0t*k~Ghz4pe&>M~uHQXVmPe7Yb4z~c~0RemAz{#Kh6|`#>eA_ib zY$`F-`Aqlhv+d)fp8@1RZak(B?xD{Da2I)5>`7=X)%q7B{;Yw+UpR~sv_owh z{$g%atXacfZ0Bc;ig^UqJ!locspO-Y0V7%f&f9x3MVjHgVd=rW!A|Yof~VXYgg<>l zW`7VjA?y&`f(OlWjlB-YJo&u|lf1|W>J#4W_y`4@0gjOT>`1pp7!l?bCJj__e0dEv zLfa-{GEi8wOaRMX_d$mwHJ%dw9l;z3Ocd8brM!a{i-2hkBH2q$zBv>mX*f`QD-X1Xtg@7D&VHst$=2WtxXaJ$k zn0@c^@|SF)G9i(%VDPbmstQE_-jNtOL_L!^Dtrm^GdN#yP{|b`PAom@!cdi6e1zjh zAIk4U^yFB1qm7c}ii~2oNZiOHQ5^!Qw6eOfMTdwEzhlfA<1oy4_y*LnsKIR%Z||h8 ze)k&2tFfl7IaC~qS$6-7M&{YU_?n#RlbOZNT1++FZi_KepwhHoh%_9?BkgNgk0R@I zdpMfq0A85v{S@kmC@}}qhXn9}*)$#SvE02s5MG1vu^XGhm(ALR93e=5W{ zQ6Hv0P>($q(1L0osfR{VGF%^I=~jq$luB?h>P3Vh8+4{8qc%L@%FXXX?kh9z*rICsvy^ z#(Lx+XSlm->x**iDChb(!Vx*$-GHmK`Epx~Y3b$-Q{Qmwlm^FSmTI9^#b>FdT&Pdk zr)lNJL!FXg>=)S$qm;R=7GmC;qHj?Ta3m=U4ttK3)y*xi$-xTuhr53R1HgRX&u4U2 z!q;}hkKab;f7R&t&;8F1EcS5-BIc_}a^!zLLk!xESjHfUn5~{?`*cKsN~2SRg$@Oj zB7vU$O_ZPGWV{ok$MK*IgWnD2GVIN9l}Au2c>2YZ@hGm85_jzHW*U2N9B<0qdMGfS z)Rim+Dh!d~5uk6PoUygL2ZLd6_4&@?`Yt>rax2tIoG0in;g&Y?+-znUojv%=oGvmy^-OxcIFJdt(4Q5t-ah}?m04}~L z;#>J?_b-Dn{lcP*nK+RKbio<}p`HtICY+yRgDzMJ=5<7eW73Mtt`>`+(T=y63Go#% z?J@gr_AYvpygBQ?d3$^IA%tDHE@!Wy2=ccekluB~i}Xgoxpv--O>k?Fb_J3Nft~f< zn0ydaWE<|H8ZUPX_BRAt-r3>=Y_^&?flZ}5LMO0TJs-bD2TwH!JWroeVD^Put*&iDMgZUK`spZM#OHkEC~Bl&y#@coRAv+iKoU zh88F@(AyeXyBw&*eCxI~7ovqR@8jB(Zf2Yc`0Iqy3qv9HdE~d{0Yh*+F6nm84z&6T zy@or={#_t55`l}$6(>Ii$ucY8=*mTHMsgGgqL5fezw&uo*s*K-)bjionlvTWVwRC|PRZxJf|iADINujSNm2lBek~u`^dIQz*7= zDo`reZJ?2PPtuh2S?^+DaG|Y5=6gKh_~!Cg`Ityk#kZHittG9kgiOMXomiqgkyJSd z<6TG*hkF3C`1-4>J$UipFGv2NFQ$LM@p^DimT5@bMZ-<91{=~I_>cd9W-0Q2UiUe> ze_{R)=2J!e|ElT#SK43sKmQc|&r%m+Ke9hM79hjeHugU7e^xJU#2eT?x?$_%$OhgT zR-GrVMopnLa2`%hJOaLei|{sk3=hLR&n%n!2~Y(35TOIbj?32)j8VUPSkZ13V2B8jNS3IlB$Q=)0XP!( z{hR!cwO(BGsO~{z@hRGRR%^*QeXjKF&~wx@a;{sF+QX9c9<~X~uEIeXd)tUw0?<95 z{}Lq~cUA-Luk@-aCqABn;@CDy_7Kuhc>XG;i{OTu2ie7PPvF!;6k1hGOf_8}I-?9eD$F>!+`G}LGAM3|M#BM~N|nZp|-MmRIs58@GSrcbP$2cpW1^4@hm`?mE636{4`2xdmS#4w#CM}eJcgT ziS!18|5WWpM76>R{p#!p{(AQ8yJy5-+xgC0UAWNrC##aC6GJ?1z*W?;t5>F%-7LRB z^RSu>s(d5E0$*t+Cc!xx`fQy?1Ax4Mf9hjd*Vx z{HU6sbI}P#ls5pH#Tzgm-ci%NCGw3wm2yDautM;XC?h|gT9Uj3bp)R-v1Q?LkN{EJ ztz$8jJq(jb8n7`SUoODBI}Gv&N?H)QXY*b|WGhJ)Iyh3Gjn%lLv(-bQI!scoF)*=u z6U;=N9C$Dvt07V+u=flg0c@fB)M+F=6%_#o4O4t1&r@&t1N*|z{(p7(^xOZ(_Wx?L zRmt~%i~k8>|8@T#7^gq#!6#;6|KHy7?LR4P*cqO;zsL5!u<_?5gzfvJp!~p;H=TxL z@E^DRkz7b9E=|I|(QYqqZAJ z=O+JT!oai{_faoy+J4-4qXZHCoAl(wpg~MgZ}HG2CiNXf8;P|i#gsSy=NGnx<|0sL zwx2V9_78>4l}}!)jYY;_hXPAK1MsVI_N(3W2^}~2rzm(F6vJHq1gNLvBDt!zcIy`CwBkxG5lX^qU=|#HJg=ovyNjJ@qa7L`q%T{=a25k zOBg=??V3-_aBgdg{aZ8bH*?1swt$DvU+4@fAE?;Miif>y@#JSr$6$Vfz;8l$TP+q2 zPrMnSq-9$oQ=MOr-=eU-6^Q2LnjEw%uqOmN7y!{_9oRd_wiH z=E8Y!u=zvB!LizRYATrBK`2}>YQwE>XiV*2^i35DUX+Em5c{|%bxF&$Hk<9uI{alfjO9%XXSw40guf%}xA=LFob|TR z@geYCJP2B`i$SidVkvP3Kw7b*DPw_trC3wck=~Gk={@OTm@3|(mC-BVn=kkr2!k<| zap<)vKIYJC@5^X$jGd*q)w0|cz;8JJHd|u?`&34_UYnZI*|5Vz&sN`~D=0ZVMxx)^ zv9UfInZ^d8=vrY-;9_2oS4`*PR0~5Hk5M*Wi=ultbP_`;W)skh*=&!ut}t>wscmvI zu~ni?(Kt1AcC)vxnZZE2__Y=*jbKDwFXT>Ta>Un~iLo~R#drL{Jz;47zq-CU`_lYh zy!{sUf7AcRBgohNe{iJ!n5V)0Uz_&!PVTCV^PAMs?O4TYXnq&tCVeca!ioF2T-eFu zRyv=1|1B2UnU`0!n$BwB_1L{s&0sI}))=M~>$S*nwcJm>Cmz3LlR8GcI#q8e)cW%n zZhUmJL>o37zT&CuX*rqn+D{muZUm3cXKd-_5Qbx|8tzj3YK}Xc+VLzWueP-kel9mM}9`2Re;d+H59UOw-a z|5Yn3gnjw>ucGrGuAjc*|4$vu-;;h2|HD4R$;hG}yBsRx z;X@?+yx_hwRQx;LcRry9&X(MXsu{x`I6u!dr}yu7xaJIid7Nv`kT`ktipELF*XD)v zvwboIN1A(RCl$P~V9bI#w{cbFt5Jf^^&f+(loX{dLT)#vIlBHphGYCuxw3@|B#ly?!$9v}N?vyvyS2usBdrtYU=}MrOn9B*?B^ApTbE>&GiOWoR zVwskU%|%=W#Y0n`UQ+^rWlcUc<+77<;hd7G`Y0!wmBw$?#@%$qeD;3Rqk=* zX$_oK1IPOFq@rpbBsY;~kMrocy!E4b^89qqo}(S}vKFeSf_<{n&k?DBd@2Av*eucM z=c9aj{+oK>bkT)-;PiXG$q|)9>8_C-;NJxCc&8;vP6da`V6$?#%xd%=MfFG$MGb}-+;D9si$fFK8!-oRT!TX(PhD!bgd}x}Ylw5B9Q+#MTU4#3K&5?)yCIMiTkR zQ=fN&Ysi%-R7tKO6=us^L#9tKGm~Cqv0q@HL0^n1NBUyowCE1X+)#y1rxa!eA011L zO<`v7v5c|4Ak9Z(EMq9ekiV%>CCq;r2UCOmznj;+o1ZIRmj73&!yPQ}|IGfc(yo5x z|NS0*-lyhqmJgzsrPbXZFg0~|P4M0-K}2KkBi|2`YJ4U|Ejf`iX#HPbo(DNakxNt1 z{6`NgRuBsM1kHbMSjhJnreQs=Ox(J?4_CCAmcr`7)CXy`>;t2sAza3aIfwFYN^fw` zF%)Vhw?twemT?tIz(!IQ3Zb1tnup8ZKi@mtj;Y-=p^$ocaSLSzQ;(HHnamRDjC zZFhybr9v&~Q7QYOivIi5VMSW-GuaQiP95qUCVwVb8ZmL~M$^U-5!=%04>Xuxn!B{B z#`7BmTZwt*pqKHYcT`uUwQEd0Quf2S(7Ws+)JL2CRcfz=4B<8XtrFa_(w=YCFJ$<3#3Afo4N| ztuhAdm5C&SmQS42FiA&&iUoQmkb)9M8w?kb@`ZtwMQA88vtnXhn#jcu;~JqHhq2Mt z(?X8Jn8UiBK4=kXQpNS7{!LjiEEn}d4;b5yh-F4z2hSi%q0VTe!D+$~hO(mTc}11=iIl5ykn?4T}01PA%( zOjK1?I(mZ#hVR&}A_WMcYZj)(R(_Psj5MD$Q6%5E%3>YS^(Qo zyUl+7izQ#x?qPp9G3HhJ+YzEGJ1A8N`*vu*xNpZ*jYr5SzvPvk9?ni;b8oYQ?v*C0 zS5sh#;HMDRM=pexv+8O}6cnO~7v@iph~%8@_@&KdxURZ?B#yY!;5))EbzMR+ zraL`Yr2~h0QOO!^&W85`0tfO{fPq4*2I{UScweGW>g~J)adtwg4 z(el>vyk!XGwbpEagsukP7@U4#yOQzK|k`iosc$*ytwtc+d3oAOQn4c=~~S?B9` zurNxZtU`ZNS>LF~r}}N4hD4(se};EM!wy$JRsN3o)KAsFr;2oLF7+9=+F!DM_E$`; zuIiKAPA}9a|KGeXmP~e9{l8>CE1A-gbf%VlN8)<+t)9sE^Yk>(%2f+#Y3R!{Z!5Zl zS3mvy_q?mIFH-PMrB0??bbQ?3v&p~wf3a8ck0R|w6cw#l#wy2qxmtK7g#|M`%wRpd z;gf+nw0`KJBe+tS|naMx4 z;kVVAzYZ+D?Ahu3Y%4?Wd4bz!b92f(U7wqKHX9xSWkz~5-UxgrlO=)Vt=!k%e861p z+lrx8w@>af)ugrkG#J%nU6-2F$0)?O^` zqTl{vcXd@!l_6PeZ~`(PA#0&(BNjI%q346+M!r}ECPfgS4V;jnkI-sj?m9@l#XPDj z=7Fs`mo@6`S{05J!FHQ<5pPf1Y2U5XU#2N`18KwZJyM!7b90UNSRHhI-X-`$@l-4N zu<3EuU8vPN!9_~-y{r;OifX?v_uFL9|NSOJQS7v;pA1j6vOVRQjf7+^Ztw4v1~NpL z1CXM)u;8&npmGY-)^h29A;}AlANlqijk^2Fw#7G58f?6E-PiZS{TLzcbq2CVfRWUK zg1z|YF7AEbBwQc3AvQfU$fJ(-Yt-+3nxeP~Ln7xy=0LX=4mQEWK`0H@-Gg6~(VV~g zadmmyp8mF@$Cv9{uy($CxxKR`f#%EAgKZ99#)cdydjK`p%tclQ+o004cJdc zlG#>=@jBK+HkcTzk2qBrGm_E5Tt*BATyIukij2RN7kZu2;jV=~+XlR%=_r4sbTvXH zj)N!AL@n)=Hwh^|QBe_yVINuNa&VFVO7cN`3zsbZ_g>-)#1^mwtO*+6!OFEP^hp-! zuZF%^!(I`z&s#Q9iMRBV+bUyytb;#2t!R~=~|N^QCD|2N#II7HbHR2VG0KI7D54O@;qSvu4x=&?UGkhNX+Y(Jf`@gxh z{?hw@wbsbxfA0UaTK~%b`GWgD*!B71#s<8OB>0PV|Moua`$f;M?(g+J2R;SLVW5PE zD2I7CIPi_kb?ZQ;AdfrAo}JtgpTncEJ_E2To#qze)qyCU?mYu&Dc>YWxIyH29^*SCOF*l~#&} zeFRzoCYhiGa`wVXgRFH^RjbXKIl!)V(rwu6Q_3M0OG*3KNd?z4;>TxGUZT0U3#Azt z`?qKToa%D2<{amqfb4F6IrqGKmY2*2*I{F)=R` z@sKE1NDh0)=~TuR09KYZK(Q2Y+9c{mM&18S+eaa*hpt$*%_J4$q1aW7wb6WhKcsdk z*FVW6IE^2F7PNldcNRn)GP$P>Lhnl)YVO7tYo!*P-|tJc=H#DTF)eB(%&yGh0(_jR z-AG|Do@-@P#bB**LrJFLmI~UP&HkK4rM+Co)QJ(FQ}4qOiIPG&p_J9lm4MIVA$Sv1 zz6lFY4$%iIid78g1;%Wgs(%?wK3?e+o-Bh&uB=avp!iB7(rHxMrHfULk=5B1PRlb5 zyA&P)F|z5Qw-K7{TUdf5!j)9 zrWt;Ibc+jKMEEPjLGSfof}&1|{wN33iRH`Q>1qGC4`1d+A4+?~w34|{WtKQ-2b0Fr z&drLvoSn-{OFdVrp^1v0TGR>-%BW*D%hZzY6^Ctd;@es%1*_56nmN@T8Ml6(rmf5g z=0%BV9W*U*b2QMw@uO||%~@gWpVTW+6CCWDLk?}j3rusOTBY!rX**V2+p!@{$LXYO zn4zNxAW+K8j;cTPT}g33o6uSPLJG9IO#5M-e_z(T9&S5JF<(Ig)7t@HWZXrdjK$I@EP!&jjFGt_@OW0nDNHke_K{(=mcTTjIK?rS25f55Smkre z?~0gNm@`o&(-cC7p8t3ZJw6>l4X;O%0DzJQeyR+>Yy5_X^{Sv z@;+Y3bTt*D+o6I|esBI5MN_65|37j9*6yExEdv3z>;(`Qn0{f!_p`rbzeHtQQ?!-O zE>vw>DBAuqtZ17WozLOgPrnR8h(V8Pw$zz&+^1tpyXpJA3jhI7t&C{q_b&kEe{E#` zf7)hboe(WlR#{=bjui1E^R+orpn{ZlM z$+-&jm|%Ne_emw`CbV z@7=HeJw^?Q{&G4qol)&jzgzzs`o3EGs{eid-%I~{VGHw@0{&wRMfBr z^}}k@d1gBlu@pZ?{aYAefAPuHzioLx+>cQadz>s^)xZA@_sjooO&+5EZhkv@a`yj6 z`Ty;Ddx-yEZ#BQte_v#(>3AnrP2&IW{#euki{Za{OEM4sl6|TJh?Rld&a+2afaCyH zA$D#B-|oX+83waHME)tP4E+AK6*?%xrAbDJ+%$YDlcHi+ETKQzE-UYrqvg{YzDBqey z0yQ}E2+sutc$0EVrJEamqw-g-nyy3=?_x2h1Y&K6q}=MwR8lt{q2m@yR)ta_yI8U( zZg#ty=vV7yph`wEuK4G2_Ht|Ih25u0j#EIP77jZ%R(C^51LA{HX|dET|1eqp0Y+`p z8MReBOvVUvGqcq?K{1<+HsXSrSmnv#^)%khp<&&pf@3d?6 z1`powDc)7;cr0r-JwdaL5Ak}-AL{i+tJVw;jZUM3jbixHoNu?R&{R&P({9i6+7r|| z_-1c~hf1ph*EfEtRI4~j^JEn?0_WQ`9zr?UY^7FdQjyxoL#1AC*6USEO&=T8TH8zv z_)=+iS{0R}WVLp+)tt}EnVGHBYmE-&hpe48j@gtzsT;(Ysq2AciY?liS9N-*cN+D1 zRhPG?Io|>(Y9m=&tya5T4UKCMsI1yl4SZ>~ap+zb(DhKku+#G7<+R%9H8%wX612&R z9j8Aua2VH){c1JZ)lRIgNwXVGjZI!or`1sk&pKak;oLnuG+PX=O#*7@pm|AyVs#b1 z2y%HjwJJ@F6}4)$T6(~|wBCp{wBU7CS^;uRyxh&(aOCB*XivjNH`8QlG@5Z#<^fKp z5wgxVE1g;`w5L<2;Wj-|IaT^PA1kVMDoh|7A_}cG8+`B)sJ2iKYllu&8_XpB75h~M zV$41VZLLyoRhfJSg=(EaV$S#j^RwBmdE=_>iq_I#Il!+`>4enn8q=Vvi9vfB9cE%X zJhYgIjh2rw?)zFn@r$f}-P)?&>0eF;C(73e&X=y3)t_QISO|pK?%+|y7 z1i7?))@n_KQK(dHVQC^821>1Dc4)R{nhG{9+<=V?Zd%xW6W49MY8_6wSrpz2T4BWy z4{TiP4Q*y~6RStpw{K0*_>yoi*LJtqhkIvtYqAZuyFHorXE9QBIFf5Wk&Kp&)czE? ztemx5PiRmbQMwdxwUKy7vt)#1ySi^?N)bN0h#{y%JM|(fC%1FDAka8{y^mNyGde<( z4ojzc9SeJ@QxJx;e{n^e0OYmT{r48jRkXryz2n=VvYe*gMiBGGO2!IclN7ItI3)Y)LUt~($aKM5 zOhK;XVu#=k#&ViwmpPGH$Sy|x#iYF7$PK1RVt@KsTHAmBsc)BDmXsaJYd`e~@L~Jk8or*J`T5W7f50Spg5<|Hw7{-R1=QbHTHue@mI_cfSLQq8up+~(xtSC;tZ?hFPj0;5}r(27JyEf+|JKUt|J!jsD znA5#QA79={J;)o<{|5%doD=V^Qf_q7uuYO8U97iwWK)b}J2@`XR@Si{tSsSyyfc_? z9lB%|>5Z0UQj-XW%yRaw&z5+Uy#}|__!JDr%Gkp<&-LBKO-Q5zF6YUNv(jz<2-n?m zsi@M~ZI&)61`PV{=o)X?;4B?MuX|GG?g`T8#DaFaD{{zX46a{X^-qQL&(4seX`?!s zwGNCuIoh}(R?(H?o36WSoUXrHUFq(j5%S&hr8N*Bm)-S%&Q=fhR(CcR*E7w_o6~l9 z-QC<@D_C%!_H8Gj;rgry!EuZz@mCvr< zmCw)0=Xd4vqxYBBC%Rx!H>S3W-meSN$g|~|6>FoM1-?$#E7P1gopZ1Ur{Ue@^)J~C zrtQ6KedlHNmY{pafbfapQ~^qt|A?M@Vz@q=Q22q~Dm5n;U^pmKoK}ID(5z&mxi+28 zP-UEf!0nv*RN9iFBs9=6LqT|WWr2%v`HnnRLu`vr>uVy$j&|+*Y@rEo7AgTedNKg< z2GA`un$sl*+_b-+ZcGN-tv_diNvSqR)o@-MjE_0>$vJlHI4o$z@Kk1*8 z`xmE|r7D_`5S2IOzJOT*(v#(j-t~3);@7)!Ut9j!$x$GF{+#u%e!Eriu_q%l@`#Bc zr-CQFv)dy}S?*o)|0Vy<%Wv<>*CBy};?LQ&S9?vhx8+;a_rbG$fR;G##mY#Io?y1N zwZm?np;Tx5uI<3n(?oV;GEo-c@xF}zLT6EB?QgRWP>l;jv6{+01b;n$2C2O5UH4GF zG-aH za{KmXQeJ~dCA6zl)vH)ccEW1HuATx6IrA~RDS@Kkj2*p}Lh@M;+4XU6(jA}^bRYtR zVkzuIUJUtd;G?qN@*52mr@oYOu0;zXHr}zA^={@0*6o5|-_KOCC0{^7!U2p@Q;b6f zXU{@et_4(zasRpCK2O1WbV^;^IC`J0USH!c@_p*!#L~(d{>jjWhRrCR;BD_};rryv zJ$B{k8n_d1`)4=sSo_r?djv<7BX+^#TnE&Lmlf~x8H|HHNaUGjjk-}r~*;Z6_ za^d`J;7yG;ci|0ddLiKr-US4=7bn=aAzfI`3(UOmCam8D;r{UIYv!x_qqJD(mx0t=x za>Zxt2~`D}HL^<^!%dIrWHg9ne1kt0p&`vNIgn$PSq>d?54U%^8#t296t>njt3b6_ z_N&XAzKF3KB_-O>9`r@ZVN83cW~6h@u0O64btKh8yRDAnBgi7&8d6|)b6@pX&8yAmZ+Mn#Nm(GOK>|Ih@fruoIrlg}8kX=_WvnNQpX6F1En?fh?H8bCze$YR6C&%_&r z33E+deGDW-;>llzUE84$*+poOHMA;$1uWx}IJtlw7+Je36F)}|30`OKvr?c2(Y|Iu zWe&UuHQOf*mjE@^CbLSvImGZAzy==yClbt|2c+5H1GKWtE9{;0Z);hJ!J!tm>HPcK zy9M8$+xa`_f(2g(i7?Ev9Flb)d25@!2#B|L03=n{T|;%8hRvSc&XVl;R<^fAkc#xZ zcfCOMbA$K-Q*6c%+Nb1HMBWk=*Sns5b31Emelpwpeswby7RFiwKAq1{EGx3^8jV^! z`As`%9Hvv*I@)cV>h%tQ=_>$=CcVe@r$7Ah(5+2K_ zxG*4L>V6^;b1L5Vs8B+_8k@pvj5B{}@49zGV^N%)`I*X0zwQkAjh&s5K8UmjapOZZ zM)eHfHht*G4dfR?Z+<|0`4*vcccr_MEfD|P(XrUF(S@fSf5-L?o`xWnZGpnC-}OU$ zcaz<6{ukdvC(Tp#`kS{bXjnpq?%6lSV~~XRE_(2i1Kyj@@t$v+MsUdLBwKZ|L`}Wv zpWKO!!2u_-G$QQrW-ok7n%T1+-ZO^LUjjEgg}D314aBj!PYJl&aqsmPO_9pjbzynx!G~55niSfV4g%F5*M=W&gw1& z1#EP58}joJ>rZDWu!qnSvDvcH!a^lG@1ci4bmEH{Es?@8G2fixbbs^u^e8J8;Vtkw z!DBl+yb*$TvOjaQ4!bngfO$ayo`#;KQvuh*yZk7yGTm%fbg<$Z`t9wEqBL_fr8A!c zUzuEJqfGD}Dm>pnb5PuzJsuRr8CV3LO;?=o#YvRl<1d`3=-A@IR|9qDCoE6#uR!!v z3kLiDHdK#{BMZ=^55-3Tm$ArE!S4Rj&elGs+ttX~9L7T7EN}&-dUkRJPy1&U0Qf8t zu5k(kBx9#=t0wT0jU?Y)U))3LdBUOTx(~4hdXD(p4nMv3z3XFexUb{^OceQYVJ?j@ zv&4&u<7q!x2Wn|*dp#VMJ%Z0d<)RMPd!KbL^@!y3JHtJ47Suh{e1T4 z_uo4rGP4Fi5>}r zOT^rXI4yEupKg5)1<uUF@c9&!dpIXTPTE*w9q{R}Zy zujGf*u`uDDy5869wi|~S@Z}^#1Z^KK96ln0${Re=*pyw+`?)XU*=x@kwaL6%U(s*J z7Y--FGWRxJal5j=;kT4d(*ul!B@l`vN@*oYoTE!G)^Xw=7~RB0Nc2s_+unE|QR;hz zwZx#(m92k%0u@wZgayPtY>xVgBHMoO#f)8^AjTBIO|Y3O@t}~6AJ%-o{yZM0Wa8lG zRH}H7*HLox&q6HyDA(I`a||O-Z`-%N?cDlyI<{+b${0%X6CuptxU7c3RhMS!gY`f4 zknE*;;yg#V7YD}2O!IhP9Wcp0#Q~hfEPKC4B9cK~#X-GJ^vEY`8-8xh^c?n}nVf_uDf|}JhfkuMYJ+bUX7N75Y zvx%r|Yh~x<<~phh>uW^vMq3r*@AdVKP;tP6UAqFUEK9P6cVVwVLm%k*h+Y^vGVV%% zTf_*CUD81^(EaimyboH*8?TOE!=-8T-Zd_d8<#&f-d~3*2g)9{PWKPq#J7t(i+-X{ z8PjFTQB?eK_IheMXzOH!T+=HMgjd(LyF0vDS$e*+C|PEA2kiZ9WrF}*VbXl)@PR6O zMkm_!B=-bcrsLW6%FgrcjnJvyyGmY$wjf`HbvYXL-V@?V=$SJfS%A2pQObvZUnJtF zAj77ub5y}eO$=MtBBG4MOLoPuO>kiJ{s=jdPNC2%?=q||`ZJC!c|pE}!_j^niG}?t z(i)0H_FH|3Z3Ipkfl=PWy+TTR{OIQiLb&(d)%RQV{W2DS07be~6S|prpL(Ww&@4FT z?Ucn5`>Z#Y$0a^5=(n|?T7~JSE{_EOLm(w;QH3b>^FncgGWPx43guImmORMPugtSf zg^y4e>C^wYJi2a89(_bTw-vcv|EJlR8Swwqo^5~8|G5pM5BAQ9;lP5Ie#-XhPRrC~ z&>~0ag?|dhX~{uZX7%_T7Y6Nn_z%I~pNQclS9kGp(-XO=yQsQ~))3`jHb_?}WiR;( zE@i*d)n5q0>0K*=a1uzJke_z_@wVbes6AX!?IsK8?jFpZ}9Y@29P&CVPe z+(QazEEJG$sv&P1ztxbUTk=aaiAwsgcZ&Zxi4J^xXQE@9iEPRoXF**_ zwOeNsXAB`fvmI1IY#Z5m^>hK};G9&QR=9-`7n3M+K4xhK2lOVyF@}X}s^S$Wg!-O!sc<4TZc=zVXlsO38CwJv zVIOy62UxF^U~x|M^~{`gH?ya_Wx?CnLK}2W-QL0NkdLmE{#Y-x$p8WIsEgqYeey9D zb6Hd*e?(8S$tOFLoHYZ^x4G$9I6t;{KJhdTg(grb`7Zh=4~+E-0`V*la-y}Rm+M%{2)Tdh4s=MC7> zX1#_|dCks;dTr;?Rtx{-k5GkrzFlA1?8X;58|u7;?OuWpC*y=_S{SJ3u~qbFcs0BX z^@v|8@x}4kjZ|Lsw~B@eJ+oEpDMMEWP3Lh8AJqNO%stk!1$C9ujvXg)*jmUC;abQ! zE4jn}@${y9MQSmshDCw!r&NN-eI9}GTJegBi`z&`r_`t{NA zXQuyKSdf+Cf3z+BSF_dpqW}NNlY5T}I9XSZPkLXAD&Bdrx;FX4>VKhZ_z&Z5F0O6h z`Nm&li|}HUWoaXF6C=eOazrKj7R0iLjaBwY{kz+s$WlOM3Osyuj-3`ez!V2%c&}xW+wkA`-r}owE$6&;#QtH|3UB!D>C4*Zr`lKQ(#FH}z>!5{ zrJue+W{kk>RNPp;BJVEI#4xTQMP`(XlYCBDAgJ3oq4bJM8C3f|JUEpcrR{L11){;L)_KZ zsNU?|_VT4ypaJ1|^ZGK;0dOWUH90|XZgFF0IYu2xX7mJazCP*IXQRZ*ZUMW6rF?U8 zcBW~z;e^0x=D8U*^Vq>~*bGzACC6l0rm3W2A8)q9Jmwf6D}#@w&h4f-6Aa49r>l_{ znVH9~-XEuDW?JE~lVjlRsjXS8!HbI2jTy}8NukcpTPk3GUZ z*bHz>Jqksrlk1rcLj9EWxmQ2mnYYdBiG! zz)W7L5w5Q1xfg%d$sucAGajb4>0mPqY&-3k+Q~8I_ljro`8hq(trnK)Ws7MlqAfv( zI;W>02RvV!NJ63en9{ptJKbtKbf{>42BUZK2Ix?FW)7S0*b4VouM^{cx4>qK=X1B4 zR_~j+s<$4^mwhBCrHS3Umu3)d>`vSBb5h$E+=E5R%HRq_f!^QKRV7CrnD?XT<6vN^liM<ySPUvQmc3Y9 zf4pSu1fIf@_D^WLX4Giv7942a|W-G*1c_HIOoug3QD(TM?m&58>EyHYd zkDvmgZmR3SPKE5*t9bUNZj~Ma-Sr*hh7lc3U#KqosTk<6bQfQIzg_0&cm+gq6Y-W! zzGedsoGhu4)YqjAZ5xM5gJD6D`MBySZ+P$x6l9>=>o*)TLS&fX@G8WBFg14P^S@@zfS`YzVJR&b1x=FMRS}fIN5NXto2|(jur6E zH?ywq!~iY%+o zH>tAT(A_1$`1f|jBW4(#EdW4pBbD4VbEsgyd_8!dfKF_rlN}B&3ft>#XDe0O0O)4+ao|V6;~3!!YV=zQhR%pNqH$@Ro|eu!9jF0Cugy$3Z5jz zUM?8X5nCW(x1s{2EPK@yo&BYrfSK&(aKD}qCN?hFzJAmqE#x|@wroWm)%R@WR>@R) z>BQ1ZU;5sH1?8Qpr1$lhnf!nr=UG;IC{&$4%^W z$2Gc4hQGuWqlejL@y%JO-E3lST#S}##yv7lSd-a=VAk^716liEfKkc^z@VMBYXA7> zy>DT++K=*%4R3A#vmNcHHe~cXQ4cG(e^k4Sel}LE11G{#=ScvtL2(csfFsNW8OUub zK_>^bAc?jWHKb@Ce4_aCeyh3zDlQ)Tpw_#@T;WVSJZO5avx$ZBwTHY9#y2!wVTI_Rx`*J!<%gX@DPKC({uOmu)Vsp z68b-f6q1@OVx%&Irrm)v{4-Z&mcK2C^r6nGD1oFZeJ=SARUVEeaYEfYqb@p!TrUv+ z>Gq>O!&KmtLb@r~qY65(v8H#|7yc8TYU|nJ(l=ft6%2(u&j6i&OA))E?BaO|Rta~u zJvy;x-S(;=a}cn!nl-P2TR7}e6tT03nQ1$`` z2Qd=_YLThj%xipfh&>#KSAJJzc>k|Ni=X4@{cq7m75`tME_w6d1i&5o|Hw^C_`jY1 zNj|y>3GpTV*JoHEPG%SQzpFqwB?2Jm@mq4B0HP*Oz+y>X9!%OFzQK!ya(CkVw&VOz zsKELqL>}IaK;#iKJ1*w@5?v5IC`;)Ti%YM8cdvW6zmaQY*8Ji5X?AvV`U)Rcp$=mL zf)FzNUW&x2*idI6{2#y>@Gd8t|A=h9C@h6_>As|Jym0MtHAEI{^tJE+TtO(8F4vTc z6P!F=WncaME2(i=)G}%GGm(7BhzzAe`_9AQ9-wJQBaw$FZT_W|_4RH*7ljIql!D=3 zTR2|JVZY_6(rZY>kj+a-G)oA7@1OP(*$iXp;+7JM1`9b8lI$_Iy=br%yR(LTkn7}5 z%{vv_GEEUL0N;-JTk#oOF?Z?K(t|<9yBfujD-n+dk*k0J$ij4#N1C3c(p*`Y0XAd^ zgQpUMOD*HVoyrY7EFK)(oMM*8O4nAEd+-Ao;UM(1K3T!3c9URrZPnBgl(SNvHvwpb$@EPoKabWmbB1&fl+{1mia~}i__oz!HL;ZLo5j90m z)67{u|LyGLd|!S_IHs4KHi-n62m_ska+ef*-}Uf{cp*34ym}0QawFAZ1(XtdQa{AExY}Mw3dv<}GPtrF;#)k7D0UsQ z^un2V<4o>jqq}img@r#a0dpghyJsT_VCW?!06BkHoxvXrPIBJt<6Fy?6~>rVzc1z9 zoh@{lYHi^RafF&&z$-bwBZ0C*YjQarSB|+oDSVV4o-^NP=cVRwDNRia8}&L)>ae(H z`t>)|S2Ncci;4tp%T@Gvm?Np*&27@4dW{+u;3> zjk6;&F#1#Vvfecln!{DxNh9kn9=dZ4O}Go0N1m56IN3V^ABoI zUP0A~xT)Qsm_x(S+i~pG+g{`CQRD4Z=KJVsD(lOEf5zyQ+PHQ@ z-DZ~$ww04`ux%Btv%RSn0_Z8L4KoOs{V)&$*e`QW->&zXLVHT0JIN-fm&`ttY?b{^cw)R!H(FWf(I4IliZ#d={> zn(_~Mr3hr7XhQKURYJX*5+y8komeCn2Xn)2mRj?{4IgJ@vGT6Q%>wbZ2NiOnq79 z@O)$O0*L{HPw*=r0M70VEa9gghb-a4n}cfyh&+(RUL3b_4O?I8Z~9Vi!%kRyWsvq$ z0H^9)6tv@`&+Dt`Sh3_@qvQ|BRvrGQ$?rX9#oL-J(y9*8LaSZ#ZFLxq%X82k*Y#3U z;`E}PI?6{luS;GusB_815@uHvYV&&mTb?*kp&?p0$hKTD$Z(Q;ojEuSry925B$U^D zoq!erBAx@$t0zLnj5!16f(Ui)$bq{!1zfevC}=-(Hz=IMkVx0`ESq)|&SAtqopWcs zp1j`Dmbp*~F*Pbp&C7W?-bbBSQ9~efbeh1cLf4M)pUV|n_S{@y^XL`okc-5PU4>wJ zgdwQ~-U9xLS5BAW1O;f8YXnQ|ki4&Q>qd7X3HDhJ=IJ`ewSAg;%V$$h{$ul46-o^C zOidl~_`Fc9!`up6=~Qp>+FAI32CZ}2nRjOVMEaS?FLe}EB*uSqj>o*J18DOHeYY3r zvLEAvZ2g?@CvuH5;(*fBu3>5Y=KSUatujbDIWpFK9f&eJKQ@0~`VB{kd=~RF0+w2D z7H(>+^vJ6af>?+U6{1K#fEH?l=CmpShBVwPo2U4c=AO=OYM`5O`GHm&eQw!=mqOFZ zRVs@2F|~PINwRJfE^1H#aEH;zz$j|0!v1FlipmTn(s%U(YOXMy-_~o62)e#~~MKEo$gPbc}4I%PprI z&3B_OKXc;FhrBlOabK^E+bmew=-+l97`P13G4~W0ovS&<#6Y2k#6XpCGNqBg$sfL41J=D^AJe4motq7>u-Veo3pf zZ$uPR!sL+Z)Ze)O;E@;u{HM<-{TpGCbP}B29K6Y{PI-Yx_PFFC-F4P@E2?(w2)c%` zxnMmx^wqhoqdril4JX7oKLjY^4F_7B3Pi%kT~nr2jU<12S_&RCf}{k4aC|~f@_^^V z@PI4N!#-D@fl&HucGC>hC*ddXuz#|D`if8mZ?1l6H{QH!92_*RuJnua#u))_F8O(> z2W7sNS!Ot020CO6j18|5>A{L?6T-*Wd{)$^$Q#Ll`-2* zzS6zn6guTA{3xztX{L}t(Eg{nuM~+hfWKM~|Yna4OApwB+hB zT2ctJcEvQYjsKh_78V{AXz8&Yb+w_iufpABWr4M4$A}@Qu$r`hBpf=l`<)h>*i8rS zR2h=N(5XOR%RJ>a8pAv^*aEjwLg|4ts4d=HpX28VRw?E*NAyIlDs8T1$zj(dM~lUz zIH5dbE87JG_r&Q?(Fzk9v@PqW3H~83YQDY4C+uX2dwOC{r;@*_)WDvw3W`_eLAFXO z_Y=q0IyEY zal5TkNnr`xXaHG*WiRd`{5Amgvab>=&~crujjzJpn`Ikf1%MNEL$inpi%@K~d`axP zoLk5zk~vHoV?;oRU-he*A33m^P!n>Q?({_Bm78^Q7XRS2|^^g=vh zM!Fbjur_z^k9#MF06x27ZBRH|UN8k+L}0&+0nTIoU*>Er&V0(!hCwc@%F>E?>~||$ zTB=h^jM)sU(@8Tb5bXPcO{>e~L0Ts2L%4^~>dTZ6W|t ztb7}&ANus$V8j}Ha}MJpECJ`)MwA;ld2#~%rKY%Z}U=yKPV zrFwU8e#wet_~{B6^Otud#u8yinyjQiu|@G>rI(1Kw^s{quMEdNH;M~Y7NW5bjaZS_ zFU=;B!%Y3??(bWq-K=}?hSTGp1G5(nHVCULXyr0-%MK8G*SA1{%~h*gJw_S`V{ME6 z&WiIF+|n=4;b1wMoXEDn>H5mGjT>f7vJzN~beZdbP;$%?(JWU2rq-mVI+U(G!b~7N zbn28*yRyVibffl-i^kF;3%5XrXA3aMFE8!vJ;1c3}gABd7BhcenyzNTU%wWn6H2U$Nie3 zapI`qB%YM+3JL6GY^u>iu`(w$1c49s-h zlGD=SQpM%DVWA_9r>k5;`enJG)ahU7l^{1LCotf})yK56fF!m z7kEahupCRn_@u>XxEn7xNnKYb0+Oc={;8;>VY(Y777*;9vWQS6*wGr0vs zeXC5kR9xq_2~!wkppg+hSuG;E@G}FL-d-%cy|B&R?Xe{!-zheM5T!AFpf1jDUcV`Z zqH{)0#SN%$A&kbwL1KV0{8ertdg$Udw=p_moM-n^Y5?vX9UUJW_s$O9$E$fj3`HAa zwD>jJq2Vb?cEgL)={GwyLq5dzx%?X@B-}%-{;nIk( zUiH{jP$AmHiAHh=7kySABf)%qU2IptJxDcc977iB+XXsAXUZEqOl9dXJV4%adX~M_ zzV|KUlV9{jkQz=8r@!)9)lZ?54G=%=^)8@u z#JJa#9-Lpi7d#^vbc~)~UcWgv#_{n#9p&6yz?1IdCbWi=bFHEDTwEXleCqKa0ihZz zLny6?&;y$$oeXFA)d}l?-hb1B^gcro_;o;?#iX$$a@HaG7mc?LK?4+fq=KBCUzE_Z z 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

90Eq8!NOci+{Fu2{5f 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

TY2b^)L} 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 literal 0 HcmV?d00001 diff --git a/dataassim/math/nonlinsystems/nonsyssolver.f b/dataassim/math/nonlinsystems/nonsyssolver.f index 6bd2d78..93a8592 100644 --- a/dataassim/math/nonlinsystems/nonsyssolver.f +++ b/dataassim/math/nonlinsystems/nonsyssolver.f @@ -1,6 +1,6 @@ subroutine nonsyssolver(funcnleq1,fmin_funcnleq1, - & f1dim_funcnleq1,x0min,x0ori,xp,x0max,fp, - & nunknowns,iwhichsolver) + &f1dim_funcnleq1,DNQFJ_funcnleq1,x0min,x0ori,xp,x0max,fp, + &nunknowns,iwhichsolver) implicit none integer nunknowns,iwhichsolver double precision x0min(nunknowns),x0ori(nunknowns), @@ -27,30 +27,48 @@ ! =4 solved by fixed point method 4 ! =6 solved by broydn ! =7 Solved by multiobjective minimization. +! =8 Solved by DNQSOL ! =-9999 Best approximation returned. Solution may not be accurate. ! --------- Local variables --------------------------------------- - double precision x0(nunknowns),TOLF,stpmax,scldstpmax, - & sum,tb,tp,xb(nunknowns),fb(nunknowns),fsqsum, - & f1dim_funcnleq1 - integer i,irepeat,maxrepeats,IERR,notfound + double precision x0(nunknowns),TOLF,stpmax,scldstpmax,ran2, + &sum,tb,tp,xb(nunknowns),fb(nunknowns),fsqsum,f1dim_funcnleq1, + &D1MACH,Warray(3+(15*nunknowns+3*nunknowns*nunknowns)/2+1) + integer i,irepeat,maxrepeats,IERR,notfound,IOPT(5),IDIMW intrinsic dble - parameter(maxrepeats=100,notfound=-9999,TOLF=1.0d-7) - external funcnleq1,fmin_funcnleq1,f1dim_funcnleq1 + parameter(maxrepeats=100,notfound=-9999) + external funcnleq1,fmin_funcnleq1,f1dim_funcnleq1, + &DNQFJ_funcnleq1 !------------------------------------------------------------------- - stpmax=0.0d0 - sum=0.0d0 do i=1, nunknowns - x0(i)=x0ori(i) - sum=sum+x0ori(i)*x0ori(i) - stpmax=stpmax+ - & (x0min(i)-x0max(i))*(x0min(i)-x0max(i)) + xp(i)=x0ori(i) enddo - stpmax=dsqrt(stpmax)/4.0d0 - scldstpmax=stpmax/dmax1(dsqrt(sum),dble(nunknowns)) -! In Numerical Recipes, scldstpmax (STPMX) is 100 - scldstpmax=dmax1(100.0d0,scldstpmax) iwhichsolver=notfound + TOLF=dsqrt(D1MACH(4)) do irepeat=1,maxrepeats + IDIMW=3+(15*nunknowns+3*nunknowns*nunknowns)/2+1 + do i=1,5 + IOPT(i)=0 + enddo + IOPT(4)=1 + call DNQSOL(DNQFJ_funcnleq1,nunknowns,xp,fp,TOLF, + &IOPT,Warray,IDIMW) + if(IOPT(1).eq.0)then + iwhichsolver=8 + return + endif + do i=1,nunknowns + x0(i)=x0min(i)+ran2()*(x0max(i)-x0min(i)) + enddo + stpmax=0.0d0 + sum=0.0d0 + do i=1, nunknowns + sum=sum+x0(i)*x0(i) + stpmax=stpmax+(x0min(i)-x0max(i))*(x0min(i)-x0max(i)) + enddo + stpmax=dsqrt(stpmax)/4.0d0 + scldstpmax=stpmax/dmax1(dsqrt(sum),dble(nunknowns)) +! In Numerical Recipes, scldstpmax (STPMX) is 100 + scldstpmax=dmax1(100.0d0,scldstpmax) call fixedpoint(funcnleq1,x0min,x0,xp, & x0max,fp,nunknowns,TOLF,stpmax,iwhichsolver) if(iwhichsolver.ne.notfound)return @@ -82,6 +100,11 @@ return endif endif + + do i=1,nunknowns + xp(i)=x0min(i)+ran2()*(x0max(i)-x0min(i)) + enddo + call funcnleq1(nunknowns,xp,fp,fsqsum) fsqsum=0.0d0 do i=1,nunknowns fsqsum=fsqsum+fp(i)*fp(i) @@ -89,11 +112,11 @@ tp=fsqsum call nongradopt(nunknowns,fmin_funcnleq1, & f1dim_funcnleq1,xp,x0min,x0max,TOLF,fsqsum) -! if(dabs(tp-fsqsum).gt.TOLF)then -! call RepeatCompassSearch(nunknowns,xp,fsqsum, -! & x0min,x0max,fmin_funcnleq1,f1dim_funcnleq1, -! & TOLF) -! endif + if(dabs(tp-fsqsum).gt.TOLF)then + call RepeatCompassSearch(nunknowns,xp,fsqsum, + & x0min,x0max,fmin_funcnleq1,f1dim_funcnleq1, + & TOLF) + endif call funcnleq1(nunknowns,xp,fp,fsqsum) tp=dabs(fp(1)) do i=2,nunknowns @@ -109,7 +132,7 @@ enddo if(IERR.eq.0)return do i=1,nunknowns - x0(i)=xp(i) + xp(i)=x0min(i)+ran2()*(x0max(i)-x0min(i)) enddo enddo end subroutine nonsyssolver diff --git a/dataassim/math/numrec/Document.txt b/dataassim/math/numrec/Document.txt new file mode 100644 index 0000000..63bf29b --- /dev/null +++ b/dataassim/math/numrec/Document.txt @@ -0,0 +1,110 @@ +program main +implicit none +integer nsamp,mdim,mpc +double precision sample(100,100),princomp(100,100),transdata(100,100) +integer i,j,k +sample(1,1)=2.5d0 +sample(2,1)=0.5d0 +sample(3,1)=2.2d0 +sample(4,1)=1.9d0 +sample(5,1)=3.1d0 +sample(6,1)=2.3d0 +sample(7,1)=2.0d0 +sample(8,1)=1.0d0 +sample(9,1)=1.5d0 +sample(10,1)=1.1d0 +sample(1,2)=2.4d0 +sample(2,2)=0.7d0 +sample(3,2)=2.9d0 +sample(4,2)=2.2d0 +sample(5,2)=3.0d0 +sample(6,2)=2.7d0 +sample(7,2)=1.6d0 +sample(8,2)=1.1d0 +sample(9,2)=1.6d0 +sample(10,2)=0.9d0 +nsamp=10 +mdim=2 +mpc=2 +call princompana(nsamp,mdim,sample,mpc,princomp(1:nsamp,1:mpc),transdata(1:nsamp,1:mdim)) +do i=1,mpc + do j=1,nsamp + write(*,*)j,princomp(j,1) + enddo +enddo +do i=1,mdim + do j=1,nsamp + write(*,*)j,transdata(j,i) + enddo +enddo + +end + +subroutine princompana(nsamp,mdim,sample,mpc,princomp,transdata) +implicit none +!-----------Inputs---------------------------------------- +!mpc is the number of principal components to keep +integer nsamp,mdim,mpc +double precision sample(nsamp,mdim) +!-----------Outputs--------------------------------------- +!princomp is the projection of a sample on the principal axes +!transdata is the data of the orginal sample filtered with mpc principal components +double precision eigenvalue(mdim),eigenvector(mdim,mdim),sampmean(mdim),princomp(nsamp,mpc),transdata(nsamp,mdim) +!--------------------------------------------------------- +integer i,j,k +call geteigen(nsamp,mdim,sample(1:nsamp,1:mdim),eigenvalue,eigenvector(1:mdim,1:mdim),sampmean,sampadj(1:nsamp,1:mdim)) +do i=1,mpc + do j=1,nsamp + princomp(j,i)=0.0d0 + do k=1,mdim + princomp(j,i)=princomp(j,i)+eigenvector(k,i)*sampadj(j,k) + enddo + enddo +enddo +do j=1,mdim + do i=1,nsamp + transdata(i,j)=sampmean(j) + do k=1,mpc + transdata(i,j)=transdata(i,j)+eigenvector(j,k)*princomp(i,k) + enddo + enddo +enddo +return +end + +subroutine geteigen(nsamp,mdim,sample,eigenvalue,eigenvector,sampmean,sampadj) +integer nsamp,mdim +double precision sample(nsamp,mdim),eigenvalue(mdim),eigenvector(mdim,mdim),sampmean(mdim),sampadj(nsamp,mdim) +!Each column is an eigenvector. The first column corresponds to the largest eigenvalue and the last column corresponds +!to the smallest eigenvalue +call covariancematrix(nsamp,mdim,sample(1:nsamp,1:mdim),covarmatrix(1:mdim,1:mdim),sampmean,sampadj(1:nsamp,1:mdim)) +call eigensystem +return +end + +subroutine covariancematrix(nsamp,mdim,sample,covarmatrix,sampmean,sampadj) +implicit none +integer nsamp, mdim +double precision sample(nsamp,mdim),covarmatrix(mdim,mdim),sampmean(mdim),sampadj(nsamp,mdim) +integer i,j,k +do j=1,mdim + sampmean(j)=0.0d0 + do i=1,nsamp + sampmean(j)=sampmean(j)+sample(i,j) + enddo + sampmean(j)=sampmean(j)/dble(nsamp) + do i=1,nsamp + sampadj(i,j)=sample(i,j)-sampmean(j) + enddo +enddo +do i=1,mdim + do j=i,mdim + covarmatrix(i,j)=0.0d0 + do k=1,nsamp + covarmatrix(i,j)=covarmatrix(i,j)+sampadj(k,i)*sampadj(k,j) + enddo + enddo + covarmatrix(i,j)=covarmatrix(i,j)/dble(nsamp-1) +enddo +return +end diff --git a/dataassim/math/numrec/PrinCompAna.f b/dataassim/math/numrec/PrinCompAna.f new file mode 100644 index 0000000..39e2bf4 --- /dev/null +++ b/dataassim/math/numrec/PrinCompAna.f @@ -0,0 +1,112 @@ +! program main +! implicit none +! integer nsamp,mdim,mpc +! double precision sample(100,100),princomp(100,100), +! &transdata(100,100),x(100),eigenvector(100,100),eigenvalue(100) +! integer i,j,k +! open(unit=1,file='Table8.3.txt') +! read(1,*) +! nsamp=0 +!10 read(1,*,end=100)i,(x(j),j=1,6) +! if(i.le.1)goto 10 +! nsamp=nsamp+1 +! do j=1,6 +! sample(nsamp,j)=x(j) +! enddo +! goto 10 +!100 close(1) +! mdim=6 +! mpc=2 +! call princompana(nsamp,mdim,sample(1:nsamp,1:mdim),mpc, +! &princomp(1:nsamp,1:mpc),transdata(1:nsamp,1:mdim), +! &eigenvector(1:mdim,1:mdim),eigenvalue) +! do i=1,mpc +! do j=1,nsamp +! write(*,*)j,princomp(j,i) +! enddo +! enddo +! do i=1,mdim +! do j=1,nsamp +! write(*,*)j,transdata(j,i) +! enddo +! enddo +! end + + subroutine princompana(nsamp,mdim,sample,mpc,princomp,transdata, + &eigenvector,eigenvalue) + implicit none +!-----------Inputs---------------------------------------- +!mpc is the number of principal components to keep + integer nsamp,mdim,mpc + double precision sample(nsamp,mdim) +!-----------Outputs--------------------------------------- +!princomp is the projection of a sample on the principal axes +!transdata is the data of the orginal sample filtered with mpc principal components + double precision eigenvalue(mdim),eigenvector(mdim,mdim), + &sampmean(mdim),princomp(nsamp,mpc),transdata(nsamp,mdim), + &sampadj(nsamp,mdim) +!--------------------------------------------------------- + integer i,j,k + call geteigen(nsamp,mdim,sample(1:nsamp,1:mdim),eigenvalue, + &eigenvector(1:mdim,1:mdim),sampmean,sampadj(1:nsamp,1:mdim)) + do i=1,mpc + do j=1,nsamp + princomp(j,i)=0.0d0 + do k=1,mdim + princomp(j,i)=princomp(j,i)+eigenvector(k,i)*sampadj(j,k) + enddo + enddo + enddo + do j=1,mdim + do i=1,nsamp + transdata(i,j)=sampmean(j) + do k=1,mpc + transdata(i,j)=transdata(i,j)+eigenvector(j,k)*princomp(i,k) + enddo + enddo + enddo + return + end + + subroutine geteigen(nsamp,mdim,sample,eigenvalue,eigenvector, + &sampmean,sampadj) + integer nsamp,mdim + double precision sample(nsamp,mdim),eigenvalue(mdim), + &eigenvector(mdim,mdim),sampmean(mdim),sampadj(nsamp,mdim) +!Each column is an eigenvector. The first column corresponds to the largest eigenvalue and the last column corresponds +!to the smallest eigenvalue + call covariancematrix(nsamp,mdim,sample(1:nsamp,1:mdim), + &eigenvector(1:mdim,1:mdim),sampmean,sampadj(1:nsamp,1:mdim)) + call eigen_sym_up(mdim,eigenvector(1:mdim,1:mdim),eigenvalue) + return + end + + subroutine covariancematrix(nsamp,mdim,sample,covarmatrix, + &sampmean,sampadj) + implicit none +!covarmatrix is an upper trangle + integer nsamp,mdim + double precision sample(nsamp,mdim),covarmatrix(mdim,mdim), + &sampmean(mdim),sampadj(nsamp,mdim) + integer i,j,k + do j=1,mdim + sampmean(j)=0.0d0 + do i=1,nsamp + sampmean(j)=sampmean(j)+sample(i,j) + enddo + sampmean(j)=sampmean(j)/dble(nsamp) + do i=1,nsamp + sampadj(i,j)=sample(i,j)-sampmean(j) + enddo + enddo + do i=1,mdim + do j=i,mdim + covarmatrix(i,j)=0.0d0 + do k=1,nsamp + covarmatrix(i,j)=covarmatrix(i,j)+sampadj(k,i)*sampadj(k,j) + enddo + covarmatrix(i,j)=covarmatrix(i,j)/dble(nsamp-1) + enddo + enddo + return + end diff --git a/dataassim/math/numrec/Table8.3.txt b/dataassim/math/numrec/Table8.3.txt new file mode 100644 index 0000000..d994e97 --- /dev/null +++ b/dataassim/math/numrec/Table8.3.txt @@ -0,0 +1,91 @@ +Group WDIM CIRCUM FBEYE EYEHD EARHD JAW +1 13.5 57.2 19.5 12.5 14.0 11.0 +1 15.5 58.4 21.0 12.0 16.0 12.0 +1 14.5 55.9 19.0 10.0 13.0 12.0 +1 15.5 58.4 20.0 13.5 15.0 12.0 +1 14.5 58.4 20.0 13.0 15.5 12.0 +1 14.0 61.0 21.0 12.0 14.0 13.0 +1 15.0 58.4 19.5 13.5 15.5 13.0 +1 15.0 58.4 21.0 13.0 14.0 13.0 +1 15.5 59.7 20.5 13.5 14.5 12.5 +1 15.5 59.7 20.5 13.0 15.0 13.0 +1 15.0 57.2 19.0 14.0 14.5 11.5 +1 15.5 59.7 21.0 13.0 16.0 12.5 +1 16.0 57.2 19.0 14.0 14.5 12.0 +1 15.5 62.2 21.5 14.0 16.0 12.0 +1 15.5 57.2 19.5 13.5 15.0 12.0 +1 14.0 61.0 20.0 15.0 15.0 12.0 +1 14.5 58.4 20.0 12.0 14.5 12.0 +1 15.0 56.9 19.0 13.0 14.0 12.5 +1 15.5 59.7 20.0 12.5 14.0 12.5 +1 15.0 57.2 19.5 12.0 14.0 11.0 +1 15.0 56.9 19.0 12.0 13.0 12.0 +1 15.5 56.9 19.5 14.5 14.5 13.0 +1 17.5 63.5 21.5 14.0 15.5 13.5 +1 15.5 57.2 19.0 13.0 15.5 12.5 +1 15.5 61.0 20.5 12.0 13.0 12.5 +1 15.5 61.0 21.0 14.5 15.5 12.5 +1 15.5 63.5 21.8 14.5 16.5 13.5 +1 14.5 58.4 20.5 13.0 16.0 10.5 +1 15.5 56.9 20.0 13.5 14.0 12.0 +1 16.0 61.0 20.0 12.5 14.5 12.5 +2 15.5 60.0 21.1 10.3 13.4 12.4 +2 15.4 59.7 20.0 12.8 14.5 11.3 +2 15.1 59.7 20.2 11.4 14.1 12.1 +2 14.3 56.9 18.9 11.0 13.4 11.0 +2 14.8 58.0 20.1 9.6 11.1 11.7 +2 15.2 57.5 18.5 9.9 12.8 11.4 +2 15.4 58.0 20.8 10.2 12.8 11.9 +2 16.3 58.0 20.1 8.8 13.0 12.9 +2 15.5 57.0 19.6 10.5 13.9 11.8 +2 15.0 56.5 19.6 10.4 14.5 12.0 +2 15.5 57.2 20.0 11.2 13.4 12.4 +2 15.5 56.5 19.8 9.2 12.8 12.2 +2 15.7 57.5 19.8 11.8 12.6 12.5 +2 14.4 57.0 20.4 10.2 12.7 12.3 +2 14.9 54.8 18.5 11.2 13.8 11.3 +2 16.5 59.8 20.2 9.4 14.3 12.2 +2 15.5 56.1 18.8 9.8 13.8 12.6 +2 15.3 55.0 19.0 10.1 14.2 11.6 +2 14.5 55.6 19.3 12.0 12.6 11.6 +2 15.5 56.5 20.0 9.9 13.4 11.5 +2 15.2 55.0 19.3 9.9 14.4 11.9 +2 15.3 56.5 19.3 9.1 12.8 11.7 +2 15.3 56.8 20.2 8.6 14.2 11.5 +2 15.8 55.5 19.2 8.2 13.0 12.6 +2 14.8 57.0 20.2 9.8 13.8 10.5 +2 15.2 56.9 19.1 9.6 13.0 11.2 +2 15.9 58.8 21.0 8.6 13.5 11.8 +2 15.5 57.3 20.1 9.6 14.1 12.3 +2 16.5 58.0 19.5 9.0 13.9 13.3 +2 17.3 62.6 21.5 10.3 13.8 12.8 +3 14.9 56.5 20.4 7.4 13.0 12.0 +3 15.4 57.5 19.5 10.5 13.8 11.5 +3 15.3 55.4 19.2 9.7 13.3 11.5 +3 14.6 56.0 19.8 8.5 12.0 11.5 +3 16.2 56.5 19.5 11.5 14.5 11.8 +3 14.6 58.0 19.9 13.0 13.4 11.5 +3 15.9 56.7 18.7 10.8 12.8 12.6 +3 14.7 55.8 18.7 11.1 13.9 11.2 +3 15.5 58.5 19.4 11.5 13.4 11.9 +3 16.1 60.0 20.3 10.6 13.7 12.2 +3 15.2 57.8 19.9 10.4 13.5 11.4 +3 15.1 56.0 19.4 10.0 13.1 10.9 +3 15.9 59.8 20.5 12.0 13.6 11.5 +3 16.1 57.7 19.7 10.2 13.6 11.5 +3 15.7 58.7 20.7 11.3 13.6 11.3 +3 15.3 56.9 19.6 10.5 13.5 12.1 +3 15.3 56.9 19.5 9.9 14.0 12.1 +3 15.2 58.0 20.6 11.0 15.1 11.7 +3 16.6 59.3 19.9 12.1 14.6 12.1 +3 15.5 58.2 19.7 11.7 13.8 12.1 +3 15.8 57.5 18.9 11.8 14.7 11.8 +3 16.0 57.2 19.8 10.8 13.9 12.0 +3 15.4 57.0 19.8 11.3 14.0 11.4 +3 16.0 59.2 20.8 10.4 13.8 12.2 +3 15.4 57.6 19.6 10.2 13.9 11.7 +3 15.8 60.3 20.8 12.4 13.4 12.1 +3 15.4 55.0 18.8 10.7 14.2 10.8 +3 15.5 58.4 19.8 13.1 14.5 11.7 +3 15.7 59.0 20.4 12.1 13.0 12.7 +3 17.3 61.7 20.7 11.9 13.3 13.3 diff --git a/dataassim/math/numrec/daxpy.f b/dataassim/math/numrec/daxpy.f new file mode 100644 index 0000000..ddc7449 --- /dev/null +++ b/dataassim/math/numrec/daxpy.f @@ -0,0 +1,69 @@ + SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DAXPY constant times a vector plus a vector. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (DA.EQ.0.0d0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,4) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DY(I) + DA*DX(I) + END DO + END IF + IF (N.LT.4) RETURN + MP1 = M + 1 + DO I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I+1) = DY(I+1) + DA*DX(I+1) + DY(I+2) = DY(I+2) + DA*DX(I+2) + DY(I+3) = DY(I+3) + DA*DX(I+3) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/dataassim/math/numrec/dcopy.f b/dataassim/math/numrec/dcopy.f new file mode 100644 index 0000000..a441450 --- /dev/null +++ b/dataassim/math/numrec/dcopy.f @@ -0,0 +1,70 @@ + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DCOPY copies a vector, x, to a vector, y. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,7) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DX(I) + END DO + IF (N.LT.7) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,7 + DY(I) = DX(I) + DY(I+1) = DX(I+1) + DY(I+2) = DX(I+2) + DY(I+3) = DX(I+3) + DY(I+4) = DX(I+4) + DY(I+5) = DX(I+5) + DY(I+6) = DX(I+6) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/dataassim/math/numrec/ddot.f b/dataassim/math/numrec/ddot.f new file mode 100644 index 0000000..33719ee --- /dev/null +++ b/dataassim/math/numrec/ddot.f @@ -0,0 +1,72 @@ + DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DDOT forms the dot product of two vectors. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + DOUBLE PRECISION DTEMP + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + DDOT = 0.0d0 + DTEMP = 0.0d0 + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,5) + IF (M.NE.0) THEN + DO I = 1,M + DTEMP = DTEMP + DX(I)*DY(I) + END DO + IF (N.LT.5) THEN + DDOT=DTEMP + RETURN + END IF + END IF + MP1 = M + 1 + DO I = MP1,N,5 + DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) + + $ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DTEMP = DTEMP + DX(IX)*DY(IY) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + DDOT = DTEMP + RETURN + END diff --git a/dataassim/math/numrec/dgeev.f b/dataassim/math/numrec/dgeev.f new file mode 100644 index 0000000..cab9d1f --- /dev/null +++ b/dataassim/math/numrec/dgeev.f @@ -0,0 +1,18122 @@ +*> \brief \b DGEBAK +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEBAK + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV, +* INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOB, SIDE +* INTEGER IHI, ILO, INFO, LDV, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION SCALE( * ), V( LDV, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEBAK forms the right or left eigenvectors of a real general matrix +*> by backward transformation on the computed eigenvectors of the +*> balanced matrix output by DGEBAL. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOB +*> \verbatim +*> JOB is CHARACTER*1 +*> Specifies the type of backward transformation required: +*> = 'N', do nothing, return immediately; +*> = 'P', do backward transformation for permutation only; +*> = 'S', do backward transformation for scaling only; +*> = 'B', do backward transformations for both permutation and +*> scaling. +*> JOB must be the same as the argument JOB supplied to DGEBAL. +*> \endverbatim +*> +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'R': V contains right eigenvectors; +*> = 'L': V contains left eigenvectors. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of rows of the matrix V. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> The integers ILO and IHI determined by DGEBAL. +*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. +*> \endverbatim +*> +*> \param[in] SCALE +*> \verbatim +*> SCALE is DOUBLE PRECISION array, dimension (N) +*> Details of the permutation and scaling factors, as returned +*> by DGEBAL. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of columns of the matrix V. M >= 0. +*> \endverbatim +*> +*> \param[in,out] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension (LDV,M) +*> On entry, the matrix of right or left eigenvectors to be +*> transformed, as returned by DHSEIN or DTREVC. +*> On exit, V is overwritten by the transformed eigenvectors. +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is INTEGER +*> The leading dimension of the array V. LDV >= max(1,N). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleGEcomputational +* +* ===================================================================== + SUBROUTINE DGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV, + $ INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER JOB, SIDE + INTEGER IHI, ILO, INFO, LDV, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION SCALE( * ), V( LDV, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LEFTV, RIGHTV + INTEGER I, II, K + DOUBLE PRECISION S +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DSCAL, DSWAP, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Decode and Test the input parameters +* + RIGHTV = LSAME( SIDE, 'R' ) + LEFTV = LSAME( SIDE, 'L' ) +* + INFO = 0 + IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. + $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN + INFO = -1 + ELSE IF( .NOT.RIGHTV .AND. .NOT.LEFTV ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN + INFO = -4 + ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN + INFO = -5 + ELSE IF( M.LT.0 ) THEN + INFO = -7 + ELSE IF( LDV.LT.MAX( 1, N ) ) THEN + INFO = -9 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEBAK', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN + IF( M.EQ.0 ) + $ RETURN + IF( LSAME( JOB, 'N' ) ) + $ RETURN +* + IF( ILO.EQ.IHI ) + $ GO TO 30 +* +* Backward balance +* + IF( LSAME( JOB, 'S' ) .OR. LSAME( JOB, 'B' ) ) THEN +* + IF( RIGHTV ) THEN + DO 10 I = ILO, IHI + S = SCALE( I ) + CALL DSCAL( M, S, V( I, 1 ), LDV ) + 10 CONTINUE + END IF +* + IF( LEFTV ) THEN + DO 20 I = ILO, IHI + S = ONE / SCALE( I ) + CALL DSCAL( M, S, V( I, 1 ), LDV ) + 20 CONTINUE + END IF +* + END IF +* +* Backward permutation +* +* For I = ILO-1 step -1 until 1, +* IHI+1 step 1 until N do -- +* + 30 CONTINUE + IF( LSAME( JOB, 'P' ) .OR. LSAME( JOB, 'B' ) ) THEN + IF( RIGHTV ) THEN + DO 40 II = 1, N + I = II + IF( I.GE.ILO .AND. I.LE.IHI ) + $ GO TO 40 + IF( I.LT.ILO ) + $ I = ILO - II + K = SCALE( I ) + IF( K.EQ.I ) + $ GO TO 40 + CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) + 40 CONTINUE + END IF +* + IF( LEFTV ) THEN + DO 50 II = 1, N + I = II + IF( I.GE.ILO .AND. I.LE.IHI ) + $ GO TO 50 + IF( I.LT.ILO ) + $ I = ILO - II + K = SCALE( I ) + IF( K.EQ.I ) + $ GO TO 50 + CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) + 50 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEBAK +* + END +*> \brief \b DGEBAL +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEBAL + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOB +* INTEGER IHI, ILO, INFO, LDA, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), SCALE( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEBAL balances a general real matrix A. This involves, first, +*> permuting A by a similarity transformation to isolate eigenvalues +*> in the first 1 to ILO-1 and last IHI+1 to N elements on the +*> diagonal; and second, applying a diagonal similarity transformation +*> to rows and columns ILO to IHI to make the rows and columns as +*> close in norm as possible. Both steps are optional. +*> +*> Balancing may reduce the 1-norm of the matrix, and improve the +*> accuracy of the computed eigenvalues and/or eigenvectors. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOB +*> \verbatim +*> JOB is CHARACTER*1 +*> Specifies the operations to be performed on A: +*> = 'N': none: simply set ILO = 1, IHI = N, SCALE(I) = 1.0 +*> for i = 1,...,N; +*> = 'P': permute only; +*> = 'S': scale only; +*> = 'B': both permute and scale. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE array, dimension (LDA,N) +*> On entry, the input matrix A. +*> On exit, A is overwritten by the balanced matrix. +*> If JOB = 'N', A is not referenced. +*> See Further Details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> \param[out] IHI +*> \verbatim +*> IHI is INTEGER +*> ILO and IHI are set to integers such that on exit +*> A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N. +*> If JOB = 'N' or 'S', ILO = 1 and IHI = N. +*> \endverbatim +*> +*> \param[out] SCALE +*> \verbatim +*> SCALE is DOUBLE array, dimension (N) +*> Details of the permutations and scaling factors applied to +*> A. If P(j) is the index of the row and column interchanged +*> with row and column j and D(j) is the scaling factor +*> applied to row and column j, then +*> SCALE(j) = P(j) for j = 1,...,ILO-1 +*> = D(j) for j = ILO,...,IHI +*> = P(j) for j = IHI+1,...,N. +*> The order in which the interchanges are made is N to IHI+1, +*> then 1 to ILO-1. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit. +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup doubleGEcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The permutations consist of row and column interchanges which put +*> the matrix in the form +*> +*> ( T1 X Y ) +*> P A P = ( 0 B Z ) +*> ( 0 0 T2 ) +*> +*> where T1 and T2 are upper triangular matrices whose eigenvalues lie +*> along the diagonal. The column indices ILO and IHI mark the starting +*> and ending columns of the submatrix B. Balancing consists of applying +*> a diagonal similarity transformation inv(D) * B * D to make the +*> 1-norms of each row of B and its corresponding column nearly equal. +*> The output matrix is +*> +*> ( T1 X*D Y ) +*> ( 0 inv(D)*B*D inv(D)*Z ). +*> ( 0 0 T2 ) +*> +*> Information about the permutations P and the diagonal matrix D is +*> returned in the vector SCALE. +*> +*> This subroutine is based on the EISPACK routine BALANC. +*> +*> Modified by Tzu-Yi Chen, Computer Science Division, University of +*> California at Berkeley, USA +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO ) +* +* -- LAPACK computational routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER JOB + INTEGER IHI, ILO, INFO, LDA, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), SCALE( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) + DOUBLE PRECISION SCLFAC + PARAMETER ( SCLFAC = 2.0D+0 ) + DOUBLE PRECISION FACTOR + PARAMETER ( FACTOR = 0.95D+0 ) +* .. +* .. Local Scalars .. + LOGICAL NOCONV + INTEGER I, ICA, IEXC, IRA, J, K, L, M + DOUBLE PRECISION C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1, + $ SFMIN2 +* .. +* .. External Functions .. + LOGICAL DISNAN, LSAME + INTEGER IDAMAX + DOUBLE PRECISION DLAMCH, DNRM2 + EXTERNAL DISNAN, LSAME, IDAMAX, DLAMCH, DNRM2 +* .. +* .. External Subroutines .. + EXTERNAL DSCAL, DSWAP, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* Test the input parameters +* + INFO = 0 + IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. + $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -4 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEBAL', -INFO ) + RETURN + END IF +* + K = 1 + L = N +* + IF( N.EQ.0 ) + $ GO TO 210 +* + IF( LSAME( JOB, 'N' ) ) THEN + DO 10 I = 1, N + SCALE( I ) = ONE + 10 CONTINUE + GO TO 210 + END IF +* + IF( LSAME( JOB, 'S' ) ) + $ GO TO 120 +* +* Permutation to isolate eigenvalues if possible +* + GO TO 50 +* +* Row and column exchange. +* + 20 CONTINUE + SCALE( M ) = J + IF( J.EQ.M ) + $ GO TO 30 +* + CALL DSWAP( L, A( 1, J ), 1, A( 1, M ), 1 ) + CALL DSWAP( N-K+1, A( J, K ), LDA, A( M, K ), LDA ) +* + 30 CONTINUE + GO TO ( 40, 80 )IEXC +* +* Search for rows isolating an eigenvalue and push them down. +* + 40 CONTINUE + IF( L.EQ.1 ) + $ GO TO 210 + L = L - 1 +* + 50 CONTINUE + DO 70 J = L, 1, -1 +* + DO 60 I = 1, L + IF( I.EQ.J ) + $ GO TO 60 + IF( A( J, I ).NE.ZERO ) + $ GO TO 70 + 60 CONTINUE +* + M = L + IEXC = 1 + GO TO 20 + 70 CONTINUE +* + GO TO 90 +* +* Search for columns isolating an eigenvalue and push them left. +* + 80 CONTINUE + K = K + 1 +* + 90 CONTINUE + DO 110 J = K, L +* + DO 100 I = K, L + IF( I.EQ.J ) + $ GO TO 100 + IF( A( I, J ).NE.ZERO ) + $ GO TO 110 + 100 CONTINUE +* + M = K + IEXC = 2 + GO TO 20 + 110 CONTINUE +* + 120 CONTINUE + DO 130 I = K, L + SCALE( I ) = ONE + 130 CONTINUE +* + IF( LSAME( JOB, 'P' ) ) + $ GO TO 210 +* +* Balance the submatrix in rows K to L. +* +* Iterative loop for norm reduction +* + SFMIN1 = DLAMCH( 'S' ) / DLAMCH( 'P' ) + SFMAX1 = ONE / SFMIN1 + SFMIN2 = SFMIN1*SCLFAC + SFMAX2 = ONE / SFMIN2 +* + 140 CONTINUE + NOCONV = .FALSE. +* + DO 200 I = K, L +* + C = DNRM2( L-K+1, A( K, I ), 1 ) + R = DNRM2( L-K+1, A( I, K ), LDA ) + ICA = IDAMAX( L, A( 1, I ), 1 ) + CA = ABS( A( ICA, I ) ) + IRA = IDAMAX( N-K+1, A( I, K ), LDA ) + RA = ABS( A( I, IRA+K-1 ) ) +* +* Guard against zero C or R due to underflow. +* + IF( C.EQ.ZERO .OR. R.EQ.ZERO ) + $ GO TO 200 + G = R / SCLFAC + F = ONE + S = C + R + 160 CONTINUE + IF( C.GE.G .OR. MAX( F, C, CA ).GE.SFMAX2 .OR. + $ MIN( R, G, RA ).LE.SFMIN2 )GO TO 170 + IF( DISNAN( C+F+CA+R+G+RA ) ) THEN +* +* Exit if NaN to avoid infinite loop +* + INFO = -3 + CALL XERBLA( 'DGEBAL', -INFO ) + RETURN + END IF + F = F*SCLFAC + C = C*SCLFAC + CA = CA*SCLFAC + R = R / SCLFAC + G = G / SCLFAC + RA = RA / SCLFAC + GO TO 160 +* + 170 CONTINUE + G = C / SCLFAC + 180 CONTINUE + IF( G.LT.R .OR. MAX( R, RA ).GE.SFMAX2 .OR. + $ MIN( F, C, G, CA ).LE.SFMIN2 )GO TO 190 + F = F / SCLFAC + C = C / SCLFAC + G = G / SCLFAC + CA = CA / SCLFAC + R = R*SCLFAC + RA = RA*SCLFAC + GO TO 180 +* +* Now balance. +* + 190 CONTINUE + IF( ( C+R ).GE.FACTOR*S ) + $ GO TO 200 + IF( F.LT.ONE .AND. SCALE( I ).LT.ONE ) THEN + IF( F*SCALE( I ).LE.SFMIN1 ) + $ GO TO 200 + END IF + IF( F.GT.ONE .AND. SCALE( I ).GT.ONE ) THEN + IF( SCALE( I ).GE.SFMAX1 / F ) + $ GO TO 200 + END IF + G = ONE / F + SCALE( I ) = SCALE( I )*F + NOCONV = .TRUE. +* + CALL DSCAL( N-K+1, G, A( I, K ), LDA ) + CALL DSCAL( L, F, A( 1, I ), 1 ) +* + 200 CONTINUE +* + IF( NOCONV ) + $ GO TO 140 +* + 210 CONTINUE + ILO = K + IHI = L +* + RETURN +* +* End of DGEBAL +* + END +*> \brief DGEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for GE matrices +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEEV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, +* LDVR, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER JOBVL, JOBVR +* INTEGER INFO, LDA, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), +* $ WI( * ), WORK( * ), WR( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEEV computes for an N-by-N real nonsymmetric matrix A, the +*> eigenvalues and, optionally, the left and/or right eigenvectors. +*> +*> The right eigenvector v(j) of A satisfies +*> A * v(j) = lambda(j) * v(j) +*> where lambda(j) is its eigenvalue. +*> The left eigenvector u(j) of A satisfies +*> u(j)**H * A = lambda(j) * u(j)**H +*> where u(j)**H denotes the conjugate-transpose of u(j). +*> +*> The computed eigenvectors are normalized to have Euclidean norm +*> equal to 1 and largest component real. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOBVL +*> \verbatim +*> JOBVL is CHARACTER*1 +*> = 'N': left eigenvectors of A are not computed; +*> = 'V': left eigenvectors of A are computed. +*> \endverbatim +*> +*> \param[in] JOBVR +*> \verbatim +*> JOBVR is CHARACTER*1 +*> = 'N': right eigenvectors of A are not computed; +*> = 'V': right eigenvectors of A are computed. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the N-by-N matrix A. +*> On exit, A has been overwritten. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] WR +*> \verbatim +*> WR is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] WI +*> \verbatim +*> WI is DOUBLE PRECISION array, dimension (N) +*> WR and WI contain the real and imaginary parts, +*> respectively, of the computed eigenvalues. Complex +*> conjugate pairs of eigenvalues appear consecutively +*> with the eigenvalue having the positive imaginary part +*> first. +*> \endverbatim +*> +*> \param[out] VL +*> \verbatim +*> VL is DOUBLE PRECISION array, dimension (LDVL,N) +*> If JOBVL = 'V', the left eigenvectors u(j) are stored one +*> after another in the columns of VL, in the same order +*> as their eigenvalues. +*> If JOBVL = 'N', VL is not referenced. +*> If the j-th eigenvalue is real, then u(j) = VL(:,j), +*> the j-th column of VL. +*> If the j-th and (j+1)-st eigenvalues form a complex +*> conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and +*> u(j+1) = VL(:,j) - i*VL(:,j+1). +*> \endverbatim +*> +*> \param[in] LDVL +*> \verbatim +*> LDVL is INTEGER +*> The leading dimension of the array VL. LDVL >= 1; if +*> JOBVL = 'V', LDVL >= N. +*> \endverbatim +*> +*> \param[out] VR +*> \verbatim +*> VR is DOUBLE PRECISION array, dimension (LDVR,N) +*> If JOBVR = 'V', the right eigenvectors v(j) are stored one +*> after another in the columns of VR, in the same order +*> as their eigenvalues. +*> If JOBVR = 'N', VR is not referenced. +*> If the j-th eigenvalue is real, then v(j) = VR(:,j), +*> the j-th column of VR. +*> If the j-th and (j+1)-st eigenvalues form a complex +*> conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and +*> v(j+1) = VR(:,j) - i*VR(:,j+1). +*> \endverbatim +*> +*> \param[in] LDVR +*> \verbatim +*> LDVR is INTEGER +*> The leading dimension of the array VR. LDVR >= 1; if +*> JOBVR = 'V', LDVR >= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,3*N), and +*> if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*N. For good +*> performance, LWORK must generally be larger. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> > 0: if INFO = i, the QR algorithm failed to compute all the +*> eigenvalues, and no eigenvectors have been computed; +*> elements i+1:N of WR and WI contain eigenvalues which +*> have converged. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +* @precisions fortran d -> s +* +*> \ingroup doubleGEeigen +* +* ===================================================================== + SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, + $ LDVR, WORK, LWORK, INFO ) + implicit none +* +* -- LAPACK driver routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + CHARACTER JOBVL, JOBVR + INTEGER INFO, LDA, LDVL, LDVR, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), + $ WI( * ), WORK( * ), WR( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY, SCALEA, WANTVL, WANTVR + CHARACTER SIDE + INTEGER HSWORK, I, IBAL, IERR, IHI, ILO, ITAU, IWRK, K, + $ LWORK_TREVC, MAXWRK, MINWRK, NOUT + DOUBLE PRECISION ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM, + $ SN +* .. +* .. Local Arrays .. + LOGICAL SELECT( 1 ) + DOUBLE PRECISION DUM( 1 ) +* .. +* .. External Subroutines .. + EXTERNAL DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY, + $ DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC3, + $ XERBLA +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER IDAMAX, ILAENV + DOUBLE PRECISION DLAMCH, DLANGE, DLAPY2, DNRM2 + EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DLANGE, DLAPY2, + $ DNRM2 +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, SQRT +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + LQUERY = ( LWORK.EQ.-1 ) + WANTVL = LSAME( JOBVL, 'V' ) + WANTVR = LSAME( JOBVR, 'V' ) + IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAME( JOBVL, 'N' ) ) ) THEN + INFO = -1 + ELSE IF( ( .NOT.WANTVR ) .AND. ( .NOT.LSAME( JOBVR, 'N' ) ) ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LDVL.LT.1 .OR. ( WANTVL .AND. LDVL.LT.N ) ) THEN + INFO = -9 + ELSE IF( LDVR.LT.1 .OR. ( WANTVR .AND. LDVR.LT.N ) ) THEN + INFO = -11 + END IF +* +* Compute workspace +* (Note: Comments in the code beginning "Workspace:" describe the +* minimal amount of workspace needed at that point in the code, +* as well as the preferred amount for good performance. +* NB refers to the optimal block size for the immediately +* following subroutine, as returned by ILAENV. +* HSWORK refers to the workspace preferred by DHSEQR, as +* calculated below. HSWORK is computed assuming ILO=1 and IHI=N, +* the worst case.) +* + IF( INFO.EQ.0 ) THEN + IF( N.EQ.0 ) THEN + MINWRK = 1 + MAXWRK = 1 + ELSE + MAXWRK = 2*N + N*ILAENV( 1, 'DGEHRD', ' ', N, 1, N, 0 ) + IF( WANTVL ) THEN + MINWRK = 4*N + MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1, + $ 'DORGHR', ' ', N, 1, N, -1 ) ) + CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL, + $ WORK, -1, INFO ) + HSWORK = INT( WORK(1) ) + MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) + CALL DTREVC3( 'L', 'B', SELECT, N, A, LDA, + $ VL, LDVL, VR, LDVR, N, NOUT, + $ WORK, -1, IERR ) + LWORK_TREVC = INT( WORK(1) ) + MAXWRK = MAX( MAXWRK, N + LWORK_TREVC ) + MAXWRK = MAX( MAXWRK, 4*N ) + ELSE IF( WANTVR ) THEN + MINWRK = 4*N + MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1, + $ 'DORGHR', ' ', N, 1, N, -1 ) ) + CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR, + $ WORK, -1, INFO ) + HSWORK = INT( WORK(1) ) + MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) + CALL DTREVC3( 'R', 'B', SELECT, N, A, LDA, + $ VL, LDVL, VR, LDVR, N, NOUT, + $ WORK, -1, IERR ) + LWORK_TREVC = INT( WORK(1) ) + MAXWRK = MAX( MAXWRK, N + LWORK_TREVC ) + MAXWRK = MAX( MAXWRK, 4*N ) + ELSE + MINWRK = 3*N + CALL DHSEQR( 'E', 'N', N, 1, N, A, LDA, WR, WI, VR, LDVR, + $ WORK, -1, INFO ) + HSWORK = INT( WORK(1) ) + MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) + END IF + MAXWRK = MAX( MAXWRK, MINWRK ) + END IF + WORK( 1 ) = MAXWRK +* + IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN + INFO = -13 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEEV ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* +* Get machine constants +* + EPS = DLAMCH( 'P' ) + SMLNUM = DLAMCH( 'S' ) + BIGNUM = ONE / SMLNUM + CALL DLABAD( SMLNUM, BIGNUM ) + SMLNUM = SQRT( SMLNUM ) / EPS + BIGNUM = ONE / SMLNUM +* +* Scale A if max element outside range [SMLNUM,BIGNUM] +* + ANRM = DLANGE( 'M', N, N, A, LDA, DUM ) + SCALEA = .FALSE. + IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN + SCALEA = .TRUE. + CSCALE = SMLNUM + ELSE IF( ANRM.GT.BIGNUM ) THEN + SCALEA = .TRUE. + CSCALE = BIGNUM + END IF + IF( SCALEA ) + $ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR ) +* +* Balance the matrix +* (Workspace: need N) +* + IBAL = 1 + CALL DGEBAL( 'B', N, A, LDA, ILO, IHI, WORK( IBAL ), IERR ) +* +* Reduce to upper Hessenberg form +* (Workspace: need 3*N, prefer 2*N+N*NB) +* + ITAU = IBAL + N + IWRK = ITAU + N + CALL DGEHRD( N, ILO, IHI, A, LDA, WORK( ITAU ), WORK( IWRK ), + $ LWORK-IWRK+1, IERR ) +* + IF( WANTVL ) THEN +* +* Want left eigenvectors +* Copy Householder vectors to VL +* + SIDE = 'L' + CALL DLACPY( 'L', N, N, A, LDA, VL, LDVL ) +* +* Generate orthogonal matrix in VL +* (Workspace: need 3*N-1, prefer 2*N+(N-1)*NB) +* + CALL DORGHR( N, ILO, IHI, VL, LDVL, WORK( ITAU ), WORK( IWRK ), + $ LWORK-IWRK+1, IERR ) +* +* Perform QR iteration, accumulating Schur vectors in VL +* (Workspace: need N+1, prefer N+HSWORK (see comments) ) +* + IWRK = ITAU + CALL DHSEQR( 'S', 'V', N, ILO, IHI, A, LDA, WR, WI, VL, LDVL, + $ WORK( IWRK ), LWORK-IWRK+1, INFO ) +* + IF( WANTVR ) THEN +* +* Want left and right eigenvectors +* Copy Schur vectors to VR +* + SIDE = 'B' + CALL DLACPY( 'F', N, N, VL, LDVL, VR, LDVR ) + END IF +* + ELSE IF( WANTVR ) THEN +* +* Want right eigenvectors +* Copy Householder vectors to VR +* + SIDE = 'R' + CALL DLACPY( 'L', N, N, A, LDA, VR, LDVR ) +* +* Generate orthogonal matrix in VR +* (Workspace: need 3*N-1, prefer 2*N+(N-1)*NB) +* + CALL DORGHR( N, ILO, IHI, VR, LDVR, WORK( ITAU ), WORK( IWRK ), + $ LWORK-IWRK+1, IERR ) +* +* Perform QR iteration, accumulating Schur vectors in VR +* (Workspace: need N+1, prefer N+HSWORK (see comments) ) +* + IWRK = ITAU + CALL DHSEQR( 'S', 'V', N, ILO, IHI, A, LDA, WR, WI, VR, LDVR, + $ WORK( IWRK ), LWORK-IWRK+1, INFO ) +* + ELSE +* +* Compute eigenvalues only +* (Workspace: need N+1, prefer N+HSWORK (see comments) ) +* + IWRK = ITAU + CALL DHSEQR( 'E', 'N', N, ILO, IHI, A, LDA, WR, WI, VR, LDVR, + $ WORK( IWRK ), LWORK-IWRK+1, INFO ) + END IF +* +* If INFO .NE. 0 from DHSEQR, then quit +* + IF( INFO.NE.0 ) + $ GO TO 50 +* + IF( WANTVL .OR. WANTVR ) THEN +* +* Compute left and/or right eigenvectors +* (Workspace: need 4*N, prefer N + N + 2*N*NB) +* + CALL DTREVC3( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR, + $ N, NOUT, WORK( IWRK ), LWORK-IWRK+1, IERR ) + END IF +* + IF( WANTVL ) THEN +* +* Undo balancing of left eigenvectors +* (Workspace: need N) +* + CALL DGEBAK( 'B', 'L', N, ILO, IHI, WORK( IBAL ), N, VL, LDVL, + $ IERR ) +* +* Normalize left eigenvectors and make largest component real +* + DO 20 I = 1, N + IF( WI( I ).EQ.ZERO ) THEN + SCL = ONE / DNRM2( N, VL( 1, I ), 1 ) + CALL DSCAL( N, SCL, VL( 1, I ), 1 ) + ELSE IF( WI( I ).GT.ZERO ) THEN + SCL = ONE / DLAPY2( DNRM2( N, VL( 1, I ), 1 ), + $ DNRM2( N, VL( 1, I+1 ), 1 ) ) + CALL DSCAL( N, SCL, VL( 1, I ), 1 ) + CALL DSCAL( N, SCL, VL( 1, I+1 ), 1 ) + DO 10 K = 1, N + WORK( IWRK+K-1 ) = VL( K, I )**2 + VL( K, I+1 )**2 + 10 CONTINUE + K = IDAMAX( N, WORK( IWRK ), 1 ) + CALL DLARTG( VL( K, I ), VL( K, I+1 ), CS, SN, R ) + CALL DROT( N, VL( 1, I ), 1, VL( 1, I+1 ), 1, CS, SN ) + VL( K, I+1 ) = ZERO + END IF + 20 CONTINUE + END IF +* + IF( WANTVR ) THEN +* +* Undo balancing of right eigenvectors +* (Workspace: need N) +* + CALL DGEBAK( 'B', 'R', N, ILO, IHI, WORK( IBAL ), N, VR, LDVR, + $ IERR ) +* +* Normalize right eigenvectors and make largest component real +* + DO 40 I = 1, N + IF( WI( I ).EQ.ZERO ) THEN + SCL = ONE / DNRM2( N, VR( 1, I ), 1 ) + CALL DSCAL( N, SCL, VR( 1, I ), 1 ) + ELSE IF( WI( I ).GT.ZERO ) THEN + SCL = ONE / DLAPY2( DNRM2( N, VR( 1, I ), 1 ), + $ DNRM2( N, VR( 1, I+1 ), 1 ) ) + CALL DSCAL( N, SCL, VR( 1, I ), 1 ) + CALL DSCAL( N, SCL, VR( 1, I+1 ), 1 ) + DO 30 K = 1, N + WORK( IWRK+K-1 ) = VR( K, I )**2 + VR( K, I+1 )**2 + 30 CONTINUE + K = IDAMAX( N, WORK( IWRK ), 1 ) + CALL DLARTG( VR( K, I ), VR( K, I+1 ), CS, SN, R ) + CALL DROT( N, VR( 1, I ), 1, VR( 1, I+1 ), 1, CS, SN ) + VR( K, I+1 ) = ZERO + END IF + 40 CONTINUE + END IF +* +* Undo scaling if necessary +* + 50 CONTINUE + IF( SCALEA ) THEN + CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WR( INFO+1 ), + $ MAX( N-INFO, 1 ), IERR ) + CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WI( INFO+1 ), + $ MAX( N-INFO, 1 ), IERR ) + IF( INFO.GT.0 ) THEN + CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WR, N, + $ IERR ) + CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WI, N, + $ IERR ) + END IF + END IF +* + WORK( 1 ) = MAXWRK + RETURN +* +* End of DGEEV +* + END +*> \brief \b DGEHD2 reduces a general square matrix to upper Hessenberg form using an unblocked algorithm. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEHD2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, INFO, LDA, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEHD2 reduces a real general matrix A to upper Hessenberg form H by +*> an orthogonal similarity transformation: Q**T * A * Q = H . +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> +*> It is assumed that A is already upper triangular in rows +*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally +*> set by a previous call to DGEBAL; otherwise they should be +*> set to 1 and N respectively. See Further Details. +*> 1 <= ILO <= IHI <= max(1,N). +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the n by n general matrix to be reduced. +*> On exit, the upper triangle and the first subdiagonal of A +*> are overwritten with the upper Hessenberg matrix H, and the +*> elements below the first subdiagonal, with the array TAU, +*> represent the orthogonal matrix Q as a product of elementary +*> reflectors. See Further Details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (N-1) +*> The scalar factors of the elementary reflectors (see Further +*> Details). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit. +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleGEcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The matrix Q is represented as a product of (ihi-ilo) elementary +*> reflectors +*> +*> Q = H(ilo) H(ilo+1) . . . H(ihi-1). +*> +*> Each H(i) has the form +*> +*> H(i) = I - tau * v * v**T +*> +*> where tau is a real scalar, and v is a real vector with +*> v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on +*> exit in A(i+2:ihi,i), and tau in TAU(i). +*> +*> The contents of A are illustrated by the following example, with +*> n = 7, ilo = 2 and ihi = 6: +*> +*> on entry, on exit, +*> +*> ( a a a a a a a ) ( a a h h h h a ) +*> ( a a a a a a ) ( a h h h h a ) +*> ( a a a a a a ) ( h h h h h h ) +*> ( a a a a a a ) ( v2 h h h h h ) +*> ( a a a a a a ) ( v2 v3 h h h h ) +*> ( a a a a a a ) ( v2 v3 v4 h h h ) +*> ( a ) ( a ) +*> +*> where a denotes an element of the original matrix A, h denotes a +*> modified element of the upper Hessenberg matrix H, and vi denotes an +*> element of the vector defining H(i). +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, INFO, LDA, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION AII +* .. +* .. External Subroutines .. + EXTERNAL DLARF, DLARFG, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Test the input parameters +* + INFO = 0 + IF( N.LT.0 ) THEN + INFO = -1 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN + INFO = -2 + ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEHD2', -INFO ) + RETURN + END IF +* + DO 10 I = ILO, IHI - 1 +* +* Compute elementary reflector H(i) to annihilate A(i+2:ihi,i) +* + CALL DLARFG( IHI-I, A( I+1, I ), A( MIN( I+2, N ), I ), 1, + $ TAU( I ) ) + AII = A( I+1, I ) + A( I+1, I ) = ONE +* +* Apply H(i) to A(1:ihi,i+1:ihi) from the right +* + CALL DLARF( 'Right', IHI, IHI-I, A( I+1, I ), 1, TAU( I ), + $ A( 1, I+1 ), LDA, WORK ) +* +* Apply H(i) to A(i+1:ihi,i+1:n) from the left +* + CALL DLARF( 'Left', IHI-I, N-I, A( I+1, I ), 1, TAU( I ), + $ A( I+1, I+1 ), LDA, WORK ) +* + A( I+1, I ) = AII + 10 CONTINUE +* + RETURN +* +* End of DGEHD2 +* + END +*> \brief \b DGEHRD +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DGEHRD + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DGEHRD reduces a real general matrix A to upper Hessenberg form H by +*> an orthogonal similarity transformation: Q**T * A * Q = H . +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> +*> It is assumed that A is already upper triangular in rows +*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally +*> set by a previous call to DGEBAL; otherwise they should be +*> set to 1 and N respectively. See Further Details. +*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the N-by-N general matrix to be reduced. +*> On exit, the upper triangle and the first subdiagonal of A +*> are overwritten with the upper Hessenberg matrix H, and the +*> elements below the first subdiagonal, with the array TAU, +*> represent the orthogonal matrix Q as a product of elementary +*> reflectors. See Further Details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (N-1) +*> The scalar factors of the elementary reflectors (see Further +*> Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to +*> zero. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (LWORK) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The length of the array WORK. LWORK >= max(1,N). +*> For good performance, LWORK should generally be larger. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup doubleGEcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The matrix Q is represented as a product of (ihi-ilo) elementary +*> reflectors +*> +*> Q = H(ilo) H(ilo+1) . . . H(ihi-1). +*> +*> Each H(i) has the form +*> +*> H(i) = I - tau * v * v**T +*> +*> where tau is a real scalar, and v is a real vector with +*> v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on +*> exit in A(i+2:ihi,i), and tau in TAU(i). +*> +*> The contents of A are illustrated by the following example, with +*> n = 7, ilo = 2 and ihi = 6: +*> +*> on entry, on exit, +*> +*> ( a a a a a a a ) ( a a h h h h a ) +*> ( a a a a a a ) ( a h h h h a ) +*> ( a a a a a a ) ( h h h h h h ) +*> ( a a a a a a ) ( v2 h h h h h ) +*> ( a a a a a a ) ( v2 v3 h h h h ) +*> ( a a a a a a ) ( v2 v3 v4 h h h ) +*> ( a ) ( a ) +*> +*> where a denotes an element of the original matrix A, h denotes a +*> modified element of the upper Hessenberg matrix H, and vi denotes an +*> element of the vector defining H(i). +*> +*> This file is a slight modification of LAPACK-3.0's DGEHRD +*> subroutine incorporating improvements proposed by Quintana-Orti and +*> Van de Geijn (2006). (See DLAHR2.) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + INTEGER NBMAX, LDT, TSIZE + PARAMETER ( NBMAX = 64, LDT = NBMAX+1, + $ TSIZE = LDT*NBMAX ) + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, + $ ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY + INTEGER I, IB, IINFO, IWT, J, LDWORK, LWKOPT, NB, + $ NBMIN, NH, NX + DOUBLE PRECISION EI +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DGEHD2, DGEMM, DLAHR2, DLARFB, DTRMM, + $ XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Executable Statements .. +* +* Test the input parameters +* + INFO = 0 + LQUERY = ( LWORK.EQ.-1 ) + IF( N.LT.0 ) THEN + INFO = -1 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN + INFO = -2 + ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN + INFO = -8 + END IF +* + IF( INFO.EQ.0 ) THEN +* +* Compute the workspace requirements +* + NB = MIN( NBMAX, ILAENV( 1, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) + LWKOPT = N*NB + TSIZE + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DGEHRD', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Set elements 1:ILO-1 and IHI:N-1 of TAU to zero +* + DO 10 I = 1, ILO - 1 + TAU( I ) = ZERO + 10 CONTINUE + DO 20 I = MAX( 1, IHI ), N - 1 + TAU( I ) = ZERO + 20 CONTINUE +* +* Quick return if possible +* + NH = IHI - ILO + 1 + IF( NH.LE.1 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* +* Determine the block size +* + NB = MIN( NBMAX, ILAENV( 1, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) + NBMIN = 2 + IF( NB.GT.1 .AND. NB.LT.NH ) THEN +* +* Determine when to cross over from blocked to unblocked code +* (last block is always handled by unblocked code) +* + NX = MAX( NB, ILAENV( 3, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) + IF( NX.LT.NH ) THEN +* +* Determine if workspace is large enough for blocked code +* + IF( LWORK.LT.N*NB+TSIZE ) THEN +* +* Not enough workspace to use optimal NB: determine the +* minimum value of NB, and reduce NB or force use of +* unblocked code +* + NBMIN = MAX( 2, ILAENV( 2, 'DGEHRD', ' ', N, ILO, IHI, + $ -1 ) ) + IF( LWORK.GE.(N*NBMIN + TSIZE) ) THEN + NB = (LWORK-TSIZE) / N + ELSE + NB = 1 + END IF + END IF + END IF + END IF + LDWORK = N +* + IF( NB.LT.NBMIN .OR. NB.GE.NH ) THEN +* +* Use unblocked code below +* + I = ILO +* + ELSE +* +* Use blocked code +* + IWT = 1 + N*NB + DO 40 I = ILO, IHI - 1 - NX, NB + IB = MIN( NB, IHI-I ) +* +* Reduce columns i:i+ib-1 to Hessenberg form, returning the +* matrices V and T of the block reflector H = I - V*T*V**T +* which performs the reduction, and also the matrix Y = A*V*T +* + CALL DLAHR2( IHI, I, IB, A( 1, I ), LDA, TAU( I ), + $ WORK( IWT ), LDT, WORK, LDWORK ) +* +* Apply the block reflector H to A(1:ihi,i+ib:ihi) from the +* right, computing A := A - Y * V**T. V(i+ib,ib-1) must be set +* to 1 +* + EI = A( I+IB, I+IB-1 ) + A( I+IB, I+IB-1 ) = ONE + CALL DGEMM( 'No transpose', 'Transpose', + $ IHI, IHI-I-IB+1, + $ IB, -ONE, WORK, LDWORK, A( I+IB, I ), LDA, ONE, + $ A( 1, I+IB ), LDA ) + A( I+IB, I+IB-1 ) = EI +* +* Apply the block reflector H to A(1:i,i+1:i+ib-1) from the +* right +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', + $ 'Unit', I, IB-1, + $ ONE, A( I+1, I ), LDA, WORK, LDWORK ) + DO 30 J = 0, IB-2 + CALL DAXPY( I, -ONE, WORK( LDWORK*J+1 ), 1, + $ A( 1, I+J+1 ), 1 ) + 30 CONTINUE +* +* Apply the block reflector H to A(i+1:ihi,i+ib:n) from the +* left +* + CALL DLARFB( 'Left', 'Transpose', 'Forward', + $ 'Columnwise', + $ IHI-I, N-I-IB+1, IB, A( I+1, I ), LDA, + $ WORK( IWT ), LDT, A( I+1, I+IB ), LDA, + $ WORK, LDWORK ) + 40 CONTINUE + END IF +* +* Use unblocked code to reduce the rest of the matrix +* + CALL DGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO ) + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of DGEHRD +* + END +*> \brief \b DHSEQR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DHSEQR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, WR, WI, Z, +* LDZ, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, INFO, LDH, LDZ, LWORK, N +* CHARACTER COMPZ, JOB +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DHSEQR computes the eigenvalues of a Hessenberg matrix H +*> and, optionally, the matrices T and Z from the Schur decomposition +*> H = Z T Z**T, where T is an upper quasi-triangular matrix (the +*> Schur form), and Z is the orthogonal matrix of Schur vectors. +*> +*> Optionally Z may be postmultiplied into an input orthogonal +*> matrix Q so that this routine can give the Schur factorization +*> of a matrix A which has been reduced to the Hessenberg form H +*> by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] JOB +*> \verbatim +*> JOB is CHARACTER*1 +*> = 'E': compute eigenvalues only; +*> = 'S': compute eigenvalues and the Schur form T. +*> \endverbatim +*> +*> \param[in] COMPZ +*> \verbatim +*> COMPZ is CHARACTER*1 +*> = 'N': no Schur vectors are computed; +*> = 'I': Z is initialized to the unit matrix and the matrix Z +*> of Schur vectors of H is returned; +*> = 'V': Z must contain an orthogonal matrix Q on entry, and +*> the product Q*Z is returned. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H. N .GE. 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> +*> It is assumed that H is already upper triangular in rows +*> and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally +*> set by a previous call to DGEBAL, and then passed to ZGEHRD +*> when the matrix output by DGEBAL is reduced to Hessenberg +*> form. Otherwise ILO and IHI should be set to 1 and N +*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. +*> If N = 0, then ILO = 1 and IHI = 0. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On entry, the upper Hessenberg matrix H. +*> On exit, if INFO = 0 and JOB = 'S', then H contains the +*> upper quasi-triangular matrix T from the Schur decomposition +*> (the Schur form); 2-by-2 diagonal blocks (corresponding to +*> complex conjugate pairs of eigenvalues) are returned in +*> standard form, with H(i,i) = H(i+1,i+1) and +*> H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and JOB = 'E', the +*> contents of H are unspecified on exit. (The output value of +*> H when INFO.GT.0 is given under the description of INFO +*> below.) +*> +*> Unlike earlier versions of DHSEQR, this subroutine may +*> explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1 +*> or j = IHI+1, IHI+2, ... N. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is INTEGER +*> The leading dimension of the array H. LDH .GE. max(1,N). +*> \endverbatim +*> +*> \param[out] WR +*> \verbatim +*> WR is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] WI +*> \verbatim +*> WI is DOUBLE PRECISION array, dimension (N) +*> +*> The real and imaginary parts, respectively, of the computed +*> eigenvalues. If two eigenvalues are computed as a complex +*> conjugate pair, they are stored in consecutive elements of +*> WR and WI, say the i-th and (i+1)th, with WI(i) .GT. 0 and +*> WI(i+1) .LT. 0. If JOB = 'S', the eigenvalues are stored in +*> the same order as on the diagonal of the Schur form returned +*> in H, with WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 +*> diagonal block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and +*> WI(i+1) = -WI(i). +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,N) +*> If COMPZ = 'N', Z is not referenced. +*> If COMPZ = 'I', on entry Z need not be set and on exit, +*> if INFO = 0, Z contains the orthogonal matrix Z of the Schur +*> vectors of H. If COMPZ = 'V', on entry Z must contain an +*> N-by-N matrix Q, which is assumed to be equal to the unit +*> matrix except for the submatrix Z(ILO:IHI,ILO:IHI). On exit, +*> if INFO = 0, Z contains Q*Z. +*> Normally Q is the orthogonal matrix generated by DORGHR +*> after the call to DGEHRD which formed the Hessenberg matrix +*> H. (The output value of Z when INFO.GT.0 is given under +*> the description of INFO below.) +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is INTEGER +*> The leading dimension of the array Z. if COMPZ = 'I' or +*> COMPZ = 'V', then LDZ.GE.MAX(1,N). Otherwize, LDZ.GE.1. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (LWORK) +*> On exit, if INFO = 0, WORK(1) returns an estimate of +*> the optimal value for LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK .GE. max(1,N) +*> is sufficient and delivers very good and sometimes +*> optimal performance. However, LWORK as large as 11*N +*> may be required for optimal performance. A workspace +*> query is recommended to determine the optimal workspace +*> size. +*> +*> If LWORK = -1, then DHSEQR does a workspace query. +*> In this case, DHSEQR checks the input parameters and +*> estimates the optimal workspace size for the given +*> values of N, ILO and IHI. The estimate is returned +*> in WORK(1). No error message related to LWORK is +*> issued by XERBLA. Neither H nor Z are accessed. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> .LT. 0: if INFO = -i, the i-th argument had an illegal +*> value +*> .GT. 0: if INFO = i, DHSEQR failed to compute all of +*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR +*> and WI contain those eigenvalues which have been +*> successfully computed. (Failures are rare.) +*> +*> If INFO .GT. 0 and JOB = 'E', then on exit, the +*> remaining unconverged eigenvalues are the eigen- +*> values of the upper Hessenberg matrix rows and +*> columns ILO through INFO of the final, output +*> value of H. +*> +*> If INFO .GT. 0 and JOB = 'S', then on exit +*> +*> (*) (initial value of H)*U = U*(final value of H) +*> +*> where U is an orthogonal matrix. The final +*> value of H is upper Hessenberg and quasi-triangular +*> in rows and columns INFO+1 through IHI. +*> +*> If INFO .GT. 0 and COMPZ = 'V', then on exit +*> +*> (final value of Z) = (initial value of Z)*U +*> +*> where U is the orthogonal matrix in (*) (regard- +*> less of the value of JOB.) +*> +*> If INFO .GT. 0 and COMPZ = 'I', then on exit +*> (final value of Z) = U +*> where U is the orthogonal matrix in (*) (regard- +*> less of the value of JOB.) +*> +*> If INFO .GT. 0 and COMPZ = 'N', then Z is not +*> accessed. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Default values supplied by +*> ILAENV(ISPEC,'DHSEQR',JOB(:1)//COMPZ(:1),N,ILO,IHI,LWORK). +*> It is suggested that these defaults be adjusted in order +*> to attain best performance in each particular +*> computational environment. +*> +*> ISPEC=12: The DLAHQR vs DLAQR0 crossover point. +*> Default: 75. (Must be at least 11.) +*> +*> ISPEC=13: Recommended deflation window size. +*> This depends on ILO, IHI and NS. NS is the +*> number of simultaneous shifts returned +*> by ILAENV(ISPEC=15). (See ISPEC=15 below.) +*> The default for (IHI-ILO+1).LE.500 is NS. +*> The default for (IHI-ILO+1).GT.500 is 3*NS/2. +*> +*> ISPEC=14: Nibble crossover point. (See IPARMQ for +*> details.) Default: 14% of deflation window +*> size. +*> +*> ISPEC=15: Number of simultaneous shifts in a multishift +*> QR iteration. +*> +*> If IHI-ILO+1 is ... +*> +*> greater than ...but less ... the +*> or equal to ... than default is +*> +*> 1 30 NS = 2(+) +*> 30 60 NS = 4(+) +*> 60 150 NS = 10(+) +*> 150 590 NS = ** +*> 590 3000 NS = 64 +*> 3000 6000 NS = 128 +*> 6000 infinity NS = 256 +*> +*> (+) By default some or all matrices of this order +*> are passed to the implicit double shift routine +*> DLAHQR and this parameter is ignored. See +*> ISPEC=12 above and comments in IPARMQ for +*> details. +*> +*> (**) The asterisks (**) indicate an ad-hoc +*> function of N increasing from 10 to 64. +*> +*> ISPEC=16: Select structured matrix multiply. +*> If the number of simultaneous shifts (specified +*> by ISPEC=15) is less than 14, then the default +*> for ISPEC=16 is 0. Otherwise the default for +*> ISPEC=16 is 2. +*> \endverbatim +* +*> \par References: +* ================ +*> +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 +*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages +*> 929--947, 2002. +*> \n +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part II: Aggressive Early Deflation, SIAM Journal +*> of Matrix Analysis, volume 23, pages 948--973, 2002. +* +* ===================================================================== + SUBROUTINE DHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, WR, WI, Z, + $ LDZ, WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, INFO, LDH, LDZ, LWORK, N + CHARACTER COMPZ, JOB +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), + $ Z( LDZ, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. +* +* ==== Matrices of order NTINY or smaller must be processed by +* . DLAHQR because of insufficient subdiagonal scratch space. +* . (This is a hard limit.) ==== + INTEGER NTINY + PARAMETER ( NTINY = 11 ) +* +* ==== NL allocates some local workspace to help small matrices +* . through a rare DLAHQR failure. NL .GT. NTINY = 11 is +* . required and NL .LE. NMIN = ILAENV(ISPEC=12,...) is recom- +* . mended. (The default value of NMIN is 75.) Using NL = 49 +* . allows up to six simultaneous shifts and a 16-by-16 +* . deflation window. ==== + INTEGER NL + PARAMETER ( NL = 49 ) + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Arrays .. + DOUBLE PRECISION HL( NL, NL ), WORKL( NL ) +* .. +* .. Local Scalars .. + INTEGER I, KBOT, NMIN + LOGICAL INITZ, LQUERY, WANTT, WANTZ +* .. +* .. External Functions .. + INTEGER ILAENV + LOGICAL LSAME + EXTERNAL ILAENV, LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLACPY, DLAHQR, DLAQR0, DLASET, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC DBLE, MAX, MIN +* .. +* .. Executable Statements .. +* +* ==== Decode and check the input parameters. ==== +* + WANTT = LSAME( JOB, 'S' ) + INITZ = LSAME( COMPZ, 'I' ) + WANTZ = INITZ .OR. LSAME( COMPZ, 'V' ) + WORK( 1 ) = DBLE( MAX( 1, N ) ) + LQUERY = LWORK.EQ.-1 +* + INFO = 0 + IF( .NOT.LSAME( JOB, 'E' ) .AND. .NOT.WANTT ) THEN + INFO = -1 + ELSE IF( .NOT.LSAME( COMPZ, 'N' ) .AND. .NOT.WANTZ ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN + INFO = -4 + ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN + INFO = -5 + ELSE IF( LDH.LT.MAX( 1, N ) ) THEN + INFO = -7 + ELSE IF( LDZ.LT.1 .OR. ( WANTZ .AND. LDZ.LT.MAX( 1, N ) ) ) THEN + INFO = -11 + ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN + INFO = -13 + END IF +* + IF( INFO.NE.0 ) THEN +* +* ==== Quick return in case of invalid argument. ==== +* + CALL XERBLA( 'DHSEQR', -INFO ) + RETURN +* + ELSE IF( N.EQ.0 ) THEN +* +* ==== Quick return in case N = 0; nothing to do. ==== +* + RETURN +* + ELSE IF( LQUERY ) THEN +* +* ==== Quick return in case of a workspace query ==== +* + CALL DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, + $ IHI, Z, LDZ, WORK, LWORK, INFO ) +* ==== Ensure reported workspace size is backward-compatible with +* . previous LAPACK versions. ==== + WORK( 1 ) = MAX( DBLE( MAX( 1, N ) ), WORK( 1 ) ) + RETURN +* + ELSE +* +* ==== copy eigenvalues isolated by DGEBAL ==== +* + DO 10 I = 1, ILO - 1 + WR( I ) = H( I, I ) + WI( I ) = ZERO + 10 CONTINUE + DO 20 I = IHI + 1, N + WR( I ) = H( I, I ) + WI( I ) = ZERO + 20 CONTINUE +* +* ==== Initialize Z, if requested ==== +* + IF( INITZ ) + $ CALL DLASET( 'A', N, N, ZERO, ONE, Z, LDZ ) +* +* ==== Quick return if possible ==== +* + IF( ILO.EQ.IHI ) THEN + WR( ILO ) = H( ILO, ILO ) + WI( ILO ) = ZERO + RETURN + END IF +* +* ==== DLAHQR/DLAQR0 crossover point ==== +* + NMIN = ILAENV( 12, 'DHSEQR', JOB( : 1 ) // COMPZ( : 1 ), N, + $ ILO, IHI, LWORK ) + NMIN = MAX( NTINY, NMIN ) +* +* ==== DLAQR0 for big matrices; DLAHQR for small ones ==== +* + IF( N.GT.NMIN ) THEN + CALL DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, + $ IHI, Z, LDZ, WORK, LWORK, INFO ) + ELSE +* +* ==== Small matrix ==== +* + CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, + $ IHI, Z, LDZ, INFO ) +* + IF( INFO.GT.0 ) THEN +* +* ==== A rare DLAHQR failure! DLAQR0 sometimes succeeds +* . when DLAHQR fails. ==== +* + KBOT = INFO +* + IF( N.GE.NL ) THEN +* +* ==== Larger matrices have enough subdiagonal scratch +* . space to call DLAQR0 directly. ==== +* + CALL DLAQR0( WANTT, WANTZ, N, ILO, KBOT, H, LDH, WR, + $ WI, ILO, IHI, Z, LDZ, WORK, LWORK, INFO ) +* + ELSE +* +* ==== Tiny matrices don't have enough subdiagonal +* . scratch space to benefit from DLAQR0. Hence, +* . tiny matrices must be copied into a larger +* . array before calling DLAQR0. ==== +* + CALL DLACPY( 'A', N, N, H, LDH, HL, NL ) + HL( N+1, N ) = ZERO + CALL DLASET( 'A', NL, NL-N, ZERO, ZERO, HL( 1, N+1 ), + $ NL ) + CALL DLAQR0( WANTT, WANTZ, NL, ILO, KBOT, HL, NL, WR, + $ WI, ILO, IHI, Z, LDZ, WORKL, NL, INFO ) + IF( WANTT .OR. INFO.NE.0 ) + $ CALL DLACPY( 'A', N, N, HL, NL, H, LDH ) + END IF + END IF + END IF +* +* ==== Clear out the trash, if necessary. ==== +* + IF( ( WANTT .OR. INFO.NE.0 ) .AND. N.GT.2 ) + $ CALL DLASET( 'L', N-2, N-2, ZERO, ZERO, H( 3, 1 ), LDH ) +* +* ==== Ensure reported workspace size is backward-compatible with +* . previous LAPACK versions. ==== +* + WORK( 1 ) = MAX( DBLE( MAX( 1, N ) ), WORK( 1 ) ) + END IF +* +* ==== End of DHSEQR ==== +* + END +*> \brief \b DISNAN tests input for NaN. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DISNAN( DIN ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DISNAN returns .TRUE. if its argument is NaN, and .FALSE. +*> otherwise. To be replaced by the Fortran 2003 intrinsic in the +*> future. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN +*> \verbatim +*> DIN is DOUBLE PRECISION +*> Input to test for NaN. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DISNAN( DIN ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN +* .. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL DLAISNAN + EXTERNAL DLAISNAN +* .. +* .. Executable Statements .. + DISNAN = DLAISNAN(DIN,DIN) + RETURN + END +*> \brief \b DLABAD +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLABAD + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLABAD( SMALL, LARGE ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION LARGE, SMALL +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLABAD takes as input the values computed by DLAMCH for underflow and +*> overflow, and returns the square root of each of these values if the +*> log of LARGE is sufficiently large. This subroutine is intended to +*> identify machines with a large exponent range, such as the Crays, and +*> redefine the underflow and overflow limits to be the square roots of +*> the values computed by DLAMCH. This subroutine is needed because +*> DLAMCH does not compensate for poor arithmetic in the upper half of +*> the exponent range, as is found on a Cray. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in,out] SMALL +*> \verbatim +*> SMALL is DOUBLE PRECISION +*> On entry, the underflow threshold as computed by DLAMCH. +*> On exit, if LOG10(LARGE) is sufficiently large, the square +*> root of SMALL, otherwise unchanged. +*> \endverbatim +*> +*> \param[in,out] LARGE +*> \verbatim +*> LARGE is DOUBLE PRECISION +*> On entry, the overflow threshold as computed by DLAMCH. +*> On exit, if LOG10(LARGE) is sufficiently large, the square +*> root of LARGE, otherwise unchanged. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLABAD( SMALL, LARGE ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + DOUBLE PRECISION LARGE, SMALL +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LOG10, SQRT +* .. +* .. Executable Statements .. +* +* If it looks like we're on a Cray, take the square root of +* SMALL and LARGE to avoid overflow and underflow problems. +* + IF( LOG10( LARGE ).GT.2000.D0 ) THEN + SMALL = SQRT( SMALL ) + LARGE = SQRT( LARGE ) + END IF +* + RETURN +* +* End of DLABAD +* + END +*> \brief \b DLACPY copies all or part of one two-dimensional array to another. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLACPY + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER LDA, LDB, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLACPY copies all or part of a two-dimensional matrix A to another +*> matrix B. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> Specifies the part of the matrix A to be copied to B. +*> = 'U': Upper triangular part +*> = 'L': Lower triangular part +*> Otherwise: All of the matrix A +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. If UPLO = 'U', only the upper triangle +*> or trapezoid is accessed; if UPLO = 'L', only the lower +*> triangle or trapezoid is accessed. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[out] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,N) +*> On exit, B = A in the locations specified by UPLO. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of the array B. LDB >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, LDB, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( LSAME( UPLO, 'U' ) ) THEN + DO 20 J = 1, N + DO 10 I = 1, MIN( J, M ) + B( I, J ) = A( I, J ) + 10 CONTINUE + 20 CONTINUE + ELSE IF( LSAME( UPLO, 'L' ) ) THEN + DO 40 J = 1, N + DO 30 I = J, M + B( I, J ) = A( I, J ) + 30 CONTINUE + 40 CONTINUE + ELSE + DO 60 J = 1, N + DO 50 I = 1, M + B( I, J ) = A( I, J ) + 50 CONTINUE + 60 CONTINUE + END IF + RETURN +* +* End of DLACPY +* + END +*> \brief \b DLADIV performs complex division in real arithmetic, avoiding unnecessary overflow. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLADIV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLADIV( A, B, C, D, P, Q ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION A, B, C, D, P, Q +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLADIV performs complex division in real arithmetic +*> +*> a + i*b +*> p + i*q = --------- +*> c + i*d +*> +*> The algorithm is due to Michael Baudin and Robert L. Smith +*> and can be found in the paper +*> "A Robust Complex Division in Scilab" +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] C +*> \verbatim +*> C is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] D +*> \verbatim +*> D is DOUBLE PRECISION +*> The scalars a, b, c, and d in the above expression. +*> \endverbatim +*> +*> \param[out] P +*> \verbatim +*> P is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] Q +*> \verbatim +*> Q is DOUBLE PRECISION +*> The scalars p and q in the above expression. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date January 2013 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLADIV( A, B, C, D, P, Q ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* January 2013 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, D, P, Q +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION BS + PARAMETER ( BS = 2.0D0 ) + DOUBLE PRECISION HALF + PARAMETER ( HALF = 0.5D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) +* +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, CC, DD, AB, CD, S, OV, UN, BE, EPS +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DLADIV1 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. +* .. Executable Statements .. +* + AA = A + BB = B + CC = C + DD = D + AB = MAX( ABS(A), ABS(B) ) + CD = MAX( ABS(C), ABS(D) ) + S = 1.0D0 + + OV = DLAMCH( 'Overflow threshold' ) + UN = DLAMCH( 'Safe minimum' ) + EPS = DLAMCH( 'Epsilon' ) + BE = BS / (EPS*EPS) + + IF( AB >= HALF*OV ) THEN + AA = HALF * AA + BB = HALF * BB + S = TWO * S + END IF + IF( CD >= HALF*OV ) THEN + CC = HALF * CC + DD = HALF * DD + S = HALF * S + END IF + IF( AB <= UN*BS/EPS ) THEN + AA = AA * BE + BB = BB * BE + S = S / BE + END IF + IF( CD <= UN*BS/EPS ) THEN + CC = CC * BE + DD = DD * BE + S = S * BE + END IF + IF( ABS( D ).LE.ABS( C ) ) THEN + CALL DLADIV1(AA, BB, CC, DD, P, Q) + ELSE + CALL DLADIV1(BB, AA, DD, CC, P, Q) + Q = -Q + END IF + P = P * S + Q = Q * S +* + RETURN +* +* End of DLADIV +* + END + + + + SUBROUTINE DLADIV1( A, B, C, D, P, Q ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* January 2013 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, D, P, Q +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) +* +* .. Local Scalars .. + DOUBLE PRECISION R, T +* .. +* .. External Functions .. + DOUBLE PRECISION DLADIV2 + EXTERNAL DLADIV2 +* .. +* .. Executable Statements .. +* + R = D / C + T = ONE / (C + D * R) + P = DLADIV2(A, B, C, D, R, T) + A = -A + Q = DLADIV2(B, A, C, D, R, T) +* + RETURN +* +* End of DLADIV1 +* + END + + DOUBLE PRECISION FUNCTION DLADIV2( A, B, C, D, R, T ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* January 2013 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, D, R, T +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) +* +* .. Local Scalars .. + DOUBLE PRECISION BR +* .. +* .. Executable Statements .. +* + IF( R.NE.ZERO ) THEN + BR = B * R + IF( BR.NE.ZERO ) THEN + DLADIV2 = (A + BR) * T + ELSE + DLADIV2 = A * T + (B * T) * R + END IF + ELSE + DLADIV2 = (A + D * (B / C)) * T + END IF +* + RETURN +* +* End of DLADIV12 +* + END +*> \brief \b DLAEXC swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form, by an orthogonal similarity transformation. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAEXC + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAEXC( WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, +* INFO ) +* +* .. Scalar Arguments .. +* LOGICAL WANTQ +* INTEGER INFO, J1, LDQ, LDT, N, N1, N2 +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAEXC swaps adjacent diagonal blocks T11 and T22 of order 1 or 2 in +*> an upper quasi-triangular matrix T by an orthogonal similarity +*> transformation. +*> +*> T must be in Schur canonical form, that is, block upper triangular +*> with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block +*> has its diagonal elemnts equal and its off-diagonal elements of +*> opposite sign. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTQ +*> \verbatim +*> WANTQ is LOGICAL +*> = .TRUE. : accumulate the transformation in the matrix Q; +*> = .FALSE.: do not accumulate the transformation. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix T. N >= 0. +*> \endverbatim +*> +*> \param[in,out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,N) +*> On entry, the upper quasi-triangular matrix T, in Schur +*> canonical form. +*> On exit, the updated matrix T, again in Schur canonical form. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] Q +*> \verbatim +*> Q is DOUBLE PRECISION array, dimension (LDQ,N) +*> On entry, if WANTQ is .TRUE., the orthogonal matrix Q. +*> On exit, if WANTQ is .TRUE., the updated matrix Q. +*> If WANTQ is .FALSE., Q is not referenced. +*> \endverbatim +*> +*> \param[in] LDQ +*> \verbatim +*> LDQ is INTEGER +*> The leading dimension of the array Q. +*> LDQ >= 1; and if WANTQ is .TRUE., LDQ >= N. +*> \endverbatim +*> +*> \param[in] J1 +*> \verbatim +*> J1 is INTEGER +*> The index of the first row of the first block T11. +*> \endverbatim +*> +*> \param[in] N1 +*> \verbatim +*> N1 is INTEGER +*> The order of the first block T11. N1 = 0, 1 or 2. +*> \endverbatim +*> +*> \param[in] N2 +*> \verbatim +*> N2 is INTEGER +*> The order of the second block T22. N2 = 0, 1 or 2. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> = 1: the transformed matrix T would be too far from Schur +*> form; the blocks are not swapped and T and Q are +*> unchanged. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLAEXC( WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, + $ INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + LOGICAL WANTQ + INTEGER INFO, J1, LDQ, LDT, N, N1, N2 +* .. +* .. Array Arguments .. + DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) + DOUBLE PRECISION TEN + PARAMETER ( TEN = 1.0D+1 ) + INTEGER LDD, LDX + PARAMETER ( LDD = 4, LDX = 2 ) +* .. +* .. Local Scalars .. + INTEGER IERR, J2, J3, J4, K, ND + DOUBLE PRECISION CS, DNORM, EPS, SCALE, SMLNUM, SN, T11, T22, + $ T33, TAU, TAU1, TAU2, TEMP, THRESH, WI1, WI2, + $ WR1, WR2, XNORM +* .. +* .. Local Arrays .. + DOUBLE PRECISION D( LDD, 4 ), U( 3 ), U1( 3 ), U2( 3 ), + $ X( LDX, 2 ) +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLANGE + EXTERNAL DLAMCH, DLANGE +* .. +* .. External Subroutines .. + EXTERNAL DLACPY, DLANV2, DLARFG, DLARFX, DLARTG, DLASY2, + $ DROT +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. +* .. Executable Statements .. +* + INFO = 0 +* +* Quick return if possible +* + IF( N.EQ.0 .OR. N1.EQ.0 .OR. N2.EQ.0 ) + $ RETURN + IF( J1+N1.GT.N ) + $ RETURN +* + J2 = J1 + 1 + J3 = J1 + 2 + J4 = J1 + 3 +* + IF( N1.EQ.1 .AND. N2.EQ.1 ) THEN +* +* Swap two 1-by-1 blocks. +* + T11 = T( J1, J1 ) + T22 = T( J2, J2 ) +* +* Determine the transformation to perform the interchange. +* + CALL DLARTG( T( J1, J2 ), T22-T11, CS, SN, TEMP ) +* +* Apply transformation to the matrix T. +* + IF( J3.LE.N ) + $ CALL DROT( N-J1-1, T( J1, J3 ), LDT, T( J2, J3 ), LDT, CS, + $ SN ) + CALL DROT( J1-1, T( 1, J1 ), 1, T( 1, J2 ), 1, CS, SN ) +* + T( J1, J1 ) = T22 + T( J2, J2 ) = T11 +* + IF( WANTQ ) THEN +* +* Accumulate transformation in the matrix Q. +* + CALL DROT( N, Q( 1, J1 ), 1, Q( 1, J2 ), 1, CS, SN ) + END IF +* + ELSE +* +* Swapping involves at least one 2-by-2 block. +* +* Copy the diagonal block of order N1+N2 to the local array D +* and compute its norm. +* + ND = N1 + N2 + CALL DLACPY( 'Full', ND, ND, T( J1, J1 ), LDT, D, LDD ) + DNORM = DLANGE( 'Max', ND, ND, D, LDD, WORK ) +* +* Compute machine-dependent threshold for test for accepting +* swap. +* + EPS = DLAMCH( 'P' ) + SMLNUM = DLAMCH( 'S' ) / EPS + THRESH = MAX( TEN*EPS*DNORM, SMLNUM ) +* +* Solve T11*X - X*T22 = scale*T12 for X. +* + CALL DLASY2( .FALSE., .FALSE., -1, N1, N2, D, LDD, + $ D( N1+1, N1+1 ), LDD, D( 1, N1+1 ), LDD, SCALE, X, + $ LDX, XNORM, IERR ) +* +* Swap the adjacent diagonal blocks. +* + K = N1 + N1 + N2 - 3 + GO TO ( 10, 20, 30 )K +* + 10 CONTINUE +* +* N1 = 1, N2 = 2: generate elementary reflector H so that: +* +* ( scale, X11, X12 ) H = ( 0, 0, * ) +* + U( 1 ) = SCALE + U( 2 ) = X( 1, 1 ) + U( 3 ) = X( 1, 2 ) + CALL DLARFG( 3, U( 3 ), U, 1, TAU ) + U( 3 ) = ONE + T11 = T( J1, J1 ) +* +* Perform swap provisionally on diagonal block in D. +* + CALL DLARFX( 'L', 3, 3, U, TAU, D, LDD, WORK ) + CALL DLARFX( 'R', 3, 3, U, TAU, D, LDD, WORK ) +* +* Test whether to reject swap. +* + IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 3, + $ 3 )-T11 ) ).GT.THRESH )GO TO 50 +* +* Accept swap: apply transformation to the entire matrix T. +* + CALL DLARFX( 'L', 3, N-J1+1, U, TAU, T( J1, J1 ), LDT, WORK ) + CALL DLARFX( 'R', J2, 3, U, TAU, T( 1, J1 ), LDT, WORK ) +* + T( J3, J1 ) = ZERO + T( J3, J2 ) = ZERO + T( J3, J3 ) = T11 +* + IF( WANTQ ) THEN +* +* Accumulate transformation in the matrix Q. +* + CALL DLARFX( 'R', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK ) + END IF + GO TO 40 +* + 20 CONTINUE +* +* N1 = 2, N2 = 1: generate elementary reflector H so that: +* +* H ( -X11 ) = ( * ) +* ( -X21 ) = ( 0 ) +* ( scale ) = ( 0 ) +* + U( 1 ) = -X( 1, 1 ) + U( 2 ) = -X( 2, 1 ) + U( 3 ) = SCALE + CALL DLARFG( 3, U( 1 ), U( 2 ), 1, TAU ) + U( 1 ) = ONE + T33 = T( J3, J3 ) +* +* Perform swap provisionally on diagonal block in D. +* + CALL DLARFX( 'L', 3, 3, U, TAU, D, LDD, WORK ) + CALL DLARFX( 'R', 3, 3, U, TAU, D, LDD, WORK ) +* +* Test whether to reject swap. +* + IF( MAX( ABS( D( 2, 1 ) ), ABS( D( 3, 1 ) ), ABS( D( 1, + $ 1 )-T33 ) ).GT.THRESH )GO TO 50 +* +* Accept swap: apply transformation to the entire matrix T. +* + CALL DLARFX( 'R', J3, 3, U, TAU, T( 1, J1 ), LDT, WORK ) + CALL DLARFX( 'L', 3, N-J1, U, TAU, T( J1, J2 ), LDT, WORK ) +* + T( J1, J1 ) = T33 + T( J2, J1 ) = ZERO + T( J3, J1 ) = ZERO +* + IF( WANTQ ) THEN +* +* Accumulate transformation in the matrix Q. +* + CALL DLARFX( 'R', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK ) + END IF + GO TO 40 +* + 30 CONTINUE +* +* N1 = 2, N2 = 2: generate elementary reflectors H(1) and H(2) so +* that: +* +* H(2) H(1) ( -X11 -X12 ) = ( * * ) +* ( -X21 -X22 ) ( 0 * ) +* ( scale 0 ) ( 0 0 ) +* ( 0 scale ) ( 0 0 ) +* + U1( 1 ) = -X( 1, 1 ) + U1( 2 ) = -X( 2, 1 ) + U1( 3 ) = SCALE + CALL DLARFG( 3, U1( 1 ), U1( 2 ), 1, TAU1 ) + U1( 1 ) = ONE +* + TEMP = -TAU1*( X( 1, 2 )+U1( 2 )*X( 2, 2 ) ) + U2( 1 ) = -TEMP*U1( 2 ) - X( 2, 2 ) + U2( 2 ) = -TEMP*U1( 3 ) + U2( 3 ) = SCALE + CALL DLARFG( 3, U2( 1 ), U2( 2 ), 1, TAU2 ) + U2( 1 ) = ONE +* +* Perform swap provisionally on diagonal block in D. +* + CALL DLARFX( 'L', 3, 4, U1, TAU1, D, LDD, WORK ) + CALL DLARFX( 'R', 4, 3, U1, TAU1, D, LDD, WORK ) + CALL DLARFX( 'L', 3, 4, U2, TAU2, D( 2, 1 ), LDD, WORK ) + CALL DLARFX( 'R', 4, 3, U2, TAU2, D( 1, 2 ), LDD, WORK ) +* +* Test whether to reject swap. +* + IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 4, 1 ) ), + $ ABS( D( 4, 2 ) ) ).GT.THRESH )GO TO 50 +* +* Accept swap: apply transformation to the entire matrix T. +* + CALL DLARFX( 'L', 3, N-J1+1, U1, TAU1, T( J1, J1 ), LDT, WORK ) + CALL DLARFX( 'R', J4, 3, U1, TAU1, T( 1, J1 ), LDT, WORK ) + CALL DLARFX( 'L', 3, N-J1+1, U2, TAU2, T( J2, J1 ), LDT, WORK ) + CALL DLARFX( 'R', J4, 3, U2, TAU2, T( 1, J2 ), LDT, WORK ) +* + T( J3, J1 ) = ZERO + T( J3, J2 ) = ZERO + T( J4, J1 ) = ZERO + T( J4, J2 ) = ZERO +* + IF( WANTQ ) THEN +* +* Accumulate transformation in the matrix Q. +* + CALL DLARFX( 'R', N, 3, U1, TAU1, Q( 1, J1 ), LDQ, WORK ) + CALL DLARFX( 'R', N, 3, U2, TAU2, Q( 1, J2 ), LDQ, WORK ) + END IF +* + 40 CONTINUE +* + IF( N2.EQ.2 ) THEN +* +* Standardize new 2-by-2 block T11 +* + CALL DLANV2( T( J1, J1 ), T( J1, J2 ), T( J2, J1 ), + $ T( J2, J2 ), WR1, WI1, WR2, WI2, CS, SN ) + CALL DROT( N-J1-1, T( J1, J1+2 ), LDT, T( J2, J1+2 ), LDT, + $ CS, SN ) + CALL DROT( J1-1, T( 1, J1 ), 1, T( 1, J2 ), 1, CS, SN ) + IF( WANTQ ) + $ CALL DROT( N, Q( 1, J1 ), 1, Q( 1, J2 ), 1, CS, SN ) + END IF +* + IF( N1.EQ.2 ) THEN +* +* Standardize new 2-by-2 block T22 +* + J3 = J1 + N2 + J4 = J3 + 1 + CALL DLANV2( T( J3, J3 ), T( J3, J4 ), T( J4, J3 ), + $ T( J4, J4 ), WR1, WI1, WR2, WI2, CS, SN ) + IF( J3+2.LE.N ) + $ CALL DROT( N-J3-1, T( J3, J3+2 ), LDT, T( J4, J3+2 ), + $ LDT, CS, SN ) + CALL DROT( J3-1, T( 1, J3 ), 1, T( 1, J4 ), 1, CS, SN ) + IF( WANTQ ) + $ CALL DROT( N, Q( 1, J3 ), 1, Q( 1, J4 ), 1, CS, SN ) + END IF +* + END IF + RETURN +* +* Exit with INFO = 1 if swap was rejected. +* + 50 CONTINUE + INFO = 1 + RETURN +* +* End of DLAEXC +* + END +*> \brief \b DLAHQR computes the eigenvalues and Schur factorization of an upper Hessenberg matrix, using the double-shift/single-shift QR algorithm. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAHQR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, +* ILOZ, IHIZ, Z, LDZ, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, N +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), WI( * ), WR( * ), Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAHQR is an auxiliary routine called by DHSEQR to update the +*> eigenvalues and Schur decomposition already computed by DHSEQR, by +*> dealing with the Hessenberg submatrix in rows and columns ILO to +*> IHI. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is LOGICAL +*> = .TRUE. : the full Schur form T is required; +*> = .FALSE.: only eigenvalues are required. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is LOGICAL +*> = .TRUE. : the matrix of Schur vectors Z is required; +*> = .FALSE.: Schur vectors are not required. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper quasi-triangular in +*> rows and columns IHI+1:N, and that H(ILO,ILO-1) = 0 (unless +*> ILO = 1). DLAHQR works primarily with the Hessenberg +*> submatrix in rows and columns ILO to IHI, but applies +*> transformations to all of H if WANTT is .TRUE.. +*> 1 <= ILO <= max(1,IHI); IHI <= N. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On entry, the upper Hessenberg matrix H. +*> On exit, if INFO is zero and if WANTT is .TRUE., H is upper +*> quasi-triangular in rows and columns ILO:IHI, with any +*> 2-by-2 diagonal blocks in standard form. If INFO is zero +*> and WANTT is .FALSE., the contents of H are unspecified on +*> exit. The output state of H if INFO is nonzero is given +*> below under the description of INFO. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is INTEGER +*> The leading dimension of the array H. LDH >= max(1,N). +*> \endverbatim +*> +*> \param[out] WR +*> \verbatim +*> WR is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] WI +*> \verbatim +*> WI is DOUBLE PRECISION array, dimension (N) +*> The real and imaginary parts, respectively, of the computed +*> eigenvalues ILO to IHI are stored in the corresponding +*> elements of WR and WI. If two eigenvalues are computed as a +*> complex conjugate pair, they are stored in consecutive +*> elements of WR and WI, say the i-th and (i+1)th, with +*> WI(i) > 0 and WI(i+1) < 0. If WANTT is .TRUE., the +*> eigenvalues are stored in the same order as on the diagonal +*> of the Schur form returned in H, with WR(i) = H(i,i), and, if +*> H(i:i+1,i:i+1) is a 2-by-2 diagonal block, +*> WI(i) = sqrt(H(i+1,i)*H(i,i+1)) and WI(i+1) = -WI(i). +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. +*> 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,N) +*> If WANTZ is .TRUE., on entry Z must contain the current +*> matrix Z of transformations accumulated by DHSEQR, and on +*> exit Z has been updated; transformations are applied only to +*> the submatrix Z(ILOZ:IHIZ,ILO:IHI). +*> If WANTZ is .FALSE., Z is not referenced. +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is INTEGER +*> The leading dimension of the array Z. LDZ >= max(1,N). +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> .GT. 0: If INFO = i, DLAHQR failed to compute all the +*> eigenvalues ILO to IHI in a total of 30 iterations +*> per eigenvalue; elements i+1:ihi of WR and WI +*> contain those eigenvalues which have been +*> successfully computed. +*> +*> If INFO .GT. 0 and WANTT is .FALSE., then on exit, +*> the remaining unconverged eigenvalues are the +*> eigenvalues of the upper Hessenberg matrix rows +*> and columns ILO thorugh INFO of the final, output +*> value of H. +*> +*> If INFO .GT. 0 and WANTT is .TRUE., then on exit +*> (*) (initial value of H)*U = U*(final value of H) +*> where U is an orthognal matrix. The final +*> value of H is upper Hessenberg and triangular in +*> rows and columns INFO+1 through IHI. +*> +*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit +*> (final value of Z) = (initial value of Z)*U +*> where U is the orthogonal matrix in (*) +*> (regardless of the value of WANTT.) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> 02-96 Based on modifications by +*> David Day, Sandia National Laboratory, USA +*> +*> 12-04 Further modifications by +*> Ralph Byers, University of Kansas, USA +*> This is a modified version of DLAHQR from LAPACK version 3.0. +*> It is (1) more robust against overflow and underflow and +*> (2) adopts the more conservative Ahues & Tisseur stopping +*> criterion (LAWN 122, 1997). +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, + $ ILOZ, IHIZ, Z, LDZ, INFO ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, N + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), WI( * ), WR( * ), Z( LDZ, * ) +* .. +* +* ========================================================= +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE, TWO + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0, TWO = 2.0d0 ) + DOUBLE PRECISION DAT1, DAT2 + PARAMETER ( DAT1 = 3.0d0 / 4.0d0, DAT2 = -0.4375d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, AB, BA, BB, CS, DET, H11, H12, H21, H21S, + $ H22, RT1I, RT1R, RT2I, RT2R, RTDISC, S, SAFMAX, + $ SAFMIN, SMLNUM, SN, SUM, T1, T2, T3, TR, TST, + $ ULP, V2, V3 + INTEGER I, I1, I2, ITS, ITMAX, J, K, L, M, NH, NR, NZ +* .. +* .. Local Arrays .. + DOUBLE PRECISION V( 3 ) +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DLABAD, DLANV2, DLARFG, DROT +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + INFO = 0 +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN + IF( ILO.EQ.IHI ) THEN + WR( ILO ) = H( ILO, ILO ) + WI( ILO ) = ZERO + RETURN + END IF +* +* ==== clear out the trash ==== + DO 10 J = ILO, IHI - 3 + H( J+2, J ) = ZERO + H( J+3, J ) = ZERO + 10 CONTINUE + IF( ILO.LE.IHI-2 ) + $ H( IHI, IHI-2 ) = ZERO +* + NH = IHI - ILO + 1 + NZ = IHIZ - ILOZ + 1 +* +* Set machine-dependent constants for the stopping criterion. +* + SAFMIN = DLAMCH( 'SAFE MINIMUM' ) + SAFMAX = ONE / SAFMIN + CALL DLABAD( SAFMIN, SAFMAX ) + ULP = DLAMCH( 'PRECISION' ) + SMLNUM = SAFMIN*( DBLE( NH ) / ULP ) +* +* I1 and I2 are the indices of the first row and last column of H +* to which transformations must be applied. If eigenvalues only are +* being computed, I1 and I2 are set inside the main loop. +* + IF( WANTT ) THEN + I1 = 1 + I2 = N + END IF +* +* ITMAX is the total number of QR iterations allowed. +* + ITMAX = 30 * MAX( 10, NH ) +* +* The main loop begins here. I is the loop index and decreases from +* IHI to ILO in steps of 1 or 2. Each iteration of the loop works +* with the active submatrix in rows and columns L to I. +* Eigenvalues I+1 to IHI have already converged. Either L = ILO or +* H(L,L-1) is negligible so that the matrix splits. +* + I = IHI + 20 CONTINUE + L = ILO + IF( I.LT.ILO ) + $ GO TO 160 +* +* Perform QR iterations on rows and columns ILO to I until a +* submatrix of order 1 or 2 splits off at the bottom because a +* subdiagonal element has become negligible. +* + DO 140 ITS = 0, ITMAX +* +* Look for a single small subdiagonal element. +* + DO 30 K = I, L + 1, -1 + IF( ABS( H( K, K-1 ) ).LE.SMLNUM ) + $ GO TO 40 + TST = ABS( H( K-1, K-1 ) ) + ABS( H( K, K ) ) + IF( TST.EQ.ZERO ) THEN + IF( K-2.GE.ILO ) + $ TST = TST + ABS( H( K-1, K-2 ) ) + IF( K+1.LE.IHI ) + $ TST = TST + ABS( H( K+1, K ) ) + END IF +* ==== The following is a conservative small subdiagonal +* . deflation criterion due to Ahues & Tisseur (LAWN 122, +* . 1997). It has better mathematical foundation and +* . improves accuracy in some cases. ==== + IF( ABS( H( K, K-1 ) ).LE.ULP*TST ) THEN + AB = MAX( ABS( H( K, K-1 ) ), ABS( H( K-1, K ) ) ) + BA = MIN( ABS( H( K, K-1 ) ), ABS( H( K-1, K ) ) ) + AA = MAX( ABS( H( K, K ) ), + $ ABS( H( K-1, K-1 )-H( K, K ) ) ) + BB = MIN( ABS( H( K, K ) ), + $ ABS( H( K-1, K-1 )-H( K, K ) ) ) + S = AA + AB + IF( BA*( AB / S ).LE.MAX( SMLNUM, + $ ULP*( BB*( AA / S ) ) ) )GO TO 40 + END IF + 30 CONTINUE + 40 CONTINUE + L = K + IF( L.GT.ILO ) THEN +* +* H(L,L-1) is negligible +* + H( L, L-1 ) = ZERO + END IF +* +* Exit from loop if a submatrix of order 1 or 2 has split off. +* + IF( L.GE.I-1 ) + $ GO TO 150 +* +* Now the active submatrix is in rows and columns L to I. If +* eigenvalues only are being computed, only the active submatrix +* need be transformed. +* + IF( .NOT.WANTT ) THEN + I1 = L + I2 = I + END IF +* + IF( ITS.EQ.10 ) THEN +* +* Exceptional shift. +* + S = ABS( H( L+1, L ) ) + ABS( H( L+2, L+1 ) ) + H11 = DAT1*S + H( L, L ) + H12 = DAT2*S + H21 = S + H22 = H11 + ELSE IF( ITS.EQ.20 ) THEN +* +* Exceptional shift. +* + S = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) + H11 = DAT1*S + H( I, I ) + H12 = DAT2*S + H21 = S + H22 = H11 + ELSE +* +* Prepare to use Francis' double shift +* (i.e. 2nd degree generalized Rayleigh quotient) +* + H11 = H( I-1, I-1 ) + H21 = H( I, I-1 ) + H12 = H( I-1, I ) + H22 = H( I, I ) + END IF + S = ABS( H11 ) + ABS( H12 ) + ABS( H21 ) + ABS( H22 ) + IF( S.EQ.ZERO ) THEN + RT1R = ZERO + RT1I = ZERO + RT2R = ZERO + RT2I = ZERO + ELSE + H11 = H11 / S + H21 = H21 / S + H12 = H12 / S + H22 = H22 / S + TR = ( H11+H22 ) / TWO + DET = ( H11-TR )*( H22-TR ) - H12*H21 + RTDISC = SQRT( ABS( DET ) ) + IF( DET.GE.ZERO ) THEN +* +* ==== complex conjugate shifts ==== +* + RT1R = TR*S + RT2R = RT1R + RT1I = RTDISC*S + RT2I = -RT1I + ELSE +* +* ==== real shifts (use only one of them) ==== +* + RT1R = TR + RTDISC + RT2R = TR - RTDISC + IF( ABS( RT1R-H22 ).LE.ABS( RT2R-H22 ) ) THEN + RT1R = RT1R*S + RT2R = RT1R + ELSE + RT2R = RT2R*S + RT1R = RT2R + END IF + RT1I = ZERO + RT2I = ZERO + END IF + END IF +* +* Look for two consecutive small subdiagonal elements. +* + DO 50 M = I - 2, L, -1 +* Determine the effect of starting the double-shift QR +* iteration at row M, and see if this would make H(M,M-1) +* negligible. (The following uses scaling to avoid +* overflows and most underflows.) +* + H21S = H( M+1, M ) + S = ABS( H( M, M )-RT2R ) + ABS( RT2I ) + ABS( H21S ) + H21S = H( M+1, M ) / S + V( 1 ) = H21S*H( M, M+1 ) + ( H( M, M )-RT1R )* + $ ( ( H( M, M )-RT2R ) / S ) - RT1I*( RT2I / S ) + V( 2 ) = H21S*( H( M, M )+H( M+1, M+1 )-RT1R-RT2R ) + V( 3 ) = H21S*H( M+2, M+1 ) + S = ABS( V( 1 ) ) + ABS( V( 2 ) ) + ABS( V( 3 ) ) + V( 1 ) = V( 1 ) / S + V( 2 ) = V( 2 ) / S + V( 3 ) = V( 3 ) / S + IF( M.EQ.L ) + $ GO TO 60 + IF( ABS( H( M, M-1 ) )*( ABS( V( 2 ) )+ABS( V( 3 ) ) ).LE. + $ ULP*ABS( V( 1 ) )*( ABS( H( M-1, M-1 ) )+ABS( H( M, + $ M ) )+ABS( H( M+1, M+1 ) ) ) )GO TO 60 + 50 CONTINUE + 60 CONTINUE +* +* Double-shift QR step +* + DO 130 K = M, I - 1 +* +* The first iteration of this loop determines a reflection G +* from the vector V and applies it from left and right to H, +* thus creating a nonzero bulge below the subdiagonal. +* +* Each subsequent iteration determines a reflection G to +* restore the Hessenberg form in the (K-1)th column, and thus +* chases the bulge one step toward the bottom of the active +* submatrix. NR is the order of G. +* + NR = MIN( 3, I-K+1 ) + IF( K.GT.M ) + $ CALL DCOPY( NR, H( K, K-1 ), 1, V, 1 ) + CALL DLARFG( NR, V( 1 ), V( 2 ), 1, T1 ) + IF( K.GT.M ) THEN + H( K, K-1 ) = V( 1 ) + H( K+1, K-1 ) = ZERO + IF( K.LT.I-1 ) + $ H( K+2, K-1 ) = ZERO + ELSE IF( M.GT.L ) THEN +* ==== Use the following instead of +* . H( K, K-1 ) = -H( K, K-1 ) to +* . avoid a bug when v(2) and v(3) +* . underflow. ==== + H( K, K-1 ) = H( K, K-1 )*( ONE-T1 ) + END IF + V2 = V( 2 ) + T2 = T1*V2 + IF( NR.EQ.3 ) THEN + V3 = V( 3 ) + T3 = T1*V3 +* +* Apply G from the left to transform the rows of the matrix +* in columns K to I2. +* + DO 70 J = K, I2 + SUM = H( K, J ) + V2*H( K+1, J ) + V3*H( K+2, J ) + H( K, J ) = H( K, J ) - SUM*T1 + H( K+1, J ) = H( K+1, J ) - SUM*T2 + H( K+2, J ) = H( K+2, J ) - SUM*T3 + 70 CONTINUE +* +* Apply G from the right to transform the columns of the +* matrix in rows I1 to min(K+3,I). +* + DO 80 J = I1, MIN( K+3, I ) + SUM = H( J, K ) + V2*H( J, K+1 ) + V3*H( J, K+2 ) + H( J, K ) = H( J, K ) - SUM*T1 + H( J, K+1 ) = H( J, K+1 ) - SUM*T2 + H( J, K+2 ) = H( J, K+2 ) - SUM*T3 + 80 CONTINUE +* + IF( WANTZ ) THEN +* +* Accumulate transformations in the matrix Z +* + DO 90 J = ILOZ, IHIZ + SUM = Z( J, K ) + V2*Z( J, K+1 ) + V3*Z( J, K+2 ) + Z( J, K ) = Z( J, K ) - SUM*T1 + Z( J, K+1 ) = Z( J, K+1 ) - SUM*T2 + Z( J, K+2 ) = Z( J, K+2 ) - SUM*T3 + 90 CONTINUE + END IF + ELSE IF( NR.EQ.2 ) THEN +* +* Apply G from the left to transform the rows of the matrix +* in columns K to I2. +* + DO 100 J = K, I2 + SUM = H( K, J ) + V2*H( K+1, J ) + H( K, J ) = H( K, J ) - SUM*T1 + H( K+1, J ) = H( K+1, J ) - SUM*T2 + 100 CONTINUE +* +* Apply G from the right to transform the columns of the +* matrix in rows I1 to min(K+3,I). +* + DO 110 J = I1, I + SUM = H( J, K ) + V2*H( J, K+1 ) + H( J, K ) = H( J, K ) - SUM*T1 + H( J, K+1 ) = H( J, K+1 ) - SUM*T2 + 110 CONTINUE +* + IF( WANTZ ) THEN +* +* Accumulate transformations in the matrix Z +* + DO 120 J = ILOZ, IHIZ + SUM = Z( J, K ) + V2*Z( J, K+1 ) + Z( J, K ) = Z( J, K ) - SUM*T1 + Z( J, K+1 ) = Z( J, K+1 ) - SUM*T2 + 120 CONTINUE + END IF + END IF + 130 CONTINUE +* + 140 CONTINUE +* +* Failure to converge in remaining number of iterations +* + INFO = I + RETURN +* + 150 CONTINUE +* + IF( L.EQ.I ) THEN +* +* H(I,I-1) is negligible: one eigenvalue has converged. +* + WR( I ) = H( I, I ) + WI( I ) = ZERO + ELSE IF( L.EQ.I-1 ) THEN +* +* H(I-1,I-2) is negligible: a pair of eigenvalues have converged. +* +* Transform the 2-by-2 submatrix to standard Schur form, +* and compute and store the eigenvalues. +* + CALL DLANV2( H( I-1, I-1 ), H( I-1, I ), H( I, I-1 ), + $ H( I, I ), WR( I-1 ), WI( I-1 ), WR( I ), WI( I ), + $ CS, SN ) +* + IF( WANTT ) THEN +* +* Apply the transformation to the rest of H. +* + IF( I2.GT.I ) + $ CALL DROT( I2-I, H( I-1, I+1 ), LDH, H( I, I+1 ), LDH, + $ CS, SN ) + CALL DROT( I-I1-1, H( I1, I-1 ), 1, H( I1, I ), 1, CS, SN ) + END IF + IF( WANTZ ) THEN +* +* Apply the transformation to Z. +* + CALL DROT( NZ, Z( ILOZ, I-1 ), 1, Z( ILOZ, I ), 1, CS, SN ) + END IF + END IF +* +* return to start of the main loop with new value of I. +* + I = L - 1 + GO TO 20 +* + 160 CONTINUE + RETURN +* +* End of DLAHQR +* + END +*> \brief \b DLAHR2 reduces the specified number of first columns of a general rectangular matrix A so that elements below the specified subdiagonal are zero, and returns auxiliary matrices which are needed to apply the transformation to the unreduced part of A. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAHR2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) +* +* .. Scalar Arguments .. +* INTEGER K, LDA, LDT, LDY, N, NB +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), T( LDT, NB ), TAU( NB ), +* $ Y( LDY, NB ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAHR2 reduces the first NB columns of A real general n-BY-(n-k+1) +*> matrix A so that elements below the k-th subdiagonal are zero. The +*> reduction is performed by an orthogonal similarity transformation +*> Q**T * A * Q. The routine returns the matrices V and T which determine +*> Q as a block reflector I - V*T*V**T, and also the matrix Y = A * V * T. +*> +*> This is an auxiliary routine called by DGEHRD. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix A. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The offset for the reduction. Elements below the k-th +*> subdiagonal in the first NB columns are reduced to zero. +*> K < N. +*> \endverbatim +*> +*> \param[in] NB +*> \verbatim +*> NB is INTEGER +*> The number of columns to be reduced. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N-K+1) +*> On entry, the n-by-(n-k+1) general matrix A. +*> On exit, the elements on and above the k-th subdiagonal in +*> the first NB columns are overwritten with the corresponding +*> elements of the reduced matrix; the elements below the k-th +*> subdiagonal, with the array TAU, represent the matrix Q as a +*> product of elementary reflectors. The other columns of A are +*> unchanged. See Further Details. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (NB) +*> The scalar factors of the elementary reflectors. See Further +*> Details. +*> \endverbatim +*> +*> \param[out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,NB) +*> The upper triangular matrix T. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= NB. +*> \endverbatim +*> +*> \param[out] Y +*> \verbatim +*> Y is DOUBLE PRECISION array, dimension (LDY,NB) +*> The n-by-nb matrix Y. +*> \endverbatim +*> +*> \param[in] LDY +*> \verbatim +*> LDY is INTEGER +*> The leading dimension of the array Y. LDY >= N. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The matrix Q is represented as a product of nb elementary reflectors +*> +*> Q = H(1) H(2) . . . H(nb). +*> +*> Each H(i) has the form +*> +*> H(i) = I - tau * v * v**T +*> +*> where tau is a real scalar, and v is a real vector with +*> v(1:i+k-1) = 0, v(i+k) = 1; v(i+k+1:n) is stored on exit in +*> A(i+k+1:n,i), and tau in TAU(i). +*> +*> The elements of the vectors v together form the (n-k+1)-by-nb matrix +*> V which is needed, with T and Y, to apply the transformation to the +*> unreduced part of the matrix, using an update of the form: +*> A := (I - V*T*V**T) * (A - Y*V**T). +*> +*> The contents of A on exit are illustrated by the following example +*> with n = 7, k = 3 and nb = 2: +*> +*> ( a a a a a ) +*> ( a a a a a ) +*> ( a a a a a ) +*> ( h h a a a ) +*> ( v1 h a a a ) +*> ( v1 v2 a a a ) +*> ( v1 v2 a a a ) +*> +*> where a denotes an element of the original matrix A, h denotes a +*> modified element of the upper Hessenberg matrix H, and vi denotes an +*> element of the vector defining H(i). +*> +*> This subroutine is a slight modification of LAPACK-3.0's DLAHRD +*> incorporating improvements proposed by Quintana-Orti and Van de +*> Gejin. Note that the entries of A(1:K,2:NB) differ from those +*> returned by the original LAPACK-3.0's DLAHRD routine. (This +*> subroutine is not backward compatible with LAPACK-3.0's DLAHRD.) +*> \endverbatim +* +*> \par References: +* ================ +*> +*> Gregorio Quintana-Orti and Robert van de Geijn, "Improving the +*> performance of reduction to Hessenberg form," ACM Transactions on +*> Mathematical Software, 32(2):180-194, June 2006. +*> +* ===================================================================== + SUBROUTINE DLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER K, LDA, LDT, LDY, N, NB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), T( LDT, NB ), TAU( NB ), + $ Y( LDY, NB ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, + $ ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION EI +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DCOPY, DGEMM, DGEMV, DLACPY, + $ DLARFG, DSCAL, DTRMM, DTRMV +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* + DO 10 I = 1, NB + IF( I.GT.1 ) THEN +* +* Update A(K+1:N,I) +* +* Update I-th column of A - Y * V**T +* + CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, Y(K+1,1), LDY, + $ A( K+I-1, 1 ), LDA, ONE, A( K+1, I ), 1 ) +* +* Apply I - V * T**T * V**T to this column (call it b) from the +* left, using the last column of T as workspace +* +* Let V = ( V1 ) and b = ( b1 ) (first I-1 rows) +* ( V2 ) ( b2 ) +* +* where V1 is unit lower triangular +* +* w := V1**T * b1 +* + CALL DCOPY( I-1, A( K+1, I ), 1, T( 1, NB ), 1 ) + CALL DTRMV( 'Lower', 'Transpose', 'UNIT', + $ I-1, A( K+1, 1 ), + $ LDA, T( 1, NB ), 1 ) +* +* w := w + V2**T * b2 +* + CALL DGEMV( 'Transpose', N-K-I+1, I-1, + $ ONE, A( K+I, 1 ), + $ LDA, A( K+I, I ), 1, ONE, T( 1, NB ), 1 ) +* +* w := T**T * w +* + CALL DTRMV( 'Upper', 'Transpose', 'NON-UNIT', + $ I-1, T, LDT, + $ T( 1, NB ), 1 ) +* +* b2 := b2 - V2*w +* + CALL DGEMV( 'NO TRANSPOSE', N-K-I+1, I-1, -ONE, + $ A( K+I, 1 ), + $ LDA, T( 1, NB ), 1, ONE, A( K+I, I ), 1 ) +* +* b1 := b1 - V1*w +* + CALL DTRMV( 'Lower', 'NO TRANSPOSE', + $ 'UNIT', I-1, + $ A( K+1, 1 ), LDA, T( 1, NB ), 1 ) + CALL DAXPY( I-1, -ONE, T( 1, NB ), 1, A( K+1, I ), 1 ) +* + A( K+I-1, I-1 ) = EI + END IF +* +* Generate the elementary reflector H(I) to annihilate +* A(K+I+1:N,I) +* + CALL DLARFG( N-K-I+1, A( K+I, I ), A( MIN( K+I+1, N ), I ), 1, + $ TAU( I ) ) + EI = A( K+I, I ) + A( K+I, I ) = ONE +* +* Compute Y(K+1:N,I) +* + CALL DGEMV( 'NO TRANSPOSE', N-K, N-K-I+1, + $ ONE, A( K+1, I+1 ), + $ LDA, A( K+I, I ), 1, ZERO, Y( K+1, I ), 1 ) + CALL DGEMV( 'Transpose', N-K-I+1, I-1, + $ ONE, A( K+I, 1 ), LDA, + $ A( K+I, I ), 1, ZERO, T( 1, I ), 1 ) + CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, + $ Y( K+1, 1 ), LDY, + $ T( 1, I ), 1, ONE, Y( K+1, I ), 1 ) + CALL DSCAL( N-K, TAU( I ), Y( K+1, I ), 1 ) +* +* Compute T(1:I,I) +* + CALL DSCAL( I-1, -TAU( I ), T( 1, I ), 1 ) + CALL DTRMV( 'Upper', 'No Transpose', 'NON-UNIT', + $ I-1, T, LDT, + $ T( 1, I ), 1 ) + T( I, I ) = TAU( I ) +* + 10 CONTINUE + A( K+NB, NB ) = EI +* +* Compute Y(1:K,1:NB) +* + CALL DLACPY( 'ALL', K, NB, A( 1, 2 ), LDA, Y, LDY ) + CALL DTRMM( 'RIGHT', 'Lower', 'NO TRANSPOSE', + $ 'UNIT', K, NB, + $ ONE, A( K+1, 1 ), LDA, Y, LDY ) + IF( N.GT.K+NB ) + $ CALL DGEMM( 'NO TRANSPOSE', 'NO TRANSPOSE', K, + $ NB, N-K-NB, ONE, + $ A( 1, 2+NB ), LDA, A( K+1+NB, 1 ), LDA, ONE, Y, + $ LDY ) + CALL DTRMM( 'RIGHT', 'Upper', 'NO TRANSPOSE', + $ 'NON-UNIT', K, NB, + $ ONE, T, LDT, Y, LDY ) +* + RETURN +* +* End of DLAHR2 +* + END +*> \brief \b DLAISNAN tests input for NaN by comparing two arguments for inequality. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAISNAN + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION DIN1, DIN2 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This routine is not for general use. It exists solely to avoid +*> over-optimization in DISNAN. +*> +*> DLAISNAN checks for NaNs by comparing its two arguments for +*> inequality. NaN is the only floating-point value where NaN != NaN +*> returns .TRUE. To check for NaNs, pass the same variable as both +*> arguments. +*> +*> A compiler must assume that the two arguments are +*> not the same variable, and the test will not be optimized away. +*> Interprocedural or whole-program optimization may delete this +*> test. The ISNAN functions will be replaced by the correct +*> Fortran 03 intrinsic once the intrinsic is widely available. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIN1 +*> \verbatim +*> DIN1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] DIN2 +*> \verbatim +*> DIN2 is DOUBLE PRECISION +*> Two numbers to compare for inequality. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN1, DIN2 +* .. +* +* ===================================================================== +* +* .. Executable Statements .. + DLAISNAN = (DIN1.NE.DIN2) + RETURN + END +*> \brief \b DLALN2 solves a 1-by-1 or 2-by-2 linear system of equations of the specified form. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLALN2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLALN2( LTRANS, NA, NW, SMIN, CA, A, LDA, D1, D2, B, +* LDB, WR, WI, X, LDX, SCALE, XNORM, INFO ) +* +* .. Scalar Arguments .. +* LOGICAL LTRANS +* INTEGER INFO, LDA, LDB, LDX, NA, NW +* DOUBLE PRECISION CA, D1, D2, SCALE, SMIN, WI, WR, XNORM +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ), X( LDX, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLALN2 solves a system of the form (ca A - w D ) X = s B +*> or (ca A**T - w D) X = s B with possible scaling ("s") and +*> perturbation of A. (A**T means A-transpose.) +*> +*> A is an NA x NA real matrix, ca is a real scalar, D is an NA x NA +*> real diagonal matrix, w is a real or complex value, and X and B are +*> NA x 1 matrices -- real if w is real, complex if w is complex. NA +*> may be 1 or 2. +*> +*> If w is complex, X and B are represented as NA x 2 matrices, +*> the first column of each being the real part and the second +*> being the imaginary part. +*> +*> "s" is a scaling factor (.LE. 1), computed by DLALN2, which is +*> so chosen that X can be computed without overflow. X is further +*> scaled if necessary to assure that norm(ca A - w D)*norm(X) is less +*> than overflow. +*> +*> If both singular values of (ca A - w D) are less than SMIN, +*> SMIN*identity will be used instead of (ca A - w D). If only one +*> singular value is less than SMIN, one element of (ca A - w D) will be +*> perturbed enough to make the smallest singular value roughly SMIN. +*> If both singular values are at least SMIN, (ca A - w D) will not be +*> perturbed. In any case, the perturbation will be at most some small +*> multiple of max( SMIN, ulp*norm(ca A - w D) ). The singular values +*> are computed by infinity-norm approximations, and thus will only be +*> correct to a factor of 2 or so. +*> +*> Note: all input quantities are assumed to be smaller than overflow +*> by a reasonable factor. (See BIGNUM.) +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] LTRANS +*> \verbatim +*> LTRANS is LOGICAL +*> =.TRUE.: A-transpose will be used. +*> =.FALSE.: A will be used (not transposed.) +*> \endverbatim +*> +*> \param[in] NA +*> \verbatim +*> NA is INTEGER +*> The size of the matrix A. It may (only) be 1 or 2. +*> \endverbatim +*> +*> \param[in] NW +*> \verbatim +*> NW is INTEGER +*> 1 if "w" is real, 2 if "w" is complex. It may only be 1 +*> or 2. +*> \endverbatim +*> +*> \param[in] SMIN +*> \verbatim +*> SMIN is DOUBLE PRECISION +*> The desired lower bound on the singular values of A. This +*> should be a safe distance away from underflow or overflow, +*> say, between (underflow/machine precision) and (machine +*> precision * overflow ). (See BIGNUM and ULP.) +*> \endverbatim +*> +*> \param[in] CA +*> \verbatim +*> CA is DOUBLE PRECISION +*> The coefficient c, which A is multiplied by. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,NA) +*> The NA x NA matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A. It must be at least NA. +*> \endverbatim +*> +*> \param[in] D1 +*> \verbatim +*> D1 is DOUBLE PRECISION +*> The 1,1 element in the diagonal matrix D. +*> \endverbatim +*> +*> \param[in] D2 +*> \verbatim +*> D2 is DOUBLE PRECISION +*> The 2,2 element in the diagonal matrix D. Not used if NW=1. +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,NW) +*> The NA x NW matrix B (right-hand side). If NW=2 ("w" is +*> complex), column 1 contains the real part of B and column 2 +*> contains the imaginary part. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of B. It must be at least NA. +*> \endverbatim +*> +*> \param[in] WR +*> \verbatim +*> WR is DOUBLE PRECISION +*> The real part of the scalar "w". +*> \endverbatim +*> +*> \param[in] WI +*> \verbatim +*> WI is DOUBLE PRECISION +*> The imaginary part of the scalar "w". Not used if NW=1. +*> \endverbatim +*> +*> \param[out] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension (LDX,NW) +*> The NA x NW matrix X (unknowns), as computed by DLALN2. +*> If NW=2 ("w" is complex), on exit, column 1 will contain +*> the real part of X and column 2 will contain the imaginary +*> part. +*> \endverbatim +*> +*> \param[in] LDX +*> \verbatim +*> LDX is INTEGER +*> The leading dimension of X. It must be at least NA. +*> \endverbatim +*> +*> \param[out] SCALE +*> \verbatim +*> SCALE is DOUBLE PRECISION +*> The scale factor that B must be multiplied by to insure +*> that overflow does not occur when computing X. Thus, +*> (ca A - w D) X will be SCALE*B, not B (ignoring +*> perturbations of A.) It will be at most 1. +*> \endverbatim +*> +*> \param[out] XNORM +*> \verbatim +*> XNORM is DOUBLE PRECISION +*> The infinity-norm of X, when X is regarded as an NA x NW +*> real matrix. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> An error flag. It will be set to zero if no error occurs, +*> a negative number if an argument is in error, or a positive +*> number if ca A - w D had to be perturbed. +*> The possible values are: +*> = 0: No error occurred, and (ca A - w D) did not have to be +*> perturbed. +*> = 1: (ca A - w D) had to be perturbed to make its smallest +*> (or only) singular value greater than SMIN. +*> NOTE: In the interests of speed, this routine does not +*> check the inputs for errors. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLALN2( LTRANS, NA, NW, SMIN, CA, A, LDA, D1, D2, B, + $ LDB, WR, WI, X, LDX, SCALE, XNORM, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + LOGICAL LTRANS + INTEGER INFO, LDA, LDB, LDX, NA, NW + DOUBLE PRECISION CA, D1, D2, SCALE, SMIN, WI, WR, XNORM +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), B( LDB, * ), X( LDX, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) +* .. +* .. Local Scalars .. + INTEGER ICMAX, J + DOUBLE PRECISION BBND, BI1, BI2, BIGNUM, BNORM, BR1, BR2, CI21, + $ CI22, CMAX, CNORM, CR21, CR22, CSI, CSR, LI21, + $ LR21, SMINI, SMLNUM, TEMP, U22ABS, UI11, UI11R, + $ UI12, UI12S, UI22, UR11, UR11R, UR12, UR12S, + $ UR22, XI1, XI2, XR1, XR2 +* .. +* .. Local Arrays .. + LOGICAL RSWAP( 4 ), ZSWAP( 4 ) + INTEGER IPIVOT( 4, 4 ) + DOUBLE PRECISION CI( 2, 2 ), CIV( 4 ), CR( 2, 2 ), CRV( 4 ) +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DLADIV +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. +* .. Equivalences .. + EQUIVALENCE ( CI( 1, 1 ), CIV( 1 ) ), + $ ( CR( 1, 1 ), CRV( 1 ) ) +* .. +* .. Data statements .. + DATA ZSWAP / .FALSE., .FALSE., .TRUE., .TRUE. / + DATA RSWAP / .FALSE., .TRUE., .FALSE., .TRUE. / + DATA IPIVOT / 1, 2, 3, 4, 2, 1, 4, 3, 3, 4, 1, 2, 4, + $ 3, 2, 1 / +* .. +* .. Executable Statements .. +* +* Compute BIGNUM +* + SMLNUM = TWO*DLAMCH( 'Safe minimum' ) + BIGNUM = ONE / SMLNUM + SMINI = MAX( SMIN, SMLNUM ) +* +* Don't check for input errors +* + INFO = 0 +* +* Standard Initializations +* + SCALE = ONE +* + IF( NA.EQ.1 ) THEN +* +* 1 x 1 (i.e., scalar) system C X = B +* + IF( NW.EQ.1 ) THEN +* +* Real 1x1 system. +* +* C = ca A - w D +* + CSR = CA*A( 1, 1 ) - WR*D1 + CNORM = ABS( CSR ) +* +* If | C | < SMINI, use C = SMINI +* + IF( CNORM.LT.SMINI ) THEN + CSR = SMINI + CNORM = SMINI + INFO = 1 + END IF +* +* Check scaling for X = B / C +* + BNORM = ABS( B( 1, 1 ) ) + IF( CNORM.LT.ONE .AND. BNORM.GT.ONE ) THEN + IF( BNORM.GT.BIGNUM*CNORM ) + $ SCALE = ONE / BNORM + END IF +* +* Compute X +* + X( 1, 1 ) = ( B( 1, 1 )*SCALE ) / CSR + XNORM = ABS( X( 1, 1 ) ) + ELSE +* +* Complex 1x1 system (w is complex) +* +* C = ca A - w D +* + CSR = CA*A( 1, 1 ) - WR*D1 + CSI = -WI*D1 + CNORM = ABS( CSR ) + ABS( CSI ) +* +* If | C | < SMINI, use C = SMINI +* + IF( CNORM.LT.SMINI ) THEN + CSR = SMINI + CSI = ZERO + CNORM = SMINI + INFO = 1 + END IF +* +* Check scaling for X = B / C +* + BNORM = ABS( B( 1, 1 ) ) + ABS( B( 1, 2 ) ) + IF( CNORM.LT.ONE .AND. BNORM.GT.ONE ) THEN + IF( BNORM.GT.BIGNUM*CNORM ) + $ SCALE = ONE / BNORM + END IF +* +* Compute X +* + CALL DLADIV( SCALE*B( 1, 1 ), SCALE*B( 1, 2 ), CSR, CSI, + $ X( 1, 1 ), X( 1, 2 ) ) + XNORM = ABS( X( 1, 1 ) ) + ABS( X( 1, 2 ) ) + END IF +* + ELSE +* +* 2x2 System +* +* Compute the real part of C = ca A - w D (or ca A**T - w D ) +* + CR( 1, 1 ) = CA*A( 1, 1 ) - WR*D1 + CR( 2, 2 ) = CA*A( 2, 2 ) - WR*D2 + IF( LTRANS ) THEN + CR( 1, 2 ) = CA*A( 2, 1 ) + CR( 2, 1 ) = CA*A( 1, 2 ) + ELSE + CR( 2, 1 ) = CA*A( 2, 1 ) + CR( 1, 2 ) = CA*A( 1, 2 ) + END IF +* + IF( NW.EQ.1 ) THEN +* +* Real 2x2 system (w is real) +* +* Find the largest element in C +* + CMAX = ZERO + ICMAX = 0 +* + DO 10 J = 1, 4 + IF( ABS( CRV( J ) ).GT.CMAX ) THEN + CMAX = ABS( CRV( J ) ) + ICMAX = J + END IF + 10 CONTINUE +* +* If norm(C) < SMINI, use SMINI*identity. +* + IF( CMAX.LT.SMINI ) THEN + BNORM = MAX( ABS( B( 1, 1 ) ), ABS( B( 2, 1 ) ) ) + IF( SMINI.LT.ONE .AND. BNORM.GT.ONE ) THEN + IF( BNORM.GT.BIGNUM*SMINI ) + $ SCALE = ONE / BNORM + END IF + TEMP = SCALE / SMINI + X( 1, 1 ) = TEMP*B( 1, 1 ) + X( 2, 1 ) = TEMP*B( 2, 1 ) + XNORM = TEMP*BNORM + INFO = 1 + RETURN + END IF +* +* Gaussian elimination with complete pivoting. +* + UR11 = CRV( ICMAX ) + CR21 = CRV( IPIVOT( 2, ICMAX ) ) + UR12 = CRV( IPIVOT( 3, ICMAX ) ) + CR22 = CRV( IPIVOT( 4, ICMAX ) ) + UR11R = ONE / UR11 + LR21 = UR11R*CR21 + UR22 = CR22 - UR12*LR21 +* +* If smaller pivot < SMINI, use SMINI +* + IF( ABS( UR22 ).LT.SMINI ) THEN + UR22 = SMINI + INFO = 1 + END IF + IF( RSWAP( ICMAX ) ) THEN + BR1 = B( 2, 1 ) + BR2 = B( 1, 1 ) + ELSE + BR1 = B( 1, 1 ) + BR2 = B( 2, 1 ) + END IF + BR2 = BR2 - LR21*BR1 + BBND = MAX( ABS( BR1*( UR22*UR11R ) ), ABS( BR2 ) ) + IF( BBND.GT.ONE .AND. ABS( UR22 ).LT.ONE ) THEN + IF( BBND.GE.BIGNUM*ABS( UR22 ) ) + $ SCALE = ONE / BBND + END IF +* + XR2 = ( BR2*SCALE ) / UR22 + XR1 = ( SCALE*BR1 )*UR11R - XR2*( UR11R*UR12 ) + IF( ZSWAP( ICMAX ) ) THEN + X( 1, 1 ) = XR2 + X( 2, 1 ) = XR1 + ELSE + X( 1, 1 ) = XR1 + X( 2, 1 ) = XR2 + END IF + XNORM = MAX( ABS( XR1 ), ABS( XR2 ) ) +* +* Further scaling if norm(A) norm(X) > overflow +* + IF( XNORM.GT.ONE .AND. CMAX.GT.ONE ) THEN + IF( XNORM.GT.BIGNUM / CMAX ) THEN + TEMP = CMAX / BIGNUM + X( 1, 1 ) = TEMP*X( 1, 1 ) + X( 2, 1 ) = TEMP*X( 2, 1 ) + XNORM = TEMP*XNORM + SCALE = TEMP*SCALE + END IF + END IF + ELSE +* +* Complex 2x2 system (w is complex) +* +* Find the largest element in C +* + CI( 1, 1 ) = -WI*D1 + CI( 2, 1 ) = ZERO + CI( 1, 2 ) = ZERO + CI( 2, 2 ) = -WI*D2 + CMAX = ZERO + ICMAX = 0 +* + DO 20 J = 1, 4 + IF( ABS( CRV( J ) )+ABS( CIV( J ) ).GT.CMAX ) THEN + CMAX = ABS( CRV( J ) ) + ABS( CIV( J ) ) + ICMAX = J + END IF + 20 CONTINUE +* +* If norm(C) < SMINI, use SMINI*identity. +* + IF( CMAX.LT.SMINI ) THEN + BNORM = MAX( ABS( B( 1, 1 ) )+ABS( B( 1, 2 ) ), + $ ABS( B( 2, 1 ) )+ABS( B( 2, 2 ) ) ) + IF( SMINI.LT.ONE .AND. BNORM.GT.ONE ) THEN + IF( BNORM.GT.BIGNUM*SMINI ) + $ SCALE = ONE / BNORM + END IF + TEMP = SCALE / SMINI + X( 1, 1 ) = TEMP*B( 1, 1 ) + X( 2, 1 ) = TEMP*B( 2, 1 ) + X( 1, 2 ) = TEMP*B( 1, 2 ) + X( 2, 2 ) = TEMP*B( 2, 2 ) + XNORM = TEMP*BNORM + INFO = 1 + RETURN + END IF +* +* Gaussian elimination with complete pivoting. +* + UR11 = CRV( ICMAX ) + UI11 = CIV( ICMAX ) + CR21 = CRV( IPIVOT( 2, ICMAX ) ) + CI21 = CIV( IPIVOT( 2, ICMAX ) ) + UR12 = CRV( IPIVOT( 3, ICMAX ) ) + UI12 = CIV( IPIVOT( 3, ICMAX ) ) + CR22 = CRV( IPIVOT( 4, ICMAX ) ) + CI22 = CIV( IPIVOT( 4, ICMAX ) ) + IF( ICMAX.EQ.1 .OR. ICMAX.EQ.4 ) THEN +* +* Code when off-diagonals of pivoted C are real +* + IF( ABS( UR11 ).GT.ABS( UI11 ) ) THEN + TEMP = UI11 / UR11 + UR11R = ONE / ( UR11*( ONE+TEMP**2 ) ) + UI11R = -TEMP*UR11R + ELSE + TEMP = UR11 / UI11 + UI11R = -ONE / ( UI11*( ONE+TEMP**2 ) ) + UR11R = -TEMP*UI11R + END IF + LR21 = CR21*UR11R + LI21 = CR21*UI11R + UR12S = UR12*UR11R + UI12S = UR12*UI11R + UR22 = CR22 - UR12*LR21 + UI22 = CI22 - UR12*LI21 + ELSE +* +* Code when diagonals of pivoted C are real +* + UR11R = ONE / UR11 + UI11R = ZERO + LR21 = CR21*UR11R + LI21 = CI21*UR11R + UR12S = UR12*UR11R + UI12S = UI12*UR11R + UR22 = CR22 - UR12*LR21 + UI12*LI21 + UI22 = -UR12*LI21 - UI12*LR21 + END IF + U22ABS = ABS( UR22 ) + ABS( UI22 ) +* +* If smaller pivot < SMINI, use SMINI +* + IF( U22ABS.LT.SMINI ) THEN + UR22 = SMINI + UI22 = ZERO + INFO = 1 + END IF + IF( RSWAP( ICMAX ) ) THEN + BR2 = B( 1, 1 ) + BR1 = B( 2, 1 ) + BI2 = B( 1, 2 ) + BI1 = B( 2, 2 ) + ELSE + BR1 = B( 1, 1 ) + BR2 = B( 2, 1 ) + BI1 = B( 1, 2 ) + BI2 = B( 2, 2 ) + END IF + BR2 = BR2 - LR21*BR1 + LI21*BI1 + BI2 = BI2 - LI21*BR1 - LR21*BI1 + BBND = MAX( ( ABS( BR1 )+ABS( BI1 ) )* + $ ( U22ABS*( ABS( UR11R )+ABS( UI11R ) ) ), + $ ABS( BR2 )+ABS( BI2 ) ) + IF( BBND.GT.ONE .AND. U22ABS.LT.ONE ) THEN + IF( BBND.GE.BIGNUM*U22ABS ) THEN + SCALE = ONE / BBND + BR1 = SCALE*BR1 + BI1 = SCALE*BI1 + BR2 = SCALE*BR2 + BI2 = SCALE*BI2 + END IF + END IF +* + CALL DLADIV( BR2, BI2, UR22, UI22, XR2, XI2 ) + XR1 = UR11R*BR1 - UI11R*BI1 - UR12S*XR2 + UI12S*XI2 + XI1 = UI11R*BR1 + UR11R*BI1 - UI12S*XR2 - UR12S*XI2 + IF( ZSWAP( ICMAX ) ) THEN + X( 1, 1 ) = XR2 + X( 2, 1 ) = XR1 + X( 1, 2 ) = XI2 + X( 2, 2 ) = XI1 + ELSE + X( 1, 1 ) = XR1 + X( 2, 1 ) = XR2 + X( 1, 2 ) = XI1 + X( 2, 2 ) = XI2 + END IF + XNORM = MAX( ABS( XR1 )+ABS( XI1 ), ABS( XR2 )+ABS( XI2 ) ) +* +* Further scaling if norm(A) norm(X) > overflow +* + IF( XNORM.GT.ONE .AND. CMAX.GT.ONE ) THEN + IF( XNORM.GT.BIGNUM / CMAX ) THEN + TEMP = CMAX / BIGNUM + X( 1, 1 ) = TEMP*X( 1, 1 ) + X( 2, 1 ) = TEMP*X( 2, 1 ) + X( 1, 2 ) = TEMP*X( 1, 2 ) + X( 2, 2 ) = TEMP*X( 2, 2 ) + XNORM = TEMP*XNORM + SCALE = TEMP*SCALE + END IF + END IF + END IF + END IF +* + RETURN +* +* End of DLALN2 +* + END +*> \brief \b DLAMCH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAMCH determines double precision machine parameters. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CMACH +*> \verbatim +*> Specifies the value to be returned by DLAMCH: +*> = 'E' or 'e', DLAMCH := eps +*> = 'S' or 's , DLAMCH := sfmin +*> = 'B' or 'b', DLAMCH := base +*> = 'P' or 'p', DLAMCH := eps*base +*> = 'N' or 'n', DLAMCH := t +*> = 'R' or 'r', DLAMCH := rnd +*> = 'M' or 'm', DLAMCH := emin +*> = 'U' or 'u', DLAMCH := rmin +*> = 'L' or 'l', DLAMCH := emax +*> = 'O' or 'o', DLAMCH := rmax +*> where +*> eps = relative machine precision +*> sfmin = safe minimum, such that 1/sfmin does not overflow +*> base = base of the machine +*> prec = eps*base +*> t = number of (base) digits in the mantissa +*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +*> emin = minimum exponent before (gradual) underflow +*> rmin = underflow threshold - base**(emin-1) +*> emax = largest exponent before overflow +*> rmax = overflow threshold - (base**emax)*(1-eps) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, + $ MINEXPONENT, RADIX, TINY +* .. +* .. Executable Statements .. +* +* +* Assume rounding, not chopping. Always. +* + RND = ONE +* + IF( ONE.EQ.RND ) THEN + EPS = EPSILON(ZERO) * 0.5 + ELSE + EPS = EPSILON(ZERO) + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + SFMIN = TINY(ZERO) + SMALL = ONE / HUGE(ZERO) + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = EPS * RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = DIGITS(ZERO) + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = MINEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = tiny(zero) + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = MAXEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = HUGE(ZERO) + ELSE + RMACH = ZERO + END IF +* + DLAMCH = RMACH + RETURN +* +* End of DLAMCH +* + END +************************************************************************ +*> \brief \b DLAMC3 +*> \details +*> \b Purpose: +*> \verbatim +*> DLAMC3 is intended to force A and B to be stored prior to doing +*> the addition of A and B , for use in situations where optimizers +*> might hold one of these in a register. +*> \endverbatim +*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. +*> \date November 2015 +*> \ingroup auxOTHERauxiliary +*> +*> \param[in] A +*> \verbatim +*> A is a DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is a DOUBLE PRECISION +*> The values A and B. +*> \endverbatim +*> + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ +*> \brief \b DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of a general rectangular matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLANGE + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK ) +* +* .. Scalar Arguments .. +* CHARACTER NORM +* INTEGER LDA, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLANGE returns the value of the one norm, or the Frobenius norm, or +*> the infinity norm, or the element of largest absolute value of a +*> real matrix A. +*> \endverbatim +*> +*> \return DLANGE +*> \verbatim +*> +*> DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm' +*> ( +*> ( norm1(A), NORM = '1', 'O' or 'o' +*> ( +*> ( normI(A), NORM = 'I' or 'i' +*> ( +*> ( normF(A), NORM = 'F', 'f', 'E' or 'e' +*> +*> where norm1 denotes the one norm of a matrix (maximum column sum), +*> normI denotes the infinity norm of a matrix (maximum row sum) and +*> normF denotes the Frobenius norm of a matrix (square root of sum of +*> squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] NORM +*> \verbatim +*> NORM is CHARACTER*1 +*> Specifies the value to be returned in DLANGE as described +*> above. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. When M = 0, +*> DLANGE is set to zero. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. When N = 0, +*> DLANGE is set to zero. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(M,1). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)), +*> where LWORK >= M when NORM = 'I'; otherwise, WORK is not +*> referenced. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleGEauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER NORM + INTEGER LDA, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J + DOUBLE PRECISION SCALE, SUM, VALUE, TEMP +* .. +* .. External Subroutines .. + EXTERNAL DLASSQ +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + EXTERNAL LSAME, DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MIN, SQRT +* .. +* .. Executable Statements .. +* + IF( MIN( M, N ).EQ.0 ) THEN + VALUE = ZERO + ELSE IF( LSAME( NORM, 'M' ) ) THEN +* +* Find max(abs(A(i,j))). +* + VALUE = ZERO + DO 20 J = 1, N + DO 10 I = 1, M + TEMP = ABS( A( I, J ) ) + IF( VALUE.LT.TEMP .OR. DISNAN( TEMP ) ) VALUE = TEMP + 10 CONTINUE + 20 CONTINUE + ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN +* +* Find norm1(A). +* + VALUE = ZERO + DO 40 J = 1, N + SUM = ZERO + DO 30 I = 1, M + SUM = SUM + ABS( A( I, J ) ) + 30 CONTINUE + IF( VALUE.LT.SUM .OR. DISNAN( SUM ) ) VALUE = SUM + 40 CONTINUE + ELSE IF( LSAME( NORM, 'I' ) ) THEN +* +* Find normI(A). +* + DO 50 I = 1, M + WORK( I ) = ZERO + 50 CONTINUE + DO 70 J = 1, N + DO 60 I = 1, M + WORK( I ) = WORK( I ) + ABS( A( I, J ) ) + 60 CONTINUE + 70 CONTINUE + VALUE = ZERO + DO 80 I = 1, M + TEMP = WORK( I ) + IF( VALUE.LT.TEMP .OR. DISNAN( TEMP ) ) VALUE = TEMP + 80 CONTINUE + ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN +* +* Find normF(A). +* + SCALE = ZERO + SUM = ONE + DO 90 J = 1, N + CALL DLASSQ( M, A( 1, J ), 1, SCALE, SUM ) + 90 CONTINUE + VALUE = SCALE*SQRT( SUM ) + END IF +* + DLANGE = VALUE + RETURN +* +* End of DLANGE +* + END +*> \brief \b DLANV2 computes the Schur factorization of a real 2-by-2 nonsymmetric matrix in standard form. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLANV2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLANV2( A, B, C, D, RT1R, RT1I, RT2R, RT2I, CS, SN ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION A, B, C, CS, D, RT1I, RT1R, RT2I, RT2R, SN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLANV2 computes the Schur factorization of a real 2-by-2 nonsymmetric +*> matrix in standard form: +*> +*> [ A B ] = [ CS -SN ] [ AA BB ] [ CS SN ] +*> [ C D ] [ SN CS ] [ CC DD ] [-SN CS ] +*> +*> where either +*> 1) CC = 0 so that AA and DD are real eigenvalues of the matrix, or +*> 2) AA = DD and BB*CC < 0, so that AA + or - sqrt(BB*CC) are complex +*> conjugate eigenvalues. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] B +*> \verbatim +*> B is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in,out] D +*> \verbatim +*> D is DOUBLE PRECISION +*> On entry, the elements of the input matrix. +*> On exit, they are overwritten by the elements of the +*> standardised Schur form. +*> \endverbatim +*> +*> \param[out] RT1R +*> \verbatim +*> RT1R is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] RT1I +*> \verbatim +*> RT1I is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] RT2R +*> \verbatim +*> RT2R is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] RT2I +*> \verbatim +*> RT2I is DOUBLE PRECISION +*> The real and imaginary parts of the eigenvalues. If the +*> eigenvalues are a complex conjugate pair, RT1I > 0. +*> \endverbatim +*> +*> \param[out] CS +*> \verbatim +*> CS is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[out] SN +*> \verbatim +*> SN is DOUBLE PRECISION +*> Parameters of the rotation matrix. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Modified by V. Sima, Research Institute for Informatics, Bucharest, +*> Romania, to reduce the risk of cancellation errors, +*> when computing real eigenvalues, and to ensure, if possible, that +*> abs(RT1R) >= abs(RT2R). +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLANV2( A, B, C, D, RT1R, RT1I, RT2R, RT2I, CS, SN ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, CS, D, RT1I, RT1R, RT2I, RT2R, SN +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, HALF, ONE + PARAMETER ( ZERO = 0.0D+0, HALF = 0.5D+0, ONE = 1.0D+0 ) + DOUBLE PRECISION MULTPL + PARAMETER ( MULTPL = 4.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, BCMAX, BCMIS, CC, CS1, DD, EPS, P, SAB, + $ SAC, SCALE, SIGMA, SN1, TAU, TEMP, Z +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLAPY2 + EXTERNAL DLAMCH, DLAPY2 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SIGN, SQRT +* .. +* .. Executable Statements .. +* + EPS = DLAMCH( 'P' ) + IF( C.EQ.ZERO ) THEN + CS = ONE + SN = ZERO + GO TO 10 +* + ELSE IF( B.EQ.ZERO ) THEN +* +* Swap rows and columns +* + CS = ZERO + SN = ONE + TEMP = D + D = A + A = TEMP + B = -C + C = ZERO + GO TO 10 + ELSE IF( ( A-D ).EQ.ZERO .AND. SIGN( ONE, B ).NE.SIGN( ONE, C ) ) + $ THEN + CS = ONE + SN = ZERO + GO TO 10 + ELSE +* + TEMP = A - D + P = HALF*TEMP + BCMAX = MAX( ABS( B ), ABS( C ) ) + BCMIS = MIN( ABS( B ), ABS( C ) )*SIGN( ONE, B )*SIGN( ONE, C ) + SCALE = MAX( ABS( P ), BCMAX ) + Z = ( P / SCALE )*P + ( BCMAX / SCALE )*BCMIS +* +* If Z is of the order of the machine accuracy, postpone the +* decision on the nature of eigenvalues +* + IF( Z.GE.MULTPL*EPS ) THEN +* +* Real eigenvalues. Compute A and D. +* + Z = P + SIGN( SQRT( SCALE )*SQRT( Z ), P ) + A = D + Z + D = D - ( BCMAX / Z )*BCMIS +* +* Compute B and the rotation matrix +* + TAU = DLAPY2( C, Z ) + CS = Z / TAU + SN = C / TAU + B = B - C + C = ZERO + ELSE +* +* Complex eigenvalues, or real (almost) equal eigenvalues. +* Make diagonal elements equal. +* + SIGMA = B + C + TAU = DLAPY2( SIGMA, TEMP ) + CS = SQRT( HALF*( ONE+ABS( SIGMA ) / TAU ) ) + SN = -( P / ( TAU*CS ) )*SIGN( ONE, SIGMA ) +* +* Compute [ AA BB ] = [ A B ] [ CS -SN ] +* [ CC DD ] [ C D ] [ SN CS ] +* + AA = A*CS + B*SN + BB = -A*SN + B*CS + CC = C*CS + D*SN + DD = -C*SN + D*CS +* +* Compute [ A B ] = [ CS SN ] [ AA BB ] +* [ C D ] [-SN CS ] [ CC DD ] +* + A = AA*CS + CC*SN + B = BB*CS + DD*SN + C = -AA*SN + CC*CS + D = -BB*SN + DD*CS +* + TEMP = HALF*( A+D ) + A = TEMP + D = TEMP +* + IF( C.NE.ZERO ) THEN + IF( B.NE.ZERO ) THEN + IF( SIGN( ONE, B ).EQ.SIGN( ONE, C ) ) THEN +* +* Real eigenvalues: reduce to upper triangular form +* + SAB = SQRT( ABS( B ) ) + SAC = SQRT( ABS( C ) ) + P = SIGN( SAB*SAC, C ) + TAU = ONE / SQRT( ABS( B+C ) ) + A = TEMP + P + D = TEMP - P + B = B - C + C = ZERO + CS1 = SAB*TAU + SN1 = SAC*TAU + TEMP = CS*CS1 - SN*SN1 + SN = CS*SN1 + SN*CS1 + CS = TEMP + END IF + ELSE + B = -C + C = ZERO + TEMP = CS + CS = -SN + SN = TEMP + END IF + END IF + END IF +* + END IF +* + 10 CONTINUE +* +* Store eigenvalues in (RT1R,RT1I) and (RT2R,RT2I). +* + RT1R = A + RT2R = D + IF( C.EQ.ZERO ) THEN + RT1I = ZERO + RT2I = ZERO + ELSE + RT1I = SQRT( ABS( B ) )*SQRT( ABS( C ) ) + RT2I = -RT1I + END IF + RETURN +* +* End of DLANV2 +* + END +*> \brief \b DLAPY2 returns sqrt(x2+y2). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAPY2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION X, Y +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary +*> overflow. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] Y +*> \verbatim +*> Y is DOUBLE PRECISION +*> X and Y specify the values x and y. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION W, XABS, YABS, Z +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + XABS = ABS( X ) + YABS = ABS( Y ) + W = MAX( XABS, YABS ) + Z = MIN( XABS, YABS ) + IF( Z.EQ.ZERO ) THEN + DLAPY2 = W + ELSE + DLAPY2 = W*SQRT( ONE+( Z / W )**2 ) + END IF + RETURN +* +* End of DLAPY2 +* + END +*> \brief \b DLAQR0 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR0 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, +* ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAQR0 computes the eigenvalues of a Hessenberg matrix H +*> and, optionally, the matrices T and Z from the Schur decomposition +*> H = Z T Z**T, where T is an upper quasi-triangular matrix (the +*> Schur form), and Z is the orthogonal matrix of Schur vectors. +*> +*> Optionally Z may be postmultiplied into an input orthogonal +*> matrix Q so that this routine can give the Schur factorization +*> of a matrix A which has been reduced to the Hessenberg form H +*> by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is LOGICAL +*> = .TRUE. : the full Schur form T is required; +*> = .FALSE.: only eigenvalues are required. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is LOGICAL +*> = .TRUE. : the matrix of Schur vectors Z is required; +*> = .FALSE.: Schur vectors are not required. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H. N .GE. 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper triangular in rows +*> and columns 1:ILO-1 and IHI+1:N and, if ILO.GT.1, +*> H(ILO,ILO-1) is zero. ILO and IHI are normally set by a +*> previous call to DGEBAL, and then passed to DGEHRD when the +*> matrix output by DGEBAL is reduced to Hessenberg form. +*> Otherwise, ILO and IHI should be set to 1 and N, +*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. +*> If N = 0, then ILO = 1 and IHI = 0. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On entry, the upper Hessenberg matrix H. +*> On exit, if INFO = 0 and WANTT is .TRUE., then H contains +*> the upper quasi-triangular matrix T from the Schur +*> decomposition (the Schur form); 2-by-2 diagonal blocks +*> (corresponding to complex conjugate pairs of eigenvalues) +*> are returned in standard form, with H(i,i) = H(i+1,i+1) +*> and H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and WANTT is +*> .FALSE., then the contents of H are unspecified on exit. +*> (The output value of H when INFO.GT.0 is given under the +*> description of INFO below.) +*> +*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and +*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is INTEGER +*> The leading dimension of the array H. LDH .GE. max(1,N). +*> \endverbatim +*> +*> \param[out] WR +*> \verbatim +*> WR is DOUBLE PRECISION array, dimension (IHI) +*> \endverbatim +*> +*> \param[out] WI +*> \verbatim +*> WI is DOUBLE PRECISION array, dimension (IHI) +*> The real and imaginary parts, respectively, of the computed +*> eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) +*> and WI(ILO:IHI). If two eigenvalues are computed as a +*> complex conjugate pair, they are stored in consecutive +*> elements of WR and WI, say the i-th and (i+1)th, with +*> WI(i) .GT. 0 and WI(i+1) .LT. 0. If WANTT is .TRUE., then +*> the eigenvalues are stored in the same order as on the +*> diagonal of the Schur form returned in H, with +*> WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal +*> block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and +*> WI(i+1) = -WI(i). +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. +*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,IHI) +*> If WANTZ is .FALSE., then Z is not referenced. +*> If WANTZ is .TRUE., then Z(ILO:IHI,ILOZ:IHIZ) is +*> replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the +*> orthogonal Schur factor of H(ILO:IHI,ILO:IHI). +*> (The output value of Z when INFO.GT.0 is given under +*> the description of INFO below.) +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is INTEGER +*> The leading dimension of the array Z. if WANTZ is .TRUE. +*> then LDZ.GE.MAX(1,IHIZ). Otherwize, LDZ.GE.1. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension LWORK +*> On exit, if LWORK = -1, WORK(1) returns an estimate of +*> the optimal value for LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK .GE. max(1,N) +*> is sufficient, but LWORK typically as large as 6*N may +*> be required for optimal performance. A workspace query +*> to determine the optimal workspace size is recommended. +*> +*> If LWORK = -1, then DLAQR0 does a workspace query. +*> In this case, DLAQR0 checks the input parameters and +*> estimates the optimal workspace size for the given +*> values of N, ILO and IHI. The estimate is returned +*> in WORK(1). No error message related to LWORK is +*> issued by XERBLA. Neither H nor Z are accessed. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> .GT. 0: if INFO = i, DLAQR0 failed to compute all of +*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR +*> and WI contain those eigenvalues which have been +*> successfully computed. (Failures are rare.) +*> +*> If INFO .GT. 0 and WANT is .FALSE., then on exit, +*> the remaining unconverged eigenvalues are the eigen- +*> values of the upper Hessenberg matrix rows and +*> columns ILO through INFO of the final, output +*> value of H. +*> +*> If INFO .GT. 0 and WANTT is .TRUE., then on exit +*> +*> (*) (initial value of H)*U = U*(final value of H) +*> +*> where U is an orthogonal matrix. The final +*> value of H is upper Hessenberg and quasi-triangular +*> in rows and columns INFO+1 through IHI. +*> +*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit +*> +*> (final value of Z(ILO:IHI,ILOZ:IHIZ) +*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U +*> +*> where U is the orthogonal matrix in (*) (regard- +*> less of the value of WANTT.) +*> +*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not +*> accessed. +*> \endverbatim +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +* +*> \par References: +* ================ +*> +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 +*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages +*> 929--947, 2002. +*> \n +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part II: Aggressive Early Deflation, SIAM Journal +*> of Matrix Analysis, volume 23, pages 948--973, 2002. +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, + $ ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* +* .. Parameters .. +* +* ==== Matrices of order NTINY or smaller must be processed by +* . DLAHQR because of insufficient subdiagonal scratch space. +* . (This is a hard limit.) ==== + INTEGER NTINY + PARAMETER ( NTINY = 11 ) +* +* ==== Exceptional deflation windows: try to cure rare +* . slow convergence by varying the size of the +* . deflation window after KEXNW iterations. ==== + INTEGER KEXNW + PARAMETER ( KEXNW = 5 ) +* +* ==== Exceptional shifts: try to cure rare slow convergence +* . with ad-hoc exceptional shifts every KEXSH iterations. +* . ==== + INTEGER KEXSH + PARAMETER ( KEXSH = 6 ) +* +* ==== The constants WILK1 and WILK2 are used to form the +* . exceptional shifts. ==== + DOUBLE PRECISION WILK1, WILK2 + PARAMETER ( WILK1 = 0.75d0, WILK2 = -0.4375d0 ) + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, CC, CS, DD, SN, SS, SWAP + INTEGER I, INF, IT, ITMAX, K, KACC22, KBOT, KDU, KS, + $ KT, KTOP, KU, KV, KWH, KWTOP, KWV, LD, LS, + $ LWKOPT, NDEC, NDFL, NH, NHO, NIBBLE, NMIN, NS, + $ NSMAX, NSR, NVE, NW, NWMAX, NWR, NWUPBD + LOGICAL SORTED + CHARACTER JBCMPZ*2 +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Local Arrays .. + DOUBLE PRECISION ZDUM( 1, 1 ) +* .. +* .. External Subroutines .. + EXTERNAL DLACPY, DLAHQR, DLANV2, DLAQR3, DLAQR4, DLAQR5 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, INT, MAX, MIN, MOD +* .. +* .. Executable Statements .. + INFO = 0 +* +* ==== Quick return for N = 0: nothing to do. ==== +* + IF( N.EQ.0 ) THEN + WORK( 1 ) = ONE + RETURN + END IF +* + IF( N.LE.NTINY ) THEN +* +* ==== Tiny matrices must use DLAHQR. ==== +* + LWKOPT = 1 + IF( LWORK.NE.-1 ) + $ CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, + $ ILOZ, IHIZ, Z, LDZ, INFO ) + ELSE +* +* ==== Use small bulge multi-shift QR with aggressive early +* . deflation on larger-than-tiny matrices. ==== +* +* ==== Hope for the best. ==== +* + INFO = 0 +* +* ==== Set up job flags for ILAENV. ==== +* + IF( WANTT ) THEN + JBCMPZ( 1: 1 ) = 'S' + ELSE + JBCMPZ( 1: 1 ) = 'E' + END IF + IF( WANTZ ) THEN + JBCMPZ( 2: 2 ) = 'V' + ELSE + JBCMPZ( 2: 2 ) = 'N' + END IF +* +* ==== NWR = recommended deflation window size. At this +* . point, N .GT. NTINY = 11, so there is enough +* . subdiagonal workspace for NWR.GE.2 as required. +* . (In fact, there is enough subdiagonal space for +* . NWR.GE.3.) ==== +* + NWR = ILAENV( 13, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) + NWR = MAX( 2, NWR ) + NWR = MIN( IHI-ILO+1, ( N-1 ) / 3, NWR ) +* +* ==== NSR = recommended number of simultaneous shifts. +* . At this point N .GT. NTINY = 11, so there is at +* . enough subdiagonal workspace for NSR to be even +* . and greater than or equal to two as required. ==== +* + NSR = ILAENV( 15, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) + NSR = MIN( NSR, ( N+6 ) / 9, IHI-ILO ) + NSR = MAX( 2, NSR-MOD( NSR, 2 ) ) +* +* ==== Estimate optimal workspace ==== +* +* ==== Workspace query call to DLAQR3 ==== +* + CALL DLAQR3( WANTT, WANTZ, N, ILO, IHI, NWR+1, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, LS, LD, WR, WI, H, LDH, N, H, LDH, + $ N, H, LDH, WORK, -1 ) +* +* ==== Optimal workspace = MAX(DLAQR5, DLAQR3) ==== +* + LWKOPT = MAX( 3*NSR / 2, INT( WORK( 1 ) ) ) +* +* ==== Quick return in case of workspace query. ==== +* + IF( LWORK.EQ.-1 ) THEN + WORK( 1 ) = DBLE( LWKOPT ) + RETURN + END IF +* +* ==== DLAHQR/DLAQR0 crossover point ==== +* + NMIN = ILAENV( 12, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) + NMIN = MAX( NTINY, NMIN ) +* +* ==== Nibble crossover point ==== +* + NIBBLE = ILAENV( 14, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) + NIBBLE = MAX( 0, NIBBLE ) +* +* ==== Accumulate reflections during ttswp? Use block +* . 2-by-2 structure during matrix-matrix multiply? ==== +* + KACC22 = ILAENV( 16, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) + KACC22 = MAX( 0, KACC22 ) + KACC22 = MIN( 2, KACC22 ) +* +* ==== NWMAX = the largest possible deflation window for +* . which there is sufficient workspace. ==== +* + NWMAX = MIN( ( N-1 ) / 3, LWORK / 2 ) + NW = NWMAX +* +* ==== NSMAX = the Largest number of simultaneous shifts +* . for which there is sufficient workspace. ==== +* + NSMAX = MIN( ( N+6 ) / 9, 2*LWORK / 3 ) + NSMAX = NSMAX - MOD( NSMAX, 2 ) +* +* ==== NDFL: an iteration count restarted at deflation. ==== +* + NDFL = 1 +* +* ==== ITMAX = iteration limit ==== +* + ITMAX = MAX( 30, 2*KEXSH )*MAX( 10, ( IHI-ILO+1 ) ) +* +* ==== Last row and column in the active block ==== +* + KBOT = IHI +* +* ==== Main Loop ==== +* + DO 80 IT = 1, ITMAX +* +* ==== Done when KBOT falls below ILO ==== +* + IF( KBOT.LT.ILO ) + $ GO TO 90 +* +* ==== Locate active block ==== +* + DO 10 K = KBOT, ILO + 1, -1 + IF( H( K, K-1 ).EQ.ZERO ) + $ GO TO 20 + 10 CONTINUE + K = ILO + 20 CONTINUE + KTOP = K +* +* ==== Select deflation window size: +* . Typical Case: +* . If possible and advisable, nibble the entire +* . active block. If not, use size MIN(NWR,NWMAX) +* . or MIN(NWR+1,NWMAX) depending upon which has +* . the smaller corresponding subdiagonal entry +* . (a heuristic). +* . +* . Exceptional Case: +* . If there have been no deflations in KEXNW or +* . more iterations, then vary the deflation window +* . size. At first, because, larger windows are, +* . in general, more powerful than smaller ones, +* . rapidly increase the window to the maximum possible. +* . Then, gradually reduce the window size. ==== +* + NH = KBOT - KTOP + 1 + NWUPBD = MIN( NH, NWMAX ) + IF( NDFL.LT.KEXNW ) THEN + NW = MIN( NWUPBD, NWR ) + ELSE + NW = MIN( NWUPBD, 2*NW ) + END IF + IF( NW.LT.NWMAX ) THEN + IF( NW.GE.NH-1 ) THEN + NW = NH + ELSE + KWTOP = KBOT - NW + 1 + IF( ABS( H( KWTOP, KWTOP-1 ) ).GT. + $ ABS( H( KWTOP-1, KWTOP-2 ) ) )NW = NW + 1 + END IF + END IF + IF( NDFL.LT.KEXNW ) THEN + NDEC = -1 + ELSE IF( NDEC.GE.0 .OR. NW.GE.NWUPBD ) THEN + NDEC = NDEC + 1 + IF( NW-NDEC.LT.2 ) + $ NDEC = 0 + NW = NW - NDEC + END IF +* +* ==== Aggressive early deflation: +* . split workspace under the subdiagonal into +* . - an nw-by-nw work array V in the lower +* . left-hand-corner, +* . - an NW-by-at-least-NW-but-more-is-better +* . (NW-by-NHO) horizontal work array along +* . the bottom edge, +* . - an at-least-NW-but-more-is-better (NHV-by-NW) +* . vertical work array along the left-hand-edge. +* . ==== +* + KV = N - NW + 1 + KT = NW + 1 + NHO = ( N-NW-1 ) - KT + 1 + KWV = NW + 2 + NVE = ( N-NW ) - KWV + 1 +* +* ==== Aggressive early deflation ==== +* + CALL DLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, LS, LD, WR, WI, H( KV, 1 ), LDH, + $ NHO, H( KV, KT ), LDH, NVE, H( KWV, 1 ), LDH, + $ WORK, LWORK ) +* +* ==== Adjust KBOT accounting for new deflations. ==== +* + KBOT = KBOT - LD +* +* ==== KS points to the shifts. ==== +* + KS = KBOT - LS + 1 +* +* ==== Skip an expensive QR sweep if there is a (partly +* . heuristic) reason to expect that many eigenvalues +* . will deflate without it. Here, the QR sweep is +* . skipped if many eigenvalues have just been deflated +* . or if the remaining active block is small. +* + IF( ( LD.EQ.0 ) .OR. ( ( 100*LD.LE.NW*NIBBLE ) .AND. ( KBOT- + $ KTOP+1.GT.MIN( NMIN, NWMAX ) ) ) ) THEN +* +* ==== NS = nominal number of simultaneous shifts. +* . This may be lowered (slightly) if DLAQR3 +* . did not provide that many shifts. ==== +* + NS = MIN( NSMAX, NSR, MAX( 2, KBOT-KTOP ) ) + NS = NS - MOD( NS, 2 ) +* +* ==== If there have been no deflations +* . in a multiple of KEXSH iterations, +* . then try exceptional shifts. +* . Otherwise use shifts provided by +* . DLAQR3 above or from the eigenvalues +* . of a trailing principal submatrix. ==== +* + IF( MOD( NDFL, KEXSH ).EQ.0 ) THEN + KS = KBOT - NS + 1 + DO 30 I = KBOT, MAX( KS+1, KTOP+2 ), -2 + SS = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) + AA = WILK1*SS + H( I, I ) + BB = SS + CC = WILK2*SS + DD = AA + CALL DLANV2( AA, BB, CC, DD, WR( I-1 ), WI( I-1 ), + $ WR( I ), WI( I ), CS, SN ) + 30 CONTINUE + IF( KS.EQ.KTOP ) THEN + WR( KS+1 ) = H( KS+1, KS+1 ) + WI( KS+1 ) = ZERO + WR( KS ) = WR( KS+1 ) + WI( KS ) = WI( KS+1 ) + END IF + ELSE +* +* ==== Got NS/2 or fewer shifts? Use DLAQR4 or +* . DLAHQR on a trailing principal submatrix to +* . get more. (Since NS.LE.NSMAX.LE.(N+6)/9, +* . there is enough space below the subdiagonal +* . to fit an NS-by-NS scratch array.) ==== +* + IF( KBOT-KS+1.LE.NS / 2 ) THEN + KS = KBOT - NS + 1 + KT = N - NS + 1 + CALL DLACPY( 'A', NS, NS, H( KS, KS ), LDH, + $ H( KT, 1 ), LDH ) + IF( NS.GT.NMIN ) THEN + CALL DLAQR4( .false., .false., NS, 1, NS, + $ H( KT, 1 ), LDH, WR( KS ), + $ WI( KS ), 1, 1, ZDUM, 1, WORK, + $ LWORK, INF ) + ELSE + CALL DLAHQR( .false., .false., NS, 1, NS, + $ H( KT, 1 ), LDH, WR( KS ), + $ WI( KS ), 1, 1, ZDUM, 1, INF ) + END IF + KS = KS + INF +* +* ==== In case of a rare QR failure use +* . eigenvalues of the trailing 2-by-2 +* . principal submatrix. ==== +* + IF( KS.GE.KBOT ) THEN + AA = H( KBOT-1, KBOT-1 ) + CC = H( KBOT, KBOT-1 ) + BB = H( KBOT-1, KBOT ) + DD = H( KBOT, KBOT ) + CALL DLANV2( AA, BB, CC, DD, WR( KBOT-1 ), + $ WI( KBOT-1 ), WR( KBOT ), + $ WI( KBOT ), CS, SN ) + KS = KBOT - 1 + END IF + END IF +* + IF( KBOT-KS+1.GT.NS ) THEN +* +* ==== Sort the shifts (Helps a little) +* . Bubble sort keeps complex conjugate +* . pairs together. ==== +* + SORTED = .false. + DO 50 K = KBOT, KS + 1, -1 + IF( SORTED ) + $ GO TO 60 + SORTED = .true. + DO 40 I = KS, K - 1 + IF( ABS( WR( I ) )+ABS( WI( I ) ).LT. + $ ABS( WR( I+1 ) )+ABS( WI( I+1 ) ) ) THEN + SORTED = .false. +* + SWAP = WR( I ) + WR( I ) = WR( I+1 ) + WR( I+1 ) = SWAP +* + SWAP = WI( I ) + WI( I ) = WI( I+1 ) + WI( I+1 ) = SWAP + END IF + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + END IF +* +* ==== Shuffle shifts into pairs of real shifts +* . and pairs of complex conjugate shifts +* . assuming complex conjugate shifts are +* . already adjacent to one another. (Yes, +* . they are.) ==== +* + DO 70 I = KBOT, KS + 2, -2 + IF( WI( I ).NE.-WI( I-1 ) ) THEN +* + SWAP = WR( I ) + WR( I ) = WR( I-1 ) + WR( I-1 ) = WR( I-2 ) + WR( I-2 ) = SWAP +* + SWAP = WI( I ) + WI( I ) = WI( I-1 ) + WI( I-1 ) = WI( I-2 ) + WI( I-2 ) = SWAP + END IF + 70 CONTINUE + END IF +* +* ==== If there are only two shifts and both are +* . real, then use only one. ==== +* + IF( KBOT-KS+1.EQ.2 ) THEN + IF( WI( KBOT ).EQ.ZERO ) THEN + IF( ABS( WR( KBOT )-H( KBOT, KBOT ) ).LT. + $ ABS( WR( KBOT-1 )-H( KBOT, KBOT ) ) ) THEN + WR( KBOT-1 ) = WR( KBOT ) + ELSE + WR( KBOT ) = WR( KBOT-1 ) + END IF + END IF + END IF +* +* ==== Use up to NS of the the smallest magnatiude +* . shifts. If there aren't NS shifts available, +* . then use them all, possibly dropping one to +* . make the number of shifts even. ==== +* + NS = MIN( NS, KBOT-KS+1 ) + NS = NS - MOD( NS, 2 ) + KS = KBOT - NS + 1 +* +* ==== Small-bulge multi-shift QR sweep: +* . split workspace under the subdiagonal into +* . - a KDU-by-KDU work array U in the lower +* . left-hand-corner, +* . - a KDU-by-at-least-KDU-but-more-is-better +* . (KDU-by-NHo) horizontal work array WH along +* . the bottom edge, +* . - and an at-least-KDU-but-more-is-better-by-KDU +* . (NVE-by-KDU) vertical work WV arrow along +* . the left-hand-edge. ==== +* + KDU = 3*NS - 3 + KU = N - KDU + 1 + KWH = KDU + 1 + NHO = ( N-KDU+1-4 ) - ( KDU+1 ) + 1 + KWV = KDU + 4 + NVE = N - KDU - KWV + 1 +* +* ==== Small-bulge multi-shift QR sweep ==== +* + CALL DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NS, + $ WR( KS ), WI( KS ), H, LDH, ILOZ, IHIZ, Z, + $ LDZ, WORK, 3, H( KU, 1 ), LDH, NVE, + $ H( KWV, 1 ), LDH, NHO, H( KU, KWH ), LDH ) + END IF +* +* ==== Note progress (or the lack of it). ==== +* + IF( LD.GT.0 ) THEN + NDFL = 1 + ELSE + NDFL = NDFL + 1 + END IF +* +* ==== End of main loop ==== + 80 CONTINUE +* +* ==== Iteration limit exceeded. Set INFO to show where +* . the problem occurred and exit. ==== +* + INFO = KBOT + 90 CONTINUE + END IF +* +* ==== Return the optimal value of LWORK. ==== +* + WORK( 1 ) = DBLE( LWKOPT ) +* +* ==== End of DLAQR0 ==== +* + END +*> \brief \b DLAQR1 sets a scalar multiple of the first column of the product of 2-by-2 or 3-by-3 matrix H and specified shifts. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR1 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR1( N, H, LDH, SR1, SI1, SR2, SI2, V ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION SI1, SI2, SR1, SR2 +* INTEGER LDH, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), V( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> Given a 2-by-2 or 3-by-3 matrix H, DLAQR1 sets v to a +*> scalar multiple of the first column of the product +*> +*> (*) K = (H - (sr1 + i*si1)*I)*(H - (sr2 + i*si2)*I) +*> +*> scaling to avoid overflows and most underflows. It +*> is assumed that either +*> +*> 1) sr1 = sr2 and si1 = -si2 +*> or +*> 2) si1 = si2 = 0. +*> +*> This is useful for starting double implicit shift bulges +*> in the QR algorithm. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is integer +*> Order of the matrix H. N must be either 2 or 3. +*> \endverbatim +*> +*> \param[in] H +*> \verbatim +*> H is DOUBLE PRECISION array of dimension (LDH,N) +*> The 2-by-2 or 3-by-3 matrix H in (*). +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer +*> The leading dimension of H as declared in +*> the calling procedure. LDH.GE.N +*> \endverbatim +*> +*> \param[in] SR1 +*> \verbatim +*> SR1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SI1 +*> \verbatim +*> SI1 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SR2 +*> \verbatim +*> SR2 is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] SI2 +*> \verbatim +*> SI2 is DOUBLE PRECISION +*> The shifts in (*). +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array of dimension N +*> A scalar multiple of the first column of the +*> matrix K in (*). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +*> +* ===================================================================== + SUBROUTINE DLAQR1( N, H, LDH, SR1, SI1, SR2, SI2, V ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION SI1, SI2, SR1, SR2 + INTEGER LDH, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), V( * ) +* .. +* +* ================================================================ +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION H21S, H31S, S +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. +* .. Executable Statements .. + IF( N.EQ.2 ) THEN + S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) + IF( S.EQ.ZERO ) THEN + V( 1 ) = ZERO + V( 2 ) = ZERO + ELSE + H21S = H( 2, 1 ) / S + V( 1 ) = H21S*H( 1, 2 ) + ( H( 1, 1 )-SR1 )* + $ ( ( H( 1, 1 )-SR2 ) / S ) - SI1*( SI2 / S ) + V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) + END IF + ELSE + S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) + + $ ABS( H( 3, 1 ) ) + IF( S.EQ.ZERO ) THEN + V( 1 ) = ZERO + V( 2 ) = ZERO + V( 3 ) = ZERO + ELSE + H21S = H( 2, 1 ) / S + H31S = H( 3, 1 ) / S + V( 1 ) = ( H( 1, 1 )-SR1 )*( ( H( 1, 1 )-SR2 ) / S ) - + $ SI1*( SI2 / S ) + H( 1, 2 )*H21S + H( 1, 3 )*H31S + V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) + + $ H( 2, 3 )*H31S + V( 3 ) = H31S*( H( 1, 1 )+H( 3, 3 )-SR1-SR2 ) + + $ H21S*H( 3, 2 ) + END IF + END IF + END +*> \brief \b DLAQR2 performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, +* IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, +* LDT, NV, WV, LDWV, WORK, LWORK ) +* +* .. Scalar Arguments .. +* INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, +* $ LDZ, LWORK, N, ND, NH, NS, NV, NW +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), +* $ V( LDV, * ), WORK( * ), WV( LDWV, * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAQR2 is identical to DLAQR3 except that it avoids +*> recursion by calling DLAHQR instead of DLAQR4. +*> +*> Aggressive early deflation: +*> +*> This subroutine accepts as input an upper Hessenberg matrix +*> H and performs an orthogonal similarity transformation +*> designed to detect and deflate fully converged eigenvalues from +*> a trailing principal submatrix. On output H has been over- +*> written by a new Hessenberg matrix that is a perturbation of +*> an orthogonal similarity transformation of H. It is to be +*> hoped that the final version of H has many zero subdiagonal +*> entries. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is LOGICAL +*> If .TRUE., then the Hessenberg matrix H is fully updated +*> so that the quasi-triangular Schur factor may be +*> computed (in cooperation with the calling subroutine). +*> If .FALSE., then only enough of H is updated to preserve +*> the eigenvalues. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is LOGICAL +*> If .TRUE., then the orthogonal matrix Z is updated so +*> so that the orthogonal Schur factor may be computed +*> (in cooperation with the calling subroutine). +*> If .FALSE., then Z is not referenced. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H and (if WANTZ is .TRUE.) the +*> order of the orthogonal matrix Z. +*> \endverbatim +*> +*> \param[in] KTOP +*> \verbatim +*> KTOP is INTEGER +*> It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0. +*> KBOT and KTOP together determine an isolated block +*> along the diagonal of the Hessenberg matrix. +*> \endverbatim +*> +*> \param[in] KBOT +*> \verbatim +*> KBOT is INTEGER +*> It is assumed without a check that either +*> KBOT = N or H(KBOT+1,KBOT)=0. KBOT and KTOP together +*> determine an isolated block along the diagonal of the +*> Hessenberg matrix. +*> \endverbatim +*> +*> \param[in] NW +*> \verbatim +*> NW is INTEGER +*> Deflation window size. 1 .LE. NW .LE. (KBOT-KTOP+1). +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On input the initial N-by-N section of H stores the +*> Hessenberg matrix undergoing aggressive early deflation. +*> On output H has been transformed by an orthogonal +*> similarity transformation, perturbed, and the returned +*> to Hessenberg form that (it is to be hoped) has some +*> zero subdiagonal entries. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer +*> Leading dimension of H just as declared in the calling +*> subroutine. N .LE. LDH +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,N) +*> IF WANTZ is .TRUE., then on output, the orthogonal +*> similarity transformation mentioned above has been +*> accumulated into Z(ILOZ:IHIZ,ILO:IHI) from the right. +*> If WANTZ is .FALSE., then Z is unreferenced. +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is integer +*> The leading dimension of Z just as declared in the +*> calling subroutine. 1 .LE. LDZ. +*> \endverbatim +*> +*> \param[out] NS +*> \verbatim +*> NS is integer +*> The number of unconverged (ie approximate) eigenvalues +*> returned in SR and SI that may be used as shifts by the +*> calling subroutine. +*> \endverbatim +*> +*> \param[out] ND +*> \verbatim +*> ND is integer +*> The number of converged eigenvalues uncovered by this +*> subroutine. +*> \endverbatim +*> +*> \param[out] SR +*> \verbatim +*> SR is DOUBLE PRECISION array, dimension (KBOT) +*> \endverbatim +*> +*> \param[out] SI +*> \verbatim +*> SI is DOUBLE PRECISION array, dimension (KBOT) +*> On output, the real and imaginary parts of approximate +*> eigenvalues that may be used for shifts are stored in +*> SR(KBOT-ND-NS+1) through SR(KBOT-ND) and +*> SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively. +*> The real and imaginary parts of converged eigenvalues +*> are stored in SR(KBOT-ND+1) through SR(KBOT) and +*> SI(KBOT-ND+1) through SI(KBOT), respectively. +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension (LDV,NW) +*> An NW-by-NW work array. +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is integer scalar +*> The leading dimension of V just as declared in the +*> calling subroutine. NW .LE. LDV +*> \endverbatim +*> +*> \param[in] NH +*> \verbatim +*> NH is integer scalar +*> The number of columns of T. NH.GE.NW. +*> \endverbatim +*> +*> \param[out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,NW) +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is integer +*> The leading dimension of T just as declared in the +*> calling subroutine. NW .LE. LDT +*> \endverbatim +*> +*> \param[in] NV +*> \verbatim +*> NV is integer +*> The number of rows of work array WV available for +*> workspace. NV.GE.NW. +*> \endverbatim +*> +*> \param[out] WV +*> \verbatim +*> WV is DOUBLE PRECISION array, dimension (LDWV,NW) +*> \endverbatim +*> +*> \param[in] LDWV +*> \verbatim +*> LDWV is integer +*> The leading dimension of W just as declared in the +*> calling subroutine. NW .LE. LDV +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (LWORK) +*> On exit, WORK(1) is set to an estimate of the optimal value +*> of LWORK for the given values of N, NW, KTOP and KBOT. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is integer +*> The dimension of the work array WORK. LWORK = 2*NW +*> suffices, but greater efficiency may result from larger +*> values of LWORK. +*> +*> If LWORK = -1, then a workspace query is assumed; DLAQR2 +*> only estimates the optimal workspace size for the given +*> values of N, NW, KTOP and KBOT. The estimate is returned +*> in WORK(1). No error message related to LWORK is issued +*> by XERBLA. Neither H nor Z are accessed. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +*> +* ===================================================================== + SUBROUTINE DLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, + $ LDT, NV, WV, LDWV, WORK, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, + $ LDZ, LWORK, N, ND, NH, NS, NV, NW + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), + $ V( LDV, * ), WORK( * ), WV( LDWV, * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, BETA, CC, CS, DD, EVI, EVK, FOO, S, + $ SAFMAX, SAFMIN, SMLNUM, SN, TAU, ULP + INTEGER I, IFST, ILST, INFO, INFQR, J, JW, K, KCOL, + $ KEND, KLN, KROW, KWTOP, LTOP, LWK1, LWK2, + $ LWKOPT + LOGICAL BULGE, SORTED +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DGEHRD, DGEMM, DLABAD, DLACPY, DLAHQR, + $ DLANV2, DLARF, DLARFG, DLASET, DORMHR, DTREXC +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, INT, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* +* ==== Estimate optimal workspace. ==== +* + JW = MIN( NW, KBOT-KTOP+1 ) + IF( JW.LE.2 ) THEN + LWKOPT = 1 + ELSE +* +* ==== Workspace query call to DGEHRD ==== +* + CALL DGEHRD( JW, 1, JW-1, T, LDT, WORK, WORK, -1, INFO ) + LWK1 = INT( WORK( 1 ) ) +* +* ==== Workspace query call to DORMHR ==== +* + CALL DORMHR( 'R', 'N', JW, JW, 1, JW-1, T, LDT, WORK, V, LDV, + $ WORK, -1, INFO ) + LWK2 = INT( WORK( 1 ) ) +* +* ==== Optimal workspace ==== +* + LWKOPT = JW + MAX( LWK1, LWK2 ) + END IF +* +* ==== Quick return in case of workspace query. ==== +* + IF( LWORK.EQ.-1 ) THEN + WORK( 1 ) = DBLE( LWKOPT ) + RETURN + END IF +* +* ==== Nothing to do ... +* ... for an empty active block ... ==== + NS = 0 + ND = 0 + WORK( 1 ) = ONE + IF( KTOP.GT.KBOT ) + $ RETURN +* ... nor for an empty deflation window. ==== + IF( NW.LT.1 ) + $ RETURN +* +* ==== Machine constants ==== +* + SAFMIN = DLAMCH( 'SAFE MINIMUM' ) + SAFMAX = ONE / SAFMIN + CALL DLABAD( SAFMIN, SAFMAX ) + ULP = DLAMCH( 'PRECISION' ) + SMLNUM = SAFMIN*( DBLE( N ) / ULP ) +* +* ==== Setup deflation window ==== +* + JW = MIN( NW, KBOT-KTOP+1 ) + KWTOP = KBOT - JW + 1 + IF( KWTOP.EQ.KTOP ) THEN + S = ZERO + ELSE + S = H( KWTOP, KWTOP-1 ) + END IF +* + IF( KBOT.EQ.KWTOP ) THEN +* +* ==== 1-by-1 deflation window: not much to do ==== +* + SR( KWTOP ) = H( KWTOP, KWTOP ) + SI( KWTOP ) = ZERO + NS = 1 + ND = 0 + IF( ABS( S ).LE.MAX( SMLNUM, ULP*ABS( H( KWTOP, KWTOP ) ) ) ) + $ THEN + NS = 0 + ND = 1 + IF( KWTOP.GT.KTOP ) + $ H( KWTOP, KWTOP-1 ) = ZERO + END IF + WORK( 1 ) = ONE + RETURN + END IF +* +* ==== Convert to spike-triangular form. (In case of a +* . rare QR failure, this routine continues to do +* . aggressive early deflation using that part of +* . the deflation window that converged using INFQR +* . here and there to keep track.) ==== +* + CALL DLACPY( 'U', JW, JW, H( KWTOP, KWTOP ), LDH, T, LDT ) + CALL DCOPY( JW-1, H( KWTOP+1, KWTOP ), LDH+1, T( 2, 1 ), LDT+1 ) +* + CALL DLASET( 'A', JW, JW, ZERO, ONE, V, LDV ) + CALL DLAHQR( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), + $ SI( KWTOP ), 1, JW, V, LDV, INFQR ) +* +* ==== DTREXC needs a clean margin near the diagonal ==== +* + DO 10 J = 1, JW - 3 + T( J+2, J ) = ZERO + T( J+3, J ) = ZERO + 10 CONTINUE + IF( JW.GT.2 ) + $ T( JW, JW-2 ) = ZERO +* +* ==== Deflation detection loop ==== +* + NS = JW + ILST = INFQR + 1 + 20 CONTINUE + IF( ILST.LE.NS ) THEN + IF( NS.EQ.1 ) THEN + BULGE = .FALSE. + ELSE + BULGE = T( NS, NS-1 ).NE.ZERO + END IF +* +* ==== Small spike tip test for deflation ==== +* + IF( .NOT.BULGE ) THEN +* +* ==== Real eigenvalue ==== +* + FOO = ABS( T( NS, NS ) ) + IF( FOO.EQ.ZERO ) + $ FOO = ABS( S ) + IF( ABS( S*V( 1, NS ) ).LE.MAX( SMLNUM, ULP*FOO ) ) THEN +* +* ==== Deflatable ==== +* + NS = NS - 1 + ELSE +* +* ==== Undeflatable. Move it up out of the way. +* . (DTREXC can not fail in this case.) ==== +* + IFST = NS + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + ILST = ILST + 1 + END IF + ELSE +* +* ==== Complex conjugate pair ==== +* + FOO = ABS( T( NS, NS ) ) + SQRT( ABS( T( NS, NS-1 ) ) )* + $ SQRT( ABS( T( NS-1, NS ) ) ) + IF( FOO.EQ.ZERO ) + $ FOO = ABS( S ) + IF( MAX( ABS( S*V( 1, NS ) ), ABS( S*V( 1, NS-1 ) ) ).LE. + $ MAX( SMLNUM, ULP*FOO ) ) THEN +* +* ==== Deflatable ==== +* + NS = NS - 2 + ELSE +* +* ==== Undeflatable. Move them up out of the way. +* . Fortunately, DTREXC does the right thing with +* . ILST in case of a rare exchange failure. ==== +* + IFST = NS + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + ILST = ILST + 2 + END IF + END IF +* +* ==== End deflation detection loop ==== +* + GO TO 20 + END IF +* +* ==== Return to Hessenberg form ==== +* + IF( NS.EQ.0 ) + $ S = ZERO +* + IF( NS.LT.JW ) THEN +* +* ==== sorting diagonal blocks of T improves accuracy for +* . graded matrices. Bubble sort deals well with +* . exchange failures. ==== +* + SORTED = .false. + I = NS + 1 + 30 CONTINUE + IF( SORTED ) + $ GO TO 50 + SORTED = .true. +* + KEND = I - 1 + I = INFQR + 1 + IF( I.EQ.NS ) THEN + K = I + 1 + ELSE IF( T( I+1, I ).EQ.ZERO ) THEN + K = I + 1 + ELSE + K = I + 2 + END IF + 40 CONTINUE + IF( K.LE.KEND ) THEN + IF( K.EQ.I+1 ) THEN + EVI = ABS( T( I, I ) ) + ELSE + EVI = ABS( T( I, I ) ) + SQRT( ABS( T( I+1, I ) ) )* + $ SQRT( ABS( T( I, I+1 ) ) ) + END IF +* + IF( K.EQ.KEND ) THEN + EVK = ABS( T( K, K ) ) + ELSE IF( T( K+1, K ).EQ.ZERO ) THEN + EVK = ABS( T( K, K ) ) + ELSE + EVK = ABS( T( K, K ) ) + SQRT( ABS( T( K+1, K ) ) )* + $ SQRT( ABS( T( K, K+1 ) ) ) + END IF +* + IF( EVI.GE.EVK ) THEN + I = K + ELSE + SORTED = .false. + IFST = I + ILST = K + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + IF( INFO.EQ.0 ) THEN + I = ILST + ELSE + I = K + END IF + END IF + IF( I.EQ.KEND ) THEN + K = I + 1 + ELSE IF( T( I+1, I ).EQ.ZERO ) THEN + K = I + 1 + ELSE + K = I + 2 + END IF + GO TO 40 + END IF + GO TO 30 + 50 CONTINUE + END IF +* +* ==== Restore shift/eigenvalue array from T ==== +* + I = JW + 60 CONTINUE + IF( I.GE.INFQR+1 ) THEN + IF( I.EQ.INFQR+1 ) THEN + SR( KWTOP+I-1 ) = T( I, I ) + SI( KWTOP+I-1 ) = ZERO + I = I - 1 + ELSE IF( T( I, I-1 ).EQ.ZERO ) THEN + SR( KWTOP+I-1 ) = T( I, I ) + SI( KWTOP+I-1 ) = ZERO + I = I - 1 + ELSE + AA = T( I-1, I-1 ) + CC = T( I, I-1 ) + BB = T( I-1, I ) + DD = T( I, I ) + CALL DLANV2( AA, BB, CC, DD, SR( KWTOP+I-2 ), + $ SI( KWTOP+I-2 ), SR( KWTOP+I-1 ), + $ SI( KWTOP+I-1 ), CS, SN ) + I = I - 2 + END IF + GO TO 60 + END IF +* + IF( NS.LT.JW .OR. S.EQ.ZERO ) THEN + IF( NS.GT.1 .AND. S.NE.ZERO ) THEN +* +* ==== Reflect spike back into lower triangle ==== +* + CALL DCOPY( NS, V, LDV, WORK, 1 ) + BETA = WORK( 1 ) + CALL DLARFG( NS, BETA, WORK( 2 ), 1, TAU ) + WORK( 1 ) = ONE +* + CALL DLASET( 'L', JW-2, JW-2, ZERO, ZERO, T( 3, 1 ), LDT ) +* + CALL DLARF( 'L', NS, JW, WORK, 1, TAU, T, LDT, + $ WORK( JW+1 ) ) + CALL DLARF( 'R', NS, NS, WORK, 1, TAU, T, LDT, + $ WORK( JW+1 ) ) + CALL DLARF( 'R', JW, NS, WORK, 1, TAU, V, LDV, + $ WORK( JW+1 ) ) +* + CALL DGEHRD( JW, 1, NS, T, LDT, WORK, WORK( JW+1 ), + $ LWORK-JW, INFO ) + END IF +* +* ==== Copy updated reduced window into place ==== +* + IF( KWTOP.GT.1 ) + $ H( KWTOP, KWTOP-1 ) = S*V( 1, 1 ) + CALL DLACPY( 'U', JW, JW, T, LDT, H( KWTOP, KWTOP ), LDH ) + CALL DCOPY( JW-1, T( 2, 1 ), LDT+1, H( KWTOP+1, KWTOP ), + $ LDH+1 ) +* +* ==== Accumulate orthogonal matrix in order update +* . H and Z, if requested. ==== +* + IF( NS.GT.1 .AND. S.NE.ZERO ) + $ CALL DORMHR( 'R', 'N', JW, NS, 1, NS, T, LDT, WORK, V, LDV, + $ WORK( JW+1 ), LWORK-JW, INFO ) +* +* ==== Update vertical slab in H ==== +* + IF( WANTT ) THEN + LTOP = 1 + ELSE + LTOP = KTOP + END IF + DO 70 KROW = LTOP, KWTOP - 1, NV + KLN = MIN( NV, KWTOP-KROW ) + CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, H( KROW, KWTOP ), + $ LDH, V, LDV, ZERO, WV, LDWV ) + CALL DLACPY( 'A', KLN, JW, WV, LDWV, H( KROW, KWTOP ), LDH ) + 70 CONTINUE +* +* ==== Update horizontal slab in H ==== +* + IF( WANTT ) THEN + DO 80 KCOL = KBOT + 1, N, NH + KLN = MIN( NH, N-KCOL+1 ) + CALL DGEMM( 'C', 'N', JW, KLN, JW, ONE, V, LDV, + $ H( KWTOP, KCOL ), LDH, ZERO, T, LDT ) + CALL DLACPY( 'A', JW, KLN, T, LDT, H( KWTOP, KCOL ), + $ LDH ) + 80 CONTINUE + END IF +* +* ==== Update vertical slab in Z ==== +* + IF( WANTZ ) THEN + DO 90 KROW = ILOZ, IHIZ, NV + KLN = MIN( NV, IHIZ-KROW+1 ) + CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, Z( KROW, KWTOP ), + $ LDZ, V, LDV, ZERO, WV, LDWV ) + CALL DLACPY( 'A', KLN, JW, WV, LDWV, Z( KROW, KWTOP ), + $ LDZ ) + 90 CONTINUE + END IF + END IF +* +* ==== Return the number of deflations ... ==== +* + ND = JW - NS +* +* ==== ... and the number of shifts. (Subtracting +* . INFQR from the spike length takes care +* . of the case of a rare QR failure while +* . calculating eigenvalues of the deflation +* . window.) ==== +* + NS = NS - INFQR +* +* ==== Return optimal workspace. ==== +* + WORK( 1 ) = DBLE( LWKOPT ) +* +* ==== End of DLAQR2 ==== +* + END +*> \brief \b DLAQR3 performs the orthogonal similarity transformation of a Hessenberg matrix to detect and deflate fully converged eigenvalues from a trailing principal submatrix (aggressive early deflation). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR3 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, +* IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, +* LDT, NV, WV, LDWV, WORK, LWORK ) +* +* .. Scalar Arguments .. +* INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, +* $ LDZ, LWORK, N, ND, NH, NS, NV, NW +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), +* $ V( LDV, * ), WORK( * ), WV( LDWV, * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> Aggressive early deflation: +*> +*> DLAQR3 accepts as input an upper Hessenberg matrix +*> H and performs an orthogonal similarity transformation +*> designed to detect and deflate fully converged eigenvalues from +*> a trailing principal submatrix. On output H has been over- +*> written by a new Hessenberg matrix that is a perturbation of +*> an orthogonal similarity transformation of H. It is to be +*> hoped that the final version of H has many zero subdiagonal +*> entries. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is LOGICAL +*> If .TRUE., then the Hessenberg matrix H is fully updated +*> so that the quasi-triangular Schur factor may be +*> computed (in cooperation with the calling subroutine). +*> If .FALSE., then only enough of H is updated to preserve +*> the eigenvalues. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is LOGICAL +*> If .TRUE., then the orthogonal matrix Z is updated so +*> so that the orthogonal Schur factor may be computed +*> (in cooperation with the calling subroutine). +*> If .FALSE., then Z is not referenced. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H and (if WANTZ is .TRUE.) the +*> order of the orthogonal matrix Z. +*> \endverbatim +*> +*> \param[in] KTOP +*> \verbatim +*> KTOP is INTEGER +*> It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0. +*> KBOT and KTOP together determine an isolated block +*> along the diagonal of the Hessenberg matrix. +*> \endverbatim +*> +*> \param[in] KBOT +*> \verbatim +*> KBOT is INTEGER +*> It is assumed without a check that either +*> KBOT = N or H(KBOT+1,KBOT)=0. KBOT and KTOP together +*> determine an isolated block along the diagonal of the +*> Hessenberg matrix. +*> \endverbatim +*> +*> \param[in] NW +*> \verbatim +*> NW is INTEGER +*> Deflation window size. 1 .LE. NW .LE. (KBOT-KTOP+1). +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On input the initial N-by-N section of H stores the +*> Hessenberg matrix undergoing aggressive early deflation. +*> On output H has been transformed by an orthogonal +*> similarity transformation, perturbed, and the returned +*> to Hessenberg form that (it is to be hoped) has some +*> zero subdiagonal entries. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer +*> Leading dimension of H just as declared in the calling +*> subroutine. N .LE. LDH +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,N) +*> IF WANTZ is .TRUE., then on output, the orthogonal +*> similarity transformation mentioned above has been +*> accumulated into Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right. +*> If WANTZ is .FALSE., then Z is unreferenced. +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is integer +*> The leading dimension of Z just as declared in the +*> calling subroutine. 1 .LE. LDZ. +*> \endverbatim +*> +*> \param[out] NS +*> \verbatim +*> NS is integer +*> The number of unconverged (ie approximate) eigenvalues +*> returned in SR and SI that may be used as shifts by the +*> calling subroutine. +*> \endverbatim +*> +*> \param[out] ND +*> \verbatim +*> ND is integer +*> The number of converged eigenvalues uncovered by this +*> subroutine. +*> \endverbatim +*> +*> \param[out] SR +*> \verbatim +*> SR is DOUBLE PRECISION array, dimension (KBOT) +*> \endverbatim +*> +*> \param[out] SI +*> \verbatim +*> SI is DOUBLE PRECISION array, dimension (KBOT) +*> On output, the real and imaginary parts of approximate +*> eigenvalues that may be used for shifts are stored in +*> SR(KBOT-ND-NS+1) through SR(KBOT-ND) and +*> SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively. +*> The real and imaginary parts of converged eigenvalues +*> are stored in SR(KBOT-ND+1) through SR(KBOT) and +*> SI(KBOT-ND+1) through SI(KBOT), respectively. +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension (LDV,NW) +*> An NW-by-NW work array. +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is integer scalar +*> The leading dimension of V just as declared in the +*> calling subroutine. NW .LE. LDV +*> \endverbatim +*> +*> \param[in] NH +*> \verbatim +*> NH is integer scalar +*> The number of columns of T. NH.GE.NW. +*> \endverbatim +*> +*> \param[out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,NW) +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is integer +*> The leading dimension of T just as declared in the +*> calling subroutine. NW .LE. LDT +*> \endverbatim +*> +*> \param[in] NV +*> \verbatim +*> NV is integer +*> The number of rows of work array WV available for +*> workspace. NV.GE.NW. +*> \endverbatim +*> +*> \param[out] WV +*> \verbatim +*> WV is DOUBLE PRECISION array, dimension (LDWV,NW) +*> \endverbatim +*> +*> \param[in] LDWV +*> \verbatim +*> LDWV is integer +*> The leading dimension of W just as declared in the +*> calling subroutine. NW .LE. LDV +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (LWORK) +*> On exit, WORK(1) is set to an estimate of the optimal value +*> of LWORK for the given values of N, NW, KTOP and KBOT. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is integer +*> The dimension of the work array WORK. LWORK = 2*NW +*> suffices, but greater efficiency may result from larger +*> values of LWORK. +*> +*> If LWORK = -1, then a workspace query is assumed; DLAQR3 +*> only estimates the optimal workspace size for the given +*> values of N, NW, KTOP and KBOT. The estimate is returned +*> in WORK(1). No error message related to LWORK is issued +*> by XERBLA. Neither H nor Z are accessed. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +*> +* ===================================================================== + SUBROUTINE DLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, + $ LDT, NV, WV, LDWV, WORK, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, + $ LDZ, LWORK, N, ND, NH, NS, NV, NW + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), + $ V( LDV, * ), WORK( * ), WV( LDWV, * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, BETA, CC, CS, DD, EVI, EVK, FOO, S, + $ SAFMAX, SAFMIN, SMLNUM, SN, TAU, ULP + INTEGER I, IFST, ILST, INFO, INFQR, J, JW, K, KCOL, + $ KEND, KLN, KROW, KWTOP, LTOP, LWK1, LWK2, LWK3, + $ LWKOPT, NMIN + LOGICAL BULGE, SORTED +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + INTEGER ILAENV + EXTERNAL DLAMCH, ILAENV +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DGEHRD, DGEMM, DLABAD, DLACPY, DLAHQR, + $ DLANV2, DLAQR4, DLARF, DLARFG, DLASET, DORMHR, + $ DTREXC +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, INT, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* +* ==== Estimate optimal workspace. ==== +* + JW = MIN( NW, KBOT-KTOP+1 ) + IF( JW.LE.2 ) THEN + LWKOPT = 1 + ELSE +* +* ==== Workspace query call to DGEHRD ==== +* + CALL DGEHRD( JW, 1, JW-1, T, LDT, WORK, WORK, -1, INFO ) + LWK1 = INT( WORK( 1 ) ) +* +* ==== Workspace query call to DORMHR ==== +* + CALL DORMHR( 'R', 'N', JW, JW, 1, JW-1, T, LDT, WORK, V, LDV, + $ WORK, -1, INFO ) + LWK2 = INT( WORK( 1 ) ) +* +* ==== Workspace query call to DLAQR4 ==== +* + CALL DLAQR4( .true., .true., JW, 1, JW, T, LDT, SR, SI, 1, JW, + $ V, LDV, WORK, -1, INFQR ) + LWK3 = INT( WORK( 1 ) ) +* +* ==== Optimal workspace ==== +* + LWKOPT = MAX( JW+MAX( LWK1, LWK2 ), LWK3 ) + END IF +* +* ==== Quick return in case of workspace query. ==== +* + IF( LWORK.EQ.-1 ) THEN + WORK( 1 ) = DBLE( LWKOPT ) + RETURN + END IF +* +* ==== Nothing to do ... +* ... for an empty active block ... ==== + NS = 0 + ND = 0 + WORK( 1 ) = ONE + IF( KTOP.GT.KBOT ) + $ RETURN +* ... nor for an empty deflation window. ==== + IF( NW.LT.1 ) + $ RETURN +* +* ==== Machine constants ==== +* + SAFMIN = DLAMCH( 'SAFE MINIMUM' ) + SAFMAX = ONE / SAFMIN + CALL DLABAD( SAFMIN, SAFMAX ) + ULP = DLAMCH( 'PRECISION' ) + SMLNUM = SAFMIN*( DBLE( N ) / ULP ) +* +* ==== Setup deflation window ==== +* + JW = MIN( NW, KBOT-KTOP+1 ) + KWTOP = KBOT - JW + 1 + IF( KWTOP.EQ.KTOP ) THEN + S = ZERO + ELSE + S = H( KWTOP, KWTOP-1 ) + END IF +* + IF( KBOT.EQ.KWTOP ) THEN +* +* ==== 1-by-1 deflation window: not much to do ==== +* + SR( KWTOP ) = H( KWTOP, KWTOP ) + SI( KWTOP ) = ZERO + NS = 1 + ND = 0 + IF( ABS( S ).LE.MAX( SMLNUM, ULP*ABS( H( KWTOP, KWTOP ) ) ) ) + $ THEN + NS = 0 + ND = 1 + IF( KWTOP.GT.KTOP ) + $ H( KWTOP, KWTOP-1 ) = ZERO + END IF + WORK( 1 ) = ONE + RETURN + END IF +* +* ==== Convert to spike-triangular form. (In case of a +* . rare QR failure, this routine continues to do +* . aggressive early deflation using that part of +* . the deflation window that converged using INFQR +* . here and there to keep track.) ==== +* + CALL DLACPY( 'U', JW, JW, H( KWTOP, KWTOP ), LDH, T, LDT ) + CALL DCOPY( JW-1, H( KWTOP+1, KWTOP ), LDH+1, T( 2, 1 ), LDT+1 ) +* + CALL DLASET( 'A', JW, JW, ZERO, ONE, V, LDV ) + NMIN = ILAENV( 12, 'DLAQR3', 'SV', JW, 1, JW, LWORK ) + IF( JW.GT.NMIN ) THEN + CALL DLAQR4( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), + $ SI( KWTOP ), 1, JW, V, LDV, WORK, LWORK, INFQR ) + ELSE + CALL DLAHQR( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), + $ SI( KWTOP ), 1, JW, V, LDV, INFQR ) + END IF +* +* ==== DTREXC needs a clean margin near the diagonal ==== +* + DO 10 J = 1, JW - 3 + T( J+2, J ) = ZERO + T( J+3, J ) = ZERO + 10 CONTINUE + IF( JW.GT.2 ) + $ T( JW, JW-2 ) = ZERO +* +* ==== Deflation detection loop ==== +* + NS = JW + ILST = INFQR + 1 + 20 CONTINUE + IF( ILST.LE.NS ) THEN + IF( NS.EQ.1 ) THEN + BULGE = .FALSE. + ELSE + BULGE = T( NS, NS-1 ).NE.ZERO + END IF +* +* ==== Small spike tip test for deflation ==== +* + IF( .NOT. BULGE ) THEN +* +* ==== Real eigenvalue ==== +* + FOO = ABS( T( NS, NS ) ) + IF( FOO.EQ.ZERO ) + $ FOO = ABS( S ) + IF( ABS( S*V( 1, NS ) ).LE.MAX( SMLNUM, ULP*FOO ) ) THEN +* +* ==== Deflatable ==== +* + NS = NS - 1 + ELSE +* +* ==== Undeflatable. Move it up out of the way. +* . (DTREXC can not fail in this case.) ==== +* + IFST = NS + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + ILST = ILST + 1 + END IF + ELSE +* +* ==== Complex conjugate pair ==== +* + FOO = ABS( T( NS, NS ) ) + SQRT( ABS( T( NS, NS-1 ) ) )* + $ SQRT( ABS( T( NS-1, NS ) ) ) + IF( FOO.EQ.ZERO ) + $ FOO = ABS( S ) + IF( MAX( ABS( S*V( 1, NS ) ), ABS( S*V( 1, NS-1 ) ) ).LE. + $ MAX( SMLNUM, ULP*FOO ) ) THEN +* +* ==== Deflatable ==== +* + NS = NS - 2 + ELSE +* +* ==== Undeflatable. Move them up out of the way. +* . Fortunately, DTREXC does the right thing with +* . ILST in case of a rare exchange failure. ==== +* + IFST = NS + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + ILST = ILST + 2 + END IF + END IF +* +* ==== End deflation detection loop ==== +* + GO TO 20 + END IF +* +* ==== Return to Hessenberg form ==== +* + IF( NS.EQ.0 ) + $ S = ZERO +* + IF( NS.LT.JW ) THEN +* +* ==== sorting diagonal blocks of T improves accuracy for +* . graded matrices. Bubble sort deals well with +* . exchange failures. ==== +* + SORTED = .false. + I = NS + 1 + 30 CONTINUE + IF( SORTED ) + $ GO TO 50 + SORTED = .true. +* + KEND = I - 1 + I = INFQR + 1 + IF( I.EQ.NS ) THEN + K = I + 1 + ELSE IF( T( I+1, I ).EQ.ZERO ) THEN + K = I + 1 + ELSE + K = I + 2 + END IF + 40 CONTINUE + IF( K.LE.KEND ) THEN + IF( K.EQ.I+1 ) THEN + EVI = ABS( T( I, I ) ) + ELSE + EVI = ABS( T( I, I ) ) + SQRT( ABS( T( I+1, I ) ) )* + $ SQRT( ABS( T( I, I+1 ) ) ) + END IF +* + IF( K.EQ.KEND ) THEN + EVK = ABS( T( K, K ) ) + ELSE IF( T( K+1, K ).EQ.ZERO ) THEN + EVK = ABS( T( K, K ) ) + ELSE + EVK = ABS( T( K, K ) ) + SQRT( ABS( T( K+1, K ) ) )* + $ SQRT( ABS( T( K, K+1 ) ) ) + END IF +* + IF( EVI.GE.EVK ) THEN + I = K + ELSE + SORTED = .false. + IFST = I + ILST = K + CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, + $ INFO ) + IF( INFO.EQ.0 ) THEN + I = ILST + ELSE + I = K + END IF + END IF + IF( I.EQ.KEND ) THEN + K = I + 1 + ELSE IF( T( I+1, I ).EQ.ZERO ) THEN + K = I + 1 + ELSE + K = I + 2 + END IF + GO TO 40 + END IF + GO TO 30 + 50 CONTINUE + END IF +* +* ==== Restore shift/eigenvalue array from T ==== +* + I = JW + 60 CONTINUE + IF( I.GE.INFQR+1 ) THEN + IF( I.EQ.INFQR+1 ) THEN + SR( KWTOP+I-1 ) = T( I, I ) + SI( KWTOP+I-1 ) = ZERO + I = I - 1 + ELSE IF( T( I, I-1 ).EQ.ZERO ) THEN + SR( KWTOP+I-1 ) = T( I, I ) + SI( KWTOP+I-1 ) = ZERO + I = I - 1 + ELSE + AA = T( I-1, I-1 ) + CC = T( I, I-1 ) + BB = T( I-1, I ) + DD = T( I, I ) + CALL DLANV2( AA, BB, CC, DD, SR( KWTOP+I-2 ), + $ SI( KWTOP+I-2 ), SR( KWTOP+I-1 ), + $ SI( KWTOP+I-1 ), CS, SN ) + I = I - 2 + END IF + GO TO 60 + END IF +* + IF( NS.LT.JW .OR. S.EQ.ZERO ) THEN + IF( NS.GT.1 .AND. S.NE.ZERO ) THEN +* +* ==== Reflect spike back into lower triangle ==== +* + CALL DCOPY( NS, V, LDV, WORK, 1 ) + BETA = WORK( 1 ) + CALL DLARFG( NS, BETA, WORK( 2 ), 1, TAU ) + WORK( 1 ) = ONE +* + CALL DLASET( 'L', JW-2, JW-2, ZERO, ZERO, T( 3, 1 ), LDT ) +* + CALL DLARF( 'L', NS, JW, WORK, 1, TAU, T, LDT, + $ WORK( JW+1 ) ) + CALL DLARF( 'R', NS, NS, WORK, 1, TAU, T, LDT, + $ WORK( JW+1 ) ) + CALL DLARF( 'R', JW, NS, WORK, 1, TAU, V, LDV, + $ WORK( JW+1 ) ) +* + CALL DGEHRD( JW, 1, NS, T, LDT, WORK, WORK( JW+1 ), + $ LWORK-JW, INFO ) + END IF +* +* ==== Copy updated reduced window into place ==== +* + IF( KWTOP.GT.1 ) + $ H( KWTOP, KWTOP-1 ) = S*V( 1, 1 ) + CALL DLACPY( 'U', JW, JW, T, LDT, H( KWTOP, KWTOP ), LDH ) + CALL DCOPY( JW-1, T( 2, 1 ), LDT+1, H( KWTOP+1, KWTOP ), + $ LDH+1 ) +* +* ==== Accumulate orthogonal matrix in order update +* . H and Z, if requested. ==== +* + IF( NS.GT.1 .AND. S.NE.ZERO ) + $ CALL DORMHR( 'R', 'N', JW, NS, 1, NS, T, LDT, WORK, V, LDV, + $ WORK( JW+1 ), LWORK-JW, INFO ) +* +* ==== Update vertical slab in H ==== +* + IF( WANTT ) THEN + LTOP = 1 + ELSE + LTOP = KTOP + END IF + DO 70 KROW = LTOP, KWTOP - 1, NV + KLN = MIN( NV, KWTOP-KROW ) + CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, H( KROW, KWTOP ), + $ LDH, V, LDV, ZERO, WV, LDWV ) + CALL DLACPY( 'A', KLN, JW, WV, LDWV, H( KROW, KWTOP ), LDH ) + 70 CONTINUE +* +* ==== Update horizontal slab in H ==== +* + IF( WANTT ) THEN + DO 80 KCOL = KBOT + 1, N, NH + KLN = MIN( NH, N-KCOL+1 ) + CALL DGEMM( 'C', 'N', JW, KLN, JW, ONE, V, LDV, + $ H( KWTOP, KCOL ), LDH, ZERO, T, LDT ) + CALL DLACPY( 'A', JW, KLN, T, LDT, H( KWTOP, KCOL ), + $ LDH ) + 80 CONTINUE + END IF +* +* ==== Update vertical slab in Z ==== +* + IF( WANTZ ) THEN + DO 90 KROW = ILOZ, IHIZ, NV + KLN = MIN( NV, IHIZ-KROW+1 ) + CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, Z( KROW, KWTOP ), + $ LDZ, V, LDV, ZERO, WV, LDWV ) + CALL DLACPY( 'A', KLN, JW, WV, LDWV, Z( KROW, KWTOP ), + $ LDZ ) + 90 CONTINUE + END IF + END IF +* +* ==== Return the number of deflations ... ==== +* + ND = JW - NS +* +* ==== ... and the number of shifts. (Subtracting +* . INFQR from the spike length takes care +* . of the case of a rare QR failure while +* . calculating eigenvalues of the deflation +* . window.) ==== +* + NS = NS - INFQR +* +* ==== Return optimal workspace. ==== +* + WORK( 1 ) = DBLE( LWKOPT ) +* +* ==== End of DLAQR3 ==== +* + END +*> \brief \b DLAQR4 computes the eigenvalues of a Hessenberg matrix, and optionally the matrices from the Schur decomposition. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR4 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR4( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, +* ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAQR4 implements one level of recursion for DLAQR0. +*> It is a complete implementation of the small bulge multi-shift +*> QR algorithm. It may be called by DLAQR0 and, for large enough +*> deflation window size, it may be called by DLAQR3. This +*> subroutine is identical to DLAQR0 except that it calls DLAQR2 +*> instead of DLAQR3. +*> +*> DLAQR4 computes the eigenvalues of a Hessenberg matrix H +*> and, optionally, the matrices T and Z from the Schur decomposition +*> H = Z T Z**T, where T is an upper quasi-triangular matrix (the +*> Schur form), and Z is the orthogonal matrix of Schur vectors. +*> +*> Optionally Z may be postmultiplied into an input orthogonal +*> matrix Q so that this routine can give the Schur factorization +*> of a matrix A which has been reduced to the Hessenberg form H +*> by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is LOGICAL +*> = .TRUE. : the full Schur form T is required; +*> = .FALSE.: only eigenvalues are required. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is LOGICAL +*> = .TRUE. : the matrix of Schur vectors Z is required; +*> = .FALSE.: Schur vectors are not required. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix H. N .GE. 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper triangular in rows +*> and columns 1:ILO-1 and IHI+1:N and, if ILO.GT.1, +*> H(ILO,ILO-1) is zero. ILO and IHI are normally set by a +*> previous call to DGEBAL, and then passed to DGEHRD when the +*> matrix output by DGEBAL is reduced to Hessenberg form. +*> Otherwise, ILO and IHI should be set to 1 and N, +*> respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. +*> If N = 0, then ILO = 1 and IHI = 0. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array, dimension (LDH,N) +*> On entry, the upper Hessenberg matrix H. +*> On exit, if INFO = 0 and WANTT is .TRUE., then H contains +*> the upper quasi-triangular matrix T from the Schur +*> decomposition (the Schur form); 2-by-2 diagonal blocks +*> (corresponding to complex conjugate pairs of eigenvalues) +*> are returned in standard form, with H(i,i) = H(i+1,i+1) +*> and H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and WANTT is +*> .FALSE., then the contents of H are unspecified on exit. +*> (The output value of H when INFO.GT.0 is given under the +*> description of INFO below.) +*> +*> This subroutine may explicitly set H(i,j) = 0 for i.GT.j and +*> j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is INTEGER +*> The leading dimension of the array H. LDH .GE. max(1,N). +*> \endverbatim +*> +*> \param[out] WR +*> \verbatim +*> WR is DOUBLE PRECISION array, dimension (IHI) +*> \endverbatim +*> +*> \param[out] WI +*> \verbatim +*> WI is DOUBLE PRECISION array, dimension (IHI) +*> The real and imaginary parts, respectively, of the computed +*> eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) +*> and WI(ILO:IHI). If two eigenvalues are computed as a +*> complex conjugate pair, they are stored in consecutive +*> elements of WR and WI, say the i-th and (i+1)th, with +*> WI(i) .GT. 0 and WI(i+1) .LT. 0. If WANTT is .TRUE., then +*> the eigenvalues are stored in the same order as on the +*> diagonal of the Schur form returned in H, with +*> WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal +*> block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and +*> WI(i+1) = -WI(i). +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. +*> 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N. +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array, dimension (LDZ,IHI) +*> If WANTZ is .FALSE., then Z is not referenced. +*> If WANTZ is .TRUE., then Z(ILO:IHI,ILOZ:IHIZ) is +*> replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the +*> orthogonal Schur factor of H(ILO:IHI,ILO:IHI). +*> (The output value of Z when INFO.GT.0 is given under +*> the description of INFO below.) +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is INTEGER +*> The leading dimension of the array Z. if WANTZ is .TRUE. +*> then LDZ.GE.MAX(1,IHIZ). Otherwize, LDZ.GE.1. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension LWORK +*> On exit, if LWORK = -1, WORK(1) returns an estimate of +*> the optimal value for LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK .GE. max(1,N) +*> is sufficient, but LWORK typically as large as 6*N may +*> be required for optimal performance. A workspace query +*> to determine the optimal workspace size is recommended. +*> +*> If LWORK = -1, then DLAQR4 does a workspace query. +*> In this case, DLAQR4 checks the input parameters and +*> estimates the optimal workspace size for the given +*> values of N, ILO and IHI. The estimate is returned +*> in WORK(1). No error message related to LWORK is +*> issued by XERBLA. Neither H nor Z are accessed. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> .GT. 0: if INFO = i, DLAQR4 failed to compute all of +*> the eigenvalues. Elements 1:ilo-1 and i+1:n of WR +*> and WI contain those eigenvalues which have been +*> successfully computed. (Failures are rare.) +*> +*> If INFO .GT. 0 and WANT is .FALSE., then on exit, +*> the remaining unconverged eigenvalues are the eigen- +*> values of the upper Hessenberg matrix rows and +*> columns ILO through INFO of the final, output +*> value of H. +*> +*> If INFO .GT. 0 and WANTT is .TRUE., then on exit +*> +*> (*) (initial value of H)*U = U*(final value of H) +*> +*> where U is a orthogonal matrix. The final +*> value of H is upper Hessenberg and triangular in +*> rows and columns INFO+1 through IHI. +*> +*> If INFO .GT. 0 and WANTZ is .TRUE., then on exit +*> +*> (final value of Z(ILO:IHI,ILOZ:IHIZ) +*> = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U +*> +*> where U is the orthogonal matrix in (*) (regard- +*> less of the value of WANTT.) +*> +*> If INFO .GT. 0 and WANTZ is .FALSE., then Z is not +*> accessed. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +* +*> \par References: +* ================ +*> +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 +*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages +*> 929--947, 2002. +*> \n +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part II: Aggressive Early Deflation, SIAM Journal +*> of Matrix Analysis, volume 23, pages 948--973, 2002. +*> +* ===================================================================== + SUBROUTINE DLAQR4( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, + $ ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* .. Parameters .. +* +* ==== Matrices of order NTINY or smaller must be processed by +* . DLAHQR because of insufficient subdiagonal scratch space. +* . (This is a hard limit.) ==== + INTEGER NTINY + PARAMETER ( NTINY = 11 ) +* +* ==== Exceptional deflation windows: try to cure rare +* . slow convergence by varying the size of the +* . deflation window after KEXNW iterations. ==== + INTEGER KEXNW + PARAMETER ( KEXNW = 5 ) +* +* ==== Exceptional shifts: try to cure rare slow convergence +* . with ad-hoc exceptional shifts every KEXSH iterations. +* . ==== + INTEGER KEXSH + PARAMETER ( KEXSH = 6 ) +* +* ==== The constants WILK1 and WILK2 are used to form the +* . exceptional shifts. ==== + DOUBLE PRECISION WILK1, WILK2 + PARAMETER ( WILK1 = 0.75d0, WILK2 = -0.4375d0 ) + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AA, BB, CC, CS, DD, SN, SS, SWAP + INTEGER I, INF, IT, ITMAX, K, KACC22, KBOT, KDU, KS, + $ KT, KTOP, KU, KV, KWH, KWTOP, KWV, LD, LS, + $ LWKOPT, NDEC, NDFL, NH, NHO, NIBBLE, NMIN, NS, + $ NSMAX, NSR, NVE, NW, NWMAX, NWR, NWUPBD + LOGICAL SORTED + CHARACTER JBCMPZ*2 +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Local Arrays .. + DOUBLE PRECISION ZDUM( 1, 1 ) +* .. +* .. External Subroutines .. + EXTERNAL DLACPY, DLAHQR, DLANV2, DLAQR2, DLAQR5 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, INT, MAX, MIN, MOD +* .. +* .. Executable Statements .. + INFO = 0 +* +* ==== Quick return for N = 0: nothing to do. ==== +* + IF( N.EQ.0 ) THEN + WORK( 1 ) = ONE + RETURN + END IF +* + IF( N.LE.NTINY ) THEN +* +* ==== Tiny matrices must use DLAHQR. ==== +* + LWKOPT = 1 + IF( LWORK.NE.-1 ) + $ CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, + $ ILOZ, IHIZ, Z, LDZ, INFO ) + ELSE +* +* ==== Use small bulge multi-shift QR with aggressive early +* . deflation on larger-than-tiny matrices. ==== +* +* ==== Hope for the best. ==== +* + INFO = 0 +* +* ==== Set up job flags for ILAENV. ==== +* + IF( WANTT ) THEN + JBCMPZ( 1: 1 ) = 'S' + ELSE + JBCMPZ( 1: 1 ) = 'E' + END IF + IF( WANTZ ) THEN + JBCMPZ( 2: 2 ) = 'V' + ELSE + JBCMPZ( 2: 2 ) = 'N' + END IF +* +* ==== NWR = recommended deflation window size. At this +* . point, N .GT. NTINY = 11, so there is enough +* . subdiagonal workspace for NWR.GE.2 as required. +* . (In fact, there is enough subdiagonal space for +* . NWR.GE.3.) ==== +* + NWR = ILAENV( 13, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) + NWR = MAX( 2, NWR ) + NWR = MIN( IHI-ILO+1, ( N-1 ) / 3, NWR ) +* +* ==== NSR = recommended number of simultaneous shifts. +* . At this point N .GT. NTINY = 11, so there is at +* . enough subdiagonal workspace for NSR to be even +* . and greater than or equal to two as required. ==== +* + NSR = ILAENV( 15, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) + NSR = MIN( NSR, ( N+6 ) / 9, IHI-ILO ) + NSR = MAX( 2, NSR-MOD( NSR, 2 ) ) +* +* ==== Estimate optimal workspace ==== +* +* ==== Workspace query call to DLAQR2 ==== +* + CALL DLAQR2( WANTT, WANTZ, N, ILO, IHI, NWR+1, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, LS, LD, WR, WI, H, LDH, N, H, LDH, + $ N, H, LDH, WORK, -1 ) +* +* ==== Optimal workspace = MAX(DLAQR5, DLAQR2) ==== +* + LWKOPT = MAX( 3*NSR / 2, INT( WORK( 1 ) ) ) +* +* ==== Quick return in case of workspace query. ==== +* + IF( LWORK.EQ.-1 ) THEN + WORK( 1 ) = DBLE( LWKOPT ) + RETURN + END IF +* +* ==== DLAHQR/DLAQR0 crossover point ==== +* + NMIN = ILAENV( 12, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) + NMIN = MAX( NTINY, NMIN ) +* +* ==== Nibble crossover point ==== +* + NIBBLE = ILAENV( 14, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) + NIBBLE = MAX( 0, NIBBLE ) +* +* ==== Accumulate reflections during ttswp? Use block +* . 2-by-2 structure during matrix-matrix multiply? ==== +* + KACC22 = ILAENV( 16, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) + KACC22 = MAX( 0, KACC22 ) + KACC22 = MIN( 2, KACC22 ) +* +* ==== NWMAX = the largest possible deflation window for +* . which there is sufficient workspace. ==== +* + NWMAX = MIN( ( N-1 ) / 3, LWORK / 2 ) + NW = NWMAX +* +* ==== NSMAX = the Largest number of simultaneous shifts +* . for which there is sufficient workspace. ==== +* + NSMAX = MIN( ( N+6 ) / 9, 2*LWORK / 3 ) + NSMAX = NSMAX - MOD( NSMAX, 2 ) +* +* ==== NDFL: an iteration count restarted at deflation. ==== +* + NDFL = 1 +* +* ==== ITMAX = iteration limit ==== +* + ITMAX = MAX( 30, 2*KEXSH )*MAX( 10, ( IHI-ILO+1 ) ) +* +* ==== Last row and column in the active block ==== +* + KBOT = IHI +* +* ==== Main Loop ==== +* + DO 80 IT = 1, ITMAX +* +* ==== Done when KBOT falls below ILO ==== +* + IF( KBOT.LT.ILO ) + $ GO TO 90 +* +* ==== Locate active block ==== +* + DO 10 K = KBOT, ILO + 1, -1 + IF( H( K, K-1 ).EQ.ZERO ) + $ GO TO 20 + 10 CONTINUE + K = ILO + 20 CONTINUE + KTOP = K +* +* ==== Select deflation window size: +* . Typical Case: +* . If possible and advisable, nibble the entire +* . active block. If not, use size MIN(NWR,NWMAX) +* . or MIN(NWR+1,NWMAX) depending upon which has +* . the smaller corresponding subdiagonal entry +* . (a heuristic). +* . +* . Exceptional Case: +* . If there have been no deflations in KEXNW or +* . more iterations, then vary the deflation window +* . size. At first, because, larger windows are, +* . in general, more powerful than smaller ones, +* . rapidly increase the window to the maximum possible. +* . Then, gradually reduce the window size. ==== +* + NH = KBOT - KTOP + 1 + NWUPBD = MIN( NH, NWMAX ) + IF( NDFL.LT.KEXNW ) THEN + NW = MIN( NWUPBD, NWR ) + ELSE + NW = MIN( NWUPBD, 2*NW ) + END IF + IF( NW.LT.NWMAX ) THEN + IF( NW.GE.NH-1 ) THEN + NW = NH + ELSE + KWTOP = KBOT - NW + 1 + IF( ABS( H( KWTOP, KWTOP-1 ) ).GT. + $ ABS( H( KWTOP-1, KWTOP-2 ) ) )NW = NW + 1 + END IF + END IF + IF( NDFL.LT.KEXNW ) THEN + NDEC = -1 + ELSE IF( NDEC.GE.0 .OR. NW.GE.NWUPBD ) THEN + NDEC = NDEC + 1 + IF( NW-NDEC.LT.2 ) + $ NDEC = 0 + NW = NW - NDEC + END IF +* +* ==== Aggressive early deflation: +* . split workspace under the subdiagonal into +* . - an nw-by-nw work array V in the lower +* . left-hand-corner, +* . - an NW-by-at-least-NW-but-more-is-better +* . (NW-by-NHO) horizontal work array along +* . the bottom edge, +* . - an at-least-NW-but-more-is-better (NHV-by-NW) +* . vertical work array along the left-hand-edge. +* . ==== +* + KV = N - NW + 1 + KT = NW + 1 + NHO = ( N-NW-1 ) - KT + 1 + KWV = NW + 2 + NVE = ( N-NW ) - KWV + 1 +* +* ==== Aggressive early deflation ==== +* + CALL DLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, + $ IHIZ, Z, LDZ, LS, LD, WR, WI, H( KV, 1 ), LDH, + $ NHO, H( KV, KT ), LDH, NVE, H( KWV, 1 ), LDH, + $ WORK, LWORK ) +* +* ==== Adjust KBOT accounting for new deflations. ==== +* + KBOT = KBOT - LD +* +* ==== KS points to the shifts. ==== +* + KS = KBOT - LS + 1 +* +* ==== Skip an expensive QR sweep if there is a (partly +* . heuristic) reason to expect that many eigenvalues +* . will deflate without it. Here, the QR sweep is +* . skipped if many eigenvalues have just been deflated +* . or if the remaining active block is small. +* + IF( ( LD.EQ.0 ) .OR. ( ( 100*LD.LE.NW*NIBBLE ) .AND. ( KBOT- + $ KTOP+1.GT.MIN( NMIN, NWMAX ) ) ) ) THEN +* +* ==== NS = nominal number of simultaneous shifts. +* . This may be lowered (slightly) if DLAQR2 +* . did not provide that many shifts. ==== +* + NS = MIN( NSMAX, NSR, MAX( 2, KBOT-KTOP ) ) + NS = NS - MOD( NS, 2 ) +* +* ==== If there have been no deflations +* . in a multiple of KEXSH iterations, +* . then try exceptional shifts. +* . Otherwise use shifts provided by +* . DLAQR2 above or from the eigenvalues +* . of a trailing principal submatrix. ==== +* + IF( MOD( NDFL, KEXSH ).EQ.0 ) THEN + KS = KBOT - NS + 1 + DO 30 I = KBOT, MAX( KS+1, KTOP+2 ), -2 + SS = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) + AA = WILK1*SS + H( I, I ) + BB = SS + CC = WILK2*SS + DD = AA + CALL DLANV2( AA, BB, CC, DD, WR( I-1 ), WI( I-1 ), + $ WR( I ), WI( I ), CS, SN ) + 30 CONTINUE + IF( KS.EQ.KTOP ) THEN + WR( KS+1 ) = H( KS+1, KS+1 ) + WI( KS+1 ) = ZERO + WR( KS ) = WR( KS+1 ) + WI( KS ) = WI( KS+1 ) + END IF + ELSE +* +* ==== Got NS/2 or fewer shifts? Use DLAHQR +* . on a trailing principal submatrix to +* . get more. (Since NS.LE.NSMAX.LE.(N+6)/9, +* . there is enough space below the subdiagonal +* . to fit an NS-by-NS scratch array.) ==== +* + IF( KBOT-KS+1.LE.NS / 2 ) THEN + KS = KBOT - NS + 1 + KT = N - NS + 1 + CALL DLACPY( 'A', NS, NS, H( KS, KS ), LDH, + $ H( KT, 1 ), LDH ) + CALL DLAHQR( .false., .false., NS, 1, NS, + $ H( KT, 1 ), LDH, WR( KS ), WI( KS ), + $ 1, 1, ZDUM, 1, INF ) + KS = KS + INF +* +* ==== In case of a rare QR failure use +* . eigenvalues of the trailing 2-by-2 +* . principal submatrix. ==== +* + IF( KS.GE.KBOT ) THEN + AA = H( KBOT-1, KBOT-1 ) + CC = H( KBOT, KBOT-1 ) + BB = H( KBOT-1, KBOT ) + DD = H( KBOT, KBOT ) + CALL DLANV2( AA, BB, CC, DD, WR( KBOT-1 ), + $ WI( KBOT-1 ), WR( KBOT ), + $ WI( KBOT ), CS, SN ) + KS = KBOT - 1 + END IF + END IF +* + IF( KBOT-KS+1.GT.NS ) THEN +* +* ==== Sort the shifts (Helps a little) +* . Bubble sort keeps complex conjugate +* . pairs together. ==== +* + SORTED = .false. + DO 50 K = KBOT, KS + 1, -1 + IF( SORTED ) + $ GO TO 60 + SORTED = .true. + DO 40 I = KS, K - 1 + IF( ABS( WR( I ) )+ABS( WI( I ) ).LT. + $ ABS( WR( I+1 ) )+ABS( WI( I+1 ) ) ) THEN + SORTED = .false. +* + SWAP = WR( I ) + WR( I ) = WR( I+1 ) + WR( I+1 ) = SWAP +* + SWAP = WI( I ) + WI( I ) = WI( I+1 ) + WI( I+1 ) = SWAP + END IF + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + END IF +* +* ==== Shuffle shifts into pairs of real shifts +* . and pairs of complex conjugate shifts +* . assuming complex conjugate shifts are +* . already adjacent to one another. (Yes, +* . they are.) ==== +* + DO 70 I = KBOT, KS + 2, -2 + IF( WI( I ).NE.-WI( I-1 ) ) THEN +* + SWAP = WR( I ) + WR( I ) = WR( I-1 ) + WR( I-1 ) = WR( I-2 ) + WR( I-2 ) = SWAP +* + SWAP = WI( I ) + WI( I ) = WI( I-1 ) + WI( I-1 ) = WI( I-2 ) + WI( I-2 ) = SWAP + END IF + 70 CONTINUE + END IF +* +* ==== If there are only two shifts and both are +* . real, then use only one. ==== +* + IF( KBOT-KS+1.EQ.2 ) THEN + IF( WI( KBOT ).EQ.ZERO ) THEN + IF( ABS( WR( KBOT )-H( KBOT, KBOT ) ).LT. + $ ABS( WR( KBOT-1 )-H( KBOT, KBOT ) ) ) THEN + WR( KBOT-1 ) = WR( KBOT ) + ELSE + WR( KBOT ) = WR( KBOT-1 ) + END IF + END IF + END IF +* +* ==== Use up to NS of the the smallest magnatiude +* . shifts. If there aren't NS shifts available, +* . then use them all, possibly dropping one to +* . make the number of shifts even. ==== +* + NS = MIN( NS, KBOT-KS+1 ) + NS = NS - MOD( NS, 2 ) + KS = KBOT - NS + 1 +* +* ==== Small-bulge multi-shift QR sweep: +* . split workspace under the subdiagonal into +* . - a KDU-by-KDU work array U in the lower +* . left-hand-corner, +* . - a KDU-by-at-least-KDU-but-more-is-better +* . (KDU-by-NHo) horizontal work array WH along +* . the bottom edge, +* . - and an at-least-KDU-but-more-is-better-by-KDU +* . (NVE-by-KDU) vertical work WV arrow along +* . the left-hand-edge. ==== +* + KDU = 3*NS - 3 + KU = N - KDU + 1 + KWH = KDU + 1 + NHO = ( N-KDU+1-4 ) - ( KDU+1 ) + 1 + KWV = KDU + 4 + NVE = N - KDU - KWV + 1 +* +* ==== Small-bulge multi-shift QR sweep ==== +* + CALL DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NS, + $ WR( KS ), WI( KS ), H, LDH, ILOZ, IHIZ, Z, + $ LDZ, WORK, 3, H( KU, 1 ), LDH, NVE, + $ H( KWV, 1 ), LDH, NHO, H( KU, KWH ), LDH ) + END IF +* +* ==== Note progress (or the lack of it). ==== +* + IF( LD.GT.0 ) THEN + NDFL = 1 + ELSE + NDFL = NDFL + 1 + END IF +* +* ==== End of main loop ==== + 80 CONTINUE +* +* ==== Iteration limit exceeded. Set INFO to show where +* . the problem occurred and exit. ==== +* + INFO = KBOT + 90 CONTINUE + END IF +* +* ==== Return the optimal value of LWORK. ==== +* + WORK( 1 ) = DBLE( LWKOPT ) +* +* ==== End of DLAQR4 ==== +* + END +*> \brief \b DLAQR5 performs a single small-bulge multi-shift QR sweep. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLAQR5 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, +* SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, +* LDU, NV, WV, LDWV, NH, WH, LDWH ) +* +* .. Scalar Arguments .. +* INTEGER IHIZ, ILOZ, KACC22, KBOT, KTOP, LDH, LDU, LDV, +* $ LDWH, LDWV, LDZ, N, NH, NSHFTS, NV +* LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), +* $ V( LDV, * ), WH( LDWH, * ), WV( LDWV, * ), +* $ Z( LDZ, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAQR5, called by DLAQR0, performs a +*> single small-bulge multi-shift QR sweep. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] WANTT +*> \verbatim +*> WANTT is logical scalar +*> WANTT = .true. if the quasi-triangular Schur factor +*> is being computed. WANTT is set to .false. otherwise. +*> \endverbatim +*> +*> \param[in] WANTZ +*> \verbatim +*> WANTZ is logical scalar +*> WANTZ = .true. if the orthogonal Schur factor is being +*> computed. WANTZ is set to .false. otherwise. +*> \endverbatim +*> +*> \param[in] KACC22 +*> \verbatim +*> KACC22 is integer with value 0, 1, or 2. +*> Specifies the computation mode of far-from-diagonal +*> orthogonal updates. +*> = 0: DLAQR5 does not accumulate reflections and does not +*> use matrix-matrix multiply to update far-from-diagonal +*> matrix entries. +*> = 1: DLAQR5 accumulates reflections and uses matrix-matrix +*> multiply to update the far-from-diagonal matrix entries. +*> = 2: DLAQR5 accumulates reflections, uses matrix-matrix +*> multiply to update the far-from-diagonal matrix entries, +*> and takes advantage of 2-by-2 block structure during +*> matrix multiplies. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is integer scalar +*> N is the order of the Hessenberg matrix H upon which this +*> subroutine operates. +*> \endverbatim +*> +*> \param[in] KTOP +*> \verbatim +*> KTOP is integer scalar +*> \endverbatim +*> +*> \param[in] KBOT +*> \verbatim +*> KBOT is integer scalar +*> These are the first and last rows and columns of an +*> isolated diagonal block upon which the QR sweep is to be +*> applied. It is assumed without a check that +*> either KTOP = 1 or H(KTOP,KTOP-1) = 0 +*> and +*> either KBOT = N or H(KBOT+1,KBOT) = 0. +*> \endverbatim +*> +*> \param[in] NSHFTS +*> \verbatim +*> NSHFTS is integer scalar +*> NSHFTS gives the number of simultaneous shifts. NSHFTS +*> must be positive and even. +*> \endverbatim +*> +*> \param[in,out] SR +*> \verbatim +*> SR is DOUBLE PRECISION array of size (NSHFTS) +*> \endverbatim +*> +*> \param[in,out] SI +*> \verbatim +*> SI is DOUBLE PRECISION array of size (NSHFTS) +*> SR contains the real parts and SI contains the imaginary +*> parts of the NSHFTS shifts of origin that define the +*> multi-shift QR sweep. On output SR and SI may be +*> reordered. +*> \endverbatim +*> +*> \param[in,out] H +*> \verbatim +*> H is DOUBLE PRECISION array of size (LDH,N) +*> On input H contains a Hessenberg matrix. On output a +*> multi-shift QR sweep with shifts SR(J)+i*SI(J) is applied +*> to the isolated diagonal block in rows and columns KTOP +*> through KBOT. +*> \endverbatim +*> +*> \param[in] LDH +*> \verbatim +*> LDH is integer scalar +*> LDH is the leading dimension of H just as declared in the +*> calling procedure. LDH.GE.MAX(1,N). +*> \endverbatim +*> +*> \param[in] ILOZ +*> \verbatim +*> ILOZ is INTEGER +*> \endverbatim +*> +*> \param[in] IHIZ +*> \verbatim +*> IHIZ is INTEGER +*> Specify the rows of Z to which transformations must be +*> applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N +*> \endverbatim +*> +*> \param[in,out] Z +*> \verbatim +*> Z is DOUBLE PRECISION array of size (LDZ,IHIZ) +*> If WANTZ = .TRUE., then the QR Sweep orthogonal +*> similarity transformation is accumulated into +*> Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right. +*> If WANTZ = .FALSE., then Z is unreferenced. +*> \endverbatim +*> +*> \param[in] LDZ +*> \verbatim +*> LDZ is integer scalar +*> LDA is the leading dimension of Z just as declared in +*> the calling procedure. LDZ.GE.N. +*> \endverbatim +*> +*> \param[out] V +*> \verbatim +*> V is DOUBLE PRECISION array of size (LDV,NSHFTS/2) +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is integer scalar +*> LDV is the leading dimension of V as declared in the +*> calling procedure. LDV.GE.3. +*> \endverbatim +*> +*> \param[out] U +*> \verbatim +*> U is DOUBLE PRECISION array of size +*> (LDU,3*NSHFTS-3) +*> \endverbatim +*> +*> \param[in] LDU +*> \verbatim +*> LDU is integer scalar +*> LDU is the leading dimension of U just as declared in the +*> in the calling subroutine. LDU.GE.3*NSHFTS-3. +*> \endverbatim +*> +*> \param[in] NH +*> \verbatim +*> NH is integer scalar +*> NH is the number of columns in array WH available for +*> workspace. NH.GE.1. +*> \endverbatim +*> +*> \param[out] WH +*> \verbatim +*> WH is DOUBLE PRECISION array of size (LDWH,NH) +*> \endverbatim +*> +*> \param[in] LDWH +*> \verbatim +*> LDWH is integer scalar +*> Leading dimension of WH just as declared in the +*> calling procedure. LDWH.GE.3*NSHFTS-3. +*> \endverbatim +*> +*> \param[in] NV +*> \verbatim +*> NV is integer scalar +*> NV is the number of rows in WV agailable for workspace. +*> NV.GE.1. +*> \endverbatim +*> +*> \param[out] WV +*> \verbatim +*> WV is DOUBLE PRECISION array of size +*> (LDWV,3*NSHFTS-3) +*> \endverbatim +*> +*> \param[in] LDWV +*> \verbatim +*> LDWV is integer scalar +*> LDWV is the leading dimension of WV as declared in the +*> in the calling subroutine. LDWV.GE.NV. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Contributors: +* ================== +*> +*> Karen Braman and Ralph Byers, Department of Mathematics, +*> University of Kansas, USA +* +*> \par References: +* ================ +*> +*> K. Braman, R. Byers and R. Mathias, The Multi-Shift QR +*> Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 +*> Performance, SIAM Journal of Matrix Analysis, volume 23, pages +*> 929--947, 2002. +*> +* ===================================================================== + SUBROUTINE DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, + $ SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, + $ LDU, NV, WV, LDWV, NH, WH, LDWH ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + INTEGER IHIZ, ILOZ, KACC22, KBOT, KTOP, LDH, LDU, LDV, + $ LDWH, LDWV, LDZ, N, NH, NSHFTS, NV + LOGICAL WANTT, WANTZ +* .. +* .. Array Arguments .. + DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), + $ V( LDV, * ), WH( LDWH, * ), WV( LDWV, * ), + $ Z( LDZ, * ) +* .. +* +* ================================================================ +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ALPHA, BETA, H11, H12, H21, H22, REFSUM, + $ SAFMAX, SAFMIN, SCL, SMLNUM, SWAP, TST1, TST2, + $ ULP + INTEGER I, I2, I4, INCOL, J, J2, J4, JBOT, JCOL, JLEN, + $ JROW, JTOP, K, K1, KDU, KMS, KNZ, KRCOL, KZS, + $ M, M22, MBOT, MEND, MSTART, MTOP, NBMPS, NDCOL, + $ NS, NU + LOGICAL ACCUM, BLK22, BMP22 +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. +* + INTRINSIC ABS, DBLE, MAX, MIN, MOD +* .. +* .. Local Arrays .. + DOUBLE PRECISION VT( 3 ) +* .. +* .. External Subroutines .. + EXTERNAL DGEMM, DLABAD, DLACPY, DLAQR1, DLARFG, DLASET, + $ DTRMM +* .. +* .. Executable Statements .. +* +* ==== If there are no shifts, then there is nothing to do. ==== +* + IF( NSHFTS.LT.2 ) + $ RETURN +* +* ==== If the active block is empty or 1-by-1, then there +* . is nothing to do. ==== +* + IF( KTOP.GE.KBOT ) + $ RETURN +* +* ==== Shuffle shifts into pairs of real shifts and pairs +* . of complex conjugate shifts assuming complex +* . conjugate shifts are already adjacent to one +* . another. ==== +* + DO 10 I = 1, NSHFTS - 2, 2 + IF( SI( I ).NE.-SI( I+1 ) ) THEN +* + SWAP = SR( I ) + SR( I ) = SR( I+1 ) + SR( I+1 ) = SR( I+2 ) + SR( I+2 ) = SWAP +* + SWAP = SI( I ) + SI( I ) = SI( I+1 ) + SI( I+1 ) = SI( I+2 ) + SI( I+2 ) = SWAP + END IF + 10 CONTINUE +* +* ==== NSHFTS is supposed to be even, but if it is odd, +* . then simply reduce it by one. The shuffle above +* . ensures that the dropped shift is real and that +* . the remaining shifts are paired. ==== +* + NS = NSHFTS - MOD( NSHFTS, 2 ) +* +* ==== Machine constants for deflation ==== +* + SAFMIN = DLAMCH( 'SAFE MINIMUM' ) + SAFMAX = ONE / SAFMIN + CALL DLABAD( SAFMIN, SAFMAX ) + ULP = DLAMCH( 'PRECISION' ) + SMLNUM = SAFMIN*( DBLE( N ) / ULP ) +* +* ==== Use accumulated reflections to update far-from-diagonal +* . entries ? ==== +* + ACCUM = ( KACC22.EQ.1 ) .OR. ( KACC22.EQ.2 ) +* +* ==== If so, exploit the 2-by-2 block structure? ==== +* + BLK22 = ( NS.GT.2 ) .AND. ( KACC22.EQ.2 ) +* +* ==== clear trash ==== +* + IF( KTOP+2.LE.KBOT ) + $ H( KTOP+2, KTOP ) = ZERO +* +* ==== NBMPS = number of 2-shift bulges in the chain ==== +* + NBMPS = NS / 2 +* +* ==== KDU = width of slab ==== +* + KDU = 6*NBMPS - 3 +* +* ==== Create and chase chains of NBMPS bulges ==== +* + DO 220 INCOL = 3*( 1-NBMPS ) + KTOP - 1, KBOT - 2, 3*NBMPS - 2 + NDCOL = INCOL + KDU + IF( ACCUM ) + $ CALL DLASET( 'ALL', KDU, KDU, ZERO, ONE, U, LDU ) +* +* ==== Near-the-diagonal bulge chase. The following loop +* . performs the near-the-diagonal part of a small bulge +* . multi-shift QR sweep. Each 6*NBMPS-2 column diagonal +* . chunk extends from column INCOL to column NDCOL +* . (including both column INCOL and column NDCOL). The +* . following loop chases a 3*NBMPS column long chain of +* . NBMPS bulges 3*NBMPS-2 columns to the right. (INCOL +* . may be less than KTOP and and NDCOL may be greater than +* . KBOT indicating phantom columns from which to chase +* . bulges before they are actually introduced or to which +* . to chase bulges beyond column KBOT.) ==== +* + DO 150 KRCOL = INCOL, MIN( INCOL+3*NBMPS-3, KBOT-2 ) +* +* ==== Bulges number MTOP to MBOT are active double implicit +* . shift bulges. There may or may not also be small +* . 2-by-2 bulge, if there is room. The inactive bulges +* . (if any) must wait until the active bulges have moved +* . down the diagonal to make room. The phantom matrix +* . paradigm described above helps keep track. ==== +* + MTOP = MAX( 1, ( ( KTOP-1 )-KRCOL+2 ) / 3+1 ) + MBOT = MIN( NBMPS, ( KBOT-KRCOL ) / 3 ) + M22 = MBOT + 1 + BMP22 = ( MBOT.LT.NBMPS ) .AND. ( KRCOL+3*( M22-1 ) ).EQ. + $ ( KBOT-2 ) +* +* ==== Generate reflections to chase the chain right +* . one column. (The minimum value of K is KTOP-1.) ==== +* + DO 20 M = MTOP, MBOT + K = KRCOL + 3*( M-1 ) + IF( K.EQ.KTOP-1 ) THEN + CALL DLAQR1( 3, H( KTOP, KTOP ), LDH, SR( 2*M-1 ), + $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), + $ V( 1, M ) ) + ALPHA = V( 1, M ) + CALL DLARFG( 3, ALPHA, V( 2, M ), 1, V( 1, M ) ) + ELSE + BETA = H( K+1, K ) + V( 2, M ) = H( K+2, K ) + V( 3, M ) = H( K+3, K ) + CALL DLARFG( 3, BETA, V( 2, M ), 1, V( 1, M ) ) +* +* ==== A Bulge may collapse because of vigilant +* . deflation or destructive underflow. In the +* . underflow case, try the two-small-subdiagonals +* . trick to try to reinflate the bulge. ==== +* + IF( H( K+3, K ).NE.ZERO .OR. H( K+3, K+1 ).NE. + $ ZERO .OR. H( K+3, K+2 ).EQ.ZERO ) THEN +* +* ==== Typical case: not collapsed (yet). ==== +* + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + ELSE +* +* ==== Atypical case: collapsed. Attempt to +* . reintroduce ignoring H(K+1,K) and H(K+2,K). +* . If the fill resulting from the new +* . reflector is too large, then abandon it. +* . Otherwise, use the new one. ==== +* + CALL DLAQR1( 3, H( K+1, K+1 ), LDH, SR( 2*M-1 ), + $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), + $ VT ) + ALPHA = VT( 1 ) + CALL DLARFG( 3, ALPHA, VT( 2 ), 1, VT( 1 ) ) + REFSUM = VT( 1 )*( H( K+1, K )+VT( 2 )* + $ H( K+2, K ) ) +* + IF( ABS( H( K+2, K )-REFSUM*VT( 2 ) )+ + $ ABS( REFSUM*VT( 3 ) ).GT.ULP* + $ ( ABS( H( K, K ) )+ABS( H( K+1, + $ K+1 ) )+ABS( H( K+2, K+2 ) ) ) ) THEN +* +* ==== Starting a new bulge here would +* . create non-negligible fill. Use +* . the old one with trepidation. ==== +* + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + ELSE +* +* ==== Stating a new bulge here would +* . create only negligible fill. +* . Replace the old reflector with +* . the new one. ==== +* + H( K+1, K ) = H( K+1, K ) - REFSUM + H( K+2, K ) = ZERO + H( K+3, K ) = ZERO + V( 1, M ) = VT( 1 ) + V( 2, M ) = VT( 2 ) + V( 3, M ) = VT( 3 ) + END IF + END IF + END IF + 20 CONTINUE +* +* ==== Generate a 2-by-2 reflection, if needed. ==== +* + K = KRCOL + 3*( M22-1 ) + IF( BMP22 ) THEN + IF( K.EQ.KTOP-1 ) THEN + CALL DLAQR1( 2, H( K+1, K+1 ), LDH, SR( 2*M22-1 ), + $ SI( 2*M22-1 ), SR( 2*M22 ), SI( 2*M22 ), + $ V( 1, M22 ) ) + BETA = V( 1, M22 ) + CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) + ELSE + BETA = H( K+1, K ) + V( 2, M22 ) = H( K+2, K ) + CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) + H( K+1, K ) = BETA + H( K+2, K ) = ZERO + END IF + END IF +* +* ==== Multiply H by reflections from the left ==== +* + IF( ACCUM ) THEN + JBOT = MIN( NDCOL, KBOT ) + ELSE IF( WANTT ) THEN + JBOT = N + ELSE + JBOT = KBOT + END IF + DO 40 J = MAX( KTOP, KRCOL ), JBOT + MEND = MIN( MBOT, ( J-KRCOL+2 ) / 3 ) + DO 30 M = MTOP, MEND + K = KRCOL + 3*( M-1 ) + REFSUM = V( 1, M )*( H( K+1, J )+V( 2, M )* + $ H( K+2, J )+V( 3, M )*H( K+3, J ) ) + H( K+1, J ) = H( K+1, J ) - REFSUM + H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M ) + H( K+3, J ) = H( K+3, J ) - REFSUM*V( 3, M ) + 30 CONTINUE + 40 CONTINUE + IF( BMP22 ) THEN + K = KRCOL + 3*( M22-1 ) + DO 50 J = MAX( K+1, KTOP ), JBOT + REFSUM = V( 1, M22 )*( H( K+1, J )+V( 2, M22 )* + $ H( K+2, J ) ) + H( K+1, J ) = H( K+1, J ) - REFSUM + H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M22 ) + 50 CONTINUE + END IF +* +* ==== Multiply H by reflections from the right. +* . Delay filling in the last row until the +* . vigilant deflation check is complete. ==== +* + IF( ACCUM ) THEN + JTOP = MAX( KTOP, INCOL ) + ELSE IF( WANTT ) THEN + JTOP = 1 + ELSE + JTOP = KTOP + END IF + DO 90 M = MTOP, MBOT + IF( V( 1, M ).NE.ZERO ) THEN + K = KRCOL + 3*( M-1 ) + DO 60 J = JTOP, MIN( KBOT, K+3 ) + REFSUM = V( 1, M )*( H( J, K+1 )+V( 2, M )* + $ H( J, K+2 )+V( 3, M )*H( J, K+3 ) ) + H( J, K+1 ) = H( J, K+1 ) - REFSUM + H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M ) + H( J, K+3 ) = H( J, K+3 ) - REFSUM*V( 3, M ) + 60 CONTINUE +* + IF( ACCUM ) THEN +* +* ==== Accumulate U. (If necessary, update Z later +* . with with an efficient matrix-matrix +* . multiply.) ==== +* + KMS = K - INCOL + DO 70 J = MAX( 1, KTOP-INCOL ), KDU + REFSUM = V( 1, M )*( U( J, KMS+1 )+V( 2, M )* + $ U( J, KMS+2 )+V( 3, M )*U( J, KMS+3 ) ) + U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM + U( J, KMS+2 ) = U( J, KMS+2 ) - REFSUM*V( 2, M ) + U( J, KMS+3 ) = U( J, KMS+3 ) - REFSUM*V( 3, M ) + 70 CONTINUE + ELSE IF( WANTZ ) THEN +* +* ==== U is not accumulated, so update Z +* . now by multiplying by reflections +* . from the right. ==== +* + DO 80 J = ILOZ, IHIZ + REFSUM = V( 1, M )*( Z( J, K+1 )+V( 2, M )* + $ Z( J, K+2 )+V( 3, M )*Z( J, K+3 ) ) + Z( J, K+1 ) = Z( J, K+1 ) - REFSUM + Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M ) + Z( J, K+3 ) = Z( J, K+3 ) - REFSUM*V( 3, M ) + 80 CONTINUE + END IF + END IF + 90 CONTINUE +* +* ==== Special case: 2-by-2 reflection (if needed) ==== +* + K = KRCOL + 3*( M22-1 ) + IF( BMP22 ) THEN + IF ( V( 1, M22 ).NE.ZERO ) THEN + DO 100 J = JTOP, MIN( KBOT, K+3 ) + REFSUM = V( 1, M22 )*( H( J, K+1 )+V( 2, M22 )* + $ H( J, K+2 ) ) + H( J, K+1 ) = H( J, K+1 ) - REFSUM + H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M22 ) + 100 CONTINUE +* + IF( ACCUM ) THEN + KMS = K - INCOL + DO 110 J = MAX( 1, KTOP-INCOL ), KDU + REFSUM = V( 1, M22 )*( U( J, KMS+1 )+ + $ V( 2, M22 )*U( J, KMS+2 ) ) + U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM + U( J, KMS+2 ) = U( J, KMS+2 ) - + $ REFSUM*V( 2, M22 ) + 110 CONTINUE + ELSE IF( WANTZ ) THEN + DO 120 J = ILOZ, IHIZ + REFSUM = V( 1, M22 )*( Z( J, K+1 )+V( 2, M22 )* + $ Z( J, K+2 ) ) + Z( J, K+1 ) = Z( J, K+1 ) - REFSUM + Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M22 ) + 120 CONTINUE + END IF + END IF + END IF +* +* ==== Vigilant deflation check ==== +* + MSTART = MTOP + IF( KRCOL+3*( MSTART-1 ).LT.KTOP ) + $ MSTART = MSTART + 1 + MEND = MBOT + IF( BMP22 ) + $ MEND = MEND + 1 + IF( KRCOL.EQ.KBOT-2 ) + $ MEND = MEND + 1 + DO 130 M = MSTART, MEND + K = MIN( KBOT-1, KRCOL+3*( M-1 ) ) +* +* ==== The following convergence test requires that +* . the tradition small-compared-to-nearby-diagonals +* . criterion and the Ahues & Tisseur (LAWN 122, 1997) +* . criteria both be satisfied. The latter improves +* . accuracy in some examples. Falling back on an +* . alternate convergence criterion when TST1 or TST2 +* . is zero (as done here) is traditional but probably +* . unnecessary. ==== +* + IF( H( K+1, K ).NE.ZERO ) THEN + TST1 = ABS( H( K, K ) ) + ABS( H( K+1, K+1 ) ) + IF( TST1.EQ.ZERO ) THEN + IF( K.GE.KTOP+1 ) + $ TST1 = TST1 + ABS( H( K, K-1 ) ) + IF( K.GE.KTOP+2 ) + $ TST1 = TST1 + ABS( H( K, K-2 ) ) + IF( K.GE.KTOP+3 ) + $ TST1 = TST1 + ABS( H( K, K-3 ) ) + IF( K.LE.KBOT-2 ) + $ TST1 = TST1 + ABS( H( K+2, K+1 ) ) + IF( K.LE.KBOT-3 ) + $ TST1 = TST1 + ABS( H( K+3, K+1 ) ) + IF( K.LE.KBOT-4 ) + $ TST1 = TST1 + ABS( H( K+4, K+1 ) ) + END IF + IF( ABS( H( K+1, K ) ).LE.MAX( SMLNUM, ULP*TST1 ) ) + $ THEN + H12 = MAX( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) + H21 = MIN( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) + H11 = MAX( ABS( H( K+1, K+1 ) ), + $ ABS( H( K, K )-H( K+1, K+1 ) ) ) + H22 = MIN( ABS( H( K+1, K+1 ) ), + $ ABS( H( K, K )-H( K+1, K+1 ) ) ) + SCL = H11 + H12 + TST2 = H22*( H11 / SCL ) +* + IF( TST2.EQ.ZERO .OR. H21*( H12 / SCL ).LE. + $ MAX( SMLNUM, ULP*TST2 ) )H( K+1, K ) = ZERO + END IF + END IF + 130 CONTINUE +* +* ==== Fill in the last row of each bulge. ==== +* + MEND = MIN( NBMPS, ( KBOT-KRCOL-1 ) / 3 ) + DO 140 M = MTOP, MEND + K = KRCOL + 3*( M-1 ) + REFSUM = V( 1, M )*V( 3, M )*H( K+4, K+3 ) + H( K+4, K+1 ) = -REFSUM + H( K+4, K+2 ) = -REFSUM*V( 2, M ) + H( K+4, K+3 ) = H( K+4, K+3 ) - REFSUM*V( 3, M ) + 140 CONTINUE +* +* ==== End of near-the-diagonal bulge chase. ==== +* + 150 CONTINUE +* +* ==== Use U (if accumulated) to update far-from-diagonal +* . entries in H. If required, use U to update Z as +* . well. ==== +* + IF( ACCUM ) THEN + IF( WANTT ) THEN + JTOP = 1 + JBOT = N + ELSE + JTOP = KTOP + JBOT = KBOT + END IF + IF( ( .NOT.BLK22 ) .OR. ( INCOL.LT.KTOP ) .OR. + $ ( NDCOL.GT.KBOT ) .OR. ( NS.LE.2 ) ) THEN +* +* ==== Updates not exploiting the 2-by-2 block +* . structure of U. K1 and NU keep track of +* . the location and size of U in the special +* . cases of introducing bulges and chasing +* . bulges off the bottom. In these special +* . cases and in case the number of shifts +* . is NS = 2, there is no 2-by-2 block +* . structure to exploit. ==== +* + K1 = MAX( 1, KTOP-INCOL ) + NU = ( KDU-MAX( 0, NDCOL-KBOT ) ) - K1 + 1 +* +* ==== Horizontal Multiply ==== +* + DO 160 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH + JLEN = MIN( NH, JBOT-JCOL+1 ) + CALL DGEMM( 'C', 'N', NU, JLEN, NU, ONE, U( K1, K1 ), + $ LDU, H( INCOL+K1, JCOL ), LDH, ZERO, WH, + $ LDWH ) + CALL DLACPY( 'ALL', NU, JLEN, WH, LDWH, + $ H( INCOL+K1, JCOL ), LDH ) + 160 CONTINUE +* +* ==== Vertical multiply ==== +* + DO 170 JROW = JTOP, MAX( KTOP, INCOL ) - 1, NV + JLEN = MIN( NV, MAX( KTOP, INCOL )-JROW ) + CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, + $ H( JROW, INCOL+K1 ), LDH, U( K1, K1 ), + $ LDU, ZERO, WV, LDWV ) + CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, + $ H( JROW, INCOL+K1 ), LDH ) + 170 CONTINUE +* +* ==== Z multiply (also vertical) ==== +* + IF( WANTZ ) THEN + DO 180 JROW = ILOZ, IHIZ, NV + JLEN = MIN( NV, IHIZ-JROW+1 ) + CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, + $ Z( JROW, INCOL+K1 ), LDZ, U( K1, K1 ), + $ LDU, ZERO, WV, LDWV ) + CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, + $ Z( JROW, INCOL+K1 ), LDZ ) + 180 CONTINUE + END IF + ELSE +* +* ==== Updates exploiting U's 2-by-2 block structure. +* . (I2, I4, J2, J4 are the last rows and columns +* . of the blocks.) ==== +* + I2 = ( KDU+1 ) / 2 + I4 = KDU + J2 = I4 - I2 + J4 = KDU +* +* ==== KZS and KNZ deal with the band of zeros +* . along the diagonal of one of the triangular +* . blocks. ==== +* + KZS = ( J4-J2 ) - ( NS+1 ) + KNZ = NS + 1 +* +* ==== Horizontal multiply ==== +* + DO 190 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH + JLEN = MIN( NH, JBOT-JCOL+1 ) +* +* ==== Copy bottom of H to top+KZS of scratch ==== +* (The first KZS rows get multiplied by zero.) ==== +* + CALL DLACPY( 'ALL', KNZ, JLEN, H( INCOL+1+J2, JCOL ), + $ LDH, WH( KZS+1, 1 ), LDWH ) +* +* ==== Multiply by U21**T ==== +* + CALL DLASET( 'ALL', KZS, JLEN, ZERO, ZERO, WH, LDWH ) + CALL DTRMM( 'L', 'U', 'C', 'N', KNZ, JLEN, ONE, + $ U( J2+1, 1+KZS ), LDU, WH( KZS+1, 1 ), + $ LDWH ) +* +* ==== Multiply top of H by U11**T ==== +* + CALL DGEMM( 'C', 'N', I2, JLEN, J2, ONE, U, LDU, + $ H( INCOL+1, JCOL ), LDH, ONE, WH, LDWH ) +* +* ==== Copy top of H to bottom of WH ==== +* + CALL DLACPY( 'ALL', J2, JLEN, H( INCOL+1, JCOL ), LDH, + $ WH( I2+1, 1 ), LDWH ) +* +* ==== Multiply by U21**T ==== +* + CALL DTRMM( 'L', 'L', 'C', 'N', J2, JLEN, ONE, + $ U( 1, I2+1 ), LDU, WH( I2+1, 1 ), LDWH ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'C', 'N', I4-I2, JLEN, J4-J2, ONE, + $ U( J2+1, I2+1 ), LDU, + $ H( INCOL+1+J2, JCOL ), LDH, ONE, + $ WH( I2+1, 1 ), LDWH ) +* +* ==== Copy it back ==== +* + CALL DLACPY( 'ALL', KDU, JLEN, WH, LDWH, + $ H( INCOL+1, JCOL ), LDH ) + 190 CONTINUE +* +* ==== Vertical multiply ==== +* + DO 200 JROW = JTOP, MAX( INCOL, KTOP ) - 1, NV + JLEN = MIN( NV, MAX( INCOL, KTOP )-JROW ) +* +* ==== Copy right of H to scratch (the first KZS +* . columns get multiplied by zero) ==== +* + CALL DLACPY( 'ALL', JLEN, KNZ, H( JROW, INCOL+1+J2 ), + $ LDH, WV( 1, 1+KZS ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, LDWV ) + CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, + $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), + $ LDWV ) +* +* ==== Multiply by U11 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, + $ H( JROW, INCOL+1 ), LDH, U, LDU, ONE, WV, + $ LDWV ) +* +* ==== Copy left of H to right of scratch ==== +* + CALL DLACPY( 'ALL', JLEN, J2, H( JROW, INCOL+1 ), LDH, + $ WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, + $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, + $ H( JROW, INCOL+1+J2 ), LDH, + $ U( J2+1, I2+1 ), LDU, ONE, WV( 1, 1+I2 ), + $ LDWV ) +* +* ==== Copy it back ==== +* + CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, + $ H( JROW, INCOL+1 ), LDH ) + 200 CONTINUE +* +* ==== Multiply Z (also vertical) ==== +* + IF( WANTZ ) THEN + DO 210 JROW = ILOZ, IHIZ, NV + JLEN = MIN( NV, IHIZ-JROW+1 ) +* +* ==== Copy right of Z to left of scratch (first +* . KZS columns get multiplied by zero) ==== +* + CALL DLACPY( 'ALL', JLEN, KNZ, + $ Z( JROW, INCOL+1+J2 ), LDZ, + $ WV( 1, 1+KZS ), LDWV ) +* +* ==== Multiply by U12 ==== +* + CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, + $ LDWV ) + CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, + $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), + $ LDWV ) +* +* ==== Multiply by U11 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, + $ Z( JROW, INCOL+1 ), LDZ, U, LDU, ONE, + $ WV, LDWV ) +* +* ==== Copy left of Z to right of scratch ==== +* + CALL DLACPY( 'ALL', JLEN, J2, Z( JROW, INCOL+1 ), + $ LDZ, WV( 1, 1+I2 ), LDWV ) +* +* ==== Multiply by U21 ==== +* + CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, + $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), + $ LDWV ) +* +* ==== Multiply by U22 ==== +* + CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, + $ Z( JROW, INCOL+1+J2 ), LDZ, + $ U( J2+1, I2+1 ), LDU, ONE, + $ WV( 1, 1+I2 ), LDWV ) +* +* ==== Copy the result back to Z ==== +* + CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, + $ Z( JROW, INCOL+1 ), LDZ ) + 210 CONTINUE + END IF + END IF + END IF + 220 CONTINUE +* +* ==== End of DLAQR5 ==== +* + END +*> \brief \b DLARF applies an elementary reflector to a general rectangular matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARF + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) +* +* .. Scalar Arguments .. +* CHARACTER SIDE +* INTEGER INCV, LDC, M, N +* DOUBLE PRECISION TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARF applies a real elementary reflector H to a real m by n matrix +*> C, from either the left or the right. H is represented in the form +*> +*> H = I - tau * v * v**T +*> +*> where tau is a real scalar and v is a real vector. +*> +*> If tau = 0, then H is taken to be the unit matrix. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': form H * C +*> = 'R': form C * H +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. +*> \endverbatim +*> +*> \param[in] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension +*> (1 + (M-1)*abs(INCV)) if SIDE = 'L' +*> or (1 + (N-1)*abs(INCV)) if SIDE = 'R' +*> The vector v in the representation of H. V is not used if +*> TAU = 0. +*> \endverbatim +*> +*> \param[in] INCV +*> \verbatim +*> INCV is INTEGER +*> The increment between elements of v. INCV <> 0. +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> The value tau in the representation of H. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the m by n matrix C. +*> On exit, C is overwritten by the matrix H * C if SIDE = 'L', +*> or C * H if SIDE = 'R'. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDC >= max(1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension +*> (N) if SIDE = 'L' +*> or (M) if SIDE = 'R' +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER SIDE + INTEGER INCV, LDC, M, N + DOUBLE PRECISION TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL APPLYLEFT + INTEGER I, LASTV, LASTC +* .. +* .. External Subroutines .. + EXTERNAL DGEMV, DGER +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILADLR, ILADLC + EXTERNAL LSAME, ILADLR, ILADLC +* .. +* .. Executable Statements .. +* + APPLYLEFT = LSAME( SIDE, 'L' ) + LASTV = 0 + LASTC = 0 + IF( TAU.NE.ZERO ) THEN +! Set up variables for scanning V. LASTV begins pointing to the end +! of V. + IF( APPLYLEFT ) THEN + LASTV = M + ELSE + LASTV = N + END IF + IF( INCV.GT.0 ) THEN + I = 1 + (LASTV-1) * INCV + ELSE + I = 1 + END IF +! Look for the last non-zero row in V. + DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO ) + LASTV = LASTV - 1 + I = I - INCV + END DO + IF( APPLYLEFT ) THEN +! Scan for the last non-zero column in C(1:lastv,:). + LASTC = ILADLC(LASTV, N, C, LDC) + ELSE +! Scan for the last non-zero row in C(:,1:lastv). + LASTC = ILADLR(M, LASTV, C, LDC) + END IF + END IF +! Note that lastc.eq.0 renders the BLAS operations null; no special +! case is needed at this level. + IF( APPLYLEFT ) THEN +* +* Form H * C +* + IF( LASTV.GT.0 ) THEN +* +* w(1:lastc,1) := C(1:lastv,1:lastc)**T * v(1:lastv,1) +* + CALL DGEMV( 'Transpose', LASTV, LASTC, ONE, C, LDC, V, INCV, + $ ZERO, WORK, 1 ) +* +* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**T +* + CALL DGER( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC ) + END IF + ELSE +* +* Form C * H +* + IF( LASTV.GT.0 ) THEN +* +* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1) +* + CALL DGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC, + $ V, INCV, ZERO, WORK, 1 ) +* +* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**T +* + CALL DGER( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC ) + END IF + END IF + RETURN +* +* End of DLARF +* + END +*> \brief \b DLARFB applies a block reflector or its transpose to a general rectangular matrix. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARFB + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, +* T, LDT, C, LDC, WORK, LDWORK ) +* +* .. Scalar Arguments .. +* CHARACTER DIRECT, SIDE, STOREV, TRANS +* INTEGER K, LDC, LDT, LDV, LDWORK, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ), +* $ WORK( LDWORK, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARFB applies a real block reflector H or its transpose H**T to a +*> real m by n matrix C, from either the left or the right. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': apply H or H**T from the Left +*> = 'R': apply H or H**T from the Right +*> \endverbatim +*> +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> = 'N': apply H (No transpose) +*> = 'T': apply H**T (Transpose) +*> \endverbatim +*> +*> \param[in] DIRECT +*> \verbatim +*> DIRECT is CHARACTER*1 +*> Indicates how H is formed from a product of elementary +*> reflectors +*> = 'F': H = H(1) H(2) . . . H(k) (Forward) +*> = 'B': H = H(k) . . . H(2) H(1) (Backward) +*> \endverbatim +*> +*> \param[in] STOREV +*> \verbatim +*> STOREV is CHARACTER*1 +*> Indicates how the vectors which define the elementary +*> reflectors are stored: +*> = 'C': Columnwise +*> = 'R': Rowwise +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The order of the matrix T (= the number of elementary +*> reflectors whose product defines the block reflector). +*> \endverbatim +*> +*> \param[in] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension +*> (LDV,K) if STOREV = 'C' +*> (LDV,M) if STOREV = 'R' and SIDE = 'L' +*> (LDV,N) if STOREV = 'R' and SIDE = 'R' +*> The matrix V. See Further Details. +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is INTEGER +*> The leading dimension of the array V. +*> If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M); +*> if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N); +*> if STOREV = 'R', LDV >= K. +*> \endverbatim +*> +*> \param[in] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,K) +*> The triangular k by k matrix T in the representation of the +*> block reflector. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= K. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the m by n matrix C. +*> On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDC >= max(1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (LDWORK,K) +*> \endverbatim +*> +*> \param[in] LDWORK +*> \verbatim +*> LDWORK is INTEGER +*> The leading dimension of the array WORK. +*> If SIDE = 'L', LDWORK >= max(1,N); +*> if SIDE = 'R', LDWORK >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2013 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The shape of the matrix V and the storage of the vectors which define +*> the H(i) is best illustrated by the following example with n = 5 and +*> k = 3. The elements equal to 1 are not stored; the corresponding +*> array elements are modified but restored on exit. The rest of the +*> array is not used. +*> +*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R': +*> +*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 ) +*> ( v1 1 ) ( 1 v2 v2 v2 ) +*> ( v1 v2 1 ) ( 1 v3 v3 ) +*> ( v1 v2 v3 ) +*> ( v1 v2 v3 ) +*> +*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R': +*> +*> V = ( v1 v2 v3 ) V = ( v1 v1 1 ) +*> ( v1 v2 v3 ) ( v2 v2 v2 1 ) +*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 ) +*> ( 1 v3 ) +*> ( 1 ) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, + $ T, LDT, C, LDC, WORK, LDWORK ) +* +* -- LAPACK auxiliary routine (version 3.5.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2013 +* +* .. Scalar Arguments .. + CHARACTER DIRECT, SIDE, STOREV, TRANS + INTEGER K, LDC, LDT, LDV, LDWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ), + $ WORK( LDWORK, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + CHARACTER TRANST + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DGEMM, DTRMM +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( M.LE.0 .OR. N.LE.0 ) + $ RETURN +* + IF( LSAME( TRANS, 'N' ) ) THEN + TRANST = 'T' + ELSE + TRANST = 'N' + END IF +* + IF( LSAME( STOREV, 'C' ) ) THEN +* + IF( LSAME( DIRECT, 'F' ) ) THEN +* +* Let V = ( V1 ) (first K rows) +* ( V2 ) +* where V1 is unit lower triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* +* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK) +* +* W := C1**T +* + DO 10 J = 1, K + CALL DCOPY( N, C( J, 1 ), LDC, WORK( 1, J ), 1 ) + 10 CONTINUE +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', N, + $ K, ONE, V, LDV, WORK, LDWORK ) + IF( M.GT.K ) THEN +* +* W := W + C2**T * V2 +* + CALL DGEMM( 'Transpose', 'No transpose', N, K, M-K, + $ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', N, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V * W**T +* + IF( M.GT.K ) THEN +* +* C2 := C2 - V2 * W**T +* + CALL DGEMM( 'No transpose', 'Transpose', M-K, N, K, + $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE, + $ C( K+1, 1 ), LDC ) + END IF +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', N, K, + $ ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W**T +* + DO 30 J = 1, K + DO 20 I = 1, N + C( J, I ) = C( J, I ) - WORK( I, J ) + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* +* W := C * V = (C1*V1 + C2*V2) (stored in WORK) +* +* W := C1 +* + DO 40 J = 1, K + CALL DCOPY( M, C( 1, J ), 1, WORK( 1, J ), 1 ) + 40 CONTINUE +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', M, + $ K, ONE, V, LDV, WORK, LDWORK ) + IF( N.GT.K ) THEN +* +* W := W + C2 * V2 +* + CALL DGEMM( 'No transpose', 'No transpose', M, K, N-K, + $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', M, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V**T +* + IF( N.GT.K ) THEN +* +* C2 := C2 - W * V2**T +* + CALL DGEMM( 'No transpose', 'Transpose', M, N-K, K, + $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE, + $ C( 1, K+1 ), LDC ) + END IF +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', M, K, + $ ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 60 J = 1, K + DO 50 I = 1, M + C( I, J ) = C( I, J ) - WORK( I, J ) + 50 CONTINUE + 60 CONTINUE + END IF +* + ELSE +* +* Let V = ( V1 ) +* ( V2 ) (last K rows) +* where V2 is unit upper triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* +* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK) +* +* W := C2**T +* + DO 70 J = 1, K + CALL DCOPY( N, C( M-K+J, 1 ), LDC, WORK( 1, J ), 1 ) + 70 CONTINUE +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', N, + $ K, ONE, V( M-K+1, 1 ), LDV, WORK, LDWORK ) + IF( M.GT.K ) THEN +* +* W := W + C1**T * V1 +* + CALL DGEMM( 'Transpose', 'No transpose', N, K, M-K, + $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', N, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V * W**T +* + IF( M.GT.K ) THEN +* +* C1 := C1 - V1 * W**T +* + CALL DGEMM( 'No transpose', 'Transpose', M-K, N, K, + $ -ONE, V, LDV, WORK, LDWORK, ONE, C, LDC ) + END IF +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', N, K, + $ ONE, V( M-K+1, 1 ), LDV, WORK, LDWORK ) +* +* C2 := C2 - W**T +* + DO 90 J = 1, K + DO 80 I = 1, N + C( M-K+J, I ) = C( M-K+J, I ) - WORK( I, J ) + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* +* W := C * V = (C1*V1 + C2*V2) (stored in WORK) +* +* W := C2 +* + DO 100 J = 1, K + CALL DCOPY( M, C( 1, N-K+J ), 1, WORK( 1, J ), 1 ) + 100 CONTINUE +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', M, + $ K, ONE, V( N-K+1, 1 ), LDV, WORK, LDWORK ) + IF( N.GT.K ) THEN +* +* W := W + C1 * V1 +* + CALL DGEMM( 'No transpose', 'No transpose', M, K, N-K, + $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', M, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V**T +* + IF( N.GT.K ) THEN +* +* C1 := C1 - W * V1**T +* + CALL DGEMM( 'No transpose', 'Transpose', M, N-K, K, + $ -ONE, WORK, LDWORK, V, LDV, ONE, C, LDC ) + END IF +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', M, K, + $ ONE, V( N-K+1, 1 ), LDV, WORK, LDWORK ) +* +* C2 := C2 - W +* + DO 120 J = 1, K + DO 110 I = 1, M + C( I, N-K+J ) = C( I, N-K+J ) - WORK( I, J ) + 110 CONTINUE + 120 CONTINUE + END IF + END IF +* + ELSE IF( LSAME( STOREV, 'R' ) ) THEN +* + IF( LSAME( DIRECT, 'F' ) ) THEN +* +* Let V = ( V1 V2 ) (V1: first K columns) +* where V1 is unit upper triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* +* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK) +* +* W := C1**T +* + DO 130 J = 1, K + CALL DCOPY( N, C( J, 1 ), LDC, WORK( 1, J ), 1 ) + 130 CONTINUE +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', N, K, + $ ONE, V, LDV, WORK, LDWORK ) + IF( M.GT.K ) THEN +* +* W := W + C2**T * V2**T +* + CALL DGEMM( 'Transpose', 'Transpose', N, K, M-K, ONE, + $ C( K+1, 1 ), LDC, V( 1, K+1 ), LDV, ONE, + $ WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', N, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V**T * W**T +* + IF( M.GT.K ) THEN +* +* C2 := C2 - V2**T * W**T +* + CALL DGEMM( 'Transpose', 'Transpose', M-K, N, K, -ONE, + $ V( 1, K+1 ), LDV, WORK, LDWORK, ONE, + $ C( K+1, 1 ), LDC ) + END IF +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', N, + $ K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W**T +* + DO 150 J = 1, K + DO 140 I = 1, N + C( J, I ) = C( J, I ) - WORK( I, J ) + 140 CONTINUE + 150 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* +* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK) +* +* W := C1 +* + DO 160 J = 1, K + CALL DCOPY( M, C( 1, J ), 1, WORK( 1, J ), 1 ) + 160 CONTINUE +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', M, K, + $ ONE, V, LDV, WORK, LDWORK ) + IF( N.GT.K ) THEN +* +* W := W + C2 * V2**T +* + CALL DGEMM( 'No transpose', 'Transpose', M, K, N-K, + $ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', M, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V +* + IF( N.GT.K ) THEN +* +* C2 := C2 - W * V2 +* + CALL DGEMM( 'No transpose', 'No transpose', M, N-K, K, + $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV, ONE, + $ C( 1, K+1 ), LDC ) + END IF +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', M, + $ K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 180 J = 1, K + DO 170 I = 1, M + C( I, J ) = C( I, J ) - WORK( I, J ) + 170 CONTINUE + 180 CONTINUE +* + END IF +* + ELSE +* +* Let V = ( V1 V2 ) (V2: last K columns) +* where V2 is unit lower triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* +* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK) +* +* W := C2**T +* + DO 190 J = 1, K + CALL DCOPY( N, C( M-K+J, 1 ), LDC, WORK( 1, J ), 1 ) + 190 CONTINUE +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', N, K, + $ ONE, V( 1, M-K+1 ), LDV, WORK, LDWORK ) + IF( M.GT.K ) THEN +* +* W := W + C1**T * V1**T +* + CALL DGEMM( 'Transpose', 'Transpose', N, K, M-K, ONE, + $ C, LDC, V, LDV, ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', N, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V**T * W**T +* + IF( M.GT.K ) THEN +* +* C1 := C1 - V1**T * W**T +* + CALL DGEMM( 'Transpose', 'Transpose', M-K, N, K, -ONE, + $ V, LDV, WORK, LDWORK, ONE, C, LDC ) + END IF +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', N, + $ K, ONE, V( 1, M-K+1 ), LDV, WORK, LDWORK ) +* +* C2 := C2 - W**T +* + DO 210 J = 1, K + DO 200 I = 1, N + C( M-K+J, I ) = C( M-K+J, I ) - WORK( I, J ) + 200 CONTINUE + 210 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H' where C = ( C1 C2 ) +* +* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK) +* +* W := C2 +* + DO 220 J = 1, K + CALL DCOPY( M, C( 1, N-K+J ), 1, WORK( 1, J ), 1 ) + 220 CONTINUE +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', M, K, + $ ONE, V( 1, N-K+1 ), LDV, WORK, LDWORK ) + IF( N.GT.K ) THEN +* +* W := W + C1 * V1**T +* + CALL DGEMM( 'No transpose', 'Transpose', M, K, N-K, + $ ONE, C, LDC, V, LDV, ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', M, K, + $ ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V +* + IF( N.GT.K ) THEN +* +* C1 := C1 - W * V1 +* + CALL DGEMM( 'No transpose', 'No transpose', M, N-K, K, + $ -ONE, WORK, LDWORK, V, LDV, ONE, C, LDC ) + END IF +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', M, + $ K, ONE, V( 1, N-K+1 ), LDV, WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 240 J = 1, K + DO 230 I = 1, M + C( I, N-K+J ) = C( I, N-K+J ) - WORK( I, J ) + 230 CONTINUE + 240 CONTINUE +* + END IF +* + END IF + END IF +* + RETURN +* +* End of DLARFB +* + END +*> \brief \b DLARFG generates an elementary reflector (Householder matrix). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARFG + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) +* +* .. Scalar Arguments .. +* INTEGER INCX, N +* DOUBLE PRECISION ALPHA, TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION X( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARFG generates a real elementary reflector H of order n, such +*> that +*> +*> H * ( alpha ) = ( beta ), H**T * H = I. +*> ( x ) ( 0 ) +*> +*> where alpha and beta are scalars, and x is an (n-1)-element real +*> vector. H is represented in the form +*> +*> H = I - tau * ( 1 ) * ( 1 v**T ) , +*> ( v ) +*> +*> where tau is a real scalar and v is a real (n-1)-element +*> vector. +*> +*> If the elements of x are all zero, then tau = 0 and H is taken to be +*> the unit matrix. +*> +*> Otherwise 1 <= tau <= 2. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the elementary reflector. +*> \endverbatim +*> +*> \param[in,out] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION +*> On entry, the value alpha. +*> On exit, it is overwritten with the value beta. +*> \endverbatim +*> +*> \param[in,out] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension +*> (1+(N-2)*abs(INCX)) +*> On entry, the vector x. +*> On exit, it is overwritten with the vector v. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> The increment between elements of X. INCX > 0. +*> \endverbatim +*> +*> \param[out] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> The value tau. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION ALPHA, TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER J, KNT + DOUBLE PRECISION BETA, RSAFMN, SAFMIN, XNORM +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLAPY2, DNRM2 + EXTERNAL DLAMCH, DLAPY2, DNRM2 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SIGN +* .. +* .. External Subroutines .. + EXTERNAL DSCAL +* .. +* .. Executable Statements .. +* + IF( N.LE.1 ) THEN + TAU = ZERO + RETURN + END IF +* + XNORM = DNRM2( N-1, X, INCX ) +* + IF( XNORM.EQ.ZERO ) THEN +* +* H = I +* + TAU = ZERO + ELSE +* +* general case +* + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' ) + KNT = 0 + IF( ABS( BETA ).LT.SAFMIN ) THEN +* +* XNORM, BETA may be inaccurate; scale X and recompute them +* + RSAFMN = ONE / SAFMIN + 10 CONTINUE + KNT = KNT + 1 + CALL DSCAL( N-1, RSAFMN, X, INCX ) + BETA = BETA*RSAFMN + ALPHA = ALPHA*RSAFMN + IF( ABS( BETA ).LT.SAFMIN ) + $ GO TO 10 +* +* New BETA is at most 1, at least SAFMIN +* + XNORM = DNRM2( N-1, X, INCX ) + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + END IF + TAU = ( BETA-ALPHA ) / BETA + CALL DSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX ) +* +* If ALPHA is subnormal, it may lose relative accuracy +* + DO 20 J = 1, KNT + BETA = BETA*SAFMIN + 20 CONTINUE + ALPHA = BETA + END IF +* + RETURN +* +* End of DLARFG +* + END +*> \brief \b DLARFT forms the triangular factor T of a block reflector H = I - vtvH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARFT + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) +* +* .. Scalar Arguments .. +* CHARACTER DIRECT, STOREV +* INTEGER K, LDT, LDV, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARFT forms the triangular factor T of a real block reflector H +*> of order n, which is defined as a product of k elementary reflectors. +*> +*> If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular; +*> +*> If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular. +*> +*> If STOREV = 'C', the vector which defines the elementary reflector +*> H(i) is stored in the i-th column of the array V, and +*> +*> H = I - V * T * V**T +*> +*> If STOREV = 'R', the vector which defines the elementary reflector +*> H(i) is stored in the i-th row of the array V, and +*> +*> H = I - V**T * T * V +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] DIRECT +*> \verbatim +*> DIRECT is CHARACTER*1 +*> Specifies the order in which the elementary reflectors are +*> multiplied to form the block reflector: +*> = 'F': H = H(1) H(2) . . . H(k) (Forward) +*> = 'B': H = H(k) . . . H(2) H(1) (Backward) +*> \endverbatim +*> +*> \param[in] STOREV +*> \verbatim +*> STOREV is CHARACTER*1 +*> Specifies how the vectors which define the elementary +*> reflectors are stored (see also Further Details): +*> = 'C': columnwise +*> = 'R': rowwise +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the block reflector H. N >= 0. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The order of the triangular factor T (= the number of +*> elementary reflectors). K >= 1. +*> \endverbatim +*> +*> \param[in] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension +*> (LDV,K) if STOREV = 'C' +*> (LDV,N) if STOREV = 'R' +*> The matrix V. See further details. +*> \endverbatim +*> +*> \param[in] LDV +*> \verbatim +*> LDV is INTEGER +*> The leading dimension of the array V. +*> If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K. +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (K) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i). +*> \endverbatim +*> +*> \param[out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,K) +*> The k by k triangular factor T of the block reflector. +*> If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is +*> lower triangular. The rest of the array is not used. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= K. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The shape of the matrix V and the storage of the vectors which define +*> the H(i) is best illustrated by the following example with n = 5 and +*> k = 3. The elements equal to 1 are not stored. +*> +*> DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R': +*> +*> V = ( 1 ) V = ( 1 v1 v1 v1 v1 ) +*> ( v1 1 ) ( 1 v2 v2 v2 ) +*> ( v1 v2 1 ) ( 1 v3 v3 ) +*> ( v1 v2 v3 ) +*> ( v1 v2 v3 ) +*> +*> DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R': +*> +*> V = ( v1 v2 v3 ) V = ( v1 v1 1 ) +*> ( v1 v2 v3 ) ( v2 v2 v2 1 ) +*> ( 1 v2 v3 ) ( v3 v3 v3 v3 1 ) +*> ( 1 v3 ) +*> ( 1 ) +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER DIRECT, STOREV + INTEGER K, LDT, LDV, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J, PREVLASTV, LASTV +* .. +* .. External Subroutines .. + EXTERNAL DGEMV, DTRMV +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* + IF( LSAME( DIRECT, 'F' ) ) THEN + PREVLASTV = N + DO I = 1, K + PREVLASTV = MAX( I, PREVLASTV ) + IF( TAU( I ).EQ.ZERO ) THEN +* +* H(i) = I +* + DO J = 1, I + T( J, I ) = ZERO + END DO + ELSE +* +* general case +* + IF( LSAME( STOREV, 'C' ) ) THEN +* Skip any trailing zeros. + DO LASTV = N, I+1, -1 + IF( V( LASTV, I ).NE.ZERO ) EXIT + END DO + DO J = 1, I-1 + T( J, I ) = -TAU( I ) * V( I , J ) + END DO + J = MIN( LASTV, PREVLASTV ) +* +* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**T * V(i:j,i) +* + CALL DGEMV( 'Transpose', J-I, I-1, -TAU( I ), + $ V( I+1, 1 ), LDV, V( I+1, I ), 1, ONE, + $ T( 1, I ), 1 ) + ELSE +* Skip any trailing zeros. + DO LASTV = N, I+1, -1 + IF( V( I, LASTV ).NE.ZERO ) EXIT + END DO + DO J = 1, I-1 + T( J, I ) = -TAU( I ) * V( J , I ) + END DO + J = MIN( LASTV, PREVLASTV ) +* +* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T +* + CALL DGEMV( 'No transpose', I-1, J-I, -TAU( I ), + $ V( 1, I+1 ), LDV, V( I, I+1 ), LDV, ONE, + $ T( 1, I ), 1 ) + END IF +* +* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i) +* + CALL DTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T, + $ LDT, T( 1, I ), 1 ) + T( I, I ) = TAU( I ) + IF( I.GT.1 ) THEN + PREVLASTV = MAX( PREVLASTV, LASTV ) + ELSE + PREVLASTV = LASTV + END IF + END IF + END DO + ELSE + PREVLASTV = 1 + DO I = K, 1, -1 + IF( TAU( I ).EQ.ZERO ) THEN +* +* H(i) = I +* + DO J = I, K + T( J, I ) = ZERO + END DO + ELSE +* +* general case +* + IF( I.LT.K ) THEN + IF( LSAME( STOREV, 'C' ) ) THEN +* Skip any leading zeros. + DO LASTV = 1, I-1 + IF( V( LASTV, I ).NE.ZERO ) EXIT + END DO + DO J = I+1, K + T( J, I ) = -TAU( I ) * V( N-K+I , J ) + END DO + J = MAX( LASTV, PREVLASTV ) +* +* T(i+1:k,i) = -tau(i) * V(j:n-k+i,i+1:k)**T * V(j:n-k+i,i) +* + CALL DGEMV( 'Transpose', N-K+I-J, K-I, -TAU( I ), + $ V( J, I+1 ), LDV, V( J, I ), 1, ONE, + $ T( I+1, I ), 1 ) + ELSE +* Skip any leading zeros. + DO LASTV = 1, I-1 + IF( V( I, LASTV ).NE.ZERO ) EXIT + END DO + DO J = I+1, K + T( J, I ) = -TAU( I ) * V( J, N-K+I ) + END DO + J = MAX( LASTV, PREVLASTV ) +* +* T(i+1:k,i) = -tau(i) * V(i+1:k,j:n-k+i) * V(i,j:n-k+i)**T +* + CALL DGEMV( 'No transpose', K-I, N-K+I-J, + $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV, + $ ONE, T( I+1, I ), 1 ) + END IF +* +* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i) +* + CALL DTRMV( 'Lower', 'No transpose', 'Non-unit', K-I, + $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 ) + IF( I.GT.1 ) THEN + PREVLASTV = MIN( PREVLASTV, LASTV ) + ELSE + PREVLASTV = LASTV + END IF + END IF + T( I, I ) = TAU( I ) + END IF + END DO + END IF + RETURN +* +* End of DLARFT +* + END +*> \brief \b DLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the reflector has order ≤ 10. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARFX + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARFX( SIDE, M, N, V, TAU, C, LDC, WORK ) +* +* .. Scalar Arguments .. +* CHARACTER SIDE +* INTEGER LDC, M, N +* DOUBLE PRECISION TAU +* .. +* .. Array Arguments .. +* DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARFX applies a real elementary reflector H to a real m by n +*> matrix C, from either the left or the right. H is represented in the +*> form +*> +*> H = I - tau * v * v**T +*> +*> where tau is a real scalar and v is a real vector. +*> +*> If tau = 0, then H is taken to be the unit matrix +*> +*> This version uses inline code if H has order < 11. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': form H * C +*> = 'R': form C * H +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. +*> \endverbatim +*> +*> \param[in] V +*> \verbatim +*> V is DOUBLE PRECISION array, dimension (M) if SIDE = 'L' +*> or (N) if SIDE = 'R' +*> The vector v in the representation of H. +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION +*> The value tau in the representation of H. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the m by n matrix C. +*> On exit, C is overwritten by the matrix H * C if SIDE = 'L', +*> or C * H if SIDE = 'R'. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDA >= (1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension +*> (N) if SIDE = 'L' +*> or (M) if SIDE = 'R' +*> WORK is not referenced if H has order < 11. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLARFX( SIDE, M, N, V, TAU, C, LDC, WORK ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER SIDE + INTEGER LDC, M, N + DOUBLE PRECISION TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER J + DOUBLE PRECISION SUM, T1, T10, T2, T3, T4, T5, T6, T7, T8, T9, + $ V1, V10, V2, V3, V4, V5, V6, V7, V8, V9 +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLARF +* .. +* .. Executable Statements .. +* + IF( TAU.EQ.ZERO ) + $ RETURN + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C, where H has order m. +* + GO TO ( 10, 30, 50, 70, 90, 110, 130, 150, + $ 170, 190 )M +* +* Code for general M +* + CALL DLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK ) + GO TO 410 + 10 CONTINUE +* +* Special code for 1 x 1 Householder +* + T1 = ONE - TAU*V( 1 )*V( 1 ) + DO 20 J = 1, N + C( 1, J ) = T1*C( 1, J ) + 20 CONTINUE + GO TO 410 + 30 CONTINUE +* +* Special code for 2 x 2 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + DO 40 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + 40 CONTINUE + GO TO 410 + 50 CONTINUE +* +* Special code for 3 x 3 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + DO 60 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + 60 CONTINUE + GO TO 410 + 70 CONTINUE +* +* Special code for 4 x 4 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + DO 80 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + 80 CONTINUE + GO TO 410 + 90 CONTINUE +* +* Special code for 5 x 5 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + DO 100 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + 100 CONTINUE + GO TO 410 + 110 CONTINUE +* +* Special code for 6 x 6 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + DO 120 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + C( 6, J ) = C( 6, J ) - SUM*T6 + 120 CONTINUE + GO TO 410 + 130 CONTINUE +* +* Special code for 7 x 7 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + DO 140 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + + $ V7*C( 7, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + C( 6, J ) = C( 6, J ) - SUM*T6 + C( 7, J ) = C( 7, J ) - SUM*T7 + 140 CONTINUE + GO TO 410 + 150 CONTINUE +* +* Special code for 8 x 8 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + DO 160 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + + $ V7*C( 7, J ) + V8*C( 8, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + C( 6, J ) = C( 6, J ) - SUM*T6 + C( 7, J ) = C( 7, J ) - SUM*T7 + C( 8, J ) = C( 8, J ) - SUM*T8 + 160 CONTINUE + GO TO 410 + 170 CONTINUE +* +* Special code for 9 x 9 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + V9 = V( 9 ) + T9 = TAU*V9 + DO 180 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + + $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + C( 6, J ) = C( 6, J ) - SUM*T6 + C( 7, J ) = C( 7, J ) - SUM*T7 + C( 8, J ) = C( 8, J ) - SUM*T8 + C( 9, J ) = C( 9, J ) - SUM*T9 + 180 CONTINUE + GO TO 410 + 190 CONTINUE +* +* Special code for 10 x 10 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + V9 = V( 9 ) + T9 = TAU*V9 + V10 = V( 10 ) + T10 = TAU*V10 + DO 200 J = 1, N + SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + + $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) + + $ V10*C( 10, J ) + C( 1, J ) = C( 1, J ) - SUM*T1 + C( 2, J ) = C( 2, J ) - SUM*T2 + C( 3, J ) = C( 3, J ) - SUM*T3 + C( 4, J ) = C( 4, J ) - SUM*T4 + C( 5, J ) = C( 5, J ) - SUM*T5 + C( 6, J ) = C( 6, J ) - SUM*T6 + C( 7, J ) = C( 7, J ) - SUM*T7 + C( 8, J ) = C( 8, J ) - SUM*T8 + C( 9, J ) = C( 9, J ) - SUM*T9 + C( 10, J ) = C( 10, J ) - SUM*T10 + 200 CONTINUE + GO TO 410 + ELSE +* +* Form C * H, where H has order n. +* + GO TO ( 210, 230, 250, 270, 290, 310, 330, 350, + $ 370, 390 )N +* +* Code for general N +* + CALL DLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK ) + GO TO 410 + 210 CONTINUE +* +* Special code for 1 x 1 Householder +* + T1 = ONE - TAU*V( 1 )*V( 1 ) + DO 220 J = 1, M + C( J, 1 ) = T1*C( J, 1 ) + 220 CONTINUE + GO TO 410 + 230 CONTINUE +* +* Special code for 2 x 2 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + DO 240 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + 240 CONTINUE + GO TO 410 + 250 CONTINUE +* +* Special code for 3 x 3 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + DO 260 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + 260 CONTINUE + GO TO 410 + 270 CONTINUE +* +* Special code for 4 x 4 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + DO 280 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + 280 CONTINUE + GO TO 410 + 290 CONTINUE +* +* Special code for 5 x 5 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + DO 300 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + 300 CONTINUE + GO TO 410 + 310 CONTINUE +* +* Special code for 6 x 6 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + DO 320 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + C( J, 6 ) = C( J, 6 ) - SUM*T6 + 320 CONTINUE + GO TO 410 + 330 CONTINUE +* +* Special code for 7 x 7 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + DO 340 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + + $ V7*C( J, 7 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + C( J, 6 ) = C( J, 6 ) - SUM*T6 + C( J, 7 ) = C( J, 7 ) - SUM*T7 + 340 CONTINUE + GO TO 410 + 350 CONTINUE +* +* Special code for 8 x 8 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + DO 360 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + + $ V7*C( J, 7 ) + V8*C( J, 8 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + C( J, 6 ) = C( J, 6 ) - SUM*T6 + C( J, 7 ) = C( J, 7 ) - SUM*T7 + C( J, 8 ) = C( J, 8 ) - SUM*T8 + 360 CONTINUE + GO TO 410 + 370 CONTINUE +* +* Special code for 9 x 9 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + V9 = V( 9 ) + T9 = TAU*V9 + DO 380 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + + $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + C( J, 6 ) = C( J, 6 ) - SUM*T6 + C( J, 7 ) = C( J, 7 ) - SUM*T7 + C( J, 8 ) = C( J, 8 ) - SUM*T8 + C( J, 9 ) = C( J, 9 ) - SUM*T9 + 380 CONTINUE + GO TO 410 + 390 CONTINUE +* +* Special code for 10 x 10 Householder +* + V1 = V( 1 ) + T1 = TAU*V1 + V2 = V( 2 ) + T2 = TAU*V2 + V3 = V( 3 ) + T3 = TAU*V3 + V4 = V( 4 ) + T4 = TAU*V4 + V5 = V( 5 ) + T5 = TAU*V5 + V6 = V( 6 ) + T6 = TAU*V6 + V7 = V( 7 ) + T7 = TAU*V7 + V8 = V( 8 ) + T8 = TAU*V8 + V9 = V( 9 ) + T9 = TAU*V9 + V10 = V( 10 ) + T10 = TAU*V10 + DO 400 J = 1, M + SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + + $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) + + $ V10*C( J, 10 ) + C( J, 1 ) = C( J, 1 ) - SUM*T1 + C( J, 2 ) = C( J, 2 ) - SUM*T2 + C( J, 3 ) = C( J, 3 ) - SUM*T3 + C( J, 4 ) = C( J, 4 ) - SUM*T4 + C( J, 5 ) = C( J, 5 ) - SUM*T5 + C( J, 6 ) = C( J, 6 ) - SUM*T6 + C( J, 7 ) = C( J, 7 ) - SUM*T7 + C( J, 8 ) = C( J, 8 ) - SUM*T8 + C( J, 9 ) = C( J, 9 ) - SUM*T9 + C( J, 10 ) = C( J, 10 ) - SUM*T10 + 400 CONTINUE + GO TO 410 + END IF + 410 CONTINUE + RETURN +* +* End of DLARFX +* + END +*> \brief \b DLARTG generates a plane rotation with real cosine and real sine. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLARTG + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLARTG( F, G, CS, SN, R ) +* +* .. Scalar Arguments .. +* DOUBLE PRECISION CS, F, G, R, SN +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLARTG generate a plane rotation so that +*> +*> [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1. +*> [ -SN CS ] [ G ] [ 0 ] +*> +*> This is a slower, more accurate version of the BLAS1 routine DROTG, +*> with the following other differences: +*> F and G are unchanged on return. +*> If G=0, then CS=1 and SN=0. +*> If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any +*> floating point operations (saves work in DBDSQR when +*> there are zeros on the diagonal). +*> +*> If F exceeds G in magnitude, CS will be positive. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] F +*> \verbatim +*> F is DOUBLE PRECISION +*> The first component of vector to be rotated. +*> \endverbatim +*> +*> \param[in] G +*> \verbatim +*> G is DOUBLE PRECISION +*> The second component of vector to be rotated. +*> \endverbatim +*> +*> \param[out] CS +*> \verbatim +*> CS is DOUBLE PRECISION +*> The cosine of the rotation. +*> \endverbatim +*> +*> \param[out] SN +*> \verbatim +*> SN is DOUBLE PRECISION +*> The sine of the rotation. +*> \endverbatim +*> +*> \param[out] R +*> \verbatim +*> R is DOUBLE PRECISION +*> The nonzero component of the rotated vector. +*> +*> This version has a few statements commented out for thread safety +*> (machine parameters are computed on each entry). 10 feb 03, SJH. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLARTG( F, G, CS, SN, R ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + DOUBLE PRECISION CS, F, G, R, SN +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) +* .. +* .. Local Scalars .. +* LOGICAL FIRST + INTEGER COUNT, I + DOUBLE PRECISION EPS, F1, G1, SAFMIN, SAFMN2, SAFMX2, SCALE +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, INT, LOG, MAX, SQRT +* .. +* .. Save statement .. +* SAVE FIRST, SAFMX2, SAFMIN, SAFMN2 +* .. +* .. Data statements .. +* DATA FIRST / .TRUE. / +* .. +* .. Executable Statements .. +* +* IF( FIRST ) THEN + SAFMIN = DLAMCH( 'S' ) + EPS = DLAMCH( 'E' ) + SAFMN2 = DLAMCH( 'B' )**INT( LOG( SAFMIN / EPS ) / + $ LOG( DLAMCH( 'B' ) ) / TWO ) + SAFMX2 = ONE / SAFMN2 +* FIRST = .FALSE. +* END IF + IF( G.EQ.ZERO ) THEN + CS = ONE + SN = ZERO + R = F + ELSE IF( F.EQ.ZERO ) THEN + CS = ZERO + SN = ONE + R = G + ELSE + F1 = F + G1 = G + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.GE.SAFMX2 ) THEN + COUNT = 0 + 10 CONTINUE + COUNT = COUNT + 1 + F1 = F1*SAFMN2 + G1 = G1*SAFMN2 + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.GE.SAFMX2 ) + $ GO TO 10 + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + DO 20 I = 1, COUNT + R = R*SAFMX2 + 20 CONTINUE + ELSE IF( SCALE.LE.SAFMN2 ) THEN + COUNT = 0 + 30 CONTINUE + COUNT = COUNT + 1 + F1 = F1*SAFMX2 + G1 = G1*SAFMX2 + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.LE.SAFMN2 ) + $ GO TO 30 + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + DO 40 I = 1, COUNT + R = R*SAFMN2 + 40 CONTINUE + ELSE + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + END IF + IF( ABS( F ).GT.ABS( G ) .AND. CS.LT.ZERO ) THEN + CS = -CS + SN = -SN + R = -R + END IF + END IF + RETURN +* +* End of DLARTG +* + END +*> \brief \b DLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASCL + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER TYPE +* INTEGER INFO, KL, KU, LDA, M, N +* DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASCL multiplies the M by N real matrix A by the real scalar +*> CTO/CFROM. This is done without over/underflow as long as the final +*> result CTO*A(I,J)/CFROM does not over/underflow. TYPE specifies that +*> A may be full, upper triangular, lower triangular, upper Hessenberg, +*> or banded. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] TYPE +*> \verbatim +*> TYPE is CHARACTER*1 +*> TYPE indices the storage type of the input matrix. +*> = 'G': A is a full matrix. +*> = 'L': A is a lower triangular matrix. +*> = 'U': A is an upper triangular matrix. +*> = 'H': A is an upper Hessenberg matrix. +*> = 'B': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the lower +*> half stored. +*> = 'Q': A is a symmetric band matrix with lower bandwidth KL +*> and upper bandwidth KU and with the only the upper +*> half stored. +*> = 'Z': A is a band matrix with lower bandwidth KL and upper +*> bandwidth KU. See DGBTRF for storage details. +*> \endverbatim +*> +*> \param[in] KL +*> \verbatim +*> KL is INTEGER +*> The lower bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] KU +*> \verbatim +*> KU is INTEGER +*> The upper bandwidth of A. Referenced only if TYPE = 'B', +*> 'Q' or 'Z'. +*> \endverbatim +*> +*> \param[in] CFROM +*> \verbatim +*> CFROM is DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] CTO +*> \verbatim +*> CTO is DOUBLE PRECISION +*> +*> The matrix A is multiplied by CTO/CFROM. A(I,J) is computed +*> without over/underflow if the final result CTO*A(I,J)/CFROM +*> can be represented without over/underflow. CFROM must be +*> nonzero. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The matrix to be multiplied by CTO/CFROM. See TYPE for the +*> storage type. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. +*> If TYPE = 'G', 'L', 'U', 'H', LDA >= max(1,M); +*> TYPE = 'B', LDA >= KL+1; +*> TYPE = 'Q', LDA >= KU+1; +*> TYPE = 'Z', LDA >= 2*KL+KU+1. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> 0 - successful exit +*> <0 - if INFO = -i, the i-th argument had an illegal value. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + CHARACTER TYPE + INTEGER INFO, KL, KU, LDA, M, N + DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL DONE + INTEGER I, ITYPE, J, K1, K2, K3, K4 + DOUBLE PRECISION BIGNUM, CFROM1, CFROMC, CTO1, CTOC, MUL, SMLNUM +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + DOUBLE PRECISION DLAMCH + EXTERNAL LSAME, DLAMCH, DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 +* + IF( LSAME( TYPE, 'G' ) ) THEN + ITYPE = 0 + ELSE IF( LSAME( TYPE, 'L' ) ) THEN + ITYPE = 1 + ELSE IF( LSAME( TYPE, 'U' ) ) THEN + ITYPE = 2 + ELSE IF( LSAME( TYPE, 'H' ) ) THEN + ITYPE = 3 + ELSE IF( LSAME( TYPE, 'B' ) ) THEN + ITYPE = 4 + ELSE IF( LSAME( TYPE, 'Q' ) ) THEN + ITYPE = 5 + ELSE IF( LSAME( TYPE, 'Z' ) ) THEN + ITYPE = 6 + ELSE + ITYPE = -1 + END IF +* + IF( ITYPE.EQ.-1 ) THEN + INFO = -1 + ELSE IF( CFROM.EQ.ZERO .OR. DISNAN(CFROM) ) THEN + INFO = -4 + ELSE IF( DISNAN(CTO) ) THEN + INFO = -5 + ELSE IF( M.LT.0 ) THEN + INFO = -6 + ELSE IF( N.LT.0 .OR. ( ITYPE.EQ.4 .AND. N.NE.M ) .OR. + $ ( ITYPE.EQ.5 .AND. N.NE.M ) ) THEN + INFO = -7 + ELSE IF( ITYPE.LE.3 .AND. LDA.LT.MAX( 1, M ) ) THEN + INFO = -9 + ELSE IF( ITYPE.GE.4 ) THEN + IF( KL.LT.0 .OR. KL.GT.MAX( M-1, 0 ) ) THEN + INFO = -2 + ELSE IF( KU.LT.0 .OR. KU.GT.MAX( N-1, 0 ) .OR. + $ ( ( ITYPE.EQ.4 .OR. ITYPE.EQ.5 ) .AND. KL.NE.KU ) ) + $ THEN + INFO = -3 + ELSE IF( ( ITYPE.EQ.4 .AND. LDA.LT.KL+1 ) .OR. + $ ( ITYPE.EQ.5 .AND. LDA.LT.KU+1 ) .OR. + $ ( ITYPE.EQ.6 .AND. LDA.LT.2*KL+KU+1 ) ) THEN + INFO = -9 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASCL', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 .OR. M.EQ.0 ) + $ RETURN +* +* Get machine parameters +* + SMLNUM = DLAMCH( 'S' ) + BIGNUM = ONE / SMLNUM +* + CFROMC = CFROM + CTOC = CTO +* + 10 CONTINUE + CFROM1 = CFROMC*SMLNUM + IF( CFROM1.EQ.CFROMC ) THEN +! CFROMC is an inf. Multiply by a correctly signed zero for +! finite CTOC, or a NaN if CTOC is infinite. + MUL = CTOC / CFROMC + DONE = .TRUE. + CTO1 = CTOC + ELSE + CTO1 = CTOC / BIGNUM + IF( CTO1.EQ.CTOC ) THEN +! CTOC is either 0 or an inf. In both cases, CTOC itself +! serves as the correct multiplication factor. + MUL = CTOC + DONE = .TRUE. + CFROMC = ONE + ELSE IF( ABS( CFROM1 ).GT.ABS( CTOC ) .AND. CTOC.NE.ZERO ) THEN + MUL = SMLNUM + DONE = .FALSE. + CFROMC = CFROM1 + ELSE IF( ABS( CTO1 ).GT.ABS( CFROMC ) ) THEN + MUL = BIGNUM + DONE = .FALSE. + CTOC = CTO1 + ELSE + MUL = CTOC / CFROMC + DONE = .TRUE. + END IF + END IF +* + IF( ITYPE.EQ.0 ) THEN +* +* Full matrix +* + DO 30 J = 1, N + DO 20 I = 1, M + A( I, J ) = A( I, J )*MUL + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( ITYPE.EQ.1 ) THEN +* +* Lower triangular matrix +* + DO 50 J = 1, N + DO 40 I = J, M + A( I, J ) = A( I, J )*MUL + 40 CONTINUE + 50 CONTINUE +* + ELSE IF( ITYPE.EQ.2 ) THEN +* +* Upper triangular matrix +* + DO 70 J = 1, N + DO 60 I = 1, MIN( J, M ) + A( I, J ) = A( I, J )*MUL + 60 CONTINUE + 70 CONTINUE +* + ELSE IF( ITYPE.EQ.3 ) THEN +* +* Upper Hessenberg matrix +* + DO 90 J = 1, N + DO 80 I = 1, MIN( J+1, M ) + A( I, J ) = A( I, J )*MUL + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( ITYPE.EQ.4 ) THEN +* +* Lower half of a symmetric band matrix +* + K3 = KL + 1 + K4 = N + 1 + DO 110 J = 1, N + DO 100 I = 1, MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 100 CONTINUE + 110 CONTINUE +* + ELSE IF( ITYPE.EQ.5 ) THEN +* +* Upper half of a symmetric band matrix +* + K1 = KU + 2 + K3 = KU + 1 + DO 130 J = 1, N + DO 120 I = MAX( K1-J, 1 ), K3 + A( I, J ) = A( I, J )*MUL + 120 CONTINUE + 130 CONTINUE +* + ELSE IF( ITYPE.EQ.6 ) THEN +* +* Band matrix +* + K1 = KL + KU + 2 + K2 = KL + 1 + K3 = 2*KL + KU + 1 + K4 = KL + KU + 1 + M + DO 150 J = 1, N + DO 140 I = MAX( K1-J, K2 ), MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 140 CONTINUE + 150 CONTINUE +* + END IF +* + IF( .NOT.DONE ) + $ GO TO 10 +* + RETURN +* +* End of DLASCL +* + END +*> \brief \b DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASET + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) +* +* .. Scalar Arguments .. +* CHARACTER UPLO +* INTEGER LDA, M, N +* DOUBLE PRECISION ALPHA, BETA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASET initializes an m-by-n matrix A to BETA on the diagonal and +*> ALPHA on the offdiagonals. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] UPLO +*> \verbatim +*> UPLO is CHARACTER*1 +*> Specifies the part of the matrix A to be set. +*> = 'U': Upper triangular part is set; the strictly lower +*> triangular part of A is not changed. +*> = 'L': Lower triangular part is set; the strictly upper +*> triangular part of A is not changed. +*> Otherwise: All of the matrix A is set. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. N >= 0. +*> \endverbatim +*> +*> \param[in] ALPHA +*> \verbatim +*> ALPHA is DOUBLE PRECISION +*> The constant to which the offdiagonal elements are to be set. +*> \endverbatim +*> +*> \param[in] BETA +*> \verbatim +*> BETA is DOUBLE PRECISION +*> The constant to which the diagonal elements are to be set. +*> \endverbatim +*> +*> \param[out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On exit, the leading m-by-n submatrix of A is set as follows: +*> +*> if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n, +*> if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n, +*> otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j, +*> +*> and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n). +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, M, N + DOUBLE PRECISION ALPHA, BETA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( LSAME( UPLO, 'U' ) ) THEN +* +* Set the strictly upper triangular or trapezoidal part of the +* array to ALPHA. +* + DO 20 J = 2, N + DO 10 I = 1, MIN( J-1, M ) + A( I, J ) = ALPHA + 10 CONTINUE + 20 CONTINUE +* + ELSE IF( LSAME( UPLO, 'L' ) ) THEN +* +* Set the strictly lower triangular or trapezoidal part of the +* array to ALPHA. +* + DO 40 J = 1, MIN( M, N ) + DO 30 I = J + 1, M + A( I, J ) = ALPHA + 30 CONTINUE + 40 CONTINUE +* + ELSE +* +* Set the leading m-by-n submatrix to ALPHA. +* + DO 60 J = 1, N + DO 50 I = 1, M + A( I, J ) = ALPHA + 50 CONTINUE + 60 CONTINUE + END IF +* +* Set the first min(M,N) diagonal elements to BETA. +* + DO 70 I = 1, MIN( M, N ) + A( I, I ) = BETA + 70 CONTINUE +* + RETURN +* +* End of DLASET +* + END +*> \brief \b DLASSQ updates a sum of squares represented in scaled form. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASSQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) +* +* .. Scalar Arguments .. +* INTEGER INCX, N +* DOUBLE PRECISION SCALE, SUMSQ +* .. +* .. Array Arguments .. +* DOUBLE PRECISION X( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASSQ returns the values scl and smsq such that +*> +*> ( scl**2 )*smsq = x( 1 )**2 +...+ x( n )**2 + ( scale**2 )*sumsq, +*> +*> where x( i ) = X( 1 + ( i - 1 )*INCX ). The value of sumsq is +*> assumed to be non-negative and scl returns the value +*> +*> scl = max( scale, abs( x( i ) ) ). +*> +*> scale and sumsq must be supplied in SCALE and SUMSQ and +*> scl and smsq are overwritten on SCALE and SUMSQ respectively. +*> +*> The routine makes only one pass through the vector x. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of elements to be used from the vector X. +*> \endverbatim +*> +*> \param[in] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension (N) +*> The vector for which a scaled sum of squares is computed. +*> x( i ) = X( 1 + ( i - 1 )*INCX ), 1 <= i <= n. +*> \endverbatim +*> +*> \param[in] INCX +*> \verbatim +*> INCX is INTEGER +*> The increment between successive values of the vector X. +*> INCX > 0. +*> \endverbatim +*> +*> \param[in,out] SCALE +*> \verbatim +*> SCALE is DOUBLE PRECISION +*> On entry, the value scale in the equation above. +*> On exit, SCALE is overwritten with scl , the scaling factor +*> for the sum of squares. +*> \endverbatim +*> +*> \param[in,out] SUMSQ +*> \verbatim +*> SUMSQ is DOUBLE PRECISION +*> On entry, the value sumsq in the equation above. +*> On exit, SUMSQ is overwritten with smsq , the basic sum of +*> squares from which scl has been factored out. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION SCALE, SUMSQ +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER IX + DOUBLE PRECISION ABSXI +* .. +* .. External Functions .. + LOGICAL DISNAN + EXTERNAL DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. +* .. Executable Statements .. +* + IF( N.GT.0 ) THEN + DO 10 IX = 1, 1 + ( N-1 )*INCX, INCX + ABSXI = ABS( X( IX ) ) + IF( ABSXI.GT.ZERO.OR.DISNAN( ABSXI ) ) THEN + IF( SCALE.LT.ABSXI ) THEN + SUMSQ = 1 + SUMSQ*( SCALE / ABSXI )**2 + SCALE = ABSXI + ELSE + SUMSQ = SUMSQ + ( ABSXI / SCALE )**2 + END IF + END IF + 10 CONTINUE + END IF + RETURN +* +* End of DLASSQ +* + END +*> \brief \b DLASY2 solves the Sylvester matrix equation where the matrices are of order 1 or 2. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASY2 + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASY2( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, +* LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) +* +* .. Scalar Arguments .. +* LOGICAL LTRANL, LTRANR +* INTEGER INFO, ISGN, LDB, LDTL, LDTR, LDX, N1, N2 +* DOUBLE PRECISION SCALE, XNORM +* .. +* .. Array Arguments .. +* DOUBLE PRECISION B( LDB, * ), TL( LDTL, * ), TR( LDTR, * ), +* $ X( LDX, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASY2 solves for the N1 by N2 matrix X, 1 <= N1,N2 <= 2, in +*> +*> op(TL)*X + ISGN*X*op(TR) = SCALE*B, +*> +*> where TL is N1 by N1, TR is N2 by N2, B is N1 by N2, and ISGN = 1 or +*> -1. op(T) = T or T**T, where T**T denotes the transpose of T. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] LTRANL +*> \verbatim +*> LTRANL is LOGICAL +*> On entry, LTRANL specifies the op(TL): +*> = .FALSE., op(TL) = TL, +*> = .TRUE., op(TL) = TL**T. +*> \endverbatim +*> +*> \param[in] LTRANR +*> \verbatim +*> LTRANR is LOGICAL +*> On entry, LTRANR specifies the op(TR): +*> = .FALSE., op(TR) = TR, +*> = .TRUE., op(TR) = TR**T. +*> \endverbatim +*> +*> \param[in] ISGN +*> \verbatim +*> ISGN is INTEGER +*> On entry, ISGN specifies the sign of the equation +*> as described before. ISGN may only be 1 or -1. +*> \endverbatim +*> +*> \param[in] N1 +*> \verbatim +*> N1 is INTEGER +*> On entry, N1 specifies the order of matrix TL. +*> N1 may only be 0, 1 or 2. +*> \endverbatim +*> +*> \param[in] N2 +*> \verbatim +*> N2 is INTEGER +*> On entry, N2 specifies the order of matrix TR. +*> N2 may only be 0, 1 or 2. +*> \endverbatim +*> +*> \param[in] TL +*> \verbatim +*> TL is DOUBLE PRECISION array, dimension (LDTL,2) +*> On entry, TL contains an N1 by N1 matrix. +*> \endverbatim +*> +*> \param[in] LDTL +*> \verbatim +*> LDTL is INTEGER +*> The leading dimension of the matrix TL. LDTL >= max(1,N1). +*> \endverbatim +*> +*> \param[in] TR +*> \verbatim +*> TR is DOUBLE PRECISION array, dimension (LDTR,2) +*> On entry, TR contains an N2 by N2 matrix. +*> \endverbatim +*> +*> \param[in] LDTR +*> \verbatim +*> LDTR is INTEGER +*> The leading dimension of the matrix TR. LDTR >= max(1,N2). +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is DOUBLE PRECISION array, dimension (LDB,2) +*> On entry, the N1 by N2 matrix B contains the right-hand +*> side of the equation. +*> \endverbatim +*> +*> \param[in] LDB +*> \verbatim +*> LDB is INTEGER +*> The leading dimension of the matrix B. LDB >= max(1,N1). +*> \endverbatim +*> +*> \param[out] SCALE +*> \verbatim +*> SCALE is DOUBLE PRECISION +*> On exit, SCALE contains the scale factor. SCALE is chosen +*> less than or equal to 1 to prevent the solution overflowing. +*> \endverbatim +*> +*> \param[out] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension (LDX,2) +*> On exit, X contains the N1 by N2 solution. +*> \endverbatim +*> +*> \param[in] LDX +*> \verbatim +*> LDX is INTEGER +*> The leading dimension of the matrix X. LDX >= max(1,N1). +*> \endverbatim +*> +*> \param[out] XNORM +*> \verbatim +*> XNORM is DOUBLE PRECISION +*> On exit, XNORM is the infinity-norm of the solution. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> On exit, INFO is set to +*> 0: successful exit. +*> 1: TL and TR have too close eigenvalues, so TL or +*> TR is perturbed to get a nonsingular equation. +*> NOTE: In the interests of speed, this routine does not +*> check the inputs for errors. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup doubleSYauxiliary +* +* ===================================================================== + SUBROUTINE DLASY2( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, + $ LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + LOGICAL LTRANL, LTRANR + INTEGER INFO, ISGN, LDB, LDTL, LDTR, LDX, N1, N2 + DOUBLE PRECISION SCALE, XNORM +* .. +* .. Array Arguments .. + DOUBLE PRECISION B( LDB, * ), TL( LDTL, * ), TR( LDTR, * ), + $ X( LDX, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) + DOUBLE PRECISION TWO, HALF, EIGHT + PARAMETER ( TWO = 2.0D+0, HALF = 0.5D+0, EIGHT = 8.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL BSWAP, XSWAP + INTEGER I, IP, IPIV, IPSV, J, JP, JPSV, K + DOUBLE PRECISION BET, EPS, GAM, L21, SGN, SMIN, SMLNUM, TAU1, + $ TEMP, U11, U12, U22, XMAX +* .. +* .. Local Arrays .. + LOGICAL BSWPIV( 4 ), XSWPIV( 4 ) + INTEGER JPIV( 4 ), LOCL21( 4 ), LOCU12( 4 ), + $ LOCU22( 4 ) + DOUBLE PRECISION BTMP( 4 ), T16( 4, 4 ), TMP( 4 ), X2( 2 ) +* .. +* .. External Functions .. + INTEGER IDAMAX + DOUBLE PRECISION DLAMCH + EXTERNAL IDAMAX, DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DSWAP +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX +* .. +* .. Data statements .. + DATA LOCU12 / 3, 4, 1, 2 / , LOCL21 / 2, 1, 4, 3 / , + $ LOCU22 / 4, 3, 2, 1 / + DATA XSWPIV / .FALSE., .FALSE., .TRUE., .TRUE. / + DATA BSWPIV / .FALSE., .TRUE., .FALSE., .TRUE. / +* .. +* .. Executable Statements .. +* +* Do not check the input parameters for errors +* + INFO = 0 +* +* Quick return if possible +* + IF( N1.EQ.0 .OR. N2.EQ.0 ) + $ RETURN +* +* Set constants to control overflow +* + EPS = DLAMCH( 'P' ) + SMLNUM = DLAMCH( 'S' ) / EPS + SGN = ISGN +* + K = N1 + N1 + N2 - 2 + GO TO ( 10, 20, 30, 50 )K +* +* 1 by 1: TL11*X + SGN*X*TR11 = B11 +* + 10 CONTINUE + TAU1 = TL( 1, 1 ) + SGN*TR( 1, 1 ) + BET = ABS( TAU1 ) + IF( BET.LE.SMLNUM ) THEN + TAU1 = SMLNUM + BET = SMLNUM + INFO = 1 + END IF +* + SCALE = ONE + GAM = ABS( B( 1, 1 ) ) + IF( SMLNUM*GAM.GT.BET ) + $ SCALE = ONE / GAM +* + X( 1, 1 ) = ( B( 1, 1 )*SCALE ) / TAU1 + XNORM = ABS( X( 1, 1 ) ) + RETURN +* +* 1 by 2: +* TL11*[X11 X12] + ISGN*[X11 X12]*op[TR11 TR12] = [B11 B12] +* [TR21 TR22] +* + 20 CONTINUE +* + SMIN = MAX( EPS*MAX( ABS( TL( 1, 1 ) ), ABS( TR( 1, 1 ) ), + $ ABS( TR( 1, 2 ) ), ABS( TR( 2, 1 ) ), ABS( TR( 2, 2 ) ) ), + $ SMLNUM ) + TMP( 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) + TMP( 4 ) = TL( 1, 1 ) + SGN*TR( 2, 2 ) + IF( LTRANR ) THEN + TMP( 2 ) = SGN*TR( 2, 1 ) + TMP( 3 ) = SGN*TR( 1, 2 ) + ELSE + TMP( 2 ) = SGN*TR( 1, 2 ) + TMP( 3 ) = SGN*TR( 2, 1 ) + END IF + BTMP( 1 ) = B( 1, 1 ) + BTMP( 2 ) = B( 1, 2 ) + GO TO 40 +* +* 2 by 1: +* op[TL11 TL12]*[X11] + ISGN* [X11]*TR11 = [B11] +* [TL21 TL22] [X21] [X21] [B21] +* + 30 CONTINUE + SMIN = MAX( EPS*MAX( ABS( TR( 1, 1 ) ), ABS( TL( 1, 1 ) ), + $ ABS( TL( 1, 2 ) ), ABS( TL( 2, 1 ) ), ABS( TL( 2, 2 ) ) ), + $ SMLNUM ) + TMP( 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) + TMP( 4 ) = TL( 2, 2 ) + SGN*TR( 1, 1 ) + IF( LTRANL ) THEN + TMP( 2 ) = TL( 1, 2 ) + TMP( 3 ) = TL( 2, 1 ) + ELSE + TMP( 2 ) = TL( 2, 1 ) + TMP( 3 ) = TL( 1, 2 ) + END IF + BTMP( 1 ) = B( 1, 1 ) + BTMP( 2 ) = B( 2, 1 ) + 40 CONTINUE +* +* Solve 2 by 2 system using complete pivoting. +* Set pivots less than SMIN to SMIN. +* + IPIV = IDAMAX( 4, TMP, 1 ) + U11 = TMP( IPIV ) + IF( ABS( U11 ).LE.SMIN ) THEN + INFO = 1 + U11 = SMIN + END IF + U12 = TMP( LOCU12( IPIV ) ) + L21 = TMP( LOCL21( IPIV ) ) / U11 + U22 = TMP( LOCU22( IPIV ) ) - U12*L21 + XSWAP = XSWPIV( IPIV ) + BSWAP = BSWPIV( IPIV ) + IF( ABS( U22 ).LE.SMIN ) THEN + INFO = 1 + U22 = SMIN + END IF + IF( BSWAP ) THEN + TEMP = BTMP( 2 ) + BTMP( 2 ) = BTMP( 1 ) - L21*TEMP + BTMP( 1 ) = TEMP + ELSE + BTMP( 2 ) = BTMP( 2 ) - L21*BTMP( 1 ) + END IF + SCALE = ONE + IF( ( TWO*SMLNUM )*ABS( BTMP( 2 ) ).GT.ABS( U22 ) .OR. + $ ( TWO*SMLNUM )*ABS( BTMP( 1 ) ).GT.ABS( U11 ) ) THEN + SCALE = HALF / MAX( ABS( BTMP( 1 ) ), ABS( BTMP( 2 ) ) ) + BTMP( 1 ) = BTMP( 1 )*SCALE + BTMP( 2 ) = BTMP( 2 )*SCALE + END IF + X2( 2 ) = BTMP( 2 ) / U22 + X2( 1 ) = BTMP( 1 ) / U11 - ( U12 / U11 )*X2( 2 ) + IF( XSWAP ) THEN + TEMP = X2( 2 ) + X2( 2 ) = X2( 1 ) + X2( 1 ) = TEMP + END IF + X( 1, 1 ) = X2( 1 ) + IF( N1.EQ.1 ) THEN + X( 1, 2 ) = X2( 2 ) + XNORM = ABS( X( 1, 1 ) ) + ABS( X( 1, 2 ) ) + ELSE + X( 2, 1 ) = X2( 2 ) + XNORM = MAX( ABS( X( 1, 1 ) ), ABS( X( 2, 1 ) ) ) + END IF + RETURN +* +* 2 by 2: +* op[TL11 TL12]*[X11 X12] +ISGN* [X11 X12]*op[TR11 TR12] = [B11 B12] +* [TL21 TL22] [X21 X22] [X21 X22] [TR21 TR22] [B21 B22] +* +* Solve equivalent 4 by 4 system using complete pivoting. +* Set pivots less than SMIN to SMIN. +* + 50 CONTINUE + SMIN = MAX( ABS( TR( 1, 1 ) ), ABS( TR( 1, 2 ) ), + $ ABS( TR( 2, 1 ) ), ABS( TR( 2, 2 ) ) ) + SMIN = MAX( SMIN, ABS( TL( 1, 1 ) ), ABS( TL( 1, 2 ) ), + $ ABS( TL( 2, 1 ) ), ABS( TL( 2, 2 ) ) ) + SMIN = MAX( EPS*SMIN, SMLNUM ) + BTMP( 1 ) = ZERO + CALL DCOPY( 16, BTMP, 0, T16, 1 ) + T16( 1, 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) + T16( 2, 2 ) = TL( 2, 2 ) + SGN*TR( 1, 1 ) + T16( 3, 3 ) = TL( 1, 1 ) + SGN*TR( 2, 2 ) + T16( 4, 4 ) = TL( 2, 2 ) + SGN*TR( 2, 2 ) + IF( LTRANL ) THEN + T16( 1, 2 ) = TL( 2, 1 ) + T16( 2, 1 ) = TL( 1, 2 ) + T16( 3, 4 ) = TL( 2, 1 ) + T16( 4, 3 ) = TL( 1, 2 ) + ELSE + T16( 1, 2 ) = TL( 1, 2 ) + T16( 2, 1 ) = TL( 2, 1 ) + T16( 3, 4 ) = TL( 1, 2 ) + T16( 4, 3 ) = TL( 2, 1 ) + END IF + IF( LTRANR ) THEN + T16( 1, 3 ) = SGN*TR( 1, 2 ) + T16( 2, 4 ) = SGN*TR( 1, 2 ) + T16( 3, 1 ) = SGN*TR( 2, 1 ) + T16( 4, 2 ) = SGN*TR( 2, 1 ) + ELSE + T16( 1, 3 ) = SGN*TR( 2, 1 ) + T16( 2, 4 ) = SGN*TR( 2, 1 ) + T16( 3, 1 ) = SGN*TR( 1, 2 ) + T16( 4, 2 ) = SGN*TR( 1, 2 ) + END IF + BTMP( 1 ) = B( 1, 1 ) + BTMP( 2 ) = B( 2, 1 ) + BTMP( 3 ) = B( 1, 2 ) + BTMP( 4 ) = B( 2, 2 ) +* +* Perform elimination +* + DO 100 I = 1, 3 + XMAX = ZERO + DO 70 IP = I, 4 + DO 60 JP = I, 4 + IF( ABS( T16( IP, JP ) ).GE.XMAX ) THEN + XMAX = ABS( T16( IP, JP ) ) + IPSV = IP + JPSV = JP + END IF + 60 CONTINUE + 70 CONTINUE + IF( IPSV.NE.I ) THEN + CALL DSWAP( 4, T16( IPSV, 1 ), 4, T16( I, 1 ), 4 ) + TEMP = BTMP( I ) + BTMP( I ) = BTMP( IPSV ) + BTMP( IPSV ) = TEMP + END IF + IF( JPSV.NE.I ) + $ CALL DSWAP( 4, T16( 1, JPSV ), 1, T16( 1, I ), 1 ) + JPIV( I ) = JPSV + IF( ABS( T16( I, I ) ).LT.SMIN ) THEN + INFO = 1 + T16( I, I ) = SMIN + END IF + DO 90 J = I + 1, 4 + T16( J, I ) = T16( J, I ) / T16( I, I ) + BTMP( J ) = BTMP( J ) - T16( J, I )*BTMP( I ) + DO 80 K = I + 1, 4 + T16( J, K ) = T16( J, K ) - T16( J, I )*T16( I, K ) + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + IF( ABS( T16( 4, 4 ) ).LT.SMIN ) THEN + INFO = 1 + T16( 4, 4 ) = SMIN + END IF + SCALE = ONE + IF( ( EIGHT*SMLNUM )*ABS( BTMP( 1 ) ).GT.ABS( T16( 1, 1 ) ) .OR. + $ ( EIGHT*SMLNUM )*ABS( BTMP( 2 ) ).GT.ABS( T16( 2, 2 ) ) .OR. + $ ( EIGHT*SMLNUM )*ABS( BTMP( 3 ) ).GT.ABS( T16( 3, 3 ) ) .OR. + $ ( EIGHT*SMLNUM )*ABS( BTMP( 4 ) ).GT.ABS( T16( 4, 4 ) ) ) THEN + SCALE = ( ONE / EIGHT ) / MAX( ABS( BTMP( 1 ) ), + $ ABS( BTMP( 2 ) ), ABS( BTMP( 3 ) ), ABS( BTMP( 4 ) ) ) + BTMP( 1 ) = BTMP( 1 )*SCALE + BTMP( 2 ) = BTMP( 2 )*SCALE + BTMP( 3 ) = BTMP( 3 )*SCALE + BTMP( 4 ) = BTMP( 4 )*SCALE + END IF + DO 120 I = 1, 4 + K = 5 - I + TEMP = ONE / T16( K, K ) + TMP( K ) = BTMP( K )*TEMP + DO 110 J = K + 1, 4 + TMP( K ) = TMP( K ) - ( TEMP*T16( K, J ) )*TMP( J ) + 110 CONTINUE + 120 CONTINUE + DO 130 I = 1, 3 + IF( JPIV( 4-I ).NE.4-I ) THEN + TEMP = TMP( 4-I ) + TMP( 4-I ) = TMP( JPIV( 4-I ) ) + TMP( JPIV( 4-I ) ) = TEMP + END IF + 130 CONTINUE + X( 1, 1 ) = TMP( 1 ) + X( 2, 1 ) = TMP( 2 ) + X( 1, 2 ) = TMP( 3 ) + X( 2, 2 ) = TMP( 4 ) + XNORM = MAX( ABS( TMP( 1 ) )+ABS( TMP( 3 ) ), + $ ABS( TMP( 2 ) )+ABS( TMP( 4 ) ) ) + RETURN +* +* End of DLASY2 +* + END +*> \brief \b DORG2R generates all or part of the orthogonal matrix Q from a QR factorization determined by sgeqrf (unblocked algorithm). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORG2R + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, K, LDA, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORG2R generates an m by n real matrix Q with orthonormal columns, +*> which is defined as the first n columns of a product of k elementary +*> reflectors of order m +*> +*> Q = H(1) H(2) . . . H(k) +*> +*> as returned by DGEQRF. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix Q. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix Q. M >= N >= 0. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The number of elementary reflectors whose product defines the +*> matrix Q. N >= K >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the i-th column must contain the vector which +*> defines the elementary reflector H(i), for i = 1,2,...,k, as +*> returned by DGEQRF in the first k columns of its array +*> argument A. +*> On exit, the m-by-n matrix Q. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The first dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (K) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEQRF. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument has an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J, L +* .. +* .. External Subroutines .. + EXTERNAL DLARF, DSCAL, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORG2R', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) + $ RETURN +* +* Initialise columns k+1:n to columns of the unit matrix +* + DO 20 J = K + 1, N + DO 10 L = 1, M + A( L, J ) = ZERO + 10 CONTINUE + A( J, J ) = ONE + 20 CONTINUE +* + DO 40 I = K, 1, -1 +* +* Apply H(i) to A(i:m,i:n) from the left +* + IF( I.LT.N ) THEN + A( I, I ) = ONE + CALL DLARF( 'Left', M-I+1, N-I, A( I, I ), 1, TAU( I ), + $ A( I, I+1 ), LDA, WORK ) + END IF + IF( I.LT.M ) + $ CALL DSCAL( M-I, -TAU( I ), A( I+1, I ), 1 ) + A( I, I ) = ONE - TAU( I ) +* +* Set A(1:i-1,i) to zero +* + DO 30 L = 1, I - 1 + A( L, I ) = ZERO + 30 CONTINUE + 40 CONTINUE + RETURN +* +* End of DORG2R +* + END +*> \brief \b DORGHR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORGHR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORGHR( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORGHR generates a real orthogonal matrix Q which is defined as the +*> product of IHI-ILO elementary reflectors of order N, as returned by +*> DGEHRD: +*> +*> Q = H(ilo) H(ilo+1) . . . H(ihi-1). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix Q. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> +*> ILO and IHI must have the same values as in the previous call +*> of DGEHRD. Q is equal to the unit matrix except in the +*> submatrix Q(ilo+1:ihi,ilo+1:ihi). +*> 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the vectors which define the elementary reflectors, +*> as returned by DGEHRD. +*> On exit, the N-by-N orthogonal matrix Q. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (N-1) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEHRD. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= IHI-ILO. +*> For optimum performance LWORK >= (IHI-ILO)*NB, where NB is +*> the optimal blocksize. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORGHR( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY + INTEGER I, IINFO, J, LWKOPT, NB, NH +* .. +* .. External Subroutines .. + EXTERNAL DORGQR, XERBLA +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + NH = IHI - ILO + LQUERY = ( LWORK.EQ.-1 ) + IF( N.LT.0 ) THEN + INFO = -1 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN + INFO = -2 + ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + ELSE IF( LWORK.LT.MAX( 1, NH ) .AND. .NOT.LQUERY ) THEN + INFO = -8 + END IF +* + IF( INFO.EQ.0 ) THEN + NB = ILAENV( 1, 'DORGQR', ' ', NH, NH, NH, -1 ) + LWKOPT = MAX( 1, NH )*NB + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORGHR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* +* Shift the vectors which define the elementary reflectors one +* column to the right, and set the first ilo and the last n-ihi +* rows and columns to those of the unit matrix +* + DO 40 J = IHI, ILO + 1, -1 + DO 10 I = 1, J - 1 + A( I, J ) = ZERO + 10 CONTINUE + DO 20 I = J + 1, IHI + A( I, J ) = A( I, J-1 ) + 20 CONTINUE + DO 30 I = IHI + 1, N + A( I, J ) = ZERO + 30 CONTINUE + 40 CONTINUE + DO 60 J = 1, ILO + DO 50 I = 1, N + A( I, J ) = ZERO + 50 CONTINUE + A( J, J ) = ONE + 60 CONTINUE + DO 80 J = IHI + 1, N + DO 70 I = 1, N + A( I, J ) = ZERO + 70 CONTINUE + A( J, J ) = ONE + 80 CONTINUE +* + IF( NH.GT.0 ) THEN +* +* Generate Q(ilo+1:ihi,ilo+1:ihi) +* + CALL DORGQR( NH, NH, NH, A( ILO+1, ILO+1 ), LDA, TAU( ILO ), + $ WORK, LWORK, IINFO ) + END IF + WORK( 1 ) = LWKOPT + RETURN +* +* End of DORGHR +* + END +*> \brief \b DORGQR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORGQR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, K, LDA, LWORK, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORGQR generates an M-by-N real matrix Q with orthonormal columns, +*> which is defined as the first N columns of a product of K elementary +*> reflectors of order M +*> +*> Q = H(1) H(2) . . . H(k) +*> +*> as returned by DGEQRF. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix Q. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix Q. M >= N >= 0. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The number of elementary reflectors whose product defines the +*> matrix Q. N >= K >= 0. +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> On entry, the i-th column must contain the vector which +*> defines the elementary reflector H(i), for i = 1,2,...,k, as +*> returned by DGEQRF in the first k columns of its array +*> argument A. +*> On exit, the M-by-N matrix Q. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The first dimension of the array A. LDA >= max(1,M). +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (K) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEQRF. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. LWORK >= max(1,N). +*> For optimum performance LWORK >= N*NB, where NB is the +*> optimal blocksize. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument has an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY + INTEGER I, IB, IINFO, IWS, J, KI, KK, L, LDWORK, + $ LWKOPT, NB, NBMIN, NX +* .. +* .. External Subroutines .. + EXTERNAL DLARFB, DLARFT, DORG2R, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + NB = ILAENV( 1, 'DORGQR', ' ', M, N, K, -1 ) + LWKOPT = MAX( 1, N )*NB + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN + INFO = -8 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORGQR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + NBMIN = 2 + NX = 0 + IWS = N + IF( NB.GT.1 .AND. NB.LT.K ) THEN +* +* Determine when to cross over from blocked to unblocked code. +* + NX = MAX( 0, ILAENV( 3, 'DORGQR', ' ', M, N, K, -1 ) ) + IF( NX.LT.K ) THEN +* +* Determine if workspace is large enough for blocked code. +* + LDWORK = N + IWS = LDWORK*NB + IF( LWORK.LT.IWS ) THEN +* +* Not enough workspace to use optimal NB: reduce NB and +* determine the minimum value of NB. +* + NB = LWORK / LDWORK + NBMIN = MAX( 2, ILAENV( 2, 'DORGQR', ' ', M, N, K, -1 ) ) + END IF + END IF + END IF +* + IF( NB.GE.NBMIN .AND. NB.LT.K .AND. NX.LT.K ) THEN +* +* Use blocked code after the last block. +* The first kk columns are handled by the block method. +* + KI = ( ( K-NX-1 ) / NB )*NB + KK = MIN( K, KI+NB ) +* +* Set A(1:kk,kk+1:n) to zero. +* + DO 20 J = KK + 1, N + DO 10 I = 1, KK + A( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + KK = 0 + END IF +* +* Use unblocked code for the last or only block. +* + IF( KK.LT.N ) + $ CALL DORG2R( M-KK, N-KK, K-KK, A( KK+1, KK+1 ), LDA, + $ TAU( KK+1 ), WORK, IINFO ) +* + IF( KK.GT.0 ) THEN +* +* Use blocked code +* + DO 50 I = KI + 1, 1, -NB + IB = MIN( NB, K-I+1 ) + IF( I+IB.LE.N ) THEN +* +* Form the triangular factor of the block reflector +* H = H(i) H(i+1) . . . H(i+ib-1) +* + CALL DLARFT( 'Forward', 'Columnwise', M-I+1, IB, + $ A( I, I ), LDA, TAU( I ), WORK, LDWORK ) +* +* Apply H to A(i:m,i+ib:n) from the left +* + CALL DLARFB( 'Left', 'No transpose', 'Forward', + $ 'Columnwise', M-I+1, N-I-IB+1, IB, + $ A( I, I ), LDA, WORK, LDWORK, A( I, I+IB ), + $ LDA, WORK( IB+1 ), LDWORK ) + END IF +* +* Apply H to rows i:m of current block +* + CALL DORG2R( M-I+1, IB, IB, A( I, I ), LDA, TAU( I ), WORK, + $ IINFO ) +* +* Set rows 1:i-1 of current block to zero +* + DO 40 J = I, I + IB - 1 + DO 30 L = 1, I - 1 + A( L, J ) = ZERO + 30 CONTINUE + 40 CONTINUE + 50 CONTINUE + END IF +* + WORK( 1 ) = IWS + RETURN +* +* End of DORGQR +* + END +*> \brief \b DORM2R multiplies a general matrix by the orthogonal matrix from a QR factorization determined by sgeqrf (unblocked algorithm). +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORM2R + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, +* WORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER SIDE, TRANS +* INTEGER INFO, K, LDA, LDC, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORM2R overwrites the general real m by n matrix C with +*> +*> Q * C if SIDE = 'L' and TRANS = 'N', or +*> +*> Q**T* C if SIDE = 'L' and TRANS = 'T', or +*> +*> C * Q if SIDE = 'R' and TRANS = 'N', or +*> +*> C * Q**T if SIDE = 'R' and TRANS = 'T', +*> +*> where Q is a real orthogonal matrix defined as the product of k +*> elementary reflectors +*> +*> Q = H(1) H(2) . . . H(k) +*> +*> as returned by DGEQRF. Q is of order m if SIDE = 'L' and of order n +*> if SIDE = 'R'. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': apply Q or Q**T from the Left +*> = 'R': apply Q or Q**T from the Right +*> \endverbatim +*> +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> = 'N': apply Q (No transpose) +*> = 'T': apply Q**T (Transpose) +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. N >= 0. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The number of elementary reflectors whose product defines +*> the matrix Q. +*> If SIDE = 'L', M >= K >= 0; +*> if SIDE = 'R', N >= K >= 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,K) +*> The i-th column must contain the vector which defines the +*> elementary reflector H(i), for i = 1,2,...,k, as returned by +*> DGEQRF in the first k columns of its array argument A. +*> A is modified by the routine but restored on exit. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. +*> If SIDE = 'L', LDA >= max(1,M); +*> if SIDE = 'R', LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (K) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEQRF. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the m by n matrix C. +*> On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDC >= max(1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension +*> (N) if SIDE = 'L', +*> (M) if SIDE = 'R' +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, + $ WORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + CHARACTER SIDE, TRANS + INTEGER INFO, K, LDA, LDC, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LEFT, NOTRAN + INTEGER I, I1, I2, I3, IC, JC, MI, NI, NQ + DOUBLE PRECISION AII +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLARF, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + LEFT = LSAME( SIDE, 'L' ) + NOTRAN = LSAME( TRANS, 'N' ) +* +* NQ is the order of Q +* + IF( LEFT ) THEN + NQ = M + ELSE + NQ = N + END IF + IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN + INFO = -1 + ELSE IF( .NOT.NOTRAN .AND. .NOT.LSAME( TRANS, 'T' ) ) THEN + INFO = -2 + ELSE IF( M.LT.0 ) THEN + INFO = -3 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( K.LT.0 .OR. K.GT.NQ ) THEN + INFO = -5 + ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN + INFO = -7 + ELSE IF( LDC.LT.MAX( 1, M ) ) THEN + INFO = -10 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORM2R', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( M.EQ.0 .OR. N.EQ.0 .OR. K.EQ.0 ) + $ RETURN +* + IF( ( LEFT .AND. .NOT.NOTRAN ) .OR. ( .NOT.LEFT .AND. NOTRAN ) ) + $ THEN + I1 = 1 + I2 = K + I3 = 1 + ELSE + I1 = K + I2 = 1 + I3 = -1 + END IF +* + IF( LEFT ) THEN + NI = N + JC = 1 + ELSE + MI = M + IC = 1 + END IF +* + DO 10 I = I1, I2, I3 + IF( LEFT ) THEN +* +* H(i) is applied to C(i:m,1:n) +* + MI = M - I + 1 + IC = I + ELSE +* +* H(i) is applied to C(1:m,i:n) +* + NI = N - I + 1 + JC = I + END IF +* +* Apply H(i) +* + AII = A( I, I ) + A( I, I ) = ONE + CALL DLARF( SIDE, MI, NI, A( I, I ), 1, TAU( I ), C( IC, JC ), + $ LDC, WORK ) + A( I, I ) = AII + 10 CONTINUE + RETURN +* +* End of DORM2R +* + END +*> \brief \b DORMHR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORMHR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, +* LDC, WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER SIDE, TRANS +* INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORMHR overwrites the general real M-by-N matrix C with +*> +*> SIDE = 'L' SIDE = 'R' +*> TRANS = 'N': Q * C C * Q +*> TRANS = 'T': Q**T * C C * Q**T +*> +*> where Q is a real orthogonal matrix of order nq, with nq = m if +*> SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of +*> IHI-ILO elementary reflectors, as returned by DGEHRD: +*> +*> Q = H(ilo) H(ilo+1) . . . H(ihi-1). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': apply Q or Q**T from the Left; +*> = 'R': apply Q or Q**T from the Right. +*> \endverbatim +*> +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> = 'N': No transpose, apply Q; +*> = 'T': Transpose, apply Q**T. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. N >= 0. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> +*> ILO and IHI must have the same values as in the previous call +*> of DGEHRD. Q is equal to the unit matrix except in the +*> submatrix Q(ilo+1:ihi,ilo+1:ihi). +*> If SIDE = 'L', then 1 <= ILO <= IHI <= M, if M > 0, and +*> ILO = 1 and IHI = 0, if M = 0; +*> if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and +*> ILO = 1 and IHI = 0, if N = 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension +*> (LDA,M) if SIDE = 'L' +*> (LDA,N) if SIDE = 'R' +*> The vectors which define the elementary reflectors, as +*> returned by DGEHRD. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. +*> LDA >= max(1,M) if SIDE = 'L'; LDA >= max(1,N) if SIDE = 'R'. +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension +*> (M-1) if SIDE = 'L' +*> (N-1) if SIDE = 'R' +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEHRD. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the M-by-N matrix C. +*> On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDC >= max(1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. +*> If SIDE = 'L', LWORK >= max(1,N); +*> if SIDE = 'R', LWORK >= max(1,M). +*> For optimum performance LWORK >= N*NB if SIDE = 'L', and +*> LWORK >= M*NB if SIDE = 'R', where NB is the optimal +*> blocksize. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, + $ LDC, WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER SIDE, TRANS + INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + LOGICAL LEFT, LQUERY + INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + EXTERNAL LSAME, ILAENV +* .. +* .. External Subroutines .. + EXTERNAL DORMQR, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + NH = IHI - ILO + LEFT = LSAME( SIDE, 'L' ) + LQUERY = ( LWORK.EQ.-1 ) +* +* NQ is the order of Q and NW is the minimum dimension of WORK +* + IF( LEFT ) THEN + NQ = M + NW = N + ELSE + NQ = N + NW = M + END IF + IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN + INFO = -1 + ELSE IF( .NOT.LSAME( TRANS, 'N' ) .AND. .NOT.LSAME( TRANS, 'T' ) ) + $ THEN + INFO = -2 + ELSE IF( M.LT.0 ) THEN + INFO = -3 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, NQ ) ) THEN + INFO = -5 + ELSE IF( IHI.LT.MIN( ILO, NQ ) .OR. IHI.GT.NQ ) THEN + INFO = -6 + ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN + INFO = -8 + ELSE IF( LDC.LT.MAX( 1, M ) ) THEN + INFO = -11 + ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN + INFO = -13 + END IF +* + IF( INFO.EQ.0 ) THEN + IF( LEFT ) THEN + NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, NH, N, NH, -1 ) + ELSE + NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, M, NH, NH, -1 ) + END IF + LWKOPT = MAX( 1, NW )*NB + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORMHR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( M.EQ.0 .OR. N.EQ.0 .OR. NH.EQ.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + IF( LEFT ) THEN + MI = NH + NI = N + I1 = ILO + 1 + I2 = 1 + ELSE + MI = M + NI = NH + I1 = 1 + I2 = ILO + 1 + END IF +* + CALL DORMQR( SIDE, TRANS, MI, NI, NH, A( ILO+1, ILO ), LDA, + $ TAU( ILO ), C( I1, I2 ), LDC, WORK, LWORK, IINFO ) +* + WORK( 1 ) = LWKOPT + RETURN +* +* End of DORMHR +* + END +*> \brief \b DORMQR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DORMQR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, +* WORK, LWORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER SIDE, TRANS +* INTEGER INFO, K, LDA, LDC, LWORK, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DORMQR overwrites the general real M-by-N matrix C with +*> +*> SIDE = 'L' SIDE = 'R' +*> TRANS = 'N': Q * C C * Q +*> TRANS = 'T': Q**T * C C * Q**T +*> +*> where Q is a real orthogonal matrix defined as the product of k +*> elementary reflectors +*> +*> Q = H(1) H(2) . . . H(k) +*> +*> as returned by DGEQRF. Q is of order M if SIDE = 'L' and of order N +*> if SIDE = 'R'. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'L': apply Q or Q**T from the Left; +*> = 'R': apply Q or Q**T from the Right. +*> \endverbatim +*> +*> \param[in] TRANS +*> \verbatim +*> TRANS is CHARACTER*1 +*> = 'N': No transpose, apply Q; +*> = 'T': Transpose, apply Q**T. +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix C. M >= 0. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix C. N >= 0. +*> \endverbatim +*> +*> \param[in] K +*> \verbatim +*> K is INTEGER +*> The number of elementary reflectors whose product defines +*> the matrix Q. +*> If SIDE = 'L', M >= K >= 0; +*> if SIDE = 'R', N >= K >= 0. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,K) +*> The i-th column must contain the vector which defines the +*> elementary reflector H(i), for i = 1,2,...,k, as returned by +*> DGEQRF in the first k columns of its array argument A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. +*> If SIDE = 'L', LDA >= max(1,M); +*> if SIDE = 'R', LDA >= max(1,N). +*> \endverbatim +*> +*> \param[in] TAU +*> \verbatim +*> TAU is DOUBLE PRECISION array, dimension (K) +*> TAU(i) must contain the scalar factor of the elementary +*> reflector H(i), as returned by DGEQRF. +*> \endverbatim +*> +*> \param[in,out] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension (LDC,N) +*> On entry, the M-by-N matrix C. +*> On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. +*> \endverbatim +*> +*> \param[in] LDC +*> \verbatim +*> LDC is INTEGER +*> The leading dimension of the array C. LDC >= max(1,M). +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The dimension of the array WORK. +*> If SIDE = 'L', LWORK >= max(1,N); +*> if SIDE = 'R', LWORK >= max(1,M). +*> For good performance, LWORK should generally be larger. +*> +*> If LWORK = -1, then a workspace query is assumed; the routine +*> only calculates the optimal size of the WORK array, returns +*> this value as the first entry of the WORK array, and no error +*> message related to LWORK is issued by XERBLA. +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, + $ WORK, LWORK, INFO ) +* +* -- LAPACK computational routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER SIDE, TRANS + INTEGER INFO, K, LDA, LDC, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + INTEGER NBMAX, LDT, TSIZE + PARAMETER ( NBMAX = 64, LDT = NBMAX+1, + $ TSIZE = LDT*NBMAX ) +* .. +* .. Local Scalars .. + LOGICAL LEFT, LQUERY, NOTRAN + INTEGER I, I1, I2, I3, IB, IC, IINFO, IWT, JC, LDWORK, + $ LWKOPT, MI, NB, NBMIN, NI, NQ, NW +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + EXTERNAL LSAME, ILAENV +* .. +* .. External Subroutines .. + EXTERNAL DLARFB, DLARFT, DORM2R, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + LEFT = LSAME( SIDE, 'L' ) + NOTRAN = LSAME( TRANS, 'N' ) + LQUERY = ( LWORK.EQ.-1 ) +* +* NQ is the order of Q and NW is the minimum dimension of WORK +* + IF( LEFT ) THEN + NQ = M + NW = N + ELSE + NQ = N + NW = M + END IF + IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN + INFO = -1 + ELSE IF( .NOT.NOTRAN .AND. .NOT.LSAME( TRANS, 'T' ) ) THEN + INFO = -2 + ELSE IF( M.LT.0 ) THEN + INFO = -3 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( K.LT.0 .OR. K.GT.NQ ) THEN + INFO = -5 + ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN + INFO = -7 + ELSE IF( LDC.LT.MAX( 1, M ) ) THEN + INFO = -10 + ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN + INFO = -12 + END IF +* + IF( INFO.EQ.0 ) THEN +* +* Compute the workspace requirements +* + NB = MIN( NBMAX, ILAENV( 1, 'DORMQR', SIDE // TRANS, M, N, K, + $ -1 ) ) + LWKOPT = MAX( 1, NW )*NB + TSIZE + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORMQR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( M.EQ.0 .OR. N.EQ.0 .OR. K.EQ.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + NBMIN = 2 + LDWORK = NW + IF( NB.GT.1 .AND. NB.LT.K ) THEN + IF( LWORK.LT.NW*NB+TSIZE ) THEN + NB = (LWORK-TSIZE) / LDWORK + NBMIN = MAX( 2, ILAENV( 2, 'DORMQR', SIDE // TRANS, M, N, K, + $ -1 ) ) + END IF + END IF +* + IF( NB.LT.NBMIN .OR. NB.GE.K ) THEN +* +* Use unblocked code +* + CALL DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, + $ IINFO ) + ELSE +* +* Use blocked code +* + IWT = 1 + NW*NB + IF( ( LEFT .AND. .NOT.NOTRAN ) .OR. + $ ( .NOT.LEFT .AND. NOTRAN ) ) THEN + I1 = 1 + I2 = K + I3 = NB + ELSE + I1 = ( ( K-1 ) / NB )*NB + 1 + I2 = 1 + I3 = -NB + END IF +* + IF( LEFT ) THEN + NI = N + JC = 1 + ELSE + MI = M + IC = 1 + END IF +* + DO 10 I = I1, I2, I3 + IB = MIN( NB, K-I+1 ) +* +* Form the triangular factor of the block reflector +* H = H(i) H(i+1) . . . H(i+ib-1) +* + CALL DLARFT( 'Forward', 'Columnwise', NQ-I+1, IB, A( I, I ), + $ LDA, TAU( I ), WORK( IWT ), LDT ) + IF( LEFT ) THEN +* +* H or H**T is applied to C(i:m,1:n) +* + MI = M - I + 1 + IC = I + ELSE +* +* H or H**T is applied to C(1:m,i:n) +* + NI = N - I + 1 + JC = I + END IF +* +* Apply H or H**T +* + CALL DLARFB( SIDE, TRANS, 'Forward', 'Columnwise', MI, NI, + $ IB, A( I, I ), LDA, WORK( IWT ), LDT, + $ C( IC, JC ), LDC, WORK, LDWORK ) + 10 CONTINUE + END IF + WORK( 1 ) = LWKOPT + RETURN +* +* End of DORMQR +* + END +*> \brief \b DTREVC +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DTREVC + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, +* LDVR, MM, M, WORK, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER HOWMNY, SIDE +* INTEGER INFO, LDT, LDVL, LDVR, M, MM, N +* .. +* .. Array Arguments .. +* LOGICAL SELECT( * ) +* DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), +* $ WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DTREVC computes some or all of the right and/or left eigenvectors of +*> a real upper quasi-triangular matrix T. +*> Matrices of this type are produced by the Schur factorization of +*> a real general matrix: A = Q*T*Q**T, as computed by DHSEQR. +*> +*> The right eigenvector x and the left eigenvector y of T corresponding +*> to an eigenvalue w are defined by: +*> +*> T*x = w*x, (y**T)*T = w*(y**T) +*> +*> where y**T denotes the transpose of y. +*> The eigenvalues are not input to this routine, but are read directly +*> from the diagonal blocks of T. +*> +*> This routine returns the matrices X and/or Y of right and left +*> eigenvectors of T, or the products Q*X and/or Q*Y, where Q is an +*> input matrix. If Q is the orthogonal factor that reduces a matrix +*> A to Schur form T, then Q*X and Q*Y are the matrices of right and +*> left eigenvectors of A. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> = 'R': compute right eigenvectors only; +*> = 'L': compute left eigenvectors only; +*> = 'B': compute both right and left eigenvectors. +*> \endverbatim +*> +*> \param[in] HOWMNY +*> \verbatim +*> HOWMNY is CHARACTER*1 +*> = 'A': compute all right and/or left eigenvectors; +*> = 'B': compute all right and/or left eigenvectors, +*> backtransformed by the matrices in VR and/or VL; +*> = 'S': compute selected right and/or left eigenvectors, +*> as indicated by the logical array SELECT. +*> \endverbatim +*> +*> \param[in,out] SELECT +*> \verbatim +*> SELECT is LOGICAL array, dimension (N) +*> If HOWMNY = 'S', SELECT specifies the eigenvectors to be +*> computed. +*> If w(j) is a real eigenvalue, the corresponding real +*> eigenvector is computed if SELECT(j) is .TRUE.. +*> If w(j) and w(j+1) are the real and imaginary parts of a +*> complex eigenvalue, the corresponding complex eigenvector is +*> computed if either SELECT(j) or SELECT(j+1) is .TRUE., and +*> on exit SELECT(j) is set to .TRUE. and SELECT(j+1) is set to +*> .FALSE.. +*> Not referenced if HOWMNY = 'A' or 'B'. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix T. N >= 0. +*> \endverbatim +*> +*> \param[in] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,N) +*> The upper quasi-triangular matrix T in Schur canonical form. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] VL +*> \verbatim +*> VL is DOUBLE PRECISION array, dimension (LDVL,MM) +*> On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must +*> contain an N-by-N matrix Q (usually the orthogonal matrix Q +*> of Schur vectors returned by DHSEQR). +*> On exit, if SIDE = 'L' or 'B', VL contains: +*> if HOWMNY = 'A', the matrix Y of left eigenvectors of T; +*> if HOWMNY = 'B', the matrix Q*Y; +*> if HOWMNY = 'S', the left eigenvectors of T specified by +*> SELECT, stored consecutively in the columns +*> of VL, in the same order as their +*> eigenvalues. +*> A complex eigenvector corresponding to a complex eigenvalue +*> is stored in two consecutive columns, the first holding the +*> real part, and the second the imaginary part. +*> Not referenced if SIDE = 'R'. +*> \endverbatim +*> +*> \param[in] LDVL +*> \verbatim +*> LDVL is INTEGER +*> The leading dimension of the array VL. LDVL >= 1, and if +*> SIDE = 'L' or 'B', LDVL >= N. +*> \endverbatim +*> +*> \param[in,out] VR +*> \verbatim +*> VR is DOUBLE PRECISION array, dimension (LDVR,MM) +*> On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must +*> contain an N-by-N matrix Q (usually the orthogonal matrix Q +*> of Schur vectors returned by DHSEQR). +*> On exit, if SIDE = 'R' or 'B', VR contains: +*> if HOWMNY = 'A', the matrix X of right eigenvectors of T; +*> if HOWMNY = 'B', the matrix Q*X; +*> if HOWMNY = 'S', the right eigenvectors of T specified by +*> SELECT, stored consecutively in the columns +*> of VR, in the same order as their +*> eigenvalues. +*> A complex eigenvector corresponding to a complex eigenvalue +*> is stored in two consecutive columns, the first holding the +*> real part and the second the imaginary part. +*> Not referenced if SIDE = 'L'. +*> \endverbatim +*> +*> \param[in] LDVR +*> \verbatim +*> LDVR is INTEGER +*> The leading dimension of the array VR. LDVR >= 1, and if +*> SIDE = 'R' or 'B', LDVR >= N. +*> \endverbatim +*> +*> \param[in] MM +*> \verbatim +*> MM is INTEGER +*> The number of columns in the arrays VL and/or VR. MM >= M. +*> \endverbatim +*> +*> \param[out] M +*> \verbatim +*> M is INTEGER +*> The number of columns in the arrays VL and/or VR actually +*> used to store the eigenvectors. +*> If HOWMNY = 'A' or 'B', M is set to N. +*> Each selected real eigenvector occupies one column and each +*> selected complex eigenvector occupies two columns. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (3*N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The algorithm used in this program is basically backward (forward) +*> substitution, with scaling to make the the code robust against +*> possible overflow. +*> +*> Each eigenvector is normalized so that the element of largest +*> magnitude has magnitude 1; here the magnitude of a complex number +*> (x,y) is taken to be |x| + |y|. +*> \endverbatim +*> +* ===================================================================== + SUBROUTINE DTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, + $ LDVR, MM, M, WORK, INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER HOWMNY, SIDE + INTEGER INFO, LDT, LDVL, LDVR, M, MM, N +* .. +* .. Array Arguments .. + LOGICAL SELECT( * ) + DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), + $ WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL ALLV, BOTHV, LEFTV, OVER, PAIR, RIGHTV, SOMEV + INTEGER I, IERR, II, IP, IS, J, J1, J2, JNXT, K, KI, N2 + DOUBLE PRECISION BETA, BIGNUM, EMAX, OVFL, REC, REMAX, SCALE, + $ SMIN, SMLNUM, ULP, UNFL, VCRIT, VMAX, WI, WR, + $ XNORM +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER IDAMAX + DOUBLE PRECISION DDOT, DLAMCH + EXTERNAL LSAME, IDAMAX, DDOT, DLAMCH +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DCOPY, DGEMV, DLALN2, DSCAL, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. +* .. Local Arrays .. + DOUBLE PRECISION X( 2, 2 ) +* .. +* .. Executable Statements .. +* +* Decode and test the input parameters +* + BOTHV = LSAME( SIDE, 'B' ) + RIGHTV = LSAME( SIDE, 'R' ) .OR. BOTHV + LEFTV = LSAME( SIDE, 'L' ) .OR. BOTHV +* + ALLV = LSAME( HOWMNY, 'A' ) + OVER = LSAME( HOWMNY, 'B' ) + SOMEV = LSAME( HOWMNY, 'S' ) +* + INFO = 0 + IF( .NOT.RIGHTV .AND. .NOT.LEFTV ) THEN + INFO = -1 + ELSE IF( .NOT.ALLV .AND. .NOT.OVER .AND. .NOT.SOMEV ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -4 + ELSE IF( LDT.LT.MAX( 1, N ) ) THEN + INFO = -6 + ELSE IF( LDVL.LT.1 .OR. ( LEFTV .AND. LDVL.LT.N ) ) THEN + INFO = -8 + ELSE IF( LDVR.LT.1 .OR. ( RIGHTV .AND. LDVR.LT.N ) ) THEN + INFO = -10 + ELSE +* +* Set M to the number of columns required to store the selected +* eigenvectors, standardize the array SELECT if necessary, and +* test MM. +* + IF( SOMEV ) THEN + M = 0 + PAIR = .FALSE. + DO 10 J = 1, N + IF( PAIR ) THEN + PAIR = .FALSE. + SELECT( J ) = .FALSE. + ELSE + IF( J.LT.N ) THEN + IF( T( J+1, J ).EQ.ZERO ) THEN + IF( SELECT( J ) ) + $ M = M + 1 + ELSE + PAIR = .TRUE. + IF( SELECT( J ) .OR. SELECT( J+1 ) ) THEN + SELECT( J ) = .TRUE. + M = M + 2 + END IF + END IF + ELSE + IF( SELECT( N ) ) + $ M = M + 1 + END IF + END IF + 10 CONTINUE + ELSE + M = N + END IF +* + IF( MM.LT.M ) THEN + INFO = -11 + END IF + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DTREVC', -INFO ) + RETURN + END IF +* +* Quick return if possible. +* + IF( N.EQ.0 ) + $ RETURN +* +* Set the constants to control overflow. +* + UNFL = DLAMCH( 'Safe minimum' ) + OVFL = ONE / UNFL + CALL DLABAD( UNFL, OVFL ) + ULP = DLAMCH( 'Precision' ) + SMLNUM = UNFL*( N / ULP ) + BIGNUM = ( ONE-ULP ) / SMLNUM +* +* Compute 1-norm of each column of strictly upper triangular +* part of T to control overflow in triangular solver. +* + WORK( 1 ) = ZERO + DO 30 J = 2, N + WORK( J ) = ZERO + DO 20 I = 1, J - 1 + WORK( J ) = WORK( J ) + ABS( T( I, J ) ) + 20 CONTINUE + 30 CONTINUE +* +* Index IP is used to specify the real or complex eigenvalue: +* IP = 0, real eigenvalue, +* 1, first of conjugate complex pair: (wr,wi) +* -1, second of conjugate complex pair: (wr,wi) +* + N2 = 2*N +* + IF( RIGHTV ) THEN +* +* Compute right eigenvectors. +* + IP = 0 + IS = M + DO 140 KI = N, 1, -1 +* + IF( IP.EQ.1 ) + $ GO TO 130 + IF( KI.EQ.1 ) + $ GO TO 40 + IF( T( KI, KI-1 ).EQ.ZERO ) + $ GO TO 40 + IP = -1 +* + 40 CONTINUE + IF( SOMEV ) THEN + IF( IP.EQ.0 ) THEN + IF( .NOT.SELECT( KI ) ) + $ GO TO 130 + ELSE + IF( .NOT.SELECT( KI-1 ) ) + $ GO TO 130 + END IF + END IF +* +* Compute the KI-th eigenvalue (WR,WI). +* + WR = T( KI, KI ) + WI = ZERO + IF( IP.NE.0 ) + $ WI = SQRT( ABS( T( KI, KI-1 ) ) )* + $ SQRT( ABS( T( KI-1, KI ) ) ) + SMIN = MAX( ULP*( ABS( WR )+ABS( WI ) ), SMLNUM ) +* + IF( IP.EQ.0 ) THEN +* +* Real right eigenvector +* + WORK( KI+N ) = ONE +* +* Form right-hand side +* + DO 50 K = 1, KI - 1 + WORK( K+N ) = -T( K, KI ) + 50 CONTINUE +* +* Solve the upper quasi-triangular system: +* (T(1:KI-1,1:KI-1) - WR)*X = SCALE*WORK. +* + JNXT = KI - 1 + DO 60 J = KI - 1, 1, -1 + IF( J.GT.JNXT ) + $ GO TO 60 + J1 = J + J2 = J + JNXT = J - 1 + IF( J.GT.1 ) THEN + IF( T( J, J-1 ).NE.ZERO ) THEN + J1 = J - 1 + JNXT = J - 2 + END IF + END IF +* + IF( J1.EQ.J2 ) THEN +* +* 1-by-1 diagonal block +* + CALL DLALN2( .FALSE., 1, 1, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, + $ ZERO, X, 2, SCALE, XNORM, IERR ) +* +* Scale X(1,1) to avoid overflow when updating +* the right-hand side. +* + IF( XNORM.GT.ONE ) THEN + IF( WORK( J ).GT.BIGNUM / XNORM ) THEN + X( 1, 1 ) = X( 1, 1 ) / XNORM + SCALE = SCALE / XNORM + END IF + END IF +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) + $ CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) + WORK( J+N ) = X( 1, 1 ) +* +* Update right-hand side +* + CALL DAXPY( J-1, -X( 1, 1 ), T( 1, J ), 1, + $ WORK( 1+N ), 1 ) +* + ELSE +* +* 2-by-2 diagonal block +* + CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, + $ T( J-1, J-1 ), LDT, ONE, ONE, + $ WORK( J-1+N ), N, WR, ZERO, X, 2, + $ SCALE, XNORM, IERR ) +* +* Scale X(1,1) and X(2,1) to avoid overflow when +* updating the right-hand side. +* + IF( XNORM.GT.ONE ) THEN + BETA = MAX( WORK( J-1 ), WORK( J ) ) + IF( BETA.GT.BIGNUM / XNORM ) THEN + X( 1, 1 ) = X( 1, 1 ) / XNORM + X( 2, 1 ) = X( 2, 1 ) / XNORM + SCALE = SCALE / XNORM + END IF + END IF +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) + $ CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) + WORK( J-1+N ) = X( 1, 1 ) + WORK( J+N ) = X( 2, 1 ) +* +* Update right-hand side +* + CALL DAXPY( J-2, -X( 1, 1 ), T( 1, J-1 ), 1, + $ WORK( 1+N ), 1 ) + CALL DAXPY( J-2, -X( 2, 1 ), T( 1, J ), 1, + $ WORK( 1+N ), 1 ) + END IF + 60 CONTINUE +* +* Copy the vector x or Q*x to VR and normalize. +* + IF( .NOT.OVER ) THEN + CALL DCOPY( KI, WORK( 1+N ), 1, VR( 1, IS ), 1 ) +* + II = IDAMAX( KI, VR( 1, IS ), 1 ) + REMAX = ONE / ABS( VR( II, IS ) ) + CALL DSCAL( KI, REMAX, VR( 1, IS ), 1 ) +* + DO 70 K = KI + 1, N + VR( K, IS ) = ZERO + 70 CONTINUE + ELSE + IF( KI.GT.1 ) + $ CALL DGEMV( 'N', N, KI-1, ONE, VR, LDVR, + $ WORK( 1+N ), 1, WORK( KI+N ), + $ VR( 1, KI ), 1 ) +* + II = IDAMAX( N, VR( 1, KI ), 1 ) + REMAX = ONE / ABS( VR( II, KI ) ) + CALL DSCAL( N, REMAX, VR( 1, KI ), 1 ) + END IF +* + ELSE +* +* Complex right eigenvector. +* +* Initial solve +* [ (T(KI-1,KI-1) T(KI-1,KI) ) - (WR + I* WI)]*X = 0. +* [ (T(KI,KI-1) T(KI,KI) ) ] +* + IF( ABS( T( KI-1, KI ) ).GE.ABS( T( KI, KI-1 ) ) ) THEN + WORK( KI-1+N ) = ONE + WORK( KI+N2 ) = WI / T( KI-1, KI ) + ELSE + WORK( KI-1+N ) = -WI / T( KI, KI-1 ) + WORK( KI+N2 ) = ONE + END IF + WORK( KI+N ) = ZERO + WORK( KI-1+N2 ) = ZERO +* +* Form right-hand side +* + DO 80 K = 1, KI - 2 + WORK( K+N ) = -WORK( KI-1+N )*T( K, KI-1 ) + WORK( K+N2 ) = -WORK( KI+N2 )*T( K, KI ) + 80 CONTINUE +* +* Solve upper quasi-triangular system: +* (T(1:KI-2,1:KI-2) - (WR+i*WI))*X = SCALE*(WORK+i*WORK2) +* + JNXT = KI - 2 + DO 90 J = KI - 2, 1, -1 + IF( J.GT.JNXT ) + $ GO TO 90 + J1 = J + J2 = J + JNXT = J - 1 + IF( J.GT.1 ) THEN + IF( T( J, J-1 ).NE.ZERO ) THEN + J1 = J - 1 + JNXT = J - 2 + END IF + END IF +* + IF( J1.EQ.J2 ) THEN +* +* 1-by-1 diagonal block +* + CALL DLALN2( .FALSE., 1, 2, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, WI, + $ X, 2, SCALE, XNORM, IERR ) +* +* Scale X(1,1) and X(1,2) to avoid overflow when +* updating the right-hand side. +* + IF( XNORM.GT.ONE ) THEN + IF( WORK( J ).GT.BIGNUM / XNORM ) THEN + X( 1, 1 ) = X( 1, 1 ) / XNORM + X( 1, 2 ) = X( 1, 2 ) / XNORM + SCALE = SCALE / XNORM + END IF + END IF +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) THEN + CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) + CALL DSCAL( KI, SCALE, WORK( 1+N2 ), 1 ) + END IF + WORK( J+N ) = X( 1, 1 ) + WORK( J+N2 ) = X( 1, 2 ) +* +* Update the right-hand side +* + CALL DAXPY( J-1, -X( 1, 1 ), T( 1, J ), 1, + $ WORK( 1+N ), 1 ) + CALL DAXPY( J-1, -X( 1, 2 ), T( 1, J ), 1, + $ WORK( 1+N2 ), 1 ) +* + ELSE +* +* 2-by-2 diagonal block +* + CALL DLALN2( .FALSE., 2, 2, SMIN, ONE, + $ T( J-1, J-1 ), LDT, ONE, ONE, + $ WORK( J-1+N ), N, WR, WI, X, 2, SCALE, + $ XNORM, IERR ) +* +* Scale X to avoid overflow when updating +* the right-hand side. +* + IF( XNORM.GT.ONE ) THEN + BETA = MAX( WORK( J-1 ), WORK( J ) ) + IF( BETA.GT.BIGNUM / XNORM ) THEN + REC = ONE / XNORM + X( 1, 1 ) = X( 1, 1 )*REC + X( 1, 2 ) = X( 1, 2 )*REC + X( 2, 1 ) = X( 2, 1 )*REC + X( 2, 2 ) = X( 2, 2 )*REC + SCALE = SCALE*REC + END IF + END IF +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) THEN + CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) + CALL DSCAL( KI, SCALE, WORK( 1+N2 ), 1 ) + END IF + WORK( J-1+N ) = X( 1, 1 ) + WORK( J+N ) = X( 2, 1 ) + WORK( J-1+N2 ) = X( 1, 2 ) + WORK( J+N2 ) = X( 2, 2 ) +* +* Update the right-hand side +* + CALL DAXPY( J-2, -X( 1, 1 ), T( 1, J-1 ), 1, + $ WORK( 1+N ), 1 ) + CALL DAXPY( J-2, -X( 2, 1 ), T( 1, J ), 1, + $ WORK( 1+N ), 1 ) + CALL DAXPY( J-2, -X( 1, 2 ), T( 1, J-1 ), 1, + $ WORK( 1+N2 ), 1 ) + CALL DAXPY( J-2, -X( 2, 2 ), T( 1, J ), 1, + $ WORK( 1+N2 ), 1 ) + END IF + 90 CONTINUE +* +* Copy the vector x or Q*x to VR and normalize. +* + IF( .NOT.OVER ) THEN + CALL DCOPY( KI, WORK( 1+N ), 1, VR( 1, IS-1 ), 1 ) + CALL DCOPY( KI, WORK( 1+N2 ), 1, VR( 1, IS ), 1 ) +* + EMAX = ZERO + DO 100 K = 1, KI + EMAX = MAX( EMAX, ABS( VR( K, IS-1 ) )+ + $ ABS( VR( K, IS ) ) ) + 100 CONTINUE +* + REMAX = ONE / EMAX + CALL DSCAL( KI, REMAX, VR( 1, IS-1 ), 1 ) + CALL DSCAL( KI, REMAX, VR( 1, IS ), 1 ) +* + DO 110 K = KI + 1, N + VR( K, IS-1 ) = ZERO + VR( K, IS ) = ZERO + 110 CONTINUE +* + ELSE +* + IF( KI.GT.2 ) THEN + CALL DGEMV( 'N', N, KI-2, ONE, VR, LDVR, + $ WORK( 1+N ), 1, WORK( KI-1+N ), + $ VR( 1, KI-1 ), 1 ) + CALL DGEMV( 'N', N, KI-2, ONE, VR, LDVR, + $ WORK( 1+N2 ), 1, WORK( KI+N2 ), + $ VR( 1, KI ), 1 ) + ELSE + CALL DSCAL( N, WORK( KI-1+N ), VR( 1, KI-1 ), 1 ) + CALL DSCAL( N, WORK( KI+N2 ), VR( 1, KI ), 1 ) + END IF +* + EMAX = ZERO + DO 120 K = 1, N + EMAX = MAX( EMAX, ABS( VR( K, KI-1 ) )+ + $ ABS( VR( K, KI ) ) ) + 120 CONTINUE + REMAX = ONE / EMAX + CALL DSCAL( N, REMAX, VR( 1, KI-1 ), 1 ) + CALL DSCAL( N, REMAX, VR( 1, KI ), 1 ) + END IF + END IF +* + IS = IS - 1 + IF( IP.NE.0 ) + $ IS = IS - 1 + 130 CONTINUE + IF( IP.EQ.1 ) + $ IP = 0 + IF( IP.EQ.-1 ) + $ IP = 1 + 140 CONTINUE + END IF +* + IF( LEFTV ) THEN +* +* Compute left eigenvectors. +* + IP = 0 + IS = 1 + DO 260 KI = 1, N +* + IF( IP.EQ.-1 ) + $ GO TO 250 + IF( KI.EQ.N ) + $ GO TO 150 + IF( T( KI+1, KI ).EQ.ZERO ) + $ GO TO 150 + IP = 1 +* + 150 CONTINUE + IF( SOMEV ) THEN + IF( .NOT.SELECT( KI ) ) + $ GO TO 250 + END IF +* +* Compute the KI-th eigenvalue (WR,WI). +* + WR = T( KI, KI ) + WI = ZERO + IF( IP.NE.0 ) + $ WI = SQRT( ABS( T( KI, KI+1 ) ) )* + $ SQRT( ABS( T( KI+1, KI ) ) ) + SMIN = MAX( ULP*( ABS( WR )+ABS( WI ) ), SMLNUM ) +* + IF( IP.EQ.0 ) THEN +* +* Real left eigenvector. +* + WORK( KI+N ) = ONE +* +* Form right-hand side +* + DO 160 K = KI + 1, N + WORK( K+N ) = -T( KI, K ) + 160 CONTINUE +* +* Solve the quasi-triangular system: +* (T(KI+1:N,KI+1:N) - WR)**T*X = SCALE*WORK +* + VMAX = ONE + VCRIT = BIGNUM +* + JNXT = KI + 1 + DO 170 J = KI + 1, N + IF( J.LT.JNXT ) + $ GO TO 170 + J1 = J + J2 = J + JNXT = J + 1 + IF( J.LT.N ) THEN + IF( T( J+1, J ).NE.ZERO ) THEN + J2 = J + 1 + JNXT = J + 2 + END IF + END IF +* + IF( J1.EQ.J2 ) THEN +* +* 1-by-1 diagonal block +* +* Scale if necessary to avoid overflow when forming +* the right-hand side. +* + IF( WORK( J ).GT.VCRIT ) THEN + REC = ONE / VMAX + CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) + VMAX = ONE + VCRIT = BIGNUM + END IF +* + WORK( J+N ) = WORK( J+N ) - + $ DDOT( J-KI-1, T( KI+1, J ), 1, + $ WORK( KI+1+N ), 1 ) +* +* Solve (T(J,J)-WR)**T*X = WORK +* + CALL DLALN2( .FALSE., 1, 1, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, + $ ZERO, X, 2, SCALE, XNORM, IERR ) +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) + $ CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) + WORK( J+N ) = X( 1, 1 ) + VMAX = MAX( ABS( WORK( J+N ) ), VMAX ) + VCRIT = BIGNUM / VMAX +* + ELSE +* +* 2-by-2 diagonal block +* +* Scale if necessary to avoid overflow when forming +* the right-hand side. +* + BETA = MAX( WORK( J ), WORK( J+1 ) ) + IF( BETA.GT.VCRIT ) THEN + REC = ONE / VMAX + CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) + VMAX = ONE + VCRIT = BIGNUM + END IF +* + WORK( J+N ) = WORK( J+N ) - + $ DDOT( J-KI-1, T( KI+1, J ), 1, + $ WORK( KI+1+N ), 1 ) +* + WORK( J+1+N ) = WORK( J+1+N ) - + $ DDOT( J-KI-1, T( KI+1, J+1 ), 1, + $ WORK( KI+1+N ), 1 ) +* +* Solve +* [T(J,J)-WR T(J,J+1) ]**T * X = SCALE*( WORK1 ) +* [T(J+1,J) T(J+1,J+1)-WR] ( WORK2 ) +* + CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, + $ ZERO, X, 2, SCALE, XNORM, IERR ) +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) + $ CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) + WORK( J+N ) = X( 1, 1 ) + WORK( J+1+N ) = X( 2, 1 ) +* + VMAX = MAX( ABS( WORK( J+N ) ), + $ ABS( WORK( J+1+N ) ), VMAX ) + VCRIT = BIGNUM / VMAX +* + END IF + 170 CONTINUE +* +* Copy the vector x or Q*x to VL and normalize. +* + IF( .NOT.OVER ) THEN + CALL DCOPY( N-KI+1, WORK( KI+N ), 1, VL( KI, IS ), 1 ) +* + II = IDAMAX( N-KI+1, VL( KI, IS ), 1 ) + KI - 1 + REMAX = ONE / ABS( VL( II, IS ) ) + CALL DSCAL( N-KI+1, REMAX, VL( KI, IS ), 1 ) +* + DO 180 K = 1, KI - 1 + VL( K, IS ) = ZERO + 180 CONTINUE +* + ELSE +* + IF( KI.LT.N ) + $ CALL DGEMV( 'N', N, N-KI, ONE, VL( 1, KI+1 ), LDVL, + $ WORK( KI+1+N ), 1, WORK( KI+N ), + $ VL( 1, KI ), 1 ) +* + II = IDAMAX( N, VL( 1, KI ), 1 ) + REMAX = ONE / ABS( VL( II, KI ) ) + CALL DSCAL( N, REMAX, VL( 1, KI ), 1 ) +* + END IF +* + ELSE +* +* Complex left eigenvector. +* +* Initial solve: +* ((T(KI,KI) T(KI,KI+1) )**T - (WR - I* WI))*X = 0. +* ((T(KI+1,KI) T(KI+1,KI+1)) ) +* + IF( ABS( T( KI, KI+1 ) ).GE.ABS( T( KI+1, KI ) ) ) THEN + WORK( KI+N ) = WI / T( KI, KI+1 ) + WORK( KI+1+N2 ) = ONE + ELSE + WORK( KI+N ) = ONE + WORK( KI+1+N2 ) = -WI / T( KI+1, KI ) + END IF + WORK( KI+1+N ) = ZERO + WORK( KI+N2 ) = ZERO +* +* Form right-hand side +* + DO 190 K = KI + 2, N + WORK( K+N ) = -WORK( KI+N )*T( KI, K ) + WORK( K+N2 ) = -WORK( KI+1+N2 )*T( KI+1, K ) + 190 CONTINUE +* +* Solve complex quasi-triangular system: +* ( T(KI+2,N:KI+2,N) - (WR-i*WI) )*X = WORK1+i*WORK2 +* + VMAX = ONE + VCRIT = BIGNUM +* + JNXT = KI + 2 + DO 200 J = KI + 2, N + IF( J.LT.JNXT ) + $ GO TO 200 + J1 = J + J2 = J + JNXT = J + 1 + IF( J.LT.N ) THEN + IF( T( J+1, J ).NE.ZERO ) THEN + J2 = J + 1 + JNXT = J + 2 + END IF + END IF +* + IF( J1.EQ.J2 ) THEN +* +* 1-by-1 diagonal block +* +* Scale if necessary to avoid overflow when +* forming the right-hand side elements. +* + IF( WORK( J ).GT.VCRIT ) THEN + REC = ONE / VMAX + CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) + CALL DSCAL( N-KI+1, REC, WORK( KI+N2 ), 1 ) + VMAX = ONE + VCRIT = BIGNUM + END IF +* + WORK( J+N ) = WORK( J+N ) - + $ DDOT( J-KI-2, T( KI+2, J ), 1, + $ WORK( KI+2+N ), 1 ) + WORK( J+N2 ) = WORK( J+N2 ) - + $ DDOT( J-KI-2, T( KI+2, J ), 1, + $ WORK( KI+2+N2 ), 1 ) +* +* Solve (T(J,J)-(WR-i*WI))*(X11+i*X12)= WK+I*WK2 +* + CALL DLALN2( .FALSE., 1, 2, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, + $ -WI, X, 2, SCALE, XNORM, IERR ) +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) THEN + CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) + CALL DSCAL( N-KI+1, SCALE, WORK( KI+N2 ), 1 ) + END IF + WORK( J+N ) = X( 1, 1 ) + WORK( J+N2 ) = X( 1, 2 ) + VMAX = MAX( ABS( WORK( J+N ) ), + $ ABS( WORK( J+N2 ) ), VMAX ) + VCRIT = BIGNUM / VMAX +* + ELSE +* +* 2-by-2 diagonal block +* +* Scale if necessary to avoid overflow when forming +* the right-hand side elements. +* + BETA = MAX( WORK( J ), WORK( J+1 ) ) + IF( BETA.GT.VCRIT ) THEN + REC = ONE / VMAX + CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) + CALL DSCAL( N-KI+1, REC, WORK( KI+N2 ), 1 ) + VMAX = ONE + VCRIT = BIGNUM + END IF +* + WORK( J+N ) = WORK( J+N ) - + $ DDOT( J-KI-2, T( KI+2, J ), 1, + $ WORK( KI+2+N ), 1 ) +* + WORK( J+N2 ) = WORK( J+N2 ) - + $ DDOT( J-KI-2, T( KI+2, J ), 1, + $ WORK( KI+2+N2 ), 1 ) +* + WORK( J+1+N ) = WORK( J+1+N ) - + $ DDOT( J-KI-2, T( KI+2, J+1 ), 1, + $ WORK( KI+2+N ), 1 ) +* + WORK( J+1+N2 ) = WORK( J+1+N2 ) - + $ DDOT( J-KI-2, T( KI+2, J+1 ), 1, + $ WORK( KI+2+N2 ), 1 ) +* +* Solve 2-by-2 complex linear equation +* ([T(j,j) T(j,j+1) ]**T-(wr-i*wi)*I)*X = SCALE*B +* ([T(j+1,j) T(j+1,j+1)] ) +* + CALL DLALN2( .TRUE., 2, 2, SMIN, ONE, T( J, J ), + $ LDT, ONE, ONE, WORK( J+N ), N, WR, + $ -WI, X, 2, SCALE, XNORM, IERR ) +* +* Scale if necessary +* + IF( SCALE.NE.ONE ) THEN + CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) + CALL DSCAL( N-KI+1, SCALE, WORK( KI+N2 ), 1 ) + END IF + WORK( J+N ) = X( 1, 1 ) + WORK( J+N2 ) = X( 1, 2 ) + WORK( J+1+N ) = X( 2, 1 ) + WORK( J+1+N2 ) = X( 2, 2 ) + VMAX = MAX( ABS( X( 1, 1 ) ), ABS( X( 1, 2 ) ), + $ ABS( X( 2, 1 ) ), ABS( X( 2, 2 ) ), VMAX ) + VCRIT = BIGNUM / VMAX +* + END IF + 200 CONTINUE +* +* Copy the vector x or Q*x to VL and normalize. +* + IF( .NOT.OVER ) THEN + CALL DCOPY( N-KI+1, WORK( KI+N ), 1, VL( KI, IS ), 1 ) + CALL DCOPY( N-KI+1, WORK( KI+N2 ), 1, VL( KI, IS+1 ), + $ 1 ) +* + EMAX = ZERO + DO 220 K = KI, N + EMAX = MAX( EMAX, ABS( VL( K, IS ) )+ + $ ABS( VL( K, IS+1 ) ) ) + 220 CONTINUE + REMAX = ONE / EMAX + CALL DSCAL( N-KI+1, REMAX, VL( KI, IS ), 1 ) + CALL DSCAL( N-KI+1, REMAX, VL( KI, IS+1 ), 1 ) +* + DO 230 K = 1, KI - 1 + VL( K, IS ) = ZERO + VL( K, IS+1 ) = ZERO + 230 CONTINUE + ELSE + IF( KI.LT.N-1 ) THEN + CALL DGEMV( 'N', N, N-KI-1, ONE, VL( 1, KI+2 ), + $ LDVL, WORK( KI+2+N ), 1, WORK( KI+N ), + $ VL( 1, KI ), 1 ) + CALL DGEMV( 'N', N, N-KI-1, ONE, VL( 1, KI+2 ), + $ LDVL, WORK( KI+2+N2 ), 1, + $ WORK( KI+1+N2 ), VL( 1, KI+1 ), 1 ) + ELSE + CALL DSCAL( N, WORK( KI+N ), VL( 1, KI ), 1 ) + CALL DSCAL( N, WORK( KI+1+N2 ), VL( 1, KI+1 ), 1 ) + END IF +* + EMAX = ZERO + DO 240 K = 1, N + EMAX = MAX( EMAX, ABS( VL( K, KI ) )+ + $ ABS( VL( K, KI+1 ) ) ) + 240 CONTINUE + REMAX = ONE / EMAX + CALL DSCAL( N, REMAX, VL( 1, KI ), 1 ) + CALL DSCAL( N, REMAX, VL( 1, KI+1 ), 1 ) +* + END IF +* + END IF +* + IS = IS + 1 + IF( IP.NE.0 ) + $ IS = IS + 1 + 250 CONTINUE + IF( IP.EQ.-1 ) + $ IP = 0 + IF( IP.EQ.1 ) + $ IP = -1 +* + 260 CONTINUE +* + END IF +* + RETURN +* +* End of DTREVC +* + END +*> \brief \b DTREXC +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DTREXC + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, +* INFO ) +* +* .. Scalar Arguments .. +* CHARACTER COMPQ +* INTEGER IFST, ILST, INFO, LDQ, LDT, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DTREXC reorders the real Schur factorization of a real matrix +*> A = Q*T*Q**T, so that the diagonal block of T with row index IFST is +*> moved to row ILST. +*> +*> The real Schur form T is reordered by an orthogonal similarity +*> transformation Z**T*T*Z, and optionally the matrix Q of Schur vectors +*> is updated by postmultiplying it with Z. +*> +*> T must be in Schur canonical form (as returned by DHSEQR), that is, +*> block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each +*> 2-by-2 diagonal block has its diagonal elements equal and its +*> off-diagonal elements of opposite sign. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] COMPQ +*> \verbatim +*> COMPQ is CHARACTER*1 +*> = 'V': update the matrix Q of Schur vectors; +*> = 'N': do not update Q. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The order of the matrix T. N >= 0. +*> \endverbatim +*> +*> \param[in,out] T +*> \verbatim +*> T is DOUBLE PRECISION array, dimension (LDT,N) +*> On entry, the upper quasi-triangular matrix T, in Schur +*> Schur canonical form. +*> On exit, the reordered upper quasi-triangular matrix, again +*> in Schur canonical form. +*> \endverbatim +*> +*> \param[in] LDT +*> \verbatim +*> LDT is INTEGER +*> The leading dimension of the array T. LDT >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] Q +*> \verbatim +*> Q is DOUBLE PRECISION array, dimension (LDQ,N) +*> On entry, if COMPQ = 'V', the matrix Q of Schur vectors. +*> On exit, if COMPQ = 'V', Q has been postmultiplied by the +*> orthogonal transformation matrix Z which reorders T. +*> If COMPQ = 'N', Q is not referenced. +*> \endverbatim +*> +*> \param[in] LDQ +*> \verbatim +*> LDQ is INTEGER +*> The leading dimension of the array Q. LDQ >= max(1,N). +*> \endverbatim +*> +*> \param[in,out] IFST +*> \verbatim +*> IFST is INTEGER +*> \endverbatim +*> +*> \param[in,out] ILST +*> \verbatim +*> ILST is INTEGER +*> +*> Specify the reordering of the diagonal blocks of T. +*> The block with row index IFST is moved to row ILST, by a +*> sequence of transpositions between adjacent blocks. +*> On exit, if IFST pointed on entry to the second row of a +*> 2-by-2 block, it is changed to point to the first row; ILST +*> always points to the first row of the block in its final +*> position (which may differ from its input value by +1 or -1). +*> 1 <= IFST <= N; 1 <= ILST <= N. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is DOUBLE PRECISION array, dimension (N) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> = 0: successful exit +*> < 0: if INFO = -i, the i-th argument had an illegal value +*> = 1: two adjacent blocks were too close to swap (the problem +*> is very ill-conditioned); T may have been partially +*> reordered, and ILST points to the first row of the +*> current position of the block being moved. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERcomputational +* +* ===================================================================== + SUBROUTINE DTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, + $ INFO ) +* +* -- LAPACK computational routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER COMPQ + INTEGER IFST, ILST, INFO, LDQ, LDT, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL WANTQ + INTEGER HERE, NBF, NBL, NBNEXT +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLAEXC, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Decode and test the input arguments. +* + INFO = 0 + WANTQ = LSAME( COMPQ, 'V' ) + IF( .NOT.WANTQ .AND. .NOT.LSAME( COMPQ, 'N' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( LDT.LT.MAX( 1, N ) ) THEN + INFO = -4 + ELSE IF( LDQ.LT.1 .OR. ( WANTQ .AND. LDQ.LT.MAX( 1, N ) ) ) THEN + INFO = -6 + ELSE IF( IFST.LT.1 .OR. IFST.GT.N ) THEN + INFO = -7 + ELSE IF( ILST.LT.1 .OR. ILST.GT.N ) THEN + INFO = -8 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DTREXC', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* +* Determine the first row of specified block +* and find out it is 1 by 1 or 2 by 2. +* + IF( IFST.GT.1 ) THEN + IF( T( IFST, IFST-1 ).NE.ZERO ) + $ IFST = IFST - 1 + END IF + NBF = 1 + IF( IFST.LT.N ) THEN + IF( T( IFST+1, IFST ).NE.ZERO ) + $ NBF = 2 + END IF +* +* Determine the first row of the final block +* and find out it is 1 by 1 or 2 by 2. +* + IF( ILST.GT.1 ) THEN + IF( T( ILST, ILST-1 ).NE.ZERO ) + $ ILST = ILST - 1 + END IF + NBL = 1 + IF( ILST.LT.N ) THEN + IF( T( ILST+1, ILST ).NE.ZERO ) + $ NBL = 2 + END IF +* + IF( IFST.EQ.ILST ) + $ RETURN +* + IF( IFST.LT.ILST ) THEN +* +* Update ILST +* + IF( NBF.EQ.2 .AND. NBL.EQ.1 ) + $ ILST = ILST - 1 + IF( NBF.EQ.1 .AND. NBL.EQ.2 ) + $ ILST = ILST + 1 +* + HERE = IFST +* + 10 CONTINUE +* +* Swap block with next one below +* + IF( NBF.EQ.1 .OR. NBF.EQ.2 ) THEN +* +* Current block either 1 by 1 or 2 by 2 +* + NBNEXT = 1 + IF( HERE+NBF+1.LE.N ) THEN + IF( T( HERE+NBF+1, HERE+NBF ).NE.ZERO ) + $ NBNEXT = 2 + END IF + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, NBF, NBNEXT, + $ WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + HERE = HERE + NBNEXT +* +* Test if 2 by 2 block breaks into two 1 by 1 blocks +* + IF( NBF.EQ.2 ) THEN + IF( T( HERE+1, HERE ).EQ.ZERO ) + $ NBF = 3 + END IF +* + ELSE +* +* Current block consists of two 1 by 1 blocks each of which +* must be swapped individually +* + NBNEXT = 1 + IF( HERE+3.LE.N ) THEN + IF( T( HERE+3, HERE+2 ).NE.ZERO ) + $ NBNEXT = 2 + END IF + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE+1, 1, NBNEXT, + $ WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + IF( NBNEXT.EQ.1 ) THEN +* +* Swap two 1 by 1 blocks, no problems possible +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, NBNEXT, + $ WORK, INFO ) + HERE = HERE + 1 + ELSE +* +* Recompute NBNEXT in case 2 by 2 split +* + IF( T( HERE+2, HERE+1 ).EQ.ZERO ) + $ NBNEXT = 1 + IF( NBNEXT.EQ.2 ) THEN +* +* 2 by 2 Block did not split +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, + $ NBNEXT, WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + HERE = HERE + 2 + ELSE +* +* 2 by 2 Block did split +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, 1, + $ WORK, INFO ) + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE+1, 1, 1, + $ WORK, INFO ) + HERE = HERE + 2 + END IF + END IF + END IF + IF( HERE.LT.ILST ) + $ GO TO 10 +* + ELSE +* + HERE = IFST + 20 CONTINUE +* +* Swap block with next one above +* + IF( NBF.EQ.1 .OR. NBF.EQ.2 ) THEN +* +* Current block either 1 by 1 or 2 by 2 +* + NBNEXT = 1 + IF( HERE.GE.3 ) THEN + IF( T( HERE-1, HERE-2 ).NE.ZERO ) + $ NBNEXT = 2 + END IF + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-NBNEXT, NBNEXT, + $ NBF, WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + HERE = HERE - NBNEXT +* +* Test if 2 by 2 block breaks into two 1 by 1 blocks +* + IF( NBF.EQ.2 ) THEN + IF( T( HERE+1, HERE ).EQ.ZERO ) + $ NBF = 3 + END IF +* + ELSE +* +* Current block consists of two 1 by 1 blocks each of which +* must be swapped individually +* + NBNEXT = 1 + IF( HERE.GE.3 ) THEN + IF( T( HERE-1, HERE-2 ).NE.ZERO ) + $ NBNEXT = 2 + END IF + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-NBNEXT, NBNEXT, + $ 1, WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + IF( NBNEXT.EQ.1 ) THEN +* +* Swap two 1 by 1 blocks, no problems possible +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, NBNEXT, 1, + $ WORK, INFO ) + HERE = HERE - 1 + ELSE +* +* Recompute NBNEXT in case 2 by 2 split +* + IF( T( HERE, HERE-1 ).EQ.ZERO ) + $ NBNEXT = 1 + IF( NBNEXT.EQ.2 ) THEN +* +* 2 by 2 Block did not split +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-1, 2, 1, + $ WORK, INFO ) + IF( INFO.NE.0 ) THEN + ILST = HERE + RETURN + END IF + HERE = HERE - 2 + ELSE +* +* 2 by 2 Block did split +* + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, 1, + $ WORK, INFO ) + CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-1, 1, 1, + $ WORK, INFO ) + HERE = HERE - 2 + END IF + END IF + END IF + IF( HERE.GT.ILST ) + $ GO TO 20 + END IF + ILST = HERE +* + RETURN +* +* End of DTREXC +* + END +*> \brief \b IEEECK +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IEEECK + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* .. Scalar Arguments .. +* INTEGER ISPEC +* REAL ONE, ZERO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> IEEECK is called from the ILAENV to verify that Infinity and +*> possibly NaN arithmetic is safe (i.e. will not trap). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies whether to test just for inifinity arithmetic +*> or whether to test for infinity and NaN arithmetic. +*> = 0: Verify infinity arithmetic only. +*> = 1: Verify infinity and NaN arithmetic. +*> \endverbatim +*> +*> \param[in] ZERO +*> \verbatim +*> ZERO is REAL +*> Must contain the value 0.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> \endverbatim +*> +*> \param[in] ONE +*> \verbatim +*> ONE is REAL +*> Must contain the value 1.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> +*> RETURN VALUE: INTEGER +*> = 0: Arithmetic failed to produce the correct answers +*> = 1: Arithmetic produced the correct answers +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER ISPEC + REAL ONE, ZERO +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF, + $ NEGZRO, NEWZRO, POSINF +* .. +* .. Executable Statements .. + IEEECK = 1 +* + POSINF = ONE / ZERO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = -ONE / ZERO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGZRO = ONE / ( NEGINF+ONE ) + IF( NEGZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = ONE / NEGZRO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEWZRO = NEGZRO + ZERO + IF( NEWZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = ONE / NEWZRO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = NEGINF*POSINF + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = POSINF*POSINF + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* +* +* +* +* Return if we were only asked to check infinity arithmetic +* + IF( ISPEC.EQ.0 ) + $ RETURN +* + NAN1 = POSINF + NEGINF +* + NAN2 = POSINF / NEGINF +* + NAN3 = POSINF / POSINF +* + NAN4 = POSINF*ZERO +* + NAN5 = NEGINF*NEGZRO +* + NAN6 = NAN5*ZERO +* + IF( NAN1.EQ.NAN1 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN2.EQ.NAN2 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN3.EQ.NAN3 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN4.EQ.NAN4 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN5.EQ.NAN5 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN6.EQ.NAN6 ) THEN + IEEECK = 0 + RETURN + END IF +* + RETURN + END +*> \brief \b ILADLC scans a matrix for its last non-zero column. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILADLC + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILADLC( M, N, A, LDA ) +* +* .. Scalar Arguments .. +* INTEGER M, N, LDA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILADLC scans A for its last non-zero column. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION ILADLC( M, N, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER M, N, LDA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I +* .. +* .. Executable Statements .. +* +* Quick test for the common case where one corner is non-zero. + IF( N.EQ.0 ) THEN + ILADLC = N + ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN + ILADLC = N + ELSE +* Now scan each column from the end, returning with the first non-zero. + DO ILADLC = N, 1, -1 + DO I = 1, M + IF( A(I, ILADLC).NE.ZERO ) RETURN + END DO + END DO + END IF + RETURN + END +*> \brief \b ILADLR scans a matrix for its last non-zero row. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILADLR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILADLR( M, N, A, LDA ) +* +* .. Scalar Arguments .. +* INTEGER M, N, LDA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILADLR scans A for its last non-zero row. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION ILADLR( M, N, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER M, N, LDA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J +* .. +* .. Executable Statements .. +* +* Quick test for the common case where one corner is non-zero. + IF( M.EQ.0 ) THEN + ILADLR = M + ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN + ILADLR = M + ELSE +* Scan up each column tracking the last zero row seen. + ILADLR = 0 + DO J = 1, N + I=M + DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1)) + I=I-1 + ENDDO + ILADLR = MAX( ILADLR, I ) + END DO + END IF + RETURN + END +*> \brief \b ILAENV +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILAENV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* .. Scalar Arguments .. +* CHARACTER*( * ) NAME, OPTS +* INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILAENV is called from the LAPACK routines to choose problem-dependent +*> parameters for the local environment. See ISPEC for a description of +*> the parameters. +*> +*> ILAENV returns an INTEGER +*> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC +*> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. +*> +*> This version provides a set of parameters which should give good, +*> but not optimal, performance on many of the currently available +*> computers. Users are encouraged to modify this subroutine to set +*> the tuning parameters for their particular machine using the option +*> and problem size information in the arguments. +*> +*> This routine will not function correctly if it is converted to all +*> lower case. Converting it to all upper case is allowed. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies the parameter to be returned as the value of +*> ILAENV. +*> = 1: the optimal blocksize; if this value is 1, an unblocked +*> algorithm will give the best performance. +*> = 2: the minimum block size for which the block routine +*> should be used; if the usable block size is less than +*> this value, an unblocked routine should be used. +*> = 3: the crossover point (in a block routine, for N less +*> than this value, an unblocked routine should be used) +*> = 4: the number of shifts, used in the nonsymmetric +*> eigenvalue routines (DEPRECATED) +*> = 5: the minimum column dimension for blocking to be used; +*> rectangular blocks must have dimension at least k by m, +*> where k is given by ILAENV(2,...) and m by ILAENV(5,...) +*> = 6: the crossover point for the SVD (when reducing an m by n +*> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds +*> this value, a QR factorization is used first to reduce +*> the matrix to a triangular form.) +*> = 7: the number of processors +*> = 8: the crossover point for the multishift QR method +*> for nonsymmetric eigenvalue problems (DEPRECATED) +*> = 9: maximum size of the subproblems at the bottom of the +*> computation tree in the divide-and-conquer algorithm +*> (used by xGELSD and xGESDD) +*> =10: ieee NaN arithmetic can be trusted not to trap +*> =11: infinity arithmetic can be trusted not to trap +*> 12 <= ISPEC <= 16: +*> xHSEQR or related subroutines, +*> see IPARMQ for detailed explanation +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is CHARACTER*(*) +*> The name of the calling subroutine, in either upper case or +*> lower case. +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is CHARACTER*(*) +*> The character options to the subroutine NAME, concatenated +*> into a single character string. For example, UPLO = 'U', +*> TRANS = 'T', and DIAG = 'N' for a triangular routine would +*> be specified as OPTS = 'UTN'. +*> \endverbatim +*> +*> \param[in] N1 +*> \verbatim +*> N1 is INTEGER +*> \endverbatim +*> +*> \param[in] N2 +*> \verbatim +*> N2 is INTEGER +*> \endverbatim +*> +*> \param[in] N3 +*> \verbatim +*> N3 is INTEGER +*> \endverbatim +*> +*> \param[in] N4 +*> \verbatim +*> N4 is INTEGER +*> Problem dimensions for the subroutine NAME; these may not all +*> be required. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The following conventions have been used when calling ILAENV from the +*> LAPACK routines: +*> 1) OPTS is a concatenation of all of the character options to +*> subroutine NAME, in the same order that they appear in the +*> argument list for NAME, even if they are not used in determining +*> the value of the parameter specified by ISPEC. +*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order +*> that they appear in the argument list for NAME. N1 is used +*> first, N2 second, and so on, and unused problem dimensions are +*> passed a value of -1. +*> 3) The parameter value returned by ILAENV is checked for validity in +*> the calling subroutine. For example, ILAENV is used to retrieve +*> the optimal blocksize for STRTRI as follows: +*> +*> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) +*> IF( NB.LE.1 ) NB = MAX( 1, N ) +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + CHARACTER*( * ) NAME, OPTS + INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, IC, IZ, NB, NBMIN, NX + LOGICAL CNAME, SNAME + CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC CHAR, ICHAR, INT, MIN, REAL +* .. +* .. External Functions .. + INTEGER IEEECK, IPARMQ + EXTERNAL IEEECK, IPARMQ +* .. +* .. Executable Statements .. +* + GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, + $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC +* +* Invalid value for ISPEC +* + ILAENV = -1 + RETURN +* + 10 CONTINUE +* +* Convert NAME to upper case if the first character is lower case. +* + ILAENV = 1 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 20 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 20 CONTINUE + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO 30 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + 30 CONTINUE + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 40 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 40 CONTINUE + END IF + END IF +* + C1 = SUBNAM( 1: 1 ) + SNAME = C1.EQ.'S' .OR. C1.EQ.'D' + CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' + IF( .NOT.( CNAME .OR. SNAME ) ) + $ RETURN + C2 = SUBNAM( 2: 3 ) + C3 = SUBNAM( 4: 6 ) + C4 = C3( 2: 3 ) +* + GO TO ( 50, 60, 70 )ISPEC +* + 50 CONTINUE +* +* ISPEC = 1: block size +* +* In these examples, separate code is provided for setting NB for +* real and complex. We assume that NB will take the same value in +* single or double precision. +* + NB = 1 +* + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. + $ C3.EQ.'QLF' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'PO' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRF' ) THEN + NB = 64 + ELSE IF( C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( C2.EQ.'GB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'PB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'TR' ) THEN + IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF ( C3.EQ.'EVC' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'LA' ) THEN + IF( C3.EQ.'UUM' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN + IF( C3.EQ.'EBZ' ) THEN + NB = 1 + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NB = 32 + IF( C3.EQ.'HD3' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + END IF + END IF + ILAENV = NB + RETURN +* + 60 CONTINUE +* +* ISPEC = 2: minimum block size +* + NBMIN = 2 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NBMIN = 8 + ELSE + NBMIN = 8 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NBMIN = 2 + IF( C3.EQ.'HD3' ) THEN + NBMIN = 2 + END IF + END IF + ILAENV = NBMIN + RETURN +* + 70 CONTINUE +* +* ISPEC = 3: crossover point +* + NX = 0 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NX = 128 + IF( C3.EQ.'HD3' ) THEN + NX = 128 + END IF + END IF + ILAENV = NX + RETURN +* + 80 CONTINUE +* +* ISPEC = 4: number of shifts (used by xHSEQR) +* + ILAENV = 6 + RETURN +* + 90 CONTINUE +* +* ISPEC = 5: minimum column dimension (not used) +* + ILAENV = 2 + RETURN +* + 100 CONTINUE +* +* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) +* + ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) + RETURN +* + 110 CONTINUE +* +* ISPEC = 7: number of processors (not used) +* + ILAENV = 1 + RETURN +* + 120 CONTINUE +* +* ISPEC = 8: crossover point for multishift (used by xHSEQR) +* + ILAENV = 50 + RETURN +* + 130 CONTINUE +* +* ISPEC = 9: maximum size of the subproblems at the bottom of the +* computation tree in the divide-and-conquer algorithm +* (used by xGELSD and xGESDD) +* + ILAENV = 25 + RETURN +* + 140 CONTINUE +* +* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 1, 0.0, 1.0 ) + END IF + RETURN +* + 150 CONTINUE +* +* ISPEC = 11: infinity arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 0, 0.0, 1.0 ) + END IF + RETURN +* + 160 CONTINUE +* +* 12 <= ISPEC <= 16: xHSEQR or related subroutines. +* + ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) + RETURN +* +* End of ILAENV +* + END +*> \brief \b IPARMQ +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IPARMQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, ISPEC, LWORK, N +* CHARACTER NAME*( * ), OPTS*( * ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This program sets problem and machine dependent parameters +*> useful for xHSEQR and related subroutines for eigenvalue +*> problems. It is called whenever +*> IPARMQ is called with 12 <= ISPEC <= 16 +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is integer scalar +*> ISPEC specifies which tunable parameter IPARMQ should +*> return. +*> +*> ISPEC=12: (INMIN) Matrices of order nmin or less +*> are sent directly to xLAHQR, the implicit +*> double shift QR algorithm. NMIN must be +*> at least 11. +*> +*> ISPEC=13: (INWIN) Size of the deflation window. +*> This is best set greater than or equal to +*> the number of simultaneous shifts NS. +*> Larger matrices benefit from larger deflation +*> windows. +*> +*> ISPEC=14: (INIBL) Determines when to stop nibbling and +*> invest in an (expensive) multi-shift QR sweep. +*> If the aggressive early deflation subroutine +*> finds LD converged eigenvalues from an order +*> NW deflation window and LD.GT.(NW*NIBBLE)/100, +*> then the next QR sweep is skipped and early +*> deflation is applied immediately to the +*> remaining active diagonal block. Setting +*> IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a +*> multi-shift QR sweep whenever early deflation +*> finds a converged eigenvalue. Setting +*> IPARMQ(ISPEC=14) greater than or equal to 100 +*> prevents TTQRE from skipping a multi-shift +*> QR sweep. +*> +*> ISPEC=15: (NSHFTS) The number of simultaneous shifts in +*> a multi-shift QR iteration. +*> +*> ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the +*> following meanings. +*> 0: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are not +*> accumulated when updating the +*> far-from-diagonal matrix entries. +*> 1: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are +*> accumulated, and matrix-matrix +*> multiplication is used to update the +*> far-from-diagonal matrix entries. +*> 2: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are +*> accumulated, and 2-by-2 block structure +*> is exploited during matrix-matrix +*> multiplies. +*> (If xTRMM is slower than xGEMM, then +*> IPARMQ(ISPEC=16)=1 may be more efficient than +*> IPARMQ(ISPEC=16)=2 despite the greater level of +*> arithmetic work implied by the latter choice.) +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is character string +*> Name of the calling subroutine +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is character string +*> This is a concatenation of the string arguments to +*> TTQRE. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is integer scalar +*> N is the order of the Hessenberg matrix H. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper triangular +*> in rows and columns 1:ILO-1 and IHI+1:N. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is integer scalar +*> The amount of workspace available. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Little is known about how best to choose these parameters. +*> It is possible to use different values of the parameters +*> for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR. +*> +*> It is probably best to choose different parameters for +*> different matrices and different parameters at different +*> times during the iteration, but this has not been +*> implemented --- yet. +*> +*> +*> The best choices of most of the parameters depend +*> in an ill-understood way on the relative execution +*> rate of xLAQR3 and xLAQR5 and on the nature of each +*> particular eigenvalue problem. Experiment may be the +*> only practical way to determine which choices are most +*> effective. +*> +*> Following is a list of default values supplied by IPARMQ. +*> These defaults may be adjusted in order to attain better +*> performance in any particular computational environment. +*> +*> IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point. +*> Default: 75. (Must be at least 11.) +*> +*> IPARMQ(ISPEC=13) Recommended deflation window size. +*> This depends on ILO, IHI and NS, the +*> number of simultaneous shifts returned +*> by IPARMQ(ISPEC=15). The default for +*> (IHI-ILO+1).LE.500 is NS. The default +*> for (IHI-ILO+1).GT.500 is 3*NS/2. +*> +*> IPARMQ(ISPEC=14) Nibble crossover point. Default: 14. +*> +*> IPARMQ(ISPEC=15) Number of simultaneous shifts, NS. +*> a multi-shift QR iteration. +*> +*> If IHI-ILO+1 is ... +*> +*> greater than ...but less ... the +*> or equal to ... than default is +*> +*> 0 30 NS = 2+ +*> 30 60 NS = 4+ +*> 60 150 NS = 10 +*> 150 590 NS = ** +*> 590 3000 NS = 64 +*> 3000 6000 NS = 128 +*> 6000 infinity NS = 256 +*> +*> (+) By default matrices of this order are +*> passed to the implicit double shift routine +*> xLAHQR. See IPARMQ(ISPEC=12) above. These +*> values of NS are used only in case of a rare +*> xLAHQR failure. +*> +*> (**) The asterisks (**) indicate an ad-hoc +*> function increasing from 10 to 64. +*> +*> IPARMQ(ISPEC=16) Select structured matrix multiply. +*> (See ISPEC=16 above for details.) +*> Default: 3. +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, ISPEC, LWORK, N + CHARACTER NAME*( * ), OPTS*( * ) +* +* ================================================================ +* .. Parameters .. + INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22 + PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14, + $ ISHFTS = 15, IACC22 = 16 ) + INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP + PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14, + $ NIBBLE = 14, KNWSWP = 500 ) + REAL TWO + PARAMETER ( TWO = 2.0 ) +* .. +* .. Local Scalars .. + INTEGER NH, NS + INTEGER I, IC, IZ + CHARACTER SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC LOG, MAX, MOD, NINT, REAL +* .. +* .. Executable Statements .. + IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR. + $ ( ISPEC.EQ.IACC22 ) ) THEN +* +* ==== Set the number simultaneous shifts ==== +* + NH = IHI - ILO + 1 + NS = 2 + IF( NH.GE.30 ) + $ NS = 4 + IF( NH.GE.60 ) + $ NS = 10 + IF( NH.GE.150 ) + $ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) ) + IF( NH.GE.590 ) + $ NS = 64 + IF( NH.GE.3000 ) + $ NS = 128 + IF( NH.GE.6000 ) + $ NS = 256 + NS = MAX( 2, NS-MOD( NS, 2 ) ) + END IF +* + IF( ISPEC.EQ.INMIN ) THEN +* +* +* ===== Matrices of order smaller than NMIN get sent +* . to xLAHQR, the classic double shift algorithm. +* . This must be at least 11. ==== +* + IPARMQ = NMIN +* + ELSE IF( ISPEC.EQ.INIBL ) THEN +* +* ==== INIBL: skip a multi-shift qr iteration and +* . whenever aggressive early deflation finds +* . at least (NIBBLE*(window size)/100) deflations. ==== +* + IPARMQ = NIBBLE +* + ELSE IF( ISPEC.EQ.ISHFTS ) THEN +* +* ==== NSHFTS: The number of simultaneous shifts ===== +* + IPARMQ = NS +* + ELSE IF( ISPEC.EQ.INWIN ) THEN +* +* ==== NW: deflation window size. ==== +* + IF( NH.LE.KNWSWP ) THEN + IPARMQ = NS + ELSE + IPARMQ = 3*NS / 2 + END IF +* + ELSE IF( ISPEC.EQ.IACC22 ) THEN +* +* ==== IACC22: Whether to accumulate reflections +* . before updating the far-from-diagonal elements +* . and whether to use 2-by-2 block structure while +* . doing it. A small amount of work could be saved +* . by making this choice dependent also upon the +* . NH=IHI-ILO+1. +* +* +* Convert NAME to upper case if the first character is lower case. +* + IPARMQ = 0 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + END DO + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + END DO + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + END DO + END IF + END IF +* + IF( SUBNAM( 2:6 ).EQ.'GGHRD' .OR. + $ SUBNAM( 2:6 ).EQ.'GGHD3' ) THEN + IPARMQ = 1 + IF( NH.GE.K22MIN ) + $ IPARMQ = 2 + ELSE IF ( SUBNAM( 4:6 ).EQ.'EXC' ) THEN + IF( NH.GE.KACMIN ) + $ IPARMQ = 1 + IF( NH.GE.K22MIN ) + $ IPARMQ = 2 + ELSE IF ( SUBNAM( 2:6 ).EQ.'HSEQR' .OR. + $ SUBNAM( 2:5 ).EQ.'LAQR' ) THEN + IF( NS.GE.KACMIN ) + $ IPARMQ = 1 + IF( NS.GE.K22MIN ) + $ IPARMQ = 2 + END IF +* + ELSE +* ===== invalid value of ispec ===== + IPARMQ = -1 +* + END IF +* +* ==== End of IPARMQ ==== +* + END +*> \brief \b LSAME +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* LOGICAL FUNCTION LSAME( CA, CB ) +* +* .. Scalar Arguments .. +* CHARACTER CA, CB +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> LSAME returns .TRUE. if CA is the same letter as CB regardless of +*> case. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CA +*> \verbatim +*> \endverbatim +*> +*> \param[in] CB +*> \verbatim +*> CA and CB specify the single characters to be compared. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END +*> \brief \b XERBLA +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download XERBLA + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE XERBLA( SRNAME, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER*(*) SRNAME +* INTEGER INFO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> XERBLA is an error handler for the LAPACK routines. +*> It is called by an LAPACK routine if an input parameter has an +*> invalid value. A message is printed and execution stops. +*> +*> Installers may consider modifying the STOP statement in order to +*> call system-specific exception-handling facilities. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SRNAME +*> \verbatim +*> SRNAME is CHARACTER*(*) +*> The name of the routine which called XERBLA. +*> \endverbatim +*> +*> \param[in] INFO +*> \verbatim +*> INFO is INTEGER +*> The position of the invalid parameter in the parameter list +*> of the calling routine. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE XERBLA( SRNAME, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*(*) SRNAME + INTEGER INFO +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LEN_TRIM +* .. +* .. Executable Statements .. +* + WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO +* + STOP +* + 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', + $ 'an illegal value' ) +* +* End of XERBLA +* + END + diff --git a/dataassim/math/numrec/dgemm.f b/dataassim/math/numrec/dgemm.f new file mode 100644 index 0000000..7ac8c46 --- /dev/null +++ b/dataassim/math/numrec/dgemm.f @@ -0,0 +1,316 @@ + SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER K,LDA,LDB,LDC,M,N + CHARACTER TRANSA,TRANSB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* Purpose +* ======= +* +* DGEMM performs one of the matrix-matrix operations +* +* C := alpha*op( A )*op( B ) + beta*C, +* +* where op( X ) is one of +* +* op( X ) = X or op( X ) = X**T, +* +* alpha and beta are scalars, and A, B and C are matrices, with op( A ) +* an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. +* +* Arguments +* ========== +* +* TRANSA - CHARACTER*1. +* On entry, TRANSA specifies the form of op( A ) to be used in +* the matrix multiplication as follows: +* +* TRANSA = 'N' or 'n', op( A ) = A. +* +* TRANSA = 'T' or 't', op( A ) = A**T. +* +* TRANSA = 'C' or 'c', op( A ) = A**T. +* +* Unchanged on exit. +* +* TRANSB - CHARACTER*1. +* On entry, TRANSB specifies the form of op( B ) to be used in +* the matrix multiplication as follows: +* +* TRANSB = 'N' or 'n', op( B ) = B. +* +* TRANSB = 'T' or 't', op( B ) = B**T. +* +* TRANSB = 'C' or 'c', op( B ) = B**T. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix +* op( A ) and of the matrix C. M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix +* op( B ) and the number of columns of the matrix C. N must be +* at least zero. +* Unchanged on exit. +* +* K - INTEGER. +* On entry, K specifies the number of columns of the matrix +* op( A ) and the number of rows of the matrix op( B ). K must +* be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is +* k when TRANSA = 'N' or 'n', and is m otherwise. +* Before entry with TRANSA = 'N' or 'n', the leading m by k +* part of the array A must contain the matrix A, otherwise +* the leading k by m part of the array A must contain the +* matrix A. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When TRANSA = 'N' or 'n' then +* LDA must be at least max( 1, m ), otherwise LDA must be at +* least max( 1, k ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is +* n when TRANSB = 'N' or 'n', and is k otherwise. +* Before entry with TRANSB = 'N' or 'n', the leading k by n +* part of the array B must contain the matrix B, otherwise +* the leading n by k part of the array B must contain the +* matrix B. +* Unchanged on exit. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. When TRANSB = 'N' or 'n' then +* LDB must be at least max( 1, k ), otherwise LDB must be at +* least max( 1, n ). +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then C need not be set on input. +* Unchanged on exit. +* +* C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). +* Before entry, the leading m by n part of the array C must +* contain the matrix C, except when beta is zero, in which +* case C need not be set on entry. +* On exit, the array C is overwritten by the m by n matrix +* ( alpha*op( A )*op( B ) + beta*C ). +* +* LDC - INTEGER. +* On entry, LDC specifies the first dimension of C as declared +* in the calling (sub) program. LDC must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,L,NCOLA,NROWA,NROWB + LOGICAL NOTA,NOTB +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Set NOTA and NOTB as true if A and B respectively are not +* transposed and set NROWA, NCOLA and NROWB as the number of rows +* and columns of A and the number of rows of B respectively. +* + NOTA = LSAME(TRANSA,'N') + NOTB = LSAME(TRANSB,'N') + IF (NOTA) THEN + NROWA = M + NCOLA = K + ELSE + NROWA = K + NCOLA = M + END IF + IF (NOTB) THEN + NROWB = K + ELSE + NROWB = N + END IF +* +* Test the input parameters. +* + INFO = 0 + IF ((.NOT.NOTA) .AND. (.NOT.LSAME(TRANSA,'C')) .AND. + + (.NOT.LSAME(TRANSA,'T'))) THEN + INFO = 1 + ELSE IF ((.NOT.NOTB) .AND. (.NOT.LSAME(TRANSB,'C')) .AND. + + (.NOT.LSAME(TRANSB,'T'))) THEN + INFO = 2 + ELSE IF (M.LT.0) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (K.LT.0) THEN + INFO = 5 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 8 + ELSE IF (LDB.LT.MAX(1,NROWB)) THEN + INFO = 10 + ELSE IF (LDC.LT.MAX(1,M)) THEN + INFO = 13 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + (((ALPHA.EQ.ZERO).OR. (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN +* +* And if alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + IF (BETA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + C(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1,N + DO 30 I = 1,M + C(I,J) = BETA*C(I,J) + 30 CONTINUE + 40 CONTINUE + END IF + RETURN + END IF +* +* Start the operations. +* + IF (NOTB) THEN + IF (NOTA) THEN +* +* Form C := alpha*A*B + beta*C. +* + DO 90 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 50 I = 1,M + C(I,J) = ZERO + 50 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 60 I = 1,M + C(I,J) = BETA*C(I,J) + 60 CONTINUE + END IF + DO 80 L = 1,K + IF (B(L,J).NE.ZERO) THEN + TEMP = ALPHA*B(L,J) + DO 70 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 70 CONTINUE + END IF + 80 CONTINUE + 90 CONTINUE + ELSE +* +* Form C := alpha*A**T*B + beta*C +* + DO 120 J = 1,N + DO 110 I = 1,M + TEMP = ZERO + DO 100 L = 1,K + TEMP = TEMP + A(L,I)*B(L,J) + 100 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 110 CONTINUE + 120 CONTINUE + END IF + ELSE + IF (NOTA) THEN +* +* Form C := alpha*A*B**T + beta*C +* + DO 170 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 130 I = 1,M + C(I,J) = ZERO + 130 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 140 I = 1,M + C(I,J) = BETA*C(I,J) + 140 CONTINUE + END IF + DO 160 L = 1,K + IF (B(J,L).NE.ZERO) THEN + TEMP = ALPHA*B(J,L) + DO 150 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 150 CONTINUE + END IF + 160 CONTINUE + 170 CONTINUE + ELSE +* +* Form C := alpha*A**T*B**T + beta*C +* + DO 200 J = 1,N + DO 190 I = 1,M + TEMP = ZERO + DO 180 L = 1,K + TEMP = TEMP + A(L,I)*B(J,L) + 180 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 190 CONTINUE + 200 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMM . +* + END diff --git a/dataassim/math/numrec/dgemv.f b/dataassim/math/numrec/dgemv.f new file mode 100644 index 0000000..a412594 --- /dev/null +++ b/dataassim/math/numrec/dgemv.f @@ -0,0 +1,265 @@ + SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER INCX,INCY,LDA,M,N + CHARACTER TRANS +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DGEMV performs one of the matrix-vector operations +* +* y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, +* +* where alpha and beta are scalars, x and y are vectors and A is an +* m by n matrix. +* +* Arguments +* ========== +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' y := alpha*A*x + beta*y. +* +* TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. +* +* TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix A. +* M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry, the leading m by n part of the array A must +* contain the matrix of coefficients. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, m ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of DIMENSION at least +* ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' +* and at least +* ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. +* Before entry, the incremented array X must contain the +* vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then Y need not be set on input. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of DIMENSION at least +* ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' +* and at least +* ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. +* Before entry with BETA non-zero, the incremented array Y +* must contain the vector y. On exit, Y is overwritten by the +* updated vector y. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY,LENX,LENY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 1 + ELSE IF (M.LT.0) THEN + INFO = 2 + ELSE IF (N.LT.0) THEN + INFO = 3 + ELSE IF (LDA.LT.MAX(1,M)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + ELSE IF (INCY.EQ.0) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN +* +* Set LENX and LENY, the lengths of the vectors x and y, and set +* up the start points in X and Y. +* + IF (LSAME(TRANS,'N')) THEN + LENX = N + LENY = M + ELSE + LENX = M + LENY = N + END IF + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (LENX-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (LENY-1)*INCY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* +* First form y := beta*y. +* + IF (BETA.NE.ONE) THEN + IF (INCY.EQ.1) THEN + IF (BETA.EQ.ZERO) THEN + DO 10 I = 1,LENY + Y(I) = ZERO + 10 CONTINUE + ELSE + DO 20 I = 1,LENY + Y(I) = BETA*Y(I) + 20 CONTINUE + END IF + ELSE + IY = KY + IF (BETA.EQ.ZERO) THEN + DO 30 I = 1,LENY + Y(IY) = ZERO + IY = IY + INCY + 30 CONTINUE + ELSE + DO 40 I = 1,LENY + Y(IY) = BETA*Y(IY) + IY = IY + INCY + 40 CONTINUE + END IF + END IF + END IF + IF (ALPHA.EQ.ZERO) RETURN + IF (LSAME(TRANS,'N')) THEN +* +* Form y := alpha*A*x + y. +* + JX = KX + IF (INCY.EQ.1) THEN + DO 60 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = ALPHA*X(JX) + DO 50 I = 1,M + Y(I) = Y(I) + TEMP*A(I,J) + 50 CONTINUE + END IF + JX = JX + INCX + 60 CONTINUE + ELSE + DO 80 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = ALPHA*X(JX) + IY = KY + DO 70 I = 1,M + Y(IY) = Y(IY) + TEMP*A(I,J) + IY = IY + INCY + 70 CONTINUE + END IF + JX = JX + INCX + 80 CONTINUE + END IF + ELSE +* +* Form y := alpha*A**T*x + y. +* + JY = KY + IF (INCX.EQ.1) THEN + DO 100 J = 1,N + TEMP = ZERO + DO 90 I = 1,M + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 100 CONTINUE + ELSE + DO 120 J = 1,N + TEMP = ZERO + IX = KX + DO 110 I = 1,M + TEMP = TEMP + A(I,J)*X(IX) + IX = IX + INCX + 110 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 120 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMV . +* + END diff --git a/dataassim/math/numrec/dger.f b/dataassim/math/numrec/dger.f new file mode 100644 index 0000000..1d95257 --- /dev/null +++ b/dataassim/math/numrec/dger.f @@ -0,0 +1,162 @@ + SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER INCX,INCY,LDA,M,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DGER performs the rank 1 operation +* +* A := alpha*x*y**T + A, +* +* where alpha is a scalar, x is an m element vector, y is an n element +* vector and A is an m by n matrix. +* +* Arguments +* ========== +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix A. +* M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( m - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the m +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. +* Unchanged on exit. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry, the leading m by n part of the array A must +* contain the matrix of coefficients. On exit, A is +* overwritten by the updated matrix. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,J,JY,KX +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (M.LT.0) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (INCX.EQ.0) THEN + INFO = 5 + ELSE IF (INCY.EQ.0) THEN + INFO = 7 + ELSE IF (LDA.LT.MAX(1,M)) THEN + INFO = 9 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGER ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* + IF (INCY.GT.0) THEN + JY = 1 + ELSE + JY = 1 - (N-1)*INCY + END IF + IF (INCX.EQ.1) THEN + DO 20 J = 1,N + IF (Y(JY).NE.ZERO) THEN + TEMP = ALPHA*Y(JY) + DO 10 I = 1,M + A(I,J) = A(I,J) + X(I)*TEMP + 10 CONTINUE + END IF + JY = JY + INCY + 20 CONTINUE + ELSE + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (M-1)*INCX + END IF + DO 40 J = 1,N + IF (Y(JY).NE.ZERO) THEN + TEMP = ALPHA*Y(JY) + IX = KX + DO 30 I = 1,M + A(I,J) = A(I,J) + X(IX)*TEMP + IX = IX + INCX + 30 CONTINUE + END IF + JY = JY + INCY + 40 CONTINUE + END IF +* + RETURN +* +* End of DGER . +* + END diff --git a/dataassim/math/numrec/dnrm2.f b/dataassim/math/numrec/dnrm2.f new file mode 100644 index 0000000..480c912 --- /dev/null +++ b/dataassim/math/numrec/dnrm2.f @@ -0,0 +1,67 @@ + DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) +* .. Scalar Arguments .. + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION X(*) +* .. +* +* Purpose +* ======= +* +* DNRM2 returns the euclidean norm of a vector via the function +* name, so that +* +* DNRM2 := sqrt( x'*x ) +* +* Further Details +* =============== +* +* -- This version written on 25-October-1982. +* Modified on 14-October-1993 to inline the call to DLASSQ. +* Sven Hammarling, Nag Ltd. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ + INTEGER IX +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS,SQRT +* .. + IF (N.LT.1 .OR. INCX.LT.1) THEN + NORM = ZERO + ELSE IF (N.EQ.1) THEN + NORM = ABS(X(1)) + ELSE + SCALE = ZERO + SSQ = ONE +* The following loop is equivalent to this call to the LAPACK +* auxiliary routine: +* CALL DLASSQ( N, X, INCX, SCALE, SSQ ) +* + DO 10 IX = 1,1 + (N-1)*INCX,INCX + IF (X(IX).NE.ZERO) THEN + ABSXI = ABS(X(IX)) + IF (SCALE.LT.ABSXI) THEN + SSQ = ONE + SSQ* (SCALE/ABSXI)**2 + SCALE = ABSXI + ELSE + SSQ = SSQ + (ABSXI/SCALE)**2 + END IF + END IF + 10 CONTINUE + NORM = SCALE*SQRT(SSQ) + END IF +* + DNRM2 = NORM + RETURN +* +* End of DNRM2. +* + END diff --git a/dataassim/math/numrec/dscal.f b/dataassim/math/numrec/dscal.f new file mode 100644 index 0000000..986c24e --- /dev/null +++ b/dataassim/math/numrec/dscal.f @@ -0,0 +1,64 @@ + SUBROUTINE DSCAL(N,DA,DX,INCX) +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*) +* .. +* +* Purpose +* ======= +* +* DSCAL scales a vector by a constant. +* uses unrolled loops for increment equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 3/93 to return if incx .le. 0. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,M,MP1,NINCX +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0 .OR. INCX.LE.0) RETURN + IF (INCX.EQ.1) THEN +* +* code for increment equal to 1 +* +* +* clean-up loop +* + M = MOD(N,5) + IF (M.NE.0) THEN + DO I = 1,M + DX(I) = DA*DX(I) + END DO + IF (N.LT.5) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I+1) = DA*DX(I+1) + DX(I+2) = DA*DX(I+2) + DX(I+3) = DA*DX(I+3) + DX(I+4) = DA*DX(I+4) + END DO + ELSE +* +* code for increment not equal to 1 +* + NINCX = N*INCX + DO I = 1,NINCX,INCX + DX(I) = DA*DX(I) + END DO + END IF + RETURN + END diff --git a/dataassim/math/numrec/dswap.f b/dataassim/math/numrec/dswap.f new file mode 100644 index 0000000..93db05c --- /dev/null +++ b/dataassim/math/numrec/dswap.f @@ -0,0 +1,77 @@ + SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* interchanges two vectors. +* uses unrolled loops for increments equal one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + DOUBLE PRECISION DTEMP + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,3) + IF (M.NE.0) THEN + DO I = 1,M + DTEMP = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP + END DO + IF (N.LT.3) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,3 + DTEMP = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP + DTEMP = DX(I+1) + DX(I+1) = DY(I+1) + DY(I+1) = DTEMP + DTEMP = DX(I+2) + DX(I+2) = DY(I+2) + DY(I+2) = DTEMP + END DO + ELSE +* +* code for unequal increments or equal increments not equal +* to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DTEMP = DX(IX) + DX(IX) = DY(IY) + DY(IY) = DTEMP + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END diff --git a/dataassim/math/numrec/dsyev.f b/dataassim/math/numrec/dsyev.f new file mode 100644 index 0000000..4b586df --- /dev/null +++ b/dataassim/math/numrec/dsyev.f @@ -0,0 +1,10505 @@ + subroutine eigen_sym_up(N,A,W) + implicit none +! +!compute the eigenvalues and eigenvectors of a symmetrical matrix. +!A: On entry, A is a symmetrical matrix with its upper triangle filled. +! on exit, A contains the normalized eigenvectors in its columns. +!W: contains the eigenvalues in descending order. + + CHARACTER JOBZ, UPLO + INTEGER INFO, LDA, LWORK, N + DOUBLE PRECISION A(N, N), W( N ), WORK(3*N-1) + double precision p + integer i,j + + JOBZ='V' + UPLO='U' + LWORK=3*N-1 + LDA=N + call DSYEV(JOBZ,UPLO,N,A(1:N,1:N),LDA,W,WORK,LWORK,INFO) +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* > 0: if INFO = i, the algorithm failed to converge; i +* off-diagonal elements of an intermediate tridiagonal +* form did not converge to zero. + if(INFO.lt.0)then + write(*,*)'The ',-INFO, + & 'th argument in DSYEV has an illegal value' + stop + endif + if(INFO.gt.0)then + write(*,*)'The algorithm failed to converge' + stop + endif + +! Change the eigenvalue array from ascending to descending order and rearrange +! the eigen vectors accordingly. +!--------------------------------------------- + do i=1,N/2 + p=W(i) + W(i)=W(N-i+1) + W(N-i+1)=p + do j=1,N + p=A(j,i) + A(j,i)=A(j,N-i+1) + A(j,N-i+1)=p + enddo + enddo +!--------------------------------------------- + return + end + LOGICAL FUNCTION DISNAN( DIN ) +* +* -- LAPACK auxiliary routine (version 3.2.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN +* .. +* +* Purpose +* ======= +* +* DISNAN returns .TRUE. if its argument is NaN, and .FALSE. +* otherwise. To be replaced by the Fortran 2003 intrinsic in the +* future. +* +* Arguments +* ========= +* +* DIN (input) DOUBLE PRECISION +* Input to test for NaN. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL DLAISNAN + EXTERNAL DLAISNAN +* .. +* .. Executable Statements .. + DISNAN = DLAISNAN(DIN,DIN) + RETURN + END + SUBROUTINE DLAE2( A, B, C, RT1, RT2 ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, RT1, RT2 +* .. +* +* Purpose +* ======= +* +* DLAE2 computes the eigenvalues of a 2-by-2 symmetric matrix +* [ A B ] +* [ B C ]. +* On return, RT1 is the eigenvalue of larger absolute value, and RT2 +* is the eigenvalue of smaller absolute value. +* +* Arguments +* ========= +* +* A (input) DOUBLE PRECISION +* The (1,1) element of the 2-by-2 matrix. +* +* B (input) DOUBLE PRECISION +* The (1,2) and (2,1) elements of the 2-by-2 matrix. +* +* C (input) DOUBLE PRECISION +* The (2,2) element of the 2-by-2 matrix. +* +* RT1 (output) DOUBLE PRECISION +* The eigenvalue of larger absolute value. +* +* RT2 (output) DOUBLE PRECISION +* The eigenvalue of smaller absolute value. +* +* Further Details +* =============== +* +* RT1 is accurate to a few ulps barring over/underflow. +* +* RT2 may be inaccurate if there is massive cancellation in the +* determinant A*C-B*B; higher precision or correctly rounded or +* correctly truncated arithmetic would be needed to compute RT2 +* accurately in all cases. +* +* Overflow is possible only if RT1 is within a factor of 5 of overflow. +* Underflow is harmless if the input data is 0 or exceeds +* underflow_threshold / macheps. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION HALF + PARAMETER ( HALF = 0.5D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION AB, ACMN, ACMX, ADF, DF, RT, SM, TB +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SQRT +* .. +* .. Executable Statements .. +* +* Compute the eigenvalues +* + SM = A + C + DF = A - C + ADF = ABS( DF ) + TB = B + B + AB = ABS( TB ) + IF( ABS( A ).GT.ABS( C ) ) THEN + ACMX = A + ACMN = C + ELSE + ACMX = C + ACMN = A + END IF + IF( ADF.GT.AB ) THEN + RT = ADF*SQRT( ONE+( AB / ADF )**2 ) + ELSE IF( ADF.LT.AB ) THEN + RT = AB*SQRT( ONE+( ADF / AB )**2 ) + ELSE +* +* Includes case AB=ADF=0 +* + RT = AB*SQRT( TWO ) + END IF + IF( SM.LT.ZERO ) THEN + RT1 = HALF*( SM-RT ) +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE IF( SM.GT.ZERO ) THEN + RT1 = HALF*( SM+RT ) +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE +* +* Includes case RT1 = RT2 = 0 +* + RT1 = HALF*RT + RT2 = -HALF*RT + END IF + RETURN +* +* End of DLAE2 +* + END + SUBROUTINE DLAEV2( A, B, C, RT1, RT2, CS1, SN1 ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B, C, CS1, RT1, RT2, SN1 +* .. +* +* Purpose +* ======= +* +* DLAEV2 computes the eigendecomposition of a 2-by-2 symmetric matrix +* [ A B ] +* [ B C ]. +* On return, RT1 is the eigenvalue of larger absolute value, RT2 is the +* eigenvalue of smaller absolute value, and (CS1,SN1) is the unit right +* eigenvector for RT1, giving the decomposition +* +* [ CS1 SN1 ] [ A B ] [ CS1 -SN1 ] = [ RT1 0 ] +* [-SN1 CS1 ] [ B C ] [ SN1 CS1 ] [ 0 RT2 ]. +* +* Arguments +* ========= +* +* A (input) DOUBLE PRECISION +* The (1,1) element of the 2-by-2 matrix. +* +* B (input) DOUBLE PRECISION +* The (1,2) element and the conjugate of the (2,1) element of +* the 2-by-2 matrix. +* +* C (input) DOUBLE PRECISION +* The (2,2) element of the 2-by-2 matrix. +* +* RT1 (output) DOUBLE PRECISION +* The eigenvalue of larger absolute value. +* +* RT2 (output) DOUBLE PRECISION +* The eigenvalue of smaller absolute value. +* +* CS1 (output) DOUBLE PRECISION +* SN1 (output) DOUBLE PRECISION +* The vector (CS1, SN1) is a unit right eigenvector for RT1. +* +* Further Details +* =============== +* +* RT1 is accurate to a few ulps barring over/underflow. +* +* RT2 may be inaccurate if there is massive cancellation in the +* determinant A*C-B*B; higher precision or correctly rounded or +* correctly truncated arithmetic would be needed to compute RT2 +* accurately in all cases. +* +* CS1 and SN1 are accurate to a few ulps barring over/underflow. +* +* Overflow is possible only if RT1 is within a factor of 5 of overflow. +* Underflow is harmless if the input data is 0 or exceeds +* underflow_threshold / macheps. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION HALF + PARAMETER ( HALF = 0.5D0 ) +* .. +* .. Local Scalars .. + INTEGER SGN1, SGN2 + DOUBLE PRECISION AB, ACMN, ACMX, ACS, ADF, CS, CT, DF, RT, SM, + $ TB, TN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SQRT +* .. +* .. Executable Statements .. +* +* Compute the eigenvalues +* + SM = A + C + DF = A - C + ADF = ABS( DF ) + TB = B + B + AB = ABS( TB ) + IF( ABS( A ).GT.ABS( C ) ) THEN + ACMX = A + ACMN = C + ELSE + ACMX = C + ACMN = A + END IF + IF( ADF.GT.AB ) THEN + RT = ADF*SQRT( ONE+( AB / ADF )**2 ) + ELSE IF( ADF.LT.AB ) THEN + RT = AB*SQRT( ONE+( ADF / AB )**2 ) + ELSE +* +* Includes case AB=ADF=0 +* + RT = AB*SQRT( TWO ) + END IF + IF( SM.LT.ZERO ) THEN + RT1 = HALF*( SM-RT ) + SGN1 = -1 +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE IF( SM.GT.ZERO ) THEN + RT1 = HALF*( SM+RT ) + SGN1 = 1 +* +* Order of execution important. +* To get fully accurate smaller eigenvalue, +* next line needs to be executed in higher precision. +* + RT2 = ( ACMX / RT1 )*ACMN - ( B / RT1 )*B + ELSE +* +* Includes case RT1 = RT2 = 0 +* + RT1 = HALF*RT + RT2 = -HALF*RT + SGN1 = 1 + END IF +* +* Compute the eigenvector +* + IF( DF.GE.ZERO ) THEN + CS = DF + RT + SGN2 = 1 + ELSE + CS = DF - RT + SGN2 = -1 + END IF + ACS = ABS( CS ) + IF( ACS.GT.AB ) THEN + CT = -TB / CS + SN1 = ONE / SQRT( ONE+CT*CT ) + CS1 = CT*SN1 + ELSE + IF( AB.EQ.ZERO ) THEN + CS1 = ONE + SN1 = ZERO + ELSE + TN = -CS / TB + CS1 = ONE / SQRT( ONE+TN*TN ) + SN1 = TN*CS1 + END IF + END IF + IF( SGN1.EQ.SGN2 ) THEN + TN = CS1 + CS1 = -SN1 + SN1 = TN + END IF + RETURN +* +* End of DLAEV2 +* + END + LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) +* +* -- LAPACK auxiliary routine (version 3.2.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION DIN1, DIN2 +* .. +* +* Purpose +* ======= +* +* This routine is not for general use. It exists solely to avoid +* over-optimization in DISNAN. +* +* DLAISNAN checks for NaNs by comparing its two arguments for +* inequality. NaN is the only floating-point value where NaN != NaN +* returns .TRUE. To check for NaNs, pass the same variable as both +* arguments. +* +* A compiler must assume that the two arguments are +* not the same variable, and the test will not be optimized away. +* Interprocedural or whole-program optimization may delete this +* test. The ISNAN functions will be replaced by the correct +* Fortran 03 intrinsic once the intrinsic is widely available. +* +* Arguments +* ========= +* +* DIN1 (input) DOUBLE PRECISION +* +* DIN2 (input) DOUBLE PRECISION +* Two numbers to compare for inequality. +* +* ===================================================================== +* +* .. Executable Statements .. + DLAISNAN = (DIN1.NE.DIN2) + RETURN + END + DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER NORM + INTEGER N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ) +* .. +* +* Purpose +* ======= +* +* DLANST returns the value of the one norm, or the Frobenius norm, or +* the infinity norm, or the element of largest absolute value of a +* real symmetric tridiagonal matrix A. +* +* Description +* =========== +* +* DLANST returns the value +* +* DLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm' +* ( +* ( norm1(A), NORM = '1', 'O' or 'o' +* ( +* ( normI(A), NORM = 'I' or 'i' +* ( +* ( normF(A), NORM = 'F', 'f', 'E' or 'e' +* +* where norm1 denotes the one norm of a matrix (maximum column sum), +* normI denotes the infinity norm of a matrix (maximum row sum) and +* normF denotes the Frobenius norm of a matrix (square root of sum of +* squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. +* +* Arguments +* ========= +* +* NORM (input) CHARACTER*1 +* Specifies the value to be returned in DLANST as described +* above. +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. When N = 0, DLANST is +* set to zero. +* +* D (input) DOUBLE PRECISION array, dimension (N) +* The diagonal elements of A. +* +* E (input) DOUBLE PRECISION array, dimension (N-1) +* The (n-1) sub-diagonal or super-diagonal elements of A. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I + DOUBLE PRECISION ANORM, SCALE, SUM +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL DLASSQ +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. +* .. Executable Statements .. +* + IF( N.LE.0 ) THEN + ANORM = ZERO + ELSE IF( LSAME( NORM, 'M' ) ) THEN +* +* Find max(abs(A(i,j))). +* + ANORM = ABS( D( N ) ) + DO 10 I = 1, N - 1 + ANORM = MAX( ANORM, ABS( D( I ) ) ) + ANORM = MAX( ANORM, ABS( E( I ) ) ) + 10 CONTINUE + ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR. + $ LSAME( NORM, 'I' ) ) THEN +* +* Find norm1(A). +* + IF( N.EQ.1 ) THEN + ANORM = ABS( D( 1 ) ) + ELSE + ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ), + $ ABS( E( N-1 ) )+ABS( D( N ) ) ) + DO 20 I = 2, N - 1 + ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+ + $ ABS( E( I-1 ) ) ) + 20 CONTINUE + END IF + ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN +* +* Find normF(A). +* + SCALE = ZERO + SUM = ONE + IF( N.GT.1 ) THEN + CALL DLASSQ( N-1, E, 1, SCALE, SUM ) + SUM = 2*SUM + END IF + CALL DLASSQ( N, D, 1, SCALE, SUM ) + ANORM = SCALE*SQRT( SUM ) + END IF +* + DLANST = ANORM + RETURN +* +* End of DLANST +* + END + DOUBLE PRECISION FUNCTION DLANSY( NORM, UPLO, N, A, LDA, WORK ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER NORM, UPLO + INTEGER LDA, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DLANSY returns the value of the one norm, or the Frobenius norm, or +* the infinity norm, or the element of largest absolute value of a +* real symmetric matrix A. +* +* Description +* =========== +* +* DLANSY returns the value +* +* DLANSY = ( max(abs(A(i,j))), NORM = 'M' or 'm' +* ( +* ( norm1(A), NORM = '1', 'O' or 'o' +* ( +* ( normI(A), NORM = 'I' or 'i' +* ( +* ( normF(A), NORM = 'F', 'f', 'E' or 'e' +* +* where norm1 denotes the one norm of a matrix (maximum column sum), +* normI denotes the infinity norm of a matrix (maximum row sum) and +* normF denotes the Frobenius norm of a matrix (square root of sum of +* squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. +* +* Arguments +* ========= +* +* NORM (input) CHARACTER*1 +* Specifies the value to be returned in DLANSY as described +* above. +* +* UPLO (input) CHARACTER*1 +* Specifies whether the upper or lower triangular part of the +* symmetric matrix A is to be referenced. +* = 'U': Upper triangular part of A is referenced +* = 'L': Lower triangular part of A is referenced +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. When N = 0, DLANSY is +* set to zero. +* +* A (input) DOUBLE PRECISION array, dimension (LDA,N) +* The symmetric matrix A. If UPLO = 'U', the leading n by n +* upper triangular part of A contains the upper triangular part +* of the matrix A, and the strictly lower triangular part of A +* is not referenced. If UPLO = 'L', the leading n by n lower +* triangular part of A contains the lower triangular part of +* the matrix A, and the strictly upper triangular part of A is +* not referenced. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(N,1). +* +* WORK (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)), +* where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise, +* WORK is not referenced. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J + DOUBLE PRECISION ABSA, SCALE, SUM, VALUE +* .. +* .. External Subroutines .. + EXTERNAL DLASSQ +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SQRT +* .. +* .. Executable Statements .. +* + IF( N.EQ.0 ) THEN + VALUE = ZERO + ELSE IF( LSAME( NORM, 'M' ) ) THEN +* +* Find max(abs(A(i,j))). +* + VALUE = ZERO + IF( LSAME( UPLO, 'U' ) ) THEN + DO 20 J = 1, N + DO 10 I = 1, J + VALUE = MAX( VALUE, ABS( A( I, J ) ) ) + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1, N + DO 30 I = J, N + VALUE = MAX( VALUE, ABS( A( I, J ) ) ) + 30 CONTINUE + 40 CONTINUE + END IF + ELSE IF( ( LSAME( NORM, 'I' ) ) .OR. ( LSAME( NORM, 'O' ) ) .OR. + $ ( NORM.EQ.'1' ) ) THEN +* +* Find normI(A) ( = norm1(A), since A is symmetric). +* + VALUE = ZERO + IF( LSAME( UPLO, 'U' ) ) THEN + DO 60 J = 1, N + SUM = ZERO + DO 50 I = 1, J - 1 + ABSA = ABS( A( I, J ) ) + SUM = SUM + ABSA + WORK( I ) = WORK( I ) + ABSA + 50 CONTINUE + WORK( J ) = SUM + ABS( A( J, J ) ) + 60 CONTINUE + DO 70 I = 1, N + VALUE = MAX( VALUE, WORK( I ) ) + 70 CONTINUE + ELSE + DO 80 I = 1, N + WORK( I ) = ZERO + 80 CONTINUE + DO 100 J = 1, N + SUM = WORK( J ) + ABS( A( J, J ) ) + DO 90 I = J + 1, N + ABSA = ABS( A( I, J ) ) + SUM = SUM + ABSA + WORK( I ) = WORK( I ) + ABSA + 90 CONTINUE + VALUE = MAX( VALUE, SUM ) + 100 CONTINUE + END IF + ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN +* +* Find normF(A). +* + SCALE = ZERO + SUM = ONE + IF( LSAME( UPLO, 'U' ) ) THEN + DO 110 J = 2, N + CALL DLASSQ( J-1, A( 1, J ), 1, SCALE, SUM ) + 110 CONTINUE + ELSE + DO 120 J = 1, N - 1 + CALL DLASSQ( N-J, A( J+1, J ), 1, SCALE, SUM ) + 120 CONTINUE + END IF + SUM = 2*SUM + CALL DLASSQ( N, A, LDA+1, SCALE, SUM ) + VALUE = SCALE*SQRT( SUM ) + END IF +* + DLANSY = VALUE + RETURN +* +* End of DLANSY +* + END + DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + DOUBLE PRECISION X, Y +* .. +* +* Purpose +* ======= +* +* DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary +* overflow. +* +* Arguments +* ========= +* +* X (input) DOUBLE PRECISION +* Y (input) DOUBLE PRECISION +* X and Y specify the values x and y. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION W, XABS, YABS, Z +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN, SQRT +* .. +* .. Executable Statements .. +* + XABS = ABS( X ) + YABS = ABS( Y ) + W = MAX( XABS, YABS ) + Z = MIN( XABS, YABS ) + IF( Z.EQ.ZERO ) THEN + DLAPY2 = W + ELSE + DLAPY2 = W*SQRT( ONE+( Z / W )**2 ) + END IF + RETURN +* +* End of DLAPY2 +* + END + SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) + IMPLICIT NONE +* +* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER SIDE + INTEGER INCV, LDC, M, N + DOUBLE PRECISION TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DLARF applies a real elementary reflector H to a real m by n matrix +* C, from either the left or the right. H is represented in the form +* +* H = I - tau * v * v**T +* +* where tau is a real scalar and v is a real vector. +* +* If tau = 0, then H is taken to be the unit matrix. +* +* Arguments +* ========= +* +* SIDE (input) CHARACTER*1 +* = 'L': form H * C +* = 'R': form C * H +* +* M (input) INTEGER +* The number of rows of the matrix C. +* +* N (input) INTEGER +* The number of columns of the matrix C. +* +* V (input) DOUBLE PRECISION array, dimension +* (1 + (M-1)*abs(INCV)) if SIDE = 'L' +* or (1 + (N-1)*abs(INCV)) if SIDE = 'R' +* The vector v in the representation of H. V is not used if +* TAU = 0. +* +* INCV (input) INTEGER +* The increment between elements of v. INCV <> 0. +* +* TAU (input) DOUBLE PRECISION +* The value tau in the representation of H. +* +* C (input/output) DOUBLE PRECISION array, dimension (LDC,N) +* On entry, the m by n matrix C. +* On exit, C is overwritten by the matrix H * C if SIDE = 'L', +* or C * H if SIDE = 'R'. +* +* LDC (input) INTEGER +* The leading dimension of the array C. LDC >= max(1,M). +* +* WORK (workspace) DOUBLE PRECISION array, dimension +* (N) if SIDE = 'L' +* or (M) if SIDE = 'R' +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL APPLYLEFT + INTEGER I, LASTV, LASTC +* .. +* .. External Subroutines .. + EXTERNAL DGEMV, DGER +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILADLR, ILADLC + EXTERNAL LSAME, ILADLR, ILADLC +* .. +* .. Executable Statements .. +* + APPLYLEFT = LSAME( SIDE, 'L' ) + LASTV = 0 + LASTC = 0 + IF( TAU.NE.ZERO ) THEN +! Set up variables for scanning V. LASTV begins pointing to the end +! of V. + IF( APPLYLEFT ) THEN + LASTV = M + ELSE + LASTV = N + END IF + IF( INCV.GT.0 ) THEN + I = 1 + (LASTV-1) * INCV + ELSE + I = 1 + END IF +! Look for the last non-zero row in V. + DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO ) + LASTV = LASTV - 1 + I = I - INCV + END DO + IF( APPLYLEFT ) THEN +! Scan for the last non-zero column in C(1:lastv,:). + LASTC = ILADLC(LASTV, N, C, LDC) + ELSE +! Scan for the last non-zero row in C(:,1:lastv). + LASTC = ILADLR(M, LASTV, C, LDC) + END IF + END IF +! Note that lastc.eq.0 renders the BLAS operations null; no special +! case is needed at this level. + IF( APPLYLEFT ) THEN +* +* Form H * C +* + IF( LASTV.GT.0 ) THEN +* +* w(1:lastc,1) := C(1:lastv,1:lastc)**T * v(1:lastv,1) +* + CALL DGEMV( 'Transpose', LASTV, LASTC, ONE, C, LDC, V, INCV, + $ ZERO, WORK, 1 ) +* +* C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)**T +* + CALL DGER( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC ) + END IF + ELSE +* +* Form C * H +* + IF( LASTV.GT.0 ) THEN +* +* w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1) +* + CALL DGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC, + $ V, INCV, ZERO, WORK, 1 ) +* +* C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)**T +* + CALL DGER( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC ) + END IF + END IF + RETURN +* +* End of DLARF +* + END + SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, + $ T, LDT, C, LDC, WORK, LDWORK ) + IMPLICIT NONE +* +* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER DIRECT, SIDE, STOREV, TRANS + INTEGER K, LDC, LDT, LDV, LDWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ), + $ WORK( LDWORK, * ) +* .. +* +* Purpose +* ======= +* +* DLARFB applies a real block reflector H or its transpose H**T to a +* real m by n matrix C, from either the left or the right. +* +* Arguments +* ========= +* +* SIDE (input) CHARACTER*1 +* = 'L': apply H or H**T from the Left +* = 'R': apply H or H**T from the Right +* +* TRANS (input) CHARACTER*1 +* = 'N': apply H (No transpose) +* = 'T': apply H**T (Transpose) +* +* DIRECT (input) CHARACTER*1 +* Indicates how H is formed from a product of elementary +* reflectors +* = 'F': H = H(1) H(2) . . . H(k) (Forward) +* = 'B': H = H(k) . . . H(2) H(1) (Backward) +* +* STOREV (input) CHARACTER*1 +* Indicates how the vectors which define the elementary +* reflectors are stored: +* = 'C': Columnwise +* = 'R': Rowwise +* +* M (input) INTEGER +* The number of rows of the matrix C. +* +* N (input) INTEGER +* The number of columns of the matrix C. +* +* K (input) INTEGER +* The order of the matrix T (= the number of elementary +* reflectors whose product defines the block reflector). +* +* V (input) DOUBLE PRECISION array, dimension +* (LDV,K) if STOREV = 'C' +* (LDV,M) if STOREV = 'R' and SIDE = 'L' +* (LDV,N) if STOREV = 'R' and SIDE = 'R' +* The matrix V. See Further Details. +* +* LDV (input) INTEGER +* The leading dimension of the array V. +* If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M); +* if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N); +* if STOREV = 'R', LDV >= K. +* +* T (input) DOUBLE PRECISION array, dimension (LDT,K) +* The triangular k by k matrix T in the representation of the +* block reflector. +* +* LDT (input) INTEGER +* The leading dimension of the array T. LDT >= K. +* +* C (input/output) DOUBLE PRECISION array, dimension (LDC,N) +* On entry, the m by n matrix C. +* On exit, C is overwritten by H*C or H**T*C or C*H or C*H**T. +* +* LDC (input) INTEGER +* The leading dimension of the array C. LDC >= max(1,M). +* +* WORK (workspace) DOUBLE PRECISION array, dimension (LDWORK,K) +* +* LDWORK (input) INTEGER +* The leading dimension of the array WORK. +* If SIDE = 'L', LDWORK >= max(1,N); +* if SIDE = 'R', LDWORK >= max(1,M). +* +* Further Details +* =============== +* +* The shape of the matrix V and the storage of the vectors which define +* the H(i) is best illustrated by the following example with n = 5 and +* k = 3. The elements equal to 1 are not stored; the corresponding +* array elements are modified but restored on exit. The rest of the +* array is not used. +* +* DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R': +* +* V = ( 1 ) V = ( 1 v1 v1 v1 v1 ) +* ( v1 1 ) ( 1 v2 v2 v2 ) +* ( v1 v2 1 ) ( 1 v3 v3 ) +* ( v1 v2 v3 ) +* ( v1 v2 v3 ) +* +* DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R': +* +* V = ( v1 v2 v3 ) V = ( v1 v1 1 ) +* ( v1 v2 v3 ) ( v2 v2 v2 1 ) +* ( 1 v2 v3 ) ( v3 v3 v3 v3 1 ) +* ( 1 v3 ) +* ( 1 ) +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + CHARACTER TRANST + INTEGER I, J, LASTV, LASTC +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILADLR, ILADLC + EXTERNAL LSAME, ILADLR, ILADLC +* .. +* .. External Subroutines .. + EXTERNAL DCOPY, DGEMM, DTRMM +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( M.LE.0 .OR. N.LE.0 ) + $ RETURN +* + IF( LSAME( TRANS, 'N' ) ) THEN + TRANST = 'T' + ELSE + TRANST = 'N' + END IF +* + IF( LSAME( STOREV, 'C' ) ) THEN +* + IF( LSAME( DIRECT, 'F' ) ) THEN +* +* Let V = ( V1 ) (first K rows) +* ( V2 ) +* where V1 is unit lower triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* + LASTV = MAX( K, ILADLR( M, K, V, LDV ) ) + LASTC = ILADLC( LASTV, N, C, LDC ) +* +* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK) +* +* W := C1**T +* + DO 10 J = 1, K + CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 ) + 10 CONTINUE +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C2**T *V2 +* + CALL DGEMM( 'Transpose', 'No transpose', + $ LASTC, K, LASTV-K, + $ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V * W**T +* + IF( LASTV.GT.K ) THEN +* +* C2 := C2 - V2 * W**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTV-K, LASTC, K, + $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE, + $ C( K+1, 1 ), LDC ) + END IF +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W**T +* + DO 30 J = 1, K + DO 20 I = 1, LASTC + C( J, I ) = C( J, I ) - WORK( I, J ) + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* + LASTV = MAX( K, ILADLR( N, K, V, LDV ) ) + LASTC = ILADLR( M, LASTV, C, LDC ) +* +* W := C * V = (C1*V1 + C2*V2) (stored in WORK) +* +* W := C1 +* + DO 40 J = 1, K + CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 ) + 40 CONTINUE +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C2 * V2 +* + CALL DGEMM( 'No transpose', 'No transpose', + $ LASTC, K, LASTV-K, + $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V**T +* + IF( LASTV.GT.K ) THEN +* +* C2 := C2 - W * V2**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTC, LASTV-K, K, + $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE, + $ C( 1, K+1 ), LDC ) + END IF +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 60 J = 1, K + DO 50 I = 1, LASTC + C( I, J ) = C( I, J ) - WORK( I, J ) + 50 CONTINUE + 60 CONTINUE + END IF +* + ELSE +* +* Let V = ( V1 ) +* ( V2 ) (last K rows) +* where V2 is unit upper triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* + LASTV = MAX( K, ILADLR( M, K, V, LDV ) ) + LASTC = ILADLC( LASTV, N, C, LDC ) +* +* W := C**T * V = (C1**T * V1 + C2**T * V2) (stored in WORK) +* +* W := C2**T +* + DO 70 J = 1, K + CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC, + $ WORK( 1, J ), 1 ) + 70 CONTINUE +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', + $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, + $ WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C1**T*V1 +* + CALL DGEMM( 'Transpose', 'No transpose', + $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V * W**T +* + IF( LASTV.GT.K ) THEN +* +* C1 := C1 - V1 * W**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK, + $ ONE, C, LDC ) + END IF +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', + $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, + $ WORK, LDWORK ) +* +* C2 := C2 - W**T +* + DO 90 J = 1, K + DO 80 I = 1, LASTC + C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J) + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* + LASTV = MAX( K, ILADLR( N, K, V, LDV ) ) + LASTC = ILADLR( M, LASTV, C, LDC ) +* +* W := C * V = (C1*V1 + C2*V2) (stored in WORK) +* +* W := C2 +* + DO 100 J = 1, K + CALL DCOPY( LASTC, C( 1, N-K+J ), 1, WORK( 1, J ), 1 ) + 100 CONTINUE +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', + $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, + $ WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C1 * V1 +* + CALL DGEMM( 'No transpose', 'No transpose', + $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V**T +* + IF( LASTV.GT.K ) THEN +* +* C1 := C1 - W * V1**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV, + $ ONE, C, LDC ) + END IF +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', + $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, + $ WORK, LDWORK ) +* +* C2 := C2 - W +* + DO 120 J = 1, K + DO 110 I = 1, LASTC + C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J) + 110 CONTINUE + 120 CONTINUE + END IF + END IF +* + ELSE IF( LSAME( STOREV, 'R' ) ) THEN +* + IF( LSAME( DIRECT, 'F' ) ) THEN +* +* Let V = ( V1 V2 ) (V1: first K columns) +* where V1 is unit upper triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* + LASTV = MAX( K, ILADLC( K, M, V, LDV ) ) + LASTC = ILADLC( LASTV, N, C, LDC ) +* +* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK) +* +* W := C1**T +* + DO 130 J = 1, K + CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 ) + 130 CONTINUE +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C2**T*V2**T +* + CALL DGEMM( 'Transpose', 'Transpose', + $ LASTC, K, LASTV-K, + $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V**T * W**T +* + IF( LASTV.GT.K ) THEN +* +* C2 := C2 - V2**T * W**T +* + CALL DGEMM( 'Transpose', 'Transpose', + $ LASTV-K, LASTC, K, + $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK, + $ ONE, C( K+1, 1 ), LDC ) + END IF +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W**T +* + DO 150 J = 1, K + DO 140 I = 1, LASTC + C( J, I ) = C( J, I ) - WORK( I, J ) + 140 CONTINUE + 150 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* + LASTV = MAX( K, ILADLC( K, N, V, LDV ) ) + LASTC = ILADLR( M, LASTV, C, LDC ) +* +* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK) +* +* W := C1 +* + DO 160 J = 1, K + CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 ) + 160 CONTINUE +* +* W := W * V1**T +* + CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C2 * V2**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTC, K, LASTV-K, + $ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V +* + IF( LASTV.GT.K ) THEN +* +* C2 := C2 - W * V2 +* + CALL DGEMM( 'No transpose', 'No transpose', + $ LASTC, LASTV-K, K, + $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV, + $ ONE, C( 1, K+1 ), LDC ) + END IF +* +* W := W * V1 +* + CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', + $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 180 J = 1, K + DO 170 I = 1, LASTC + C( I, J ) = C( I, J ) - WORK( I, J ) + 170 CONTINUE + 180 CONTINUE +* + END IF +* + ELSE +* +* Let V = ( V1 V2 ) (V2: last K columns) +* where V2 is unit lower triangular. +* + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form H * C or H**T * C where C = ( C1 ) +* ( C2 ) +* + LASTV = MAX( K, ILADLC( K, M, V, LDV ) ) + LASTC = ILADLC( LASTV, N, C, LDC ) +* +* W := C**T * V**T = (C1**T * V1**T + C2**T * V2**T) (stored in WORK) +* +* W := C2**T +* + DO 190 J = 1, K + CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC, + $ WORK( 1, J ), 1 ) + 190 CONTINUE +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', + $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, + $ WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C1**T * V1**T +* + CALL DGEMM( 'Transpose', 'Transpose', + $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T**T or W * T +* + CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - V**T * W**T +* + IF( LASTV.GT.K ) THEN +* +* C1 := C1 - V1**T * W**T +* + CALL DGEMM( 'Transpose', 'Transpose', + $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK, + $ ONE, C, LDC ) + END IF +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', + $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, + $ WORK, LDWORK ) +* +* C2 := C2 - W**T +* + DO 210 J = 1, K + DO 200 I = 1, LASTC + C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J) + 200 CONTINUE + 210 CONTINUE +* + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form C * H or C * H**T where C = ( C1 C2 ) +* + LASTV = MAX( K, ILADLC( K, N, V, LDV ) ) + LASTC = ILADLR( M, LASTV, C, LDC ) +* +* W := C * V**T = (C1*V1**T + C2*V2**T) (stored in WORK) +* +* W := C2 +* + DO 220 J = 1, K + CALL DCOPY( LASTC, C( 1, LASTV-K+J ), 1, + $ WORK( 1, J ), 1 ) + 220 CONTINUE +* +* W := W * V2**T +* + CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', + $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, + $ WORK, LDWORK ) + IF( LASTV.GT.K ) THEN +* +* W := W + C1 * V1**T +* + CALL DGEMM( 'No transpose', 'Transpose', + $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, + $ ONE, WORK, LDWORK ) + END IF +* +* W := W * T or W * T**T +* + CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', + $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) +* +* C := C - W * V +* + IF( LASTV.GT.K ) THEN +* +* C1 := C1 - W * V1 +* + CALL DGEMM( 'No transpose', 'No transpose', + $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV, + $ ONE, C, LDC ) + END IF +* +* W := W * V2 +* + CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', + $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, + $ WORK, LDWORK ) +* +* C1 := C1 - W +* + DO 240 J = 1, K + DO 230 I = 1, LASTC + C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J) + 230 CONTINUE + 240 CONTINUE +* + END IF +* + END IF + END IF +* + RETURN +* +* End of DLARFB +* + END + SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) +* +* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION ALPHA, TAU +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* Purpose +* ======= +* +* DLARFG generates a real elementary reflector H of order n, such +* that +* +* H * ( alpha ) = ( beta ), H**T * H = I. +* ( x ) ( 0 ) +* +* where alpha and beta are scalars, and x is an (n-1)-element real +* vector. H is represented in the form +* +* H = I - tau * ( 1 ) * ( 1 v**T ) , +* ( v ) +* +* where tau is a real scalar and v is a real (n-1)-element +* vector. +* +* If the elements of x are all zero, then tau = 0 and H is taken to be +* the unit matrix. +* +* Otherwise 1 <= tau <= 2. +* +* Arguments +* ========= +* +* N (input) INTEGER +* The order of the elementary reflector. +* +* ALPHA (input/output) DOUBLE PRECISION +* On entry, the value alpha. +* On exit, it is overwritten with the value beta. +* +* X (input/output) DOUBLE PRECISION array, dimension +* (1+(N-2)*abs(INCX)) +* On entry, the vector x. +* On exit, it is overwritten with the vector v. +* +* INCX (input) INTEGER +* The increment between elements of X. INCX > 0. +* +* TAU (output) DOUBLE PRECISION +* The value tau. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER J, KNT + DOUBLE PRECISION BETA, RSAFMN, SAFMIN, XNORM +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLAPY2, DNRM2 + EXTERNAL DLAMCH, DLAPY2, DNRM2 +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SIGN +* .. +* .. External Subroutines .. + EXTERNAL DSCAL +* .. +* .. Executable Statements .. +* + IF( N.LE.1 ) THEN + TAU = ZERO + RETURN + END IF +* + XNORM = DNRM2( N-1, X, INCX ) +* + IF( XNORM.EQ.ZERO ) THEN +* +* H = I +* + TAU = ZERO + ELSE +* +* general case +* + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' ) + KNT = 0 + IF( ABS( BETA ).LT.SAFMIN ) THEN +* +* XNORM, BETA may be inaccurate; scale X and recompute them +* + RSAFMN = ONE / SAFMIN + 10 CONTINUE + KNT = KNT + 1 + CALL DSCAL( N-1, RSAFMN, X, INCX ) + BETA = BETA*RSAFMN + ALPHA = ALPHA*RSAFMN + IF( ABS( BETA ).LT.SAFMIN ) + $ GO TO 10 +* +* New BETA is at most 1, at least SAFMIN +* + XNORM = DNRM2( N-1, X, INCX ) + BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) + END IF + TAU = ( BETA-ALPHA ) / BETA + CALL DSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX ) +* +* If ALPHA is subnormal, it may lose relative accuracy +* + DO 20 J = 1, KNT + BETA = BETA*SAFMIN + 20 CONTINUE + ALPHA = BETA + END IF +* + RETURN +* +* End of DLARFG +* + END + SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) + IMPLICIT NONE +* +* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER DIRECT, STOREV + INTEGER K, LDT, LDV, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * ) +* .. +* +* Purpose +* ======= +* +* DLARFT forms the triangular factor T of a real block reflector H +* of order n, which is defined as a product of k elementary reflectors. +* +* If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular; +* +* If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular. +* +* If STOREV = 'C', the vector which defines the elementary reflector +* H(i) is stored in the i-th column of the array V, and +* +* H = I - V * T * V**T +* +* If STOREV = 'R', the vector which defines the elementary reflector +* H(i) is stored in the i-th row of the array V, and +* +* H = I - V**T * T * V +* +* Arguments +* ========= +* +* DIRECT (input) CHARACTER*1 +* Specifies the order in which the elementary reflectors are +* multiplied to form the block reflector: +* = 'F': H = H(1) H(2) . . . H(k) (Forward) +* = 'B': H = H(k) . . . H(2) H(1) (Backward) +* +* STOREV (input) CHARACTER*1 +* Specifies how the vectors which define the elementary +* reflectors are stored (see also Further Details): +* = 'C': columnwise +* = 'R': rowwise +* +* N (input) INTEGER +* The order of the block reflector H. N >= 0. +* +* K (input) INTEGER +* The order of the triangular factor T (= the number of +* elementary reflectors). K >= 1. +* +* V (input/output) DOUBLE PRECISION array, dimension +* (LDV,K) if STOREV = 'C' +* (LDV,N) if STOREV = 'R' +* The matrix V. See further details. +* +* LDV (input) INTEGER +* The leading dimension of the array V. +* If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K. +* +* TAU (input) DOUBLE PRECISION array, dimension (K) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i). +* +* T (output) DOUBLE PRECISION array, dimension (LDT,K) +* The k by k triangular factor T of the block reflector. +* If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is +* lower triangular. The rest of the array is not used. +* +* LDT (input) INTEGER +* The leading dimension of the array T. LDT >= K. +* +* Further Details +* =============== +* +* The shape of the matrix V and the storage of the vectors which define +* the H(i) is best illustrated by the following example with n = 5 and +* k = 3. The elements equal to 1 are not stored; the corresponding +* array elements are modified but restored on exit. The rest of the +* array is not used. +* +* DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R': +* +* V = ( 1 ) V = ( 1 v1 v1 v1 v1 ) +* ( v1 1 ) ( 1 v2 v2 v2 ) +* ( v1 v2 1 ) ( 1 v3 v3 ) +* ( v1 v2 v3 ) +* ( v1 v2 v3 ) +* +* DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R': +* +* V = ( v1 v2 v3 ) V = ( v1 v1 1 ) +* ( v1 v2 v3 ) ( v2 v2 v2 1 ) +* ( 1 v2 v3 ) ( v3 v3 v3 v3 1 ) +* ( 1 v3 ) +* ( 1 ) +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J, PREVLASTV, LASTV + DOUBLE PRECISION VII +* .. +* .. External Subroutines .. + EXTERNAL DGEMV, DTRMV +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* + IF( LSAME( DIRECT, 'F' ) ) THEN + PREVLASTV = N + DO 20 I = 1, K + PREVLASTV = MAX( I, PREVLASTV ) + IF( TAU( I ).EQ.ZERO ) THEN +* +* H(i) = I +* + DO 10 J = 1, I + T( J, I ) = ZERO + 10 CONTINUE + ELSE +* +* general case +* + VII = V( I, I ) + V( I, I ) = ONE + IF( LSAME( STOREV, 'C' ) ) THEN +! Skip any trailing zeros. + DO LASTV = N, I+1, -1 + IF( V( LASTV, I ).NE.ZERO ) EXIT + END DO + J = MIN( LASTV, PREVLASTV ) +* +* T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)**T * V(i:j,i) +* + CALL DGEMV( 'Transpose', J-I+1, I-1, -TAU( I ), + $ V( I, 1 ), LDV, V( I, I ), 1, ZERO, + $ T( 1, I ), 1 ) + ELSE +! Skip any trailing zeros. + DO LASTV = N, I+1, -1 + IF( V( I, LASTV ).NE.ZERO ) EXIT + END DO + J = MIN( LASTV, PREVLASTV ) +* +* T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)**T +* + CALL DGEMV( 'No transpose', I-1, J-I+1, -TAU( I ), + $ V( 1, I ), LDV, V( I, I ), LDV, ZERO, + $ T( 1, I ), 1 ) + END IF + V( I, I ) = VII +* +* T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i) +* + CALL DTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T, + $ LDT, T( 1, I ), 1 ) + T( I, I ) = TAU( I ) + IF( I.GT.1 ) THEN + PREVLASTV = MAX( PREVLASTV, LASTV ) + ELSE + PREVLASTV = LASTV + END IF + END IF + 20 CONTINUE + ELSE + PREVLASTV = 1 + DO 40 I = K, 1, -1 + IF( TAU( I ).EQ.ZERO ) THEN +* +* H(i) = I +* + DO 30 J = I, K + T( J, I ) = ZERO + 30 CONTINUE + ELSE +* +* general case +* + IF( I.LT.K ) THEN + IF( LSAME( STOREV, 'C' ) ) THEN + VII = V( N-K+I, I ) + V( N-K+I, I ) = ONE +! Skip any leading zeros. + DO LASTV = 1, I-1 + IF( V( LASTV, I ).NE.ZERO ) EXIT + END DO + J = MAX( LASTV, PREVLASTV ) +* +* T(i+1:k,i) := +* - tau(i) * V(j:n-k+i,i+1:k)**T * V(j:n-k+i,i) +* + CALL DGEMV( 'Transpose', N-K+I-J+1, K-I, -TAU( I ), + $ V( J, I+1 ), LDV, V( J, I ), 1, ZERO, + $ T( I+1, I ), 1 ) + V( N-K+I, I ) = VII + ELSE + VII = V( I, N-K+I ) + V( I, N-K+I ) = ONE +! Skip any leading zeros. + DO LASTV = 1, I-1 + IF( V( I, LASTV ).NE.ZERO ) EXIT + END DO + J = MAX( LASTV, PREVLASTV ) +* +* T(i+1:k,i) := +* - tau(i) * V(i+1:k,j:n-k+i) * V(i,j:n-k+i)**T +* + CALL DGEMV( 'No transpose', K-I, N-K+I-J+1, + $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV, + $ ZERO, T( I+1, I ), 1 ) + V( I, N-K+I ) = VII + END IF +* +* T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i) +* + CALL DTRMV( 'Lower', 'No transpose', 'Non-unit', K-I, + $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 ) + IF( I.GT.1 ) THEN + PREVLASTV = MIN( PREVLASTV, LASTV ) + ELSE + PREVLASTV = LASTV + END IF + END IF + T( I, I ) = TAU( I ) + END IF + 40 CONTINUE + END IF + RETURN +* +* End of DLARFT +* + END + SUBROUTINE DLARTG( F, G, CS, SN, R ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + DOUBLE PRECISION CS, F, G, R, SN +* .. +* +* Purpose +* ======= +* +* DLARTG generate a plane rotation so that +* +* [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1. +* [ -SN CS ] [ G ] [ 0 ] +* +* This is a slower, more accurate version of the BLAS1 routine DROTG, +* with the following other differences: +* F and G are unchanged on return. +* If G=0, then CS=1 and SN=0. +* If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any +* floating point operations (saves work in DBDSQR when +* there are zeros on the diagonal). +* +* If F exceeds G in magnitude, CS will be positive. +* +* Arguments +* ========= +* +* F (input) DOUBLE PRECISION +* The first component of vector to be rotated. +* +* G (input) DOUBLE PRECISION +* The second component of vector to be rotated. +* +* CS (output) DOUBLE PRECISION +* The cosine of the rotation. +* +* SN (output) DOUBLE PRECISION +* The sine of the rotation. +* +* R (output) DOUBLE PRECISION +* The nonzero component of the rotated vector. +* +* This version has a few statements commented out for thread safety +* (machine parameters are computed on each entry). 10 feb 03, SJH. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D0 ) + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D0 ) + DOUBLE PRECISION TWO + PARAMETER ( TWO = 2.0D0 ) +* .. +* .. Local Scalars .. +* LOGICAL FIRST + INTEGER COUNT, I + DOUBLE PRECISION EPS, F1, G1, SAFMIN, SAFMN2, SAFMX2, SCALE +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH + EXTERNAL DLAMCH +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, INT, LOG, MAX, SQRT +* .. +* .. Save statement .. +* SAVE FIRST, SAFMX2, SAFMIN, SAFMN2 +* .. +* .. Data statements .. +* DATA FIRST / .TRUE. / +* .. +* .. Executable Statements .. +* +* IF( FIRST ) THEN + SAFMIN = DLAMCH( 'S' ) + EPS = DLAMCH( 'E' ) + SAFMN2 = DLAMCH( 'B' )**INT( LOG( SAFMIN / EPS ) / + $ LOG( DLAMCH( 'B' ) ) / TWO ) + SAFMX2 = ONE / SAFMN2 +* FIRST = .FALSE. +* END IF + IF( G.EQ.ZERO ) THEN + CS = ONE + SN = ZERO + R = F + ELSE IF( F.EQ.ZERO ) THEN + CS = ZERO + SN = ONE + R = G + ELSE + F1 = F + G1 = G + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.GE.SAFMX2 ) THEN + COUNT = 0 + 10 CONTINUE + COUNT = COUNT + 1 + F1 = F1*SAFMN2 + G1 = G1*SAFMN2 + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.GE.SAFMX2 ) + $ GO TO 10 + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + DO 20 I = 1, COUNT + R = R*SAFMX2 + 20 CONTINUE + ELSE IF( SCALE.LE.SAFMN2 ) THEN + COUNT = 0 + 30 CONTINUE + COUNT = COUNT + 1 + F1 = F1*SAFMX2 + G1 = G1*SAFMX2 + SCALE = MAX( ABS( F1 ), ABS( G1 ) ) + IF( SCALE.LE.SAFMN2 ) + $ GO TO 30 + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + DO 40 I = 1, COUNT + R = R*SAFMN2 + 40 CONTINUE + ELSE + R = SQRT( F1**2+G1**2 ) + CS = F1 / R + SN = G1 / R + END IF + IF( ABS( F ).GT.ABS( G ) .AND. CS.LT.ZERO ) THEN + CS = -CS + SN = -SN + R = -R + END IF + END IF + RETURN +* +* End of DLARTG +* + END + SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) +* +* -- LAPACK auxiliary routine (version 3.3.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2010 +* +* .. Scalar Arguments .. + CHARACTER TYPE + INTEGER INFO, KL, KU, LDA, M, N + DOUBLE PRECISION CFROM, CTO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* Purpose +* ======= +* +* DLASCL multiplies the M by N real matrix A by the real scalar +* CTO/CFROM. This is done without over/underflow as long as the final +* result CTO*A(I,J)/CFROM does not over/underflow. TYPE specifies that +* A may be full, upper triangular, lower triangular, upper Hessenberg, +* or banded. +* +* Arguments +* ========= +* +* TYPE (input) CHARACTER*1 +* TYPE indices the storage type of the input matrix. +* = 'G': A is a full matrix. +* = 'L': A is a lower triangular matrix. +* = 'U': A is an upper triangular matrix. +* = 'H': A is an upper Hessenberg matrix. +* = 'B': A is a symmetric band matrix with lower bandwidth KL +* and upper bandwidth KU and with the only the lower +* half stored. +* = 'Q': A is a symmetric band matrix with lower bandwidth KL +* and upper bandwidth KU and with the only the upper +* half stored. +* = 'Z': A is a band matrix with lower bandwidth KL and upper +* bandwidth KU. See DGBTRF for storage details. +* +* KL (input) INTEGER +* The lower bandwidth of A. Referenced only if TYPE = 'B', +* 'Q' or 'Z'. +* +* KU (input) INTEGER +* The upper bandwidth of A. Referenced only if TYPE = 'B', +* 'Q' or 'Z'. +* +* CFROM (input) DOUBLE PRECISION +* CTO (input) DOUBLE PRECISION +* The matrix A is multiplied by CTO/CFROM. A(I,J) is computed +* without over/underflow if the final result CTO*A(I,J)/CFROM +* can be represented without over/underflow. CFROM must be +* nonzero. +* +* M (input) INTEGER +* The number of rows of the matrix A. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix A. N >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* The matrix to be multiplied by CTO/CFROM. See TYPE for the +* storage type. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,M). +* +* INFO (output) INTEGER +* 0 - successful exit +* <0 - if INFO = -i, the i-th argument had an illegal value. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL DONE + INTEGER I, ITYPE, J, K1, K2, K3, K4 + DOUBLE PRECISION BIGNUM, CFROM1, CFROMC, CTO1, CTOC, MUL, SMLNUM +* .. +* .. External Functions .. + LOGICAL LSAME, DISNAN + DOUBLE PRECISION DLAMCH + EXTERNAL LSAME, DLAMCH, DISNAN +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, MIN +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 +* + IF( LSAME( TYPE, 'G' ) ) THEN + ITYPE = 0 + ELSE IF( LSAME( TYPE, 'L' ) ) THEN + ITYPE = 1 + ELSE IF( LSAME( TYPE, 'U' ) ) THEN + ITYPE = 2 + ELSE IF( LSAME( TYPE, 'H' ) ) THEN + ITYPE = 3 + ELSE IF( LSAME( TYPE, 'B' ) ) THEN + ITYPE = 4 + ELSE IF( LSAME( TYPE, 'Q' ) ) THEN + ITYPE = 5 + ELSE IF( LSAME( TYPE, 'Z' ) ) THEN + ITYPE = 6 + ELSE + ITYPE = -1 + END IF +* + IF( ITYPE.EQ.-1 ) THEN + INFO = -1 + ELSE IF( CFROM.EQ.ZERO .OR. DISNAN(CFROM) ) THEN + INFO = -4 + ELSE IF( DISNAN(CTO) ) THEN + INFO = -5 + ELSE IF( M.LT.0 ) THEN + INFO = -6 + ELSE IF( N.LT.0 .OR. ( ITYPE.EQ.4 .AND. N.NE.M ) .OR. + $ ( ITYPE.EQ.5 .AND. N.NE.M ) ) THEN + INFO = -7 + ELSE IF( ITYPE.LE.3 .AND. LDA.LT.MAX( 1, M ) ) THEN + INFO = -9 + ELSE IF( ITYPE.GE.4 ) THEN + IF( KL.LT.0 .OR. KL.GT.MAX( M-1, 0 ) ) THEN + INFO = -2 + ELSE IF( KU.LT.0 .OR. KU.GT.MAX( N-1, 0 ) .OR. + $ ( ( ITYPE.EQ.4 .OR. ITYPE.EQ.5 ) .AND. KL.NE.KU ) ) + $ THEN + INFO = -3 + ELSE IF( ( ITYPE.EQ.4 .AND. LDA.LT.KL+1 ) .OR. + $ ( ITYPE.EQ.5 .AND. LDA.LT.KU+1 ) .OR. + $ ( ITYPE.EQ.6 .AND. LDA.LT.2*KL+KU+1 ) ) THEN + INFO = -9 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASCL', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 .OR. M.EQ.0 ) + $ RETURN +* +* Get machine parameters +* + SMLNUM = DLAMCH( 'S' ) + BIGNUM = ONE / SMLNUM +* + CFROMC = CFROM + CTOC = CTO +* + 10 CONTINUE + CFROM1 = CFROMC*SMLNUM + IF( CFROM1.EQ.CFROMC ) THEN +! CFROMC is an inf. Multiply by a correctly signed zero for +! finite CTOC, or a NaN if CTOC is infinite. + MUL = CTOC / CFROMC + DONE = .TRUE. + CTO1 = CTOC + ELSE + CTO1 = CTOC / BIGNUM + IF( CTO1.EQ.CTOC ) THEN +! CTOC is either 0 or an inf. In both cases, CTOC itself +! serves as the correct multiplication factor. + MUL = CTOC + DONE = .TRUE. + CFROMC = ONE + ELSE IF( ABS( CFROM1 ).GT.ABS( CTOC ) .AND. CTOC.NE.ZERO ) THEN + MUL = SMLNUM + DONE = .FALSE. + CFROMC = CFROM1 + ELSE IF( ABS( CTO1 ).GT.ABS( CFROMC ) ) THEN + MUL = BIGNUM + DONE = .FALSE. + CTOC = CTO1 + ELSE + MUL = CTOC / CFROMC + DONE = .TRUE. + END IF + END IF +* + IF( ITYPE.EQ.0 ) THEN +* +* Full matrix +* + DO 30 J = 1, N + DO 20 I = 1, M + A( I, J ) = A( I, J )*MUL + 20 CONTINUE + 30 CONTINUE +* + ELSE IF( ITYPE.EQ.1 ) THEN +* +* Lower triangular matrix +* + DO 50 J = 1, N + DO 40 I = J, M + A( I, J ) = A( I, J )*MUL + 40 CONTINUE + 50 CONTINUE +* + ELSE IF( ITYPE.EQ.2 ) THEN +* +* Upper triangular matrix +* + DO 70 J = 1, N + DO 60 I = 1, MIN( J, M ) + A( I, J ) = A( I, J )*MUL + 60 CONTINUE + 70 CONTINUE +* + ELSE IF( ITYPE.EQ.3 ) THEN +* +* Upper Hessenberg matrix +* + DO 90 J = 1, N + DO 80 I = 1, MIN( J+1, M ) + A( I, J ) = A( I, J )*MUL + 80 CONTINUE + 90 CONTINUE +* + ELSE IF( ITYPE.EQ.4 ) THEN +* +* Lower half of a symmetric band matrix +* + K3 = KL + 1 + K4 = N + 1 + DO 110 J = 1, N + DO 100 I = 1, MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 100 CONTINUE + 110 CONTINUE +* + ELSE IF( ITYPE.EQ.5 ) THEN +* +* Upper half of a symmetric band matrix +* + K1 = KU + 2 + K3 = KU + 1 + DO 130 J = 1, N + DO 120 I = MAX( K1-J, 1 ), K3 + A( I, J ) = A( I, J )*MUL + 120 CONTINUE + 130 CONTINUE +* + ELSE IF( ITYPE.EQ.6 ) THEN +* +* Band matrix +* + K1 = KL + KU + 2 + K2 = KL + 1 + K3 = 2*KL + KU + 1 + K4 = KL + KU + 1 + M + DO 150 J = 1, N + DO 140 I = MAX( K1-J, K2 ), MIN( K3, K4-J ) + A( I, J ) = A( I, J )*MUL + 140 CONTINUE + 150 CONTINUE +* + END IF +* + IF( .NOT.DONE ) + $ GO TO 10 +* + RETURN +* +* End of DLASCL +* + END + SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, M, N + DOUBLE PRECISION ALPHA, BETA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* Purpose +* ======= +* +* DLASET initializes an m-by-n matrix A to BETA on the diagonal and +* ALPHA on the offdiagonals. +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* Specifies the part of the matrix A to be set. +* = 'U': Upper triangular part is set; the strictly lower +* triangular part of A is not changed. +* = 'L': Lower triangular part is set; the strictly upper +* triangular part of A is not changed. +* Otherwise: All of the matrix A is set. +* +* M (input) INTEGER +* The number of rows of the matrix A. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix A. N >= 0. +* +* ALPHA (input) DOUBLE PRECISION +* The constant to which the offdiagonal elements are to be set. +* +* BETA (input) DOUBLE PRECISION +* The constant to which the diagonal elements are to be set. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On exit, the leading m-by-n submatrix of A is set as follows: +* +* if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n, +* if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n, +* otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j, +* +* and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n). +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,M). +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, J +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* + IF( LSAME( UPLO, 'U' ) ) THEN +* +* Set the strictly upper triangular or trapezoidal part of the +* array to ALPHA. +* + DO 20 J = 2, N + DO 10 I = 1, MIN( J-1, M ) + A( I, J ) = ALPHA + 10 CONTINUE + 20 CONTINUE +* + ELSE IF( LSAME( UPLO, 'L' ) ) THEN +* +* Set the strictly lower triangular or trapezoidal part of the +* array to ALPHA. +* + DO 40 J = 1, MIN( M, N ) + DO 30 I = J + 1, M + A( I, J ) = ALPHA + 30 CONTINUE + 40 CONTINUE +* + ELSE +* +* Set the leading m-by-n submatrix to ALPHA. +* + DO 60 J = 1, N + DO 50 I = 1, M + A( I, J ) = ALPHA + 50 CONTINUE + 60 CONTINUE + END IF +* +* Set the first min(M,N) diagonal elements to BETA. +* + DO 70 I = 1, MIN( M, N ) + A( I, I ) = BETA + 70 CONTINUE +* + RETURN +* +* End of DLASET +* + END + SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER DIRECT, PIVOT, SIDE + INTEGER LDA, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), C( * ), S( * ) +* .. +* +* Purpose +* ======= +* +* DLASR applies a sequence of plane rotations to a real matrix A, +* from either the left or the right. +* +* When SIDE = 'L', the transformation takes the form +* +* A := P*A +* +* and when SIDE = 'R', the transformation takes the form +* +* A := A*P**T +* +* where P is an orthogonal matrix consisting of a sequence of z plane +* rotations, with z = M when SIDE = 'L' and z = N when SIDE = 'R', +* and P**T is the transpose of P. +* +* When DIRECT = 'F' (Forward sequence), then +* +* P = P(z-1) * ... * P(2) * P(1) +* +* and when DIRECT = 'B' (Backward sequence), then +* +* P = P(1) * P(2) * ... * P(z-1) +* +* where P(k) is a plane rotation matrix defined by the 2-by-2 rotation +* +* R(k) = ( c(k) s(k) ) +* = ( -s(k) c(k) ). +* +* When PIVOT = 'V' (Variable pivot), the rotation is performed +* for the plane (k,k+1), i.e., P(k) has the form +* +* P(k) = ( 1 ) +* ( ... ) +* ( 1 ) +* ( c(k) s(k) ) +* ( -s(k) c(k) ) +* ( 1 ) +* ( ... ) +* ( 1 ) +* +* where R(k) appears as a rank-2 modification to the identity matrix in +* rows and columns k and k+1. +* +* When PIVOT = 'T' (Top pivot), the rotation is performed for the +* plane (1,k+1), so P(k) has the form +* +* P(k) = ( c(k) s(k) ) +* ( 1 ) +* ( ... ) +* ( 1 ) +* ( -s(k) c(k) ) +* ( 1 ) +* ( ... ) +* ( 1 ) +* +* where R(k) appears in rows and columns 1 and k+1. +* +* Similarly, when PIVOT = 'B' (Bottom pivot), the rotation is +* performed for the plane (k,z), giving P(k) the form +* +* P(k) = ( 1 ) +* ( ... ) +* ( 1 ) +* ( c(k) s(k) ) +* ( 1 ) +* ( ... ) +* ( 1 ) +* ( -s(k) c(k) ) +* +* where R(k) appears in rows and columns k and z. The rotations are +* performed without ever forming P(k) explicitly. +* +* Arguments +* ========= +* +* SIDE (input) CHARACTER*1 +* Specifies whether the plane rotation matrix P is applied to +* A on the left or the right. +* = 'L': Left, compute A := P*A +* = 'R': Right, compute A:= A*P**T +* +* PIVOT (input) CHARACTER*1 +* Specifies the plane for which P(k) is a plane rotation +* matrix. +* = 'V': Variable pivot, the plane (k,k+1) +* = 'T': Top pivot, the plane (1,k+1) +* = 'B': Bottom pivot, the plane (k,z) +* +* DIRECT (input) CHARACTER*1 +* Specifies whether P is a forward or backward sequence of +* plane rotations. +* = 'F': Forward, P = P(z-1)*...*P(2)*P(1) +* = 'B': Backward, P = P(1)*P(2)*...*P(z-1) +* +* M (input) INTEGER +* The number of rows of the matrix A. If m <= 1, an immediate +* return is effected. +* +* N (input) INTEGER +* The number of columns of the matrix A. If n <= 1, an +* immediate return is effected. +* +* C (input) DOUBLE PRECISION array, dimension +* (M-1) if SIDE = 'L' +* (N-1) if SIDE = 'R' +* The cosines c(k) of the plane rotations. +* +* S (input) DOUBLE PRECISION array, dimension +* (M-1) if SIDE = 'L' +* (N-1) if SIDE = 'R' +* The sines s(k) of the plane rotations. The 2-by-2 plane +* rotation part of the matrix P(k), R(k), has the form +* R(k) = ( c(k) s(k) ) +* ( -s(k) c(k) ). +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* The M-by-N matrix A. On exit, A is overwritten by P*A if +* SIDE = 'R' or by A*P**T if SIDE = 'L'. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,M). +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, INFO, J + DOUBLE PRECISION CTEMP, STEMP, TEMP +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input parameters +* + INFO = 0 + IF( .NOT.( LSAME( SIDE, 'L' ) .OR. LSAME( SIDE, 'R' ) ) ) THEN + INFO = 1 + ELSE IF( .NOT.( LSAME( PIVOT, 'V' ) .OR. LSAME( PIVOT, + $ 'T' ) .OR. LSAME( PIVOT, 'B' ) ) ) THEN + INFO = 2 + ELSE IF( .NOT.( LSAME( DIRECT, 'F' ) .OR. LSAME( DIRECT, 'B' ) ) ) + $ THEN + INFO = 3 + ELSE IF( M.LT.0 ) THEN + INFO = 4 + ELSE IF( N.LT.0 ) THEN + INFO = 5 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = 9 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASR ', INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( ( M.EQ.0 ) .OR. ( N.EQ.0 ) ) + $ RETURN + IF( LSAME( SIDE, 'L' ) ) THEN +* +* Form P * A +* + IF( LSAME( PIVOT, 'V' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 20 J = 1, M - 1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 10 I = 1, N + TEMP = A( J+1, I ) + A( J+1, I ) = CTEMP*TEMP - STEMP*A( J, I ) + A( J, I ) = STEMP*TEMP + CTEMP*A( J, I ) + 10 CONTINUE + END IF + 20 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 40 J = M - 1, 1, -1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 30 I = 1, N + TEMP = A( J+1, I ) + A( J+1, I ) = CTEMP*TEMP - STEMP*A( J, I ) + A( J, I ) = STEMP*TEMP + CTEMP*A( J, I ) + 30 CONTINUE + END IF + 40 CONTINUE + END IF + ELSE IF( LSAME( PIVOT, 'T' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 60 J = 2, M + CTEMP = C( J-1 ) + STEMP = S( J-1 ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 50 I = 1, N + TEMP = A( J, I ) + A( J, I ) = CTEMP*TEMP - STEMP*A( 1, I ) + A( 1, I ) = STEMP*TEMP + CTEMP*A( 1, I ) + 50 CONTINUE + END IF + 60 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 80 J = M, 2, -1 + CTEMP = C( J-1 ) + STEMP = S( J-1 ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 70 I = 1, N + TEMP = A( J, I ) + A( J, I ) = CTEMP*TEMP - STEMP*A( 1, I ) + A( 1, I ) = STEMP*TEMP + CTEMP*A( 1, I ) + 70 CONTINUE + END IF + 80 CONTINUE + END IF + ELSE IF( LSAME( PIVOT, 'B' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 100 J = 1, M - 1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 90 I = 1, N + TEMP = A( J, I ) + A( J, I ) = STEMP*A( M, I ) + CTEMP*TEMP + A( M, I ) = CTEMP*A( M, I ) - STEMP*TEMP + 90 CONTINUE + END IF + 100 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 120 J = M - 1, 1, -1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 110 I = 1, N + TEMP = A( J, I ) + A( J, I ) = STEMP*A( M, I ) + CTEMP*TEMP + A( M, I ) = CTEMP*A( M, I ) - STEMP*TEMP + 110 CONTINUE + END IF + 120 CONTINUE + END IF + END IF + ELSE IF( LSAME( SIDE, 'R' ) ) THEN +* +* Form A * P**T +* + IF( LSAME( PIVOT, 'V' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 140 J = 1, N - 1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 130 I = 1, M + TEMP = A( I, J+1 ) + A( I, J+1 ) = CTEMP*TEMP - STEMP*A( I, J ) + A( I, J ) = STEMP*TEMP + CTEMP*A( I, J ) + 130 CONTINUE + END IF + 140 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 160 J = N - 1, 1, -1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 150 I = 1, M + TEMP = A( I, J+1 ) + A( I, J+1 ) = CTEMP*TEMP - STEMP*A( I, J ) + A( I, J ) = STEMP*TEMP + CTEMP*A( I, J ) + 150 CONTINUE + END IF + 160 CONTINUE + END IF + ELSE IF( LSAME( PIVOT, 'T' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 180 J = 2, N + CTEMP = C( J-1 ) + STEMP = S( J-1 ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 170 I = 1, M + TEMP = A( I, J ) + A( I, J ) = CTEMP*TEMP - STEMP*A( I, 1 ) + A( I, 1 ) = STEMP*TEMP + CTEMP*A( I, 1 ) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 200 J = N, 2, -1 + CTEMP = C( J-1 ) + STEMP = S( J-1 ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 190 I = 1, M + TEMP = A( I, J ) + A( I, J ) = CTEMP*TEMP - STEMP*A( I, 1 ) + A( I, 1 ) = STEMP*TEMP + CTEMP*A( I, 1 ) + 190 CONTINUE + END IF + 200 CONTINUE + END IF + ELSE IF( LSAME( PIVOT, 'B' ) ) THEN + IF( LSAME( DIRECT, 'F' ) ) THEN + DO 220 J = 1, N - 1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 210 I = 1, M + TEMP = A( I, J ) + A( I, J ) = STEMP*A( I, N ) + CTEMP*TEMP + A( I, N ) = CTEMP*A( I, N ) - STEMP*TEMP + 210 CONTINUE + END IF + 220 CONTINUE + ELSE IF( LSAME( DIRECT, 'B' ) ) THEN + DO 240 J = N - 1, 1, -1 + CTEMP = C( J ) + STEMP = S( J ) + IF( ( CTEMP.NE.ONE ) .OR. ( STEMP.NE.ZERO ) ) THEN + DO 230 I = 1, M + TEMP = A( I, J ) + A( I, J ) = STEMP*A( I, N ) + CTEMP*TEMP + A( I, N ) = CTEMP*A( I, N ) - STEMP*TEMP + 230 CONTINUE + END IF + 240 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DLASR +* + END + SUBROUTINE DLASRT( ID, N, D, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER ID + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ) +* .. +* +* Purpose +* ======= +* +* Sort the numbers in D in increasing order (if ID = 'I') or +* in decreasing order (if ID = 'D' ). +* +* Use Quick Sort, reverting to Insertion sort on arrays of +* size <= 20. Dimension of STACK limits N to about 2**32. +* +* Arguments +* ========= +* +* ID (input) CHARACTER*1 +* = 'I': sort D in increasing order; +* = 'D': sort D in decreasing order. +* +* N (input) INTEGER +* The length of the array D. +* +* D (input/output) DOUBLE PRECISION array, dimension (N) +* On entry, the array to be sorted. +* On exit, D has been sorted into increasing order +* (D(1) <= ... <= D(N) ) or into decreasing order +* (D(1) >= ... >= D(N) ), depending on ID. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* +* ===================================================================== +* +* .. Parameters .. + INTEGER SELECT + PARAMETER ( SELECT = 20 ) +* .. +* .. Local Scalars .. + INTEGER DIR, ENDD, I, J, START, STKPNT + DOUBLE PRECISION D1, D2, D3, DMNMX, TMP +* .. +* .. Local Arrays .. + INTEGER STACK( 2, 32 ) +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Executable Statements .. +* +* Test the input paramters. +* + INFO = 0 + DIR = -1 + IF( LSAME( ID, 'D' ) ) THEN + DIR = 0 + ELSE IF( LSAME( ID, 'I' ) ) THEN + DIR = 1 + END IF + IF( DIR.EQ.-1 ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DLASRT', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.1 ) + $ RETURN +* + STKPNT = 1 + STACK( 1, 1 ) = 1 + STACK( 2, 1 ) = N + 10 CONTINUE + START = STACK( 1, STKPNT ) + ENDD = STACK( 2, STKPNT ) + STKPNT = STKPNT - 1 + IF( ENDD-START.LE.SELECT .AND. ENDD-START.GT.0 ) THEN +* +* Do Insertion sort on D( START:ENDD ) +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + DO 30 I = START + 1, ENDD + DO 20 J = I, START + 1, -1 + IF( D( J ).GT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 30 + END IF + 20 CONTINUE + 30 CONTINUE +* + ELSE +* +* Sort into increasing order +* + DO 50 I = START + 1, ENDD + DO 40 J = I, START + 1, -1 + IF( D( J ).LT.D( J-1 ) ) THEN + DMNMX = D( J ) + D( J ) = D( J-1 ) + D( J-1 ) = DMNMX + ELSE + GO TO 50 + END IF + 40 CONTINUE + 50 CONTINUE +* + END IF +* + ELSE IF( ENDD-START.GT.SELECT ) THEN +* +* Partition D( START:ENDD ) and stack parts, largest one first +* +* Choose partition entry as median of 3 +* + D1 = D( START ) + D2 = D( ENDD ) + I = ( START+ENDD ) / 2 + D3 = D( I ) + IF( D1.LT.D2 ) THEN + IF( D3.LT.D1 ) THEN + DMNMX = D1 + ELSE IF( D3.LT.D2 ) THEN + DMNMX = D3 + ELSE + DMNMX = D2 + END IF + ELSE + IF( D3.LT.D2 ) THEN + DMNMX = D2 + ELSE IF( D3.LT.D1 ) THEN + DMNMX = D3 + ELSE + DMNMX = D1 + END IF + END IF +* + IF( DIR.EQ.0 ) THEN +* +* Sort into decreasing order +* + I = START - 1 + J = ENDD + 1 + 60 CONTINUE + 70 CONTINUE + J = J - 1 + IF( D( J ).LT.DMNMX ) + $ GO TO 70 + 80 CONTINUE + I = I + 1 + IF( D( I ).GT.DMNMX ) + $ GO TO 80 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 60 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + ELSE +* +* Sort into increasing order +* + I = START - 1 + J = ENDD + 1 + 90 CONTINUE + 100 CONTINUE + J = J - 1 + IF( D( J ).GT.DMNMX ) + $ GO TO 100 + 110 CONTINUE + I = I + 1 + IF( D( I ).LT.DMNMX ) + $ GO TO 110 + IF( I.LT.J ) THEN + TMP = D( I ) + D( I ) = D( J ) + D( J ) = TMP + GO TO 90 + END IF + IF( J-START.GT.ENDD-J-1 ) THEN + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + ELSE + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = J + 1 + STACK( 2, STKPNT ) = ENDD + STKPNT = STKPNT + 1 + STACK( 1, STKPNT ) = START + STACK( 2, STKPNT ) = J + END IF + END IF + END IF + IF( STKPNT.GT.0 ) + $ GO TO 10 + RETURN +* +* End of DLASRT +* + END + SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) +* +* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + INTEGER INCX, N + DOUBLE PRECISION SCALE, SUMSQ +* .. +* .. Array Arguments .. + DOUBLE PRECISION X( * ) +* .. +* +* Purpose +* ======= +* +* DLASSQ returns the values scl and smsq such that +* +* ( scl**2 )*smsq = x( 1 )**2 +...+ x( n )**2 + ( scale**2 )*sumsq, +* +* where x( i ) = X( 1 + ( i - 1 )*INCX ). The value of sumsq is +* assumed to be non-negative and scl returns the value +* +* scl = max( scale, abs( x( i ) ) ). +* +* scale and sumsq must be supplied in SCALE and SUMSQ and +* scl and smsq are overwritten on SCALE and SUMSQ respectively. +* +* The routine makes only one pass through the vector x. +* +* Arguments +* ========= +* +* N (input) INTEGER +* The number of elements to be used from the vector X. +* +* X (input) DOUBLE PRECISION array, dimension (N) +* The vector for which a scaled sum of squares is computed. +* x( i ) = X( 1 + ( i - 1 )*INCX ), 1 <= i <= n. +* +* INCX (input) INTEGER +* The increment between successive values of the vector X. +* INCX > 0. +* +* SCALE (input/output) DOUBLE PRECISION +* On entry, the value scale in the equation above. +* On exit, SCALE is overwritten with scl , the scaling factor +* for the sum of squares. +* +* SUMSQ (input/output) DOUBLE PRECISION +* On entry, the value sumsq in the equation above. +* On exit, SUMSQ is overwritten with smsq , the basic sum of +* squares from which scl has been factored out. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER IX + DOUBLE PRECISION ABSXI +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS +* .. +* .. Executable Statements .. +* + IF( N.GT.0 ) THEN + DO 10 IX = 1, 1 + ( N-1 )*INCX, INCX + IF( X( IX ).NE.ZERO ) THEN + ABSXI = ABS( X( IX ) ) + IF( SCALE.LT.ABSXI ) THEN + SUMSQ = 1 + SUMSQ*( SCALE / ABSXI )**2 + SCALE = ABSXI + ELSE + SUMSQ = SUMSQ + ( ABSXI / SCALE )**2 + END IF + END IF + 10 CONTINUE + END IF + RETURN +* +* End of DLASSQ +* + END + SUBROUTINE DLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW ) +* +* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER LDA, LDW, N, NB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), E( * ), TAU( * ), W( LDW, * ) +* .. +* +* Purpose +* ======= +* +* DLATRD reduces NB rows and columns of a real symmetric matrix A to +* symmetric tridiagonal form by an orthogonal similarity +* transformation Q**T * A * Q, and returns the matrices V and W which are +* needed to apply the transformation to the unreduced part of A. +* +* If UPLO = 'U', DLATRD reduces the last NB rows and columns of a +* matrix, of which the upper triangle is supplied; +* if UPLO = 'L', DLATRD reduces the first NB rows and columns of a +* matrix, of which the lower triangle is supplied. +* +* This is an auxiliary routine called by DSYTRD. +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* Specifies whether the upper or lower triangular part of the +* symmetric matrix A is stored: +* = 'U': Upper triangular +* = 'L': Lower triangular +* +* N (input) INTEGER +* The order of the matrix A. +* +* NB (input) INTEGER +* The number of rows and columns to be reduced. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the symmetric matrix A. If UPLO = 'U', the leading +* n-by-n upper triangular part of A contains the upper +* triangular part of the matrix A, and the strictly lower +* triangular part of A is not referenced. If UPLO = 'L', the +* leading n-by-n lower triangular part of A contains the lower +* triangular part of the matrix A, and the strictly upper +* triangular part of A is not referenced. +* On exit: +* if UPLO = 'U', the last NB columns have been reduced to +* tridiagonal form, with the diagonal elements overwriting +* the diagonal elements of A; the elements above the diagonal +* with the array TAU, represent the orthogonal matrix Q as a +* product of elementary reflectors; +* if UPLO = 'L', the first NB columns have been reduced to +* tridiagonal form, with the diagonal elements overwriting +* the diagonal elements of A; the elements below the diagonal +* with the array TAU, represent the orthogonal matrix Q as a +* product of elementary reflectors. +* See Further Details. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= (1,N). +* +* E (output) DOUBLE PRECISION array, dimension (N-1) +* If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal +* elements of the last NB columns of the reduced matrix; +* if UPLO = 'L', E(1:nb) contains the subdiagonal elements of +* the first NB columns of the reduced matrix. +* +* TAU (output) DOUBLE PRECISION array, dimension (N-1) +* The scalar factors of the elementary reflectors, stored in +* TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'. +* See Further Details. +* +* W (output) DOUBLE PRECISION array, dimension (LDW,NB) +* The n-by-nb matrix W required to update the unreduced part +* of A. +* +* LDW (input) INTEGER +* The leading dimension of the array W. LDW >= max(1,N). +* +* Further Details +* =============== +* +* If UPLO = 'U', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(n) H(n-1) . . . H(n-nb+1). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i), +* and tau in TAU(i-1). +* +* If UPLO = 'L', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(1) H(2) . . . H(nb). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), +* and tau in TAU(i). +* +* The elements of the vectors v together form the n-by-nb matrix V +* which is needed, with W, to apply the transformation to the unreduced +* part of the matrix, using a symmetric rank-2k update of the form: +* A := A - V*W**T - W*V**T. +* +* The contents of A on exit are illustrated by the following examples +* with n = 5 and nb = 2: +* +* if UPLO = 'U': if UPLO = 'L': +* +* ( a a a v4 v5 ) ( d ) +* ( a a v4 v5 ) ( 1 d ) +* ( a 1 v5 ) ( v1 1 a ) +* ( d 1 ) ( v1 v2 a a ) +* ( d ) ( v1 v2 a a a ) +* +* where d denotes a diagonal element of the reduced matrix, a denotes +* an element of the original matrix that is unchanged, and vi denotes +* an element of the vector defining H(i). +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE, HALF + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, HALF = 0.5D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, IW + DOUBLE PRECISION ALPHA +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DGEMV, DLARFG, DSCAL, DSYMV +* .. +* .. External Functions .. + LOGICAL LSAME + DOUBLE PRECISION DDOT + EXTERNAL LSAME, DDOT +* .. +* .. Intrinsic Functions .. + INTRINSIC MIN +* .. +* .. Executable Statements .. +* +* Quick return if possible +* + IF( N.LE.0 ) + $ RETURN +* + IF( LSAME( UPLO, 'U' ) ) THEN +* +* Reduce last NB columns of upper triangle +* + DO 10 I = N, N - NB + 1, -1 + IW = I - N + NB + IF( I.LT.N ) THEN +* +* Update A(1:i,i) +* + CALL DGEMV( 'No transpose', I, N-I, -ONE, A( 1, I+1 ), + $ LDA, W( I, IW+1 ), LDW, ONE, A( 1, I ), 1 ) + CALL DGEMV( 'No transpose', I, N-I, -ONE, W( 1, IW+1 ), + $ LDW, A( I, I+1 ), LDA, ONE, A( 1, I ), 1 ) + END IF + IF( I.GT.1 ) THEN +* +* Generate elementary reflector H(i) to annihilate +* A(1:i-2,i) +* + CALL DLARFG( I-1, A( I-1, I ), A( 1, I ), 1, TAU( I-1 ) ) + E( I-1 ) = A( I-1, I ) + A( I-1, I ) = ONE +* +* Compute W(1:i-1,i) +* + CALL DSYMV( 'Upper', I-1, ONE, A, LDA, A( 1, I ), 1, + $ ZERO, W( 1, IW ), 1 ) + IF( I.LT.N ) THEN + CALL DGEMV( 'Transpose', I-1, N-I, ONE, W( 1, IW+1 ), + $ LDW, A( 1, I ), 1, ZERO, W( I+1, IW ), 1 ) + CALL DGEMV( 'No transpose', I-1, N-I, -ONE, + $ A( 1, I+1 ), LDA, W( I+1, IW ), 1, ONE, + $ W( 1, IW ), 1 ) + CALL DGEMV( 'Transpose', I-1, N-I, ONE, A( 1, I+1 ), + $ LDA, A( 1, I ), 1, ZERO, W( I+1, IW ), 1 ) + CALL DGEMV( 'No transpose', I-1, N-I, -ONE, + $ W( 1, IW+1 ), LDW, W( I+1, IW ), 1, ONE, + $ W( 1, IW ), 1 ) + END IF + CALL DSCAL( I-1, TAU( I-1 ), W( 1, IW ), 1 ) + ALPHA = -HALF*TAU( I-1 )*DDOT( I-1, W( 1, IW ), 1, + $ A( 1, I ), 1 ) + CALL DAXPY( I-1, ALPHA, A( 1, I ), 1, W( 1, IW ), 1 ) + END IF +* + 10 CONTINUE + ELSE +* +* Reduce first NB columns of lower triangle +* + DO 20 I = 1, NB +* +* Update A(i:n,i) +* + CALL DGEMV( 'No transpose', N-I+1, I-1, -ONE, A( I, 1 ), + $ LDA, W( I, 1 ), LDW, ONE, A( I, I ), 1 ) + CALL DGEMV( 'No transpose', N-I+1, I-1, -ONE, W( I, 1 ), + $ LDW, A( I, 1 ), LDA, ONE, A( I, I ), 1 ) + IF( I.LT.N ) THEN +* +* Generate elementary reflector H(i) to annihilate +* A(i+2:n,i) +* + CALL DLARFG( N-I, A( I+1, I ), A( MIN( I+2, N ), I ), 1, + $ TAU( I ) ) + E( I ) = A( I+1, I ) + A( I+1, I ) = ONE +* +* Compute W(i+1:n,i) +* + CALL DSYMV( 'Lower', N-I, ONE, A( I+1, I+1 ), LDA, + $ A( I+1, I ), 1, ZERO, W( I+1, I ), 1 ) + CALL DGEMV( 'Transpose', N-I, I-1, ONE, W( I+1, 1 ), LDW, + $ A( I+1, I ), 1, ZERO, W( 1, I ), 1 ) + CALL DGEMV( 'No transpose', N-I, I-1, -ONE, A( I+1, 1 ), + $ LDA, W( 1, I ), 1, ONE, W( I+1, I ), 1 ) + CALL DGEMV( 'Transpose', N-I, I-1, ONE, A( I+1, 1 ), LDA, + $ A( I+1, I ), 1, ZERO, W( 1, I ), 1 ) + CALL DGEMV( 'No transpose', N-I, I-1, -ONE, W( I+1, 1 ), + $ LDW, W( 1, I ), 1, ONE, W( I+1, I ), 1 ) + CALL DSCAL( N-I, TAU( I ), W( I+1, I ), 1 ) + ALPHA = -HALF*TAU( I )*DDOT( N-I, W( I+1, I ), 1, + $ A( I+1, I ), 1 ) + CALL DAXPY( N-I, ALPHA, A( I+1, I ), 1, W( I+1, I ), 1 ) + END IF +* + 20 CONTINUE + END IF +* + RETURN +* +* End of DLATRD +* + END + SUBROUTINE DORG2L( M, N, K, A, LDA, TAU, WORK, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DORG2L generates an m by n real matrix Q with orthonormal columns, +* which is defined as the last n columns of a product of k elementary +* reflectors of order m +* +* Q = H(k) . . . H(2) H(1) +* +* as returned by DGEQLF. +* +* Arguments +* ========= +* +* M (input) INTEGER +* The number of rows of the matrix Q. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix Q. M >= N >= 0. +* +* K (input) INTEGER +* The number of elementary reflectors whose product defines the +* matrix Q. N >= K >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the (n-k+i)-th column must contain the vector which +* defines the elementary reflector H(i), for i = 1,2,...,k, as +* returned by DGEQLF in the last k columns of its array +* argument A. +* On exit, the m by n matrix Q. +* +* LDA (input) INTEGER +* The first dimension of the array A. LDA >= max(1,M). +* +* TAU (input) DOUBLE PRECISION array, dimension (K) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i), as returned by DGEQLF. +* +* WORK (workspace) DOUBLE PRECISION array, dimension (N) +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument has an illegal value +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, II, J, L +* .. +* .. External Subroutines .. + EXTERNAL DLARF, DSCAL, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORG2L', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) + $ RETURN +* +* Initialise columns 1:n-k to columns of the unit matrix +* + DO 20 J = 1, N - K + DO 10 L = 1, M + A( L, J ) = ZERO + 10 CONTINUE + A( M-N+J, J ) = ONE + 20 CONTINUE +* + DO 40 I = 1, K + II = N - K + I +* +* Apply H(i) to A(1:m-k+i,1:n-k+i) from the left +* + A( M-N+II, II ) = ONE + CALL DLARF( 'Left', M-N+II, II-1, A( 1, II ), 1, TAU( I ), A, + $ LDA, WORK ) + CALL DSCAL( M-N+II-1, -TAU( I ), A( 1, II ), 1 ) + A( M-N+II, II ) = ONE - TAU( I ) +* +* Set A(m-k+i+1:m,n-k+i) to zero +* + DO 30 L = M - N + II + 1, M + A( L, II ) = ZERO + 30 CONTINUE + 40 CONTINUE + RETURN +* +* End of DORG2L +* + END + SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DORG2R generates an m by n real matrix Q with orthonormal columns, +* which is defined as the first n columns of a product of k elementary +* reflectors of order m +* +* Q = H(1) H(2) . . . H(k) +* +* as returned by DGEQRF. +* +* Arguments +* ========= +* +* M (input) INTEGER +* The number of rows of the matrix Q. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix Q. M >= N >= 0. +* +* K (input) INTEGER +* The number of elementary reflectors whose product defines the +* matrix Q. N >= K >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the i-th column must contain the vector which +* defines the elementary reflector H(i), for i = 1,2,...,k, as +* returned by DGEQRF in the first k columns of its array +* argument A. +* On exit, the m-by-n matrix Q. +* +* LDA (input) INTEGER +* The first dimension of the array A. LDA >= max(1,M). +* +* TAU (input) DOUBLE PRECISION array, dimension (K) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i), as returned by DGEQRF. +* +* WORK (workspace) DOUBLE PRECISION array, dimension (N) +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument has an illegal value +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J, L +* .. +* .. External Subroutines .. + EXTERNAL DLARF, DSCAL, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORG2R', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) + $ RETURN +* +* Initialise columns k+1:n to columns of the unit matrix +* + DO 20 J = K + 1, N + DO 10 L = 1, M + A( L, J ) = ZERO + 10 CONTINUE + A( J, J ) = ONE + 20 CONTINUE +* + DO 40 I = K, 1, -1 +* +* Apply H(i) to A(i:m,i:n) from the left +* + IF( I.LT.N ) THEN + A( I, I ) = ONE + CALL DLARF( 'Left', M-I+1, N-I, A( I, I ), 1, TAU( I ), + $ A( I, I+1 ), LDA, WORK ) + END IF + IF( I.LT.M ) + $ CALL DSCAL( M-I, -TAU( I ), A( I+1, I ), 1 ) + A( I, I ) = ONE - TAU( I ) +* +* Set A(1:i-1,i) to zero +* + DO 30 L = 1, I - 1 + A( L, I ) = ZERO + 30 CONTINUE + 40 CONTINUE + RETURN +* +* End of DORG2R +* + END + SUBROUTINE DORGQL( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DORGQL generates an M-by-N real matrix Q with orthonormal columns, +* which is defined as the last N columns of a product of K elementary +* reflectors of order M +* +* Q = H(k) . . . H(2) H(1) +* +* as returned by DGEQLF. +* +* Arguments +* ========= +* +* M (input) INTEGER +* The number of rows of the matrix Q. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix Q. M >= N >= 0. +* +* K (input) INTEGER +* The number of elementary reflectors whose product defines the +* matrix Q. N >= K >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the (n-k+i)-th column must contain the vector which +* defines the elementary reflector H(i), for i = 1,2,...,k, as +* returned by DGEQLF in the last k columns of its array +* argument A. +* On exit, the M-by-N matrix Q. +* +* LDA (input) INTEGER +* The first dimension of the array A. LDA >= max(1,M). +* +* TAU (input) DOUBLE PRECISION array, dimension (K) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i), as returned by DGEQLF. +* +* WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +* On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +* +* LWORK (input) INTEGER +* The dimension of the array WORK. LWORK >= max(1,N). +* For optimum performance LWORK >= N*NB, where NB is the +* optimal blocksize. +* +* If LWORK = -1, then a workspace query is assumed; the routine +* only calculates the optimal size of the WORK array, returns +* this value as the first entry of the WORK array, and no error +* message related to LWORK is issued by XERBLA. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument has an illegal value +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY + INTEGER I, IB, IINFO, IWS, J, KK, L, LDWORK, LWKOPT, + $ NB, NBMIN, NX +* .. +* .. External Subroutines .. + EXTERNAL DLARFB, DLARFT, DORG2L, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + LQUERY = ( LWORK.EQ.-1 ) + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + END IF +* + IF( INFO.EQ.0 ) THEN + IF( N.EQ.0 ) THEN + LWKOPT = 1 + ELSE + NB = ILAENV( 1, 'DORGQL', ' ', M, N, K, -1 ) + LWKOPT = N*NB + END IF + WORK( 1 ) = LWKOPT +* + IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN + INFO = -8 + END IF + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORGQL', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) THEN + RETURN + END IF +* + NBMIN = 2 + NX = 0 + IWS = N + IF( NB.GT.1 .AND. NB.LT.K ) THEN +* +* Determine when to cross over from blocked to unblocked code. +* + NX = MAX( 0, ILAENV( 3, 'DORGQL', ' ', M, N, K, -1 ) ) + IF( NX.LT.K ) THEN +* +* Determine if workspace is large enough for blocked code. +* + LDWORK = N + IWS = LDWORK*NB + IF( LWORK.LT.IWS ) THEN +* +* Not enough workspace to use optimal NB: reduce NB and +* determine the minimum value of NB. +* + NB = LWORK / LDWORK + NBMIN = MAX( 2, ILAENV( 2, 'DORGQL', ' ', M, N, K, -1 ) ) + END IF + END IF + END IF +* + IF( NB.GE.NBMIN .AND. NB.LT.K .AND. NX.LT.K ) THEN +* +* Use blocked code after the first block. +* The last kk columns are handled by the block method. +* + KK = MIN( K, ( ( K-NX+NB-1 ) / NB )*NB ) +* +* Set A(m-kk+1:m,1:n-kk) to zero. +* + DO 20 J = 1, N - KK + DO 10 I = M - KK + 1, M + A( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + KK = 0 + END IF +* +* Use unblocked code for the first or only block. +* + CALL DORG2L( M-KK, N-KK, K-KK, A, LDA, TAU, WORK, IINFO ) +* + IF( KK.GT.0 ) THEN +* +* Use blocked code +* + DO 50 I = K - KK + 1, K, NB + IB = MIN( NB, K-I+1 ) + IF( N-K+I.GT.1 ) THEN +* +* Form the triangular factor of the block reflector +* H = H(i+ib-1) . . . H(i+1) H(i) +* + CALL DLARFT( 'Backward', 'Columnwise', M-K+I+IB-1, IB, + $ A( 1, N-K+I ), LDA, TAU( I ), WORK, LDWORK ) +* +* Apply H to A(1:m-k+i+ib-1,1:n-k+i-1) from the left +* + CALL DLARFB( 'Left', 'No transpose', 'Backward', + $ 'Columnwise', M-K+I+IB-1, N-K+I-1, IB, + $ A( 1, N-K+I ), LDA, WORK, LDWORK, A, LDA, + $ WORK( IB+1 ), LDWORK ) + END IF +* +* Apply H to rows 1:m-k+i+ib-1 of current block +* + CALL DORG2L( M-K+I+IB-1, IB, IB, A( 1, N-K+I ), LDA, + $ TAU( I ), WORK, IINFO ) +* +* Set rows m-k+i+ib:m of current block to zero +* + DO 40 J = N - K + I, N - K + I + IB - 1 + DO 30 L = M - K + I + IB, M + A( L, J ) = ZERO + 30 CONTINUE + 40 CONTINUE + 50 CONTINUE + END IF +* + WORK( 1 ) = IWS + RETURN +* +* End of DORGQL +* + END + SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + INTEGER INFO, K, LDA, LWORK, M, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DORGQR generates an M-by-N real matrix Q with orthonormal columns, +* which is defined as the first N columns of a product of K elementary +* reflectors of order M +* +* Q = H(1) H(2) . . . H(k) +* +* as returned by DGEQRF. +* +* Arguments +* ========= +* +* M (input) INTEGER +* The number of rows of the matrix Q. M >= 0. +* +* N (input) INTEGER +* The number of columns of the matrix Q. M >= N >= 0. +* +* K (input) INTEGER +* The number of elementary reflectors whose product defines the +* matrix Q. N >= K >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the i-th column must contain the vector which +* defines the elementary reflector H(i), for i = 1,2,...,k, as +* returned by DGEQRF in the first k columns of its array +* argument A. +* On exit, the M-by-N matrix Q. +* +* LDA (input) INTEGER +* The first dimension of the array A. LDA >= max(1,M). +* +* TAU (input) DOUBLE PRECISION array, dimension (K) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i), as returned by DGEQRF. +* +* WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +* On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +* +* LWORK (input) INTEGER +* The dimension of the array WORK. LWORK >= max(1,N). +* For optimum performance LWORK >= N*NB, where NB is the +* optimal blocksize. +* +* If LWORK = -1, then a workspace query is assumed; the routine +* only calculates the optimal size of the WORK array, returns +* this value as the first entry of the WORK array, and no error +* message related to LWORK is issued by XERBLA. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument has an illegal value +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY + INTEGER I, IB, IINFO, IWS, J, KI, KK, L, LDWORK, + $ LWKOPT, NB, NBMIN, NX +* .. +* .. External Subroutines .. + EXTERNAL DLARFB, DLARFT, DORG2R, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. External Functions .. + INTEGER ILAENV + EXTERNAL ILAENV +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + NB = ILAENV( 1, 'DORGQR', ' ', M, N, K, -1 ) + LWKOPT = MAX( 1, N )*NB + WORK( 1 ) = LWKOPT + LQUERY = ( LWORK.EQ.-1 ) + IF( M.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 .OR. N.GT.M ) THEN + INFO = -2 + ELSE IF( K.LT.0 .OR. K.GT.N ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, M ) ) THEN + INFO = -5 + ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN + INFO = -8 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORGQR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + NBMIN = 2 + NX = 0 + IWS = N + IF( NB.GT.1 .AND. NB.LT.K ) THEN +* +* Determine when to cross over from blocked to unblocked code. +* + NX = MAX( 0, ILAENV( 3, 'DORGQR', ' ', M, N, K, -1 ) ) + IF( NX.LT.K ) THEN +* +* Determine if workspace is large enough for blocked code. +* + LDWORK = N + IWS = LDWORK*NB + IF( LWORK.LT.IWS ) THEN +* +* Not enough workspace to use optimal NB: reduce NB and +* determine the minimum value of NB. +* + NB = LWORK / LDWORK + NBMIN = MAX( 2, ILAENV( 2, 'DORGQR', ' ', M, N, K, -1 ) ) + END IF + END IF + END IF +* + IF( NB.GE.NBMIN .AND. NB.LT.K .AND. NX.LT.K ) THEN +* +* Use blocked code after the last block. +* The first kk columns are handled by the block method. +* + KI = ( ( K-NX-1 ) / NB )*NB + KK = MIN( K, KI+NB ) +* +* Set A(1:kk,kk+1:n) to zero. +* + DO 20 J = KK + 1, N + DO 10 I = 1, KK + A( I, J ) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + KK = 0 + END IF +* +* Use unblocked code for the last or only block. +* + IF( KK.LT.N ) + $ CALL DORG2R( M-KK, N-KK, K-KK, A( KK+1, KK+1 ), LDA, + $ TAU( KK+1 ), WORK, IINFO ) +* + IF( KK.GT.0 ) THEN +* +* Use blocked code +* + DO 50 I = KI + 1, 1, -NB + IB = MIN( NB, K-I+1 ) + IF( I+IB.LE.N ) THEN +* +* Form the triangular factor of the block reflector +* H = H(i) H(i+1) . . . H(i+ib-1) +* + CALL DLARFT( 'Forward', 'Columnwise', M-I+1, IB, + $ A( I, I ), LDA, TAU( I ), WORK, LDWORK ) +* +* Apply H to A(i:m,i+ib:n) from the left +* + CALL DLARFB( 'Left', 'No transpose', 'Forward', + $ 'Columnwise', M-I+1, N-I-IB+1, IB, + $ A( I, I ), LDA, WORK, LDWORK, A( I, I+IB ), + $ LDA, WORK( IB+1 ), LDWORK ) + END IF +* +* Apply H to rows i:m of current block +* + CALL DORG2R( M-I+1, IB, IB, A( I, I ), LDA, TAU( I ), WORK, + $ IINFO ) +* +* Set rows 1:i-1 of current block to zero +* + DO 40 J = I, I + IB - 1 + DO 30 L = 1, I - 1 + A( L, J ) = ZERO + 30 CONTINUE + 40 CONTINUE + 50 CONTINUE + END IF +* + WORK( 1 ) = IWS + RETURN +* +* End of DORGQR +* + END + SUBROUTINE DORGTR( UPLO, N, A, LDA, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DORGTR generates a real orthogonal matrix Q which is defined as the +* product of n-1 elementary reflectors of order N, as returned by +* DSYTRD: +* +* if UPLO = 'U', Q = H(n-1) . . . H(2) H(1), +* +* if UPLO = 'L', Q = H(1) H(2) . . . H(n-1). +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* = 'U': Upper triangle of A contains elementary reflectors +* from DSYTRD; +* = 'L': Lower triangle of A contains elementary reflectors +* from DSYTRD. +* +* N (input) INTEGER +* The order of the matrix Q. N >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the vectors which define the elementary reflectors, +* as returned by DSYTRD. +* On exit, the N-by-N orthogonal matrix Q. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,N). +* +* TAU (input) DOUBLE PRECISION array, dimension (N-1) +* TAU(i) must contain the scalar factor of the elementary +* reflector H(i), as returned by DSYTRD. +* +* WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +* On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +* +* LWORK (input) INTEGER +* The dimension of the array WORK. LWORK >= max(1,N-1). +* For optimum performance LWORK >= (N-1)*NB, where NB is +* the optimal blocksize. +* +* If LWORK = -1, then a workspace query is assumed; the routine +* only calculates the optimal size of the WORK array, returns +* this value as the first entry of the WORK array, and no error +* message related to LWORK is issued by XERBLA. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY, UPPER + INTEGER I, IINFO, J, LWKOPT, NB +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + EXTERNAL LSAME, ILAENV +* .. +* .. External Subroutines .. + EXTERNAL DORGQL, DORGQR, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Executable Statements .. +* +* Test the input arguments +* + INFO = 0 + LQUERY = ( LWORK.EQ.-1 ) + UPPER = LSAME( UPLO, 'U' ) + IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -4 + ELSE IF( LWORK.LT.MAX( 1, N-1 ) .AND. .NOT.LQUERY ) THEN + INFO = -7 + END IF +* + IF( INFO.EQ.0 ) THEN + IF( UPPER ) THEN + NB = ILAENV( 1, 'DORGQL', ' ', N-1, N-1, N-1, -1 ) + ELSE + NB = ILAENV( 1, 'DORGQR', ' ', N-1, N-1, N-1, -1 ) + END IF + LWKOPT = MAX( 1, N-1 )*NB + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DORGTR', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + IF( UPPER ) THEN +* +* Q was determined by a call to DSYTRD with UPLO = 'U' +* +* Shift the vectors which define the elementary reflectors one +* column to the left, and set the last row and column of Q to +* those of the unit matrix +* + DO 20 J = 1, N - 1 + DO 10 I = 1, J - 1 + A( I, J ) = A( I, J+1 ) + 10 CONTINUE + A( N, J ) = ZERO + 20 CONTINUE + DO 30 I = 1, N - 1 + A( I, N ) = ZERO + 30 CONTINUE + A( N, N ) = ONE +* +* Generate Q(1:n-1,1:n-1) +* + CALL DORGQL( N-1, N-1, N-1, A, LDA, TAU, WORK, LWORK, IINFO ) +* + ELSE +* +* Q was determined by a call to DSYTRD with UPLO = 'L'. +* +* Shift the vectors which define the elementary reflectors one +* column to the right, and set the first row and column of Q to +* those of the unit matrix +* + DO 50 J = N, 2, -1 + A( 1, J ) = ZERO + DO 40 I = J + 1, N + A( I, J ) = A( I, J-1 ) + 40 CONTINUE + 50 CONTINUE + A( 1, 1 ) = ONE + DO 60 I = 2, N + A( I, 1 ) = ZERO + 60 CONTINUE + IF( N.GT.1 ) THEN +* +* Generate Q(2:n,2:n) +* + CALL DORGQR( N-1, N-1, N-1, A( 2, 2 ), LDA, TAU, WORK, + $ LWORK, IINFO ) + END IF + END IF + WORK( 1 ) = LWKOPT + RETURN +* +* End of DORGTR +* + END + SUBROUTINE DSTEQR( COMPZ, N, D, E, Z, LDZ, WORK, INFO ) +* +* -- LAPACK routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER COMPZ + INTEGER INFO, LDZ, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ), WORK( * ), Z( LDZ, * ) +* .. +* +* Purpose +* ======= +* +* DSTEQR computes all eigenvalues and, optionally, eigenvectors of a +* symmetric tridiagonal matrix using the implicit QL or QR method. +* The eigenvectors of a full or band symmetric matrix can also be found +* if DSYTRD or DSPTRD or DSBTRD has been used to reduce this matrix to +* tridiagonal form. +* +* Arguments +* ========= +* +* COMPZ (input) CHARACTER*1 +* = 'N': Compute eigenvalues only. +* = 'V': Compute eigenvalues and eigenvectors of the original +* symmetric matrix. On entry, Z must contain the +* orthogonal matrix used to reduce the original matrix +* to tridiagonal form. +* = 'I': Compute eigenvalues and eigenvectors of the +* tridiagonal matrix. Z is initialized to the identity +* matrix. +* +* N (input) INTEGER +* The order of the matrix. N >= 0. +* +* D (input/output) DOUBLE PRECISION array, dimension (N) +* On entry, the diagonal elements of the tridiagonal matrix. +* On exit, if INFO = 0, the eigenvalues in ascending order. +* +* E (input/output) DOUBLE PRECISION array, dimension (N-1) +* On entry, the (n-1) subdiagonal elements of the tridiagonal +* matrix. +* On exit, E has been destroyed. +* +* Z (input/output) DOUBLE PRECISION array, dimension (LDZ, N) +* On entry, if COMPZ = 'V', then Z contains the orthogonal +* matrix used in the reduction to tridiagonal form. +* On exit, if INFO = 0, then if COMPZ = 'V', Z contains the +* orthonormal eigenvectors of the original symmetric matrix, +* and if COMPZ = 'I', Z contains the orthonormal eigenvectors +* of the symmetric tridiagonal matrix. +* If COMPZ = 'N', then Z is not referenced. +* +* LDZ (input) INTEGER +* The leading dimension of the array Z. LDZ >= 1, and if +* eigenvectors are desired, then LDZ >= max(1,N). +* +* WORK (workspace) DOUBLE PRECISION array, dimension (max(1,2*N-2)) +* If COMPZ = 'N', then WORK is not referenced. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* > 0: the algorithm has failed to find all the eigenvalues in +* a total of 30*N iterations; if INFO = i, then i +* elements of E have not converged to zero; on exit, D +* and E contain the elements of a symmetric tridiagonal +* matrix which is orthogonally similar to the original +* matrix. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE, TWO, THREE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0, + $ THREE = 3.0D0 ) + INTEGER MAXIT + PARAMETER ( MAXIT = 30 ) +* .. +* .. Local Scalars .. + INTEGER I, ICOMPZ, II, ISCALE, J, JTOT, K, L, L1, LEND, + $ LENDM1, LENDP1, LENDSV, LM1, LSV, M, MM, MM1, + $ NM1, NMAXIT + DOUBLE PRECISION ANORM, B, C, EPS, EPS2, F, G, P, R, RT1, RT2, + $ S, SAFMAX, SAFMIN, SSFMAX, SSFMIN, TST +* .. +* .. External Functions .. + LOGICAL LSAME + DOUBLE PRECISION DLAMCH, DLANST, DLAPY2 + EXTERNAL LSAME, DLAMCH, DLANST, DLAPY2 +* .. +* .. External Subroutines .. + EXTERNAL DLAE2, DLAEV2, DLARTG, DLASCL, DLASET, DLASR, + $ DLASRT, DSWAP, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, MAX, SIGN, SQRT +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 +* + IF( LSAME( COMPZ, 'N' ) ) THEN + ICOMPZ = 0 + ELSE IF( LSAME( COMPZ, 'V' ) ) THEN + ICOMPZ = 1 + ELSE IF( LSAME( COMPZ, 'I' ) ) THEN + ICOMPZ = 2 + ELSE + ICOMPZ = -1 + END IF + IF( ICOMPZ.LT.0 ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( ( LDZ.LT.1 ) .OR. ( ICOMPZ.GT.0 .AND. LDZ.LT.MAX( 1, + $ N ) ) ) THEN + INFO = -6 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DSTEQR', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) + $ RETURN +* + IF( N.EQ.1 ) THEN + IF( ICOMPZ.EQ.2 ) + $ Z( 1, 1 ) = ONE + RETURN + END IF +* +* Determine the unit roundoff and over/underflow thresholds. +* + EPS = DLAMCH( 'E' ) + EPS2 = EPS**2 + SAFMIN = DLAMCH( 'S' ) + SAFMAX = ONE / SAFMIN + SSFMAX = SQRT( SAFMAX ) / THREE + SSFMIN = SQRT( SAFMIN ) / EPS2 +* +* Compute the eigenvalues and eigenvectors of the tridiagonal +* matrix. +* + IF( ICOMPZ.EQ.2 ) + $ CALL DLASET( 'Full', N, N, ZERO, ONE, Z, LDZ ) +* + NMAXIT = N*MAXIT + JTOT = 0 +* +* Determine where the matrix splits and choose QL or QR iteration +* for each block, according to whether top or bottom diagonal +* element is smaller. +* + L1 = 1 + NM1 = N - 1 +* + 10 CONTINUE + IF( L1.GT.N ) + $ GO TO 160 + IF( L1.GT.1 ) + $ E( L1-1 ) = ZERO + IF( L1.LE.NM1 ) THEN + DO 20 M = L1, NM1 + TST = ABS( E( M ) ) + IF( TST.EQ.ZERO ) + $ GO TO 30 + IF( TST.LE.( SQRT( ABS( D( M ) ) )*SQRT( ABS( D( M+ + $ 1 ) ) ) )*EPS ) THEN + E( M ) = ZERO + GO TO 30 + END IF + 20 CONTINUE + END IF + M = N +* + 30 CONTINUE + L = L1 + LSV = L + LEND = M + LENDSV = LEND + L1 = M + 1 + IF( LEND.EQ.L ) + $ GO TO 10 +* +* Scale submatrix in rows and columns L to LEND +* + ANORM = DLANST( 'M', LEND-L+1, D( L ), E( L ) ) + ISCALE = 0 + IF( ANORM.EQ.ZERO ) + $ GO TO 10 + IF( ANORM.GT.SSFMAX ) THEN + ISCALE = 1 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L, 1, E( L ), N, + $ INFO ) + ELSE IF( ANORM.LT.SSFMIN ) THEN + ISCALE = 2 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L, 1, E( L ), N, + $ INFO ) + END IF +* +* Choose between QL and QR iteration +* + IF( ABS( D( LEND ) ).LT.ABS( D( L ) ) ) THEN + LEND = LSV + L = LENDSV + END IF +* + IF( LEND.GT.L ) THEN +* +* QL Iteration +* +* Look for small subdiagonal element. +* + 40 CONTINUE + IF( L.NE.LEND ) THEN + LENDM1 = LEND - 1 + DO 50 M = L, LENDM1 + TST = ABS( E( M ) )**2 + IF( TST.LE.( EPS2*ABS( D( M ) ) )*ABS( D( M+1 ) )+ + $ SAFMIN )GO TO 60 + 50 CONTINUE + END IF +* + M = LEND +* + 60 CONTINUE + IF( M.LT.LEND ) + $ E( M ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 80 +* +* If remaining matrix is 2-by-2, use DLAE2 or SLAEV2 +* to compute its eigensystem. +* + IF( M.EQ.L+1 ) THEN + IF( ICOMPZ.GT.0 ) THEN + CALL DLAEV2( D( L ), E( L ), D( L+1 ), RT1, RT2, C, S ) + WORK( L ) = C + WORK( N-1+L ) = S + CALL DLASR( 'R', 'V', 'B', N, 2, WORK( L ), + $ WORK( N-1+L ), Z( 1, L ), LDZ ) + ELSE + CALL DLAE2( D( L ), E( L ), D( L+1 ), RT1, RT2 ) + END IF + D( L ) = RT1 + D( L+1 ) = RT2 + E( L ) = ZERO + L = L + 2 + IF( L.LE.LEND ) + $ GO TO 40 + GO TO 140 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 140 + JTOT = JTOT + 1 +* +* Form shift. +* + G = ( D( L+1 )-P ) / ( TWO*E( L ) ) + R = DLAPY2( G, ONE ) + G = D( M ) - P + ( E( L ) / ( G+SIGN( R, G ) ) ) +* + S = ONE + C = ONE + P = ZERO +* +* Inner loop +* + MM1 = M - 1 + DO 70 I = MM1, L, -1 + F = S*E( I ) + B = C*E( I ) + CALL DLARTG( G, F, C, S, R ) + IF( I.NE.M-1 ) + $ E( I+1 ) = R + G = D( I+1 ) - P + R = ( D( I )-G )*S + TWO*C*B + P = S*R + D( I+1 ) = G + P + G = C*R - B +* +* If eigenvectors are desired, then save rotations. +* + IF( ICOMPZ.GT.0 ) THEN + WORK( I ) = C + WORK( N-1+I ) = -S + END IF +* + 70 CONTINUE +* +* If eigenvectors are desired, then apply saved rotations. +* + IF( ICOMPZ.GT.0 ) THEN + MM = M - L + 1 + CALL DLASR( 'R', 'V', 'B', N, MM, WORK( L ), WORK( N-1+L ), + $ Z( 1, L ), LDZ ) + END IF +* + D( L ) = D( L ) - P + E( L ) = G + GO TO 40 +* +* Eigenvalue found. +* + 80 CONTINUE + D( L ) = P +* + L = L + 1 + IF( L.LE.LEND ) + $ GO TO 40 + GO TO 140 +* + ELSE +* +* QR Iteration +* +* Look for small superdiagonal element. +* + 90 CONTINUE + IF( L.NE.LEND ) THEN + LENDP1 = LEND + 1 + DO 100 M = L, LENDP1, -1 + TST = ABS( E( M-1 ) )**2 + IF( TST.LE.( EPS2*ABS( D( M ) ) )*ABS( D( M-1 ) )+ + $ SAFMIN )GO TO 110 + 100 CONTINUE + END IF +* + M = LEND +* + 110 CONTINUE + IF( M.GT.LEND ) + $ E( M-1 ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 130 +* +* If remaining matrix is 2-by-2, use DLAE2 or SLAEV2 +* to compute its eigensystem. +* + IF( M.EQ.L-1 ) THEN + IF( ICOMPZ.GT.0 ) THEN + CALL DLAEV2( D( L-1 ), E( L-1 ), D( L ), RT1, RT2, C, S ) + WORK( M ) = C + WORK( N-1+M ) = S + CALL DLASR( 'R', 'V', 'F', N, 2, WORK( M ), + $ WORK( N-1+M ), Z( 1, L-1 ), LDZ ) + ELSE + CALL DLAE2( D( L-1 ), E( L-1 ), D( L ), RT1, RT2 ) + END IF + D( L-1 ) = RT1 + D( L ) = RT2 + E( L-1 ) = ZERO + L = L - 2 + IF( L.GE.LEND ) + $ GO TO 90 + GO TO 140 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 140 + JTOT = JTOT + 1 +* +* Form shift. +* + G = ( D( L-1 )-P ) / ( TWO*E( L-1 ) ) + R = DLAPY2( G, ONE ) + G = D( M ) - P + ( E( L-1 ) / ( G+SIGN( R, G ) ) ) +* + S = ONE + C = ONE + P = ZERO +* +* Inner loop +* + LM1 = L - 1 + DO 120 I = M, LM1 + F = S*E( I ) + B = C*E( I ) + CALL DLARTG( G, F, C, S, R ) + IF( I.NE.M ) + $ E( I-1 ) = R + G = D( I ) - P + R = ( D( I+1 )-G )*S + TWO*C*B + P = S*R + D( I ) = G + P + G = C*R - B +* +* If eigenvectors are desired, then save rotations. +* + IF( ICOMPZ.GT.0 ) THEN + WORK( I ) = C + WORK( N-1+I ) = S + END IF +* + 120 CONTINUE +* +* If eigenvectors are desired, then apply saved rotations. +* + IF( ICOMPZ.GT.0 ) THEN + MM = L - M + 1 + CALL DLASR( 'R', 'V', 'F', N, MM, WORK( M ), WORK( N-1+M ), + $ Z( 1, M ), LDZ ) + END IF +* + D( L ) = D( L ) - P + E( LM1 ) = G + GO TO 90 +* +* Eigenvalue found. +* + 130 CONTINUE + D( L ) = P +* + L = L - 1 + IF( L.GE.LEND ) + $ GO TO 90 + GO TO 140 +* + END IF +* +* Undo scaling if necessary +* + 140 CONTINUE + IF( ISCALE.EQ.1 ) THEN + CALL DLASCL( 'G', 0, 0, SSFMAX, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) + CALL DLASCL( 'G', 0, 0, SSFMAX, ANORM, LENDSV-LSV, 1, E( LSV ), + $ N, INFO ) + ELSE IF( ISCALE.EQ.2 ) THEN + CALL DLASCL( 'G', 0, 0, SSFMIN, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) + CALL DLASCL( 'G', 0, 0, SSFMIN, ANORM, LENDSV-LSV, 1, E( LSV ), + $ N, INFO ) + END IF +* +* Check for no convergence to an eigenvalue after a total +* of N*MAXIT iterations. +* + IF( JTOT.LT.NMAXIT ) + $ GO TO 10 + DO 150 I = 1, N - 1 + IF( E( I ).NE.ZERO ) + $ INFO = INFO + 1 + 150 CONTINUE + GO TO 190 +* +* Order eigenvalues and eigenvectors. +* + 160 CONTINUE + IF( ICOMPZ.EQ.0 ) THEN +* +* Use Quick Sort +* + CALL DLASRT( 'I', N, D, INFO ) +* + ELSE +* +* Use Selection Sort to minimize swaps of eigenvectors +* + DO 180 II = 2, N + I = II - 1 + K = I + P = D( I ) + DO 170 J = II, N + IF( D( J ).LT.P ) THEN + K = J + P = D( J ) + END IF + 170 CONTINUE + IF( K.NE.I ) THEN + D( K ) = D( I ) + D( I ) = P + CALL DSWAP( N, Z( 1, I ), 1, Z( 1, K ), 1 ) + END IF + 180 CONTINUE + END IF +* + 190 CONTINUE + RETURN +* +* End of DSTEQR +* + END + SUBROUTINE DSTERF( N, D, E, INFO ) +* +* -- LAPACK routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + INTEGER INFO, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION D( * ), E( * ) +* .. +* +* Purpose +* ======= +* +* DSTERF computes all eigenvalues of a symmetric tridiagonal matrix +* using the Pal-Walker-Kahan variant of the QL or QR algorithm. +* +* Arguments +* ========= +* +* N (input) INTEGER +* The order of the matrix. N >= 0. +* +* D (input/output) DOUBLE PRECISION array, dimension (N) +* On entry, the n diagonal elements of the tridiagonal matrix. +* On exit, if INFO = 0, the eigenvalues in ascending order. +* +* E (input/output) DOUBLE PRECISION array, dimension (N-1) +* On entry, the (n-1) subdiagonal elements of the tridiagonal +* matrix. +* On exit, E has been destroyed. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* > 0: the algorithm failed to find all of the eigenvalues in +* a total of 30*N iterations; if INFO = i, then i +* elements of E have not converged to zero. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE, TWO, THREE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0, TWO = 2.0D0, + $ THREE = 3.0D0 ) + INTEGER MAXIT + PARAMETER ( MAXIT = 30 ) +* .. +* .. Local Scalars .. + INTEGER I, ISCALE, JTOT, L, L1, LEND, LENDSV, LSV, M, + $ NMAXIT + DOUBLE PRECISION ALPHA, ANORM, BB, C, EPS, EPS2, GAMMA, OLDC, + $ OLDGAM, P, R, RT1, RT2, RTE, S, SAFMAX, SAFMIN, + $ SIGMA, SSFMAX, SSFMIN, RMAX +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLANST, DLAPY2 + EXTERNAL DLAMCH, DLANST, DLAPY2 +* .. +* .. External Subroutines .. + EXTERNAL DLAE2, DLASCL, DLASRT, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, SIGN, SQRT +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + INFO = 0 +* +* Quick return if possible +* + IF( N.LT.0 ) THEN + INFO = -1 + CALL XERBLA( 'DSTERF', -INFO ) + RETURN + END IF + IF( N.LE.1 ) + $ RETURN +* +* Determine the unit roundoff for this environment. +* + EPS = DLAMCH( 'E' ) + EPS2 = EPS**2 + SAFMIN = DLAMCH( 'S' ) + SAFMAX = ONE / SAFMIN + SSFMAX = SQRT( SAFMAX ) / THREE + SSFMIN = SQRT( SAFMIN ) / EPS2 + RMAX = DLAMCH( 'O' ) +* +* Compute the eigenvalues of the tridiagonal matrix. +* + NMAXIT = N*MAXIT + SIGMA = ZERO + JTOT = 0 +* +* Determine where the matrix splits and choose QL or QR iteration +* for each block, according to whether top or bottom diagonal +* element is smaller. +* + L1 = 1 +* + 10 CONTINUE + IF( L1.GT.N ) + $ GO TO 170 + IF( L1.GT.1 ) + $ E( L1-1 ) = ZERO + DO 20 M = L1, N - 1 + IF( ABS( E( M ) ).LE.( SQRT( ABS( D( M ) ) )*SQRT( ABS( D( M+ + $ 1 ) ) ) )*EPS ) THEN + E( M ) = ZERO + GO TO 30 + END IF + 20 CONTINUE + M = N +* + 30 CONTINUE + L = L1 + LSV = L + LEND = M + LENDSV = LEND + L1 = M + 1 + IF( LEND.EQ.L ) + $ GO TO 10 +* +* Scale submatrix in rows and columns L to LEND +* + ANORM = DLANST( 'M', LEND-L+1, D( L ), E( L ) ) + ISCALE = 0 + IF( ANORM.EQ.ZERO ) + $ GO TO 10 + IF( (ANORM.GT.SSFMAX) ) THEN + ISCALE = 1 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L, 1, E( L ), N, + $ INFO ) + ELSE IF( ANORM.LT.SSFMIN ) THEN + ISCALE = 2 + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L+1, 1, D( L ), N, + $ INFO ) + CALL DLASCL( 'G', 0, 0, ANORM, SSFMIN, LEND-L, 1, E( L ), N, + $ INFO ) + END IF +* + DO 40 I = L, LEND - 1 + E( I ) = E( I )**2 + 40 CONTINUE +* +* Choose between QL and QR iteration +* + IF( ABS( D( LEND ) ).LT.ABS( D( L ) ) ) THEN + LEND = LSV + L = LENDSV + END IF +* + IF( LEND.GE.L ) THEN +* +* QL Iteration +* +* Look for small subdiagonal element. +* + 50 CONTINUE + IF( L.NE.LEND ) THEN + DO 60 M = L, LEND - 1 + IF( ABS( E( M ) ).LE.EPS2*ABS( D( M )*D( M+1 ) ) ) + $ GO TO 70 + 60 CONTINUE + END IF + M = LEND +* + 70 CONTINUE + IF( M.LT.LEND ) + $ E( M ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 90 +* +* If remaining matrix is 2 by 2, use DLAE2 to compute its +* eigenvalues. +* + IF( M.EQ.L+1 ) THEN + RTE = SQRT( E( L ) ) + CALL DLAE2( D( L ), RTE, D( L+1 ), RT1, RT2 ) + D( L ) = RT1 + D( L+1 ) = RT2 + E( L ) = ZERO + L = L + 2 + IF( L.LE.LEND ) + $ GO TO 50 + GO TO 150 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 150 + JTOT = JTOT + 1 +* +* Form shift. +* + RTE = SQRT( E( L ) ) + SIGMA = ( D( L+1 )-P ) / ( TWO*RTE ) + R = DLAPY2( SIGMA, ONE ) + SIGMA = P - ( RTE / ( SIGMA+SIGN( R, SIGMA ) ) ) +* + C = ONE + S = ZERO + GAMMA = D( M ) - SIGMA + P = GAMMA*GAMMA +* +* Inner loop +* + DO 80 I = M - 1, L, -1 + BB = E( I ) + R = P + BB + IF( I.NE.M-1 ) + $ E( I+1 ) = S*R + OLDC = C + C = P / R + S = BB / R + OLDGAM = GAMMA + ALPHA = D( I ) + GAMMA = C*( ALPHA-SIGMA ) - S*OLDGAM + D( I+1 ) = OLDGAM + ( ALPHA-GAMMA ) + IF( C.NE.ZERO ) THEN + P = ( GAMMA*GAMMA ) / C + ELSE + P = OLDC*BB + END IF + 80 CONTINUE +* + E( L ) = S*P + D( L ) = SIGMA + GAMMA + GO TO 50 +* +* Eigenvalue found. +* + 90 CONTINUE + D( L ) = P +* + L = L + 1 + IF( L.LE.LEND ) + $ GO TO 50 + GO TO 150 +* + ELSE +* +* QR Iteration +* +* Look for small superdiagonal element. +* + 100 CONTINUE + DO 110 M = L, LEND + 1, -1 + IF( ABS( E( M-1 ) ).LE.EPS2*ABS( D( M )*D( M-1 ) ) ) + $ GO TO 120 + 110 CONTINUE + M = LEND +* + 120 CONTINUE + IF( M.GT.LEND ) + $ E( M-1 ) = ZERO + P = D( L ) + IF( M.EQ.L ) + $ GO TO 140 +* +* If remaining matrix is 2 by 2, use DLAE2 to compute its +* eigenvalues. +* + IF( M.EQ.L-1 ) THEN + RTE = SQRT( E( L-1 ) ) + CALL DLAE2( D( L ), RTE, D( L-1 ), RT1, RT2 ) + D( L ) = RT1 + D( L-1 ) = RT2 + E( L-1 ) = ZERO + L = L - 2 + IF( L.GE.LEND ) + $ GO TO 100 + GO TO 150 + END IF +* + IF( JTOT.EQ.NMAXIT ) + $ GO TO 150 + JTOT = JTOT + 1 +* +* Form shift. +* + RTE = SQRT( E( L-1 ) ) + SIGMA = ( D( L-1 )-P ) / ( TWO*RTE ) + R = DLAPY2( SIGMA, ONE ) + SIGMA = P - ( RTE / ( SIGMA+SIGN( R, SIGMA ) ) ) +* + C = ONE + S = ZERO + GAMMA = D( M ) - SIGMA + P = GAMMA*GAMMA +* +* Inner loop +* + DO 130 I = M, L - 1 + BB = E( I ) + R = P + BB + IF( I.NE.M ) + $ E( I-1 ) = S*R + OLDC = C + C = P / R + S = BB / R + OLDGAM = GAMMA + ALPHA = D( I+1 ) + GAMMA = C*( ALPHA-SIGMA ) - S*OLDGAM + D( I ) = OLDGAM + ( ALPHA-GAMMA ) + IF( C.NE.ZERO ) THEN + P = ( GAMMA*GAMMA ) / C + ELSE + P = OLDC*BB + END IF + 130 CONTINUE +* + E( L-1 ) = S*P + D( L ) = SIGMA + GAMMA + GO TO 100 +* +* Eigenvalue found. +* + 140 CONTINUE + D( L ) = P +* + L = L - 1 + IF( L.GE.LEND ) + $ GO TO 100 + GO TO 150 +* + END IF +* +* Undo scaling if necessary +* + 150 CONTINUE + IF( ISCALE.EQ.1 ) + $ CALL DLASCL( 'G', 0, 0, SSFMAX, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) + IF( ISCALE.EQ.2 ) + $ CALL DLASCL( 'G', 0, 0, SSFMIN, ANORM, LENDSV-LSV+1, 1, + $ D( LSV ), N, INFO ) +* +* Check for no convergence to an eigenvalue after a total +* of N*MAXIT iterations. +* + IF( JTOT.LT.NMAXIT ) + $ GO TO 10 + DO 160 I = 1, N - 1 + IF( E( I ).NE.ZERO ) + $ INFO = INFO + 1 + 160 CONTINUE + GO TO 180 +* +* Sort eigenvalues in increasing order. +* + 170 CONTINUE + CALL DLASRT( 'I', N, D, INFO ) +* + 180 CONTINUE + RETURN +* +* End of DSTERF +* + END + SUBROUTINE DSYEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO ) +* +* -- LAPACK driver routine (version 3.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2006 +* +* .. Scalar Arguments .. + CHARACTER JOBZ, UPLO + INTEGER INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), W( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DSYEV computes all eigenvalues and, optionally, eigenvectors of a +* real symmetric matrix A. +* +* Arguments +* ========= +* +* JOBZ (input) CHARACTER*1 +* = 'N': Compute eigenvalues only; +* = 'V': Compute eigenvalues and eigenvectors. +* +* UPLO (input) CHARACTER*1 +* = 'U': Upper triangle of A is stored; +* = 'L': Lower triangle of A is stored. +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA, N) +* On entry, the symmetric matrix A. If UPLO = 'U', the +* leading N-by-N upper triangular part of A contains the +* upper triangular part of the matrix A. If UPLO = 'L', +* the leading N-by-N lower triangular part of A contains +* the lower triangular part of the matrix A. +* On exit, if JOBZ = 'V', then if INFO = 0, A contains the +* orthonormal eigenvectors of the matrix A. +* If JOBZ = 'N', then on exit the lower triangle (if UPLO='L') +* or the upper triangle (if UPLO='U') of A, including the +* diagonal, is destroyed. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,N). +* +* W (output) DOUBLE PRECISION array, dimension (N) +* If INFO = 0, the eigenvalues in ascending order. +* +* WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +* On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +* +* LWORK (input) INTEGER +* The length of the array WORK. LWORK >= max(1,3*N-1). +* For optimal efficiency, LWORK >= (NB+2)*N, +* where NB is the blocksize for DSYTRD returned by ILAENV. +* +* If LWORK = -1, then a workspace query is assumed; the routine +* only calculates the optimal size of the WORK array, returns +* this value as the first entry of the WORK array, and no error +* message related to LWORK is issued by XERBLA. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* > 0: if INFO = i, the algorithm failed to converge; i +* off-diagonal elements of an intermediate tridiagonal +* form did not converge to zero. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO, ONE + PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL LOWER, LQUERY, WANTZ + INTEGER IINFO, IMAX, INDE, INDTAU, INDWRK, ISCALE, + $ LLWORK, LWKOPT, NB + DOUBLE PRECISION ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, + $ SMLNUM +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + DOUBLE PRECISION DLAMCH, DLANSY + EXTERNAL LSAME, ILAENV, DLAMCH, DLANSY +* .. +* .. External Subroutines .. + EXTERNAL DLASCL, DORGTR, DSCAL, DSTEQR, DSTERF, DSYTRD, + $ XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, SQRT +* .. +* .. Executable Statements .. +* +* Test the input parameters. +* + WANTZ = LSAME( JOBZ, 'V' ) + LOWER = LSAME( UPLO, 'L' ) + LQUERY = ( LWORK.EQ.-1 ) +* + INFO = 0 + IF( .NOT.( WANTZ .OR. LSAME( JOBZ, 'N' ) ) ) THEN + INFO = -1 + ELSE IF( .NOT.( LOWER .OR. LSAME( UPLO, 'U' ) ) ) THEN + INFO = -2 + ELSE IF( N.LT.0 ) THEN + INFO = -3 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -5 + END IF +* + IF( INFO.EQ.0 ) THEN + NB = ILAENV( 1, 'DSYTRD', UPLO, N, -1, -1, -1 ) + LWKOPT = MAX( 1, ( NB+2 )*N ) + WORK( 1 ) = LWKOPT +* + IF( LWORK.LT.MAX( 1, 3*N-1 ) .AND. .NOT.LQUERY ) + $ INFO = -8 + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DSYEV ', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) THEN + RETURN + END IF +* + IF( N.EQ.1 ) THEN + W( 1 ) = A( 1, 1 ) + WORK( 1 ) = 2 + IF( WANTZ ) + $ A( 1, 1 ) = ONE + RETURN + END IF +* +* Get machine constants. +* + SAFMIN = DLAMCH( 'Safe minimum' ) + EPS = DLAMCH( 'Precision' ) + SMLNUM = SAFMIN / EPS + BIGNUM = ONE / SMLNUM + RMIN = SQRT( SMLNUM ) + RMAX = SQRT( BIGNUM ) +* +* Scale matrix to allowable range, if necessary. +* + ANRM = DLANSY( 'M', UPLO, N, A, LDA, WORK ) + ISCALE = 0 + IF( ANRM.GT.ZERO .AND. ANRM.LT.RMIN ) THEN + ISCALE = 1 + SIGMA = RMIN / ANRM + ELSE IF( ANRM.GT.RMAX ) THEN + ISCALE = 1 + SIGMA = RMAX / ANRM + END IF + IF( ISCALE.EQ.1 ) + $ CALL DLASCL( UPLO, 0, 0, ONE, SIGMA, N, N, A, LDA, INFO ) +* +* Call DSYTRD to reduce symmetric matrix to tridiagonal form. +* + INDE = 1 + INDTAU = INDE + N + INDWRK = INDTAU + N + LLWORK = LWORK - INDWRK + 1 + CALL DSYTRD( UPLO, N, A, LDA, W, WORK( INDE ), WORK( INDTAU ), + $ WORK( INDWRK ), LLWORK, IINFO ) +* +* For eigenvalues only, call DSTERF. For eigenvectors, first call +* DORGTR to generate the orthogonal matrix, then call DSTEQR. +* + IF( .NOT.WANTZ ) THEN + CALL DSTERF( N, W, WORK( INDE ), INFO ) + ELSE + CALL DORGTR( UPLO, N, A, LDA, WORK( INDTAU ), WORK( INDWRK ), + $ LLWORK, IINFO ) + CALL DSTEQR( JOBZ, N, W, WORK( INDE ), A, LDA, WORK( INDTAU ), + $ INFO ) + END IF +* +* If matrix was scaled, then rescale eigenvalues appropriately. +* + IF( ISCALE.EQ.1 ) THEN + IF( INFO.EQ.0 ) THEN + IMAX = N + ELSE + IMAX = INFO - 1 + END IF + CALL DSCAL( IMAX, ONE / SIGMA, W, 1 ) + END IF +* +* Set WORK(1) to optimal workspace size. +* + WORK( 1 ) = LWKOPT +* + RETURN +* +* End of DSYEV +* + END + SUBROUTINE DSYTD2( UPLO, N, A, LDA, D, E, TAU, INFO ) +* +* -- LAPACK routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER INFO, LDA, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAU( * ) +* .. +* +* Purpose +* ======= +* +* DSYTD2 reduces a real symmetric matrix A to symmetric tridiagonal +* form T by an orthogonal similarity transformation: Q**T * A * Q = T. +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* Specifies whether the upper or lower triangular part of the +* symmetric matrix A is stored: +* = 'U': Upper triangular +* = 'L': Lower triangular +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the symmetric matrix A. If UPLO = 'U', the leading +* n-by-n upper triangular part of A contains the upper +* triangular part of the matrix A, and the strictly lower +* triangular part of A is not referenced. If UPLO = 'L', the +* leading n-by-n lower triangular part of A contains the lower +* triangular part of the matrix A, and the strictly upper +* triangular part of A is not referenced. +* On exit, if UPLO = 'U', the diagonal and first superdiagonal +* of A are overwritten by the corresponding elements of the +* tridiagonal matrix T, and the elements above the first +* superdiagonal, with the array TAU, represent the orthogonal +* matrix Q as a product of elementary reflectors; if UPLO +* = 'L', the diagonal and first subdiagonal of A are over- +* written by the corresponding elements of the tridiagonal +* matrix T, and the elements below the first subdiagonal, with +* the array TAU, represent the orthogonal matrix Q as a product +* of elementary reflectors. See Further Details. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,N). +* +* D (output) DOUBLE PRECISION array, dimension (N) +* The diagonal elements of the tridiagonal matrix T: +* D(i) = A(i,i). +* +* E (output) DOUBLE PRECISION array, dimension (N-1) +* The off-diagonal elements of the tridiagonal matrix T: +* E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'. +* +* TAU (output) DOUBLE PRECISION array, dimension (N-1) +* The scalar factors of the elementary reflectors (see Further +* Details). +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value. +* +* Further Details +* =============== +* +* If UPLO = 'U', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(n-1) . . . H(2) H(1). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(i+1:n) = 0 and v(i) = 1; v(1:i-1) is stored on exit in +* A(1:i-1,i+1), and tau in TAU(i). +* +* If UPLO = 'L', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(1) H(2) . . . H(n-1). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), +* and tau in TAU(i). +* +* The contents of A on exit are illustrated by the following examples +* with n = 5: +* +* if UPLO = 'U': if UPLO = 'L': +* +* ( d e v2 v3 v4 ) ( d ) +* ( d e v3 v4 ) ( e d ) +* ( d e v4 ) ( v1 e d ) +* ( d e ) ( v1 v2 e d ) +* ( d ) ( v1 v2 v3 e d ) +* +* where d and e denote diagonal and off-diagonal elements of T, and vi +* denotes an element of the vector defining H(i). +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO, HALF + PARAMETER ( ONE = 1.0D0, ZERO = 0.0D0, + $ HALF = 1.0D0 / 2.0D0 ) +* .. +* .. Local Scalars .. + LOGICAL UPPER + INTEGER I + DOUBLE PRECISION ALPHA, TAUI +* .. +* .. External Subroutines .. + EXTERNAL DAXPY, DLARFG, DSYMV, DSYR2, XERBLA +* .. +* .. External Functions .. + LOGICAL LSAME + DOUBLE PRECISION DDOT + EXTERNAL LSAME, DDOT +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX, MIN +* .. +* .. Executable Statements .. +* +* Test the input parameters +* + INFO = 0 + UPPER = LSAME( UPLO, 'U' ) + IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -4 + END IF + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DSYTD2', -INFO ) + RETURN + END IF +* +* Quick return if possible +* + IF( N.LE.0 ) + $ RETURN +* + IF( UPPER ) THEN +* +* Reduce the upper triangle of A +* + DO 10 I = N - 1, 1, -1 +* +* Generate elementary reflector H(i) = I - tau * v * v**T +* to annihilate A(1:i-1,i+1) +* + CALL DLARFG( I, A( I, I+1 ), A( 1, I+1 ), 1, TAUI ) + E( I ) = A( I, I+1 ) +* + IF( TAUI.NE.ZERO ) THEN +* +* Apply H(i) from both sides to A(1:i,1:i) +* + A( I, I+1 ) = ONE +* +* Compute x := tau * A * v storing x in TAU(1:i) +* + CALL DSYMV( UPLO, I, TAUI, A, LDA, A( 1, I+1 ), 1, ZERO, + $ TAU, 1 ) +* +* Compute w := x - 1/2 * tau * (x**T * v) * v +* + ALPHA = -HALF*TAUI*DDOT( I, TAU, 1, A( 1, I+1 ), 1 ) + CALL DAXPY( I, ALPHA, A( 1, I+1 ), 1, TAU, 1 ) +* +* Apply the transformation as a rank-2 update: +* A := A - v * w**T - w * v**T +* + CALL DSYR2( UPLO, I, -ONE, A( 1, I+1 ), 1, TAU, 1, A, + $ LDA ) +* + A( I, I+1 ) = E( I ) + END IF + D( I+1 ) = A( I+1, I+1 ) + TAU( I ) = TAUI + 10 CONTINUE + D( 1 ) = A( 1, 1 ) + ELSE +* +* Reduce the lower triangle of A +* + DO 20 I = 1, N - 1 +* +* Generate elementary reflector H(i) = I - tau * v * v**T +* to annihilate A(i+2:n,i) +* + CALL DLARFG( N-I, A( I+1, I ), A( MIN( I+2, N ), I ), 1, + $ TAUI ) + E( I ) = A( I+1, I ) +* + IF( TAUI.NE.ZERO ) THEN +* +* Apply H(i) from both sides to A(i+1:n,i+1:n) +* + A( I+1, I ) = ONE +* +* Compute x := tau * A * v storing y in TAU(i:n-1) +* + CALL DSYMV( UPLO, N-I, TAUI, A( I+1, I+1 ), LDA, + $ A( I+1, I ), 1, ZERO, TAU( I ), 1 ) +* +* Compute w := x - 1/2 * tau * (x**T * v) * v +* + ALPHA = -HALF*TAUI*DDOT( N-I, TAU( I ), 1, A( I+1, I ), + $ 1 ) + CALL DAXPY( N-I, ALPHA, A( I+1, I ), 1, TAU( I ), 1 ) +* +* Apply the transformation as a rank-2 update: +* A := A - v * w**T - w * v**T +* + CALL DSYR2( UPLO, N-I, -ONE, A( I+1, I ), 1, TAU( I ), 1, + $ A( I+1, I+1 ), LDA ) +* + A( I+1, I ) = E( I ) + END IF + D( I ) = A( I, I ) + TAU( I ) = TAUI + 20 CONTINUE + D( N ) = A( N, N ) + END IF +* + RETURN +* +* End of DSYTD2 +* + END + SUBROUTINE DSYTRD( UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO ) +* +* -- LAPACK routine (version 3.3.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* -- April 2011 -- +* +* .. Scalar Arguments .. + CHARACTER UPLO + INTEGER INFO, LDA, LWORK, N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAU( * ), + $ WORK( * ) +* .. +* +* Purpose +* ======= +* +* DSYTRD reduces a real symmetric matrix A to real symmetric +* tridiagonal form T by an orthogonal similarity transformation: +* Q**T * A * Q = T. +* +* Arguments +* ========= +* +* UPLO (input) CHARACTER*1 +* = 'U': Upper triangle of A is stored; +* = 'L': Lower triangle of A is stored. +* +* N (input) INTEGER +* The order of the matrix A. N >= 0. +* +* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) +* On entry, the symmetric matrix A. If UPLO = 'U', the leading +* N-by-N upper triangular part of A contains the upper +* triangular part of the matrix A, and the strictly lower +* triangular part of A is not referenced. If UPLO = 'L', the +* leading N-by-N lower triangular part of A contains the lower +* triangular part of the matrix A, and the strictly upper +* triangular part of A is not referenced. +* On exit, if UPLO = 'U', the diagonal and first superdiagonal +* of A are overwritten by the corresponding elements of the +* tridiagonal matrix T, and the elements above the first +* superdiagonal, with the array TAU, represent the orthogonal +* matrix Q as a product of elementary reflectors; if UPLO +* = 'L', the diagonal and first subdiagonal of A are over- +* written by the corresponding elements of the tridiagonal +* matrix T, and the elements below the first subdiagonal, with +* the array TAU, represent the orthogonal matrix Q as a product +* of elementary reflectors. See Further Details. +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,N). +* +* D (output) DOUBLE PRECISION array, dimension (N) +* The diagonal elements of the tridiagonal matrix T: +* D(i) = A(i,i). +* +* E (output) DOUBLE PRECISION array, dimension (N-1) +* The off-diagonal elements of the tridiagonal matrix T: +* E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'. +* +* TAU (output) DOUBLE PRECISION array, dimension (N-1) +* The scalar factors of the elementary reflectors (see Further +* Details). +* +* WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) +* On exit, if INFO = 0, WORK(1) returns the optimal LWORK. +* +* LWORK (input) INTEGER +* The dimension of the array WORK. LWORK >= 1. +* For optimum performance LWORK >= N*NB, where NB is the +* optimal blocksize. +* +* If LWORK = -1, then a workspace query is assumed; the routine +* only calculates the optimal size of the WORK array, returns +* this value as the first entry of the WORK array, and no error +* message related to LWORK is issued by XERBLA. +* +* INFO (output) INTEGER +* = 0: successful exit +* < 0: if INFO = -i, the i-th argument had an illegal value +* +* Further Details +* =============== +* +* If UPLO = 'U', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(n-1) . . . H(2) H(1). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(i+1:n) = 0 and v(i) = 1; v(1:i-1) is stored on exit in +* A(1:i-1,i+1), and tau in TAU(i). +* +* If UPLO = 'L', the matrix Q is represented as a product of elementary +* reflectors +* +* Q = H(1) H(2) . . . H(n-1). +* +* Each H(i) has the form +* +* H(i) = I - tau * v * v**T +* +* where tau is a real scalar, and v is a real vector with +* v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), +* and tau in TAU(i). +* +* The contents of A on exit are illustrated by the following examples +* with n = 5: +* +* if UPLO = 'U': if UPLO = 'L': +* +* ( d e v2 v3 v4 ) ( d ) +* ( d e v3 v4 ) ( e d ) +* ( d e v4 ) ( v1 e d ) +* ( d e ) ( v1 v2 e d ) +* ( d ) ( v1 v2 v3 e d ) +* +* where d and e denote diagonal and off-diagonal elements of T, and vi +* denotes an element of the vector defining H(i). +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) +* .. +* .. Local Scalars .. + LOGICAL LQUERY, UPPER + INTEGER I, IINFO, IWS, J, KK, LDWORK, LWKOPT, NB, + $ NBMIN, NX +* .. +* .. External Subroutines .. + EXTERNAL DLATRD, DSYR2K, DSYTD2, XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. External Functions .. + LOGICAL LSAME + INTEGER ILAENV + EXTERNAL LSAME, ILAENV +* .. +* .. Executable Statements .. +* +* Test the input parameters +* + INFO = 0 + UPPER = LSAME( UPLO, 'U' ) + LQUERY = ( LWORK.EQ.-1 ) + IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN + INFO = -1 + ELSE IF( N.LT.0 ) THEN + INFO = -2 + ELSE IF( LDA.LT.MAX( 1, N ) ) THEN + INFO = -4 + ELSE IF( LWORK.LT.1 .AND. .NOT.LQUERY ) THEN + INFO = -9 + END IF +* + IF( INFO.EQ.0 ) THEN +* +* Determine the block size. +* + NB = ILAENV( 1, 'DSYTRD', UPLO, N, -1, -1, -1 ) + LWKOPT = N*NB + WORK( 1 ) = LWKOPT + END IF +* + IF( INFO.NE.0 ) THEN + CALL XERBLA( 'DSYTRD', -INFO ) + RETURN + ELSE IF( LQUERY ) THEN + RETURN + END IF +* +* Quick return if possible +* + IF( N.EQ.0 ) THEN + WORK( 1 ) = 1 + RETURN + END IF +* + NX = N + IWS = 1 + IF( NB.GT.1 .AND. NB.LT.N ) THEN +* +* Determine when to cross over from blocked to unblocked code +* (last block is always handled by unblocked code). +* + NX = MAX( NB, ILAENV( 3, 'DSYTRD', UPLO, N, -1, -1, -1 ) ) + IF( NX.LT.N ) THEN +* +* Determine if workspace is large enough for blocked code. +* + LDWORK = N + IWS = LDWORK*NB + IF( LWORK.LT.IWS ) THEN +* +* Not enough workspace to use optimal NB: determine the +* minimum value of NB, and reduce NB or force use of +* unblocked code by setting NX = N. +* + NB = MAX( LWORK / LDWORK, 1 ) + NBMIN = ILAENV( 2, 'DSYTRD', UPLO, N, -1, -1, -1 ) + IF( NB.LT.NBMIN ) + $ NX = N + END IF + ELSE + NX = N + END IF + ELSE + NB = 1 + END IF +* + IF( UPPER ) THEN +* +* Reduce the upper triangle of A. +* Columns 1:kk are handled by the unblocked method. +* + KK = N - ( ( N-NX+NB-1 ) / NB )*NB + DO 20 I = N - NB + 1, KK + 1, -NB +* +* Reduce columns i:i+nb-1 to tridiagonal form and form the +* matrix W which is needed to update the unreduced part of +* the matrix +* + CALL DLATRD( UPLO, I+NB-1, NB, A, LDA, E, TAU, WORK, + $ LDWORK ) +* +* Update the unreduced submatrix A(1:i-1,1:i-1), using an +* update of the form: A := A - V*W**T - W*V**T +* + CALL DSYR2K( UPLO, 'No transpose', I-1, NB, -ONE, A( 1, I ), + $ LDA, WORK, LDWORK, ONE, A, LDA ) +* +* Copy superdiagonal elements back into A, and diagonal +* elements into D +* + DO 10 J = I, I + NB - 1 + A( J-1, J ) = E( J-1 ) + D( J ) = A( J, J ) + 10 CONTINUE + 20 CONTINUE +* +* Use unblocked code to reduce the last or only block +* + CALL DSYTD2( UPLO, KK, A, LDA, D, E, TAU, IINFO ) + ELSE +* +* Reduce the lower triangle of A +* + DO 40 I = 1, N - NX, NB +* +* Reduce columns i:i+nb-1 to tridiagonal form and form the +* matrix W which is needed to update the unreduced part of +* the matrix +* + CALL DLATRD( UPLO, N-I+1, NB, A( I, I ), LDA, E( I ), + $ TAU( I ), WORK, LDWORK ) +* +* Update the unreduced submatrix A(i+ib:n,i+ib:n), using +* an update of the form: A := A - V*W**T - W*V**T +* + CALL DSYR2K( UPLO, 'No transpose', N-I-NB+1, NB, -ONE, + $ A( I+NB, I ), LDA, WORK( NB+1 ), LDWORK, ONE, + $ A( I+NB, I+NB ), LDA ) +* +* Copy subdiagonal elements back into A, and diagonal +* elements into D +* + DO 30 J = I, I + NB - 1 + A( J+1, J ) = E( J ) + D( J ) = A( J, J ) + 30 CONTINUE + 40 CONTINUE +* +* Use unblocked code to reduce the last or only block +* + CALL DSYTD2( UPLO, N-I+1, A( I, I ), LDA, D( I ), E( I ), + $ TAU( I ), IINFO ) + END IF +* + WORK( 1 ) = LWKOPT + RETURN +* +* End of DSYTRD +* + END +*> \brief \b DLAMCH +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLAMCH determines double precision machine parameters. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CMACH +*> \verbatim +*> Specifies the value to be returned by DLAMCH: +*> = 'E' or 'e', DLAMCH := eps +*> = 'S' or 's , DLAMCH := sfmin +*> = 'B' or 'b', DLAMCH := base +*> = 'P' or 'p', DLAMCH := eps*base +*> = 'N' or 'n', DLAMCH := t +*> = 'R' or 'r', DLAMCH := rnd +*> = 'M' or 'm', DLAMCH := emin +*> = 'U' or 'u', DLAMCH := rmin +*> = 'L' or 'l', DLAMCH := emax +*> = 'O' or 'o', DLAMCH := rmax +*> where +*> eps = relative machine precision +*> sfmin = safe minimum, such that 1/sfmin does not overflow +*> base = base of the machine +*> prec = eps*base +*> t = number of (base) digits in the mantissa +*> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise +*> emin = minimum exponent before (gradual) underflow +*> rmin = underflow threshold - base**(emin-1) +*> emax = largest exponent before overflow +*> rmax = overflow threshold - (base**emax)*(1-eps) +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + CHARACTER CMACH +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE, ZERO + PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. Intrinsic Functions .. + INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, + $ MINEXPONENT, RADIX, TINY +* .. +* .. Executable Statements .. +* +* +* Assume rounding, not chopping. Always. +* + RND = ONE +* + IF( ONE.EQ.RND ) THEN + EPS = EPSILON(ZERO) * 0.5 + ELSE + EPS = EPSILON(ZERO) + END IF +* + IF( LSAME( CMACH, 'E' ) ) THEN + RMACH = EPS + ELSE IF( LSAME( CMACH, 'S' ) ) THEN + SFMIN = TINY(ZERO) + SMALL = ONE / HUGE(ZERO) + IF( SMALL.GE.SFMIN ) THEN +* +* Use SMALL plus a bit, to avoid the possibility of rounding +* causing overflow when computing 1/sfmin. +* + SFMIN = SMALL*( ONE+EPS ) + END IF + RMACH = SFMIN + ELSE IF( LSAME( CMACH, 'B' ) ) THEN + RMACH = RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'P' ) ) THEN + RMACH = EPS * RADIX(ZERO) + ELSE IF( LSAME( CMACH, 'N' ) ) THEN + RMACH = DIGITS(ZERO) + ELSE IF( LSAME( CMACH, 'R' ) ) THEN + RMACH = RND + ELSE IF( LSAME( CMACH, 'M' ) ) THEN + RMACH = MINEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'U' ) ) THEN + RMACH = tiny(zero) + ELSE IF( LSAME( CMACH, 'L' ) ) THEN + RMACH = MAXEXPONENT(ZERO) + ELSE IF( LSAME( CMACH, 'O' ) ) THEN + RMACH = HUGE(ZERO) + ELSE + RMACH = ZERO + END IF +* + DLAMCH = RMACH + RETURN +* +* End of DLAMCH +* + END +************************************************************************ +*> \brief \b DLAMC3 +*> \details +*> \b Purpose: +*> \verbatim +*> DLAMC3 is intended to force A and B to be stored prior to doing +*> the addition of A and B , for use in situations where optimizers +*> might hold one of these in a register. +*> \endverbatim +*> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. +*> \date November 2015 +*> \ingroup auxOTHERauxiliary +*> +*> \param[in] A +*> \verbatim +*> A is a DOUBLE PRECISION +*> \endverbatim +*> +*> \param[in] B +*> \verbatim +*> B is a DOUBLE PRECISION +*> The values A and B. +*> \endverbatim +*> + DOUBLE PRECISION FUNCTION DLAMC3( A, B ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2010 +* +* .. Scalar Arguments .. + DOUBLE PRECISION A, B +* .. +* ===================================================================== +* +* .. Executable Statements .. +* + DLAMC3 = A + B +* + RETURN +* +* End of DLAMC3 +* + END +* +************************************************************************ +*> \brief \b IEEECK +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IEEECK + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* .. Scalar Arguments .. +* INTEGER ISPEC +* REAL ONE, ZERO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> IEEECK is called from the ILAENV to verify that Infinity and +*> possibly NaN arithmetic is safe (i.e. will not trap). +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies whether to test just for inifinity arithmetic +*> or whether to test for infinity and NaN arithmetic. +*> = 0: Verify infinity arithmetic only. +*> = 1: Verify infinity and NaN arithmetic. +*> \endverbatim +*> +*> \param[in] ZERO +*> \verbatim +*> ZERO is REAL +*> Must contain the value 0.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> \endverbatim +*> +*> \param[in] ONE +*> \verbatim +*> ONE is REAL +*> Must contain the value 1.0 +*> This is passed to prevent the compiler from optimizing +*> away this code. +*> +*> RETURN VALUE: INTEGER +*> = 0: Arithmetic failed to produce the correct answers +*> = 1: Arithmetic produced the correct answers +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + INTEGER ISPEC + REAL ONE, ZERO +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF, + $ NEGZRO, NEWZRO, POSINF +* .. +* .. Executable Statements .. + IEEECK = 1 +* + POSINF = ONE / ZERO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = -ONE / ZERO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGZRO = ONE / ( NEGINF+ONE ) + IF( NEGZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = ONE / NEGZRO + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + NEWZRO = NEGZRO + ZERO + IF( NEWZRO.NE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = ONE / NEWZRO + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* + NEGINF = NEGINF*POSINF + IF( NEGINF.GE.ZERO ) THEN + IEEECK = 0 + RETURN + END IF +* + POSINF = POSINF*POSINF + IF( POSINF.LE.ONE ) THEN + IEEECK = 0 + RETURN + END IF +* +* +* +* +* Return if we were only asked to check infinity arithmetic +* + IF( ISPEC.EQ.0 ) + $ RETURN +* + NAN1 = POSINF + NEGINF +* + NAN2 = POSINF / NEGINF +* + NAN3 = POSINF / POSINF +* + NAN4 = POSINF*ZERO +* + NAN5 = NEGINF*NEGZRO +* + NAN6 = NAN5*ZERO +* + IF( NAN1.EQ.NAN1 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN2.EQ.NAN2 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN3.EQ.NAN3 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN4.EQ.NAN4 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN5.EQ.NAN5 ) THEN + IEEECK = 0 + RETURN + END IF +* + IF( NAN6.EQ.NAN6 ) THEN + IEEECK = 0 + RETURN + END IF +* + RETURN + END +*> \brief \b ILADLC scans a matrix for its last non-zero column. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILADLC + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILADLC( M, N, A, LDA ) +* +* .. Scalar Arguments .. +* INTEGER M, N, LDA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILADLC scans A for its last non-zero column. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION ILADLC( M, N, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER M, N, LDA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I +* .. +* .. Executable Statements .. +* +* Quick test for the common case where one corner is non-zero. + IF( N.EQ.0 ) THEN + ILADLC = N + ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN + ILADLC = N + ELSE +* Now scan each column from the end, returning with the first non-zero. + DO ILADLC = N, 1, -1 + DO I = 1, M + IF( A(I, ILADLC).NE.ZERO ) RETURN + END DO + END DO + END IF + RETURN + END +*> \brief \b ILADLR scans a matrix for its last non-zero row. +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILADLR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILADLR( M, N, A, LDA ) +* +* .. Scalar Arguments .. +* INTEGER M, N, LDA +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILADLR scans A for its last non-zero row. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. +*> \endverbatim +*> +*> \param[in] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The m by n matrix A. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date September 2012 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + INTEGER FUNCTION ILADLR( M, N, A, LDA ) +* +* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* September 2012 +* +* .. Scalar Arguments .. + INTEGER M, N, LDA +* .. +* .. Array Arguments .. + DOUBLE PRECISION A( LDA, * ) +* .. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, J +* .. +* .. Executable Statements .. +* +* Quick test for the common case where one corner is non-zero. + IF( M.EQ.0 ) THEN + ILADLR = M + ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN + ILADLR = M + ELSE +* Scan up each column tracking the last zero row seen. + ILADLR = 0 + DO J = 1, N + I=M + DO WHILE((A(MAX(I,1),J).EQ.ZERO).AND.(I.GE.1)) + I=I-1 + ENDDO + ILADLR = MAX( ILADLR, I ) + END DO + END IF + RETURN + END +*> \brief \b ILAENV +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download ILAENV + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* .. Scalar Arguments .. +* CHARACTER*( * ) NAME, OPTS +* INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> ILAENV is called from the LAPACK routines to choose problem-dependent +*> parameters for the local environment. See ISPEC for a description of +*> the parameters. +*> +*> ILAENV returns an INTEGER +*> if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC +*> if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. +*> +*> This version provides a set of parameters which should give good, +*> but not optimal, performance on many of the currently available +*> computers. Users are encouraged to modify this subroutine to set +*> the tuning parameters for their particular machine using the option +*> and problem size information in the arguments. +*> +*> This routine will not function correctly if it is converted to all +*> lower case. Converting it to all upper case is allowed. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is INTEGER +*> Specifies the parameter to be returned as the value of +*> ILAENV. +*> = 1: the optimal blocksize; if this value is 1, an unblocked +*> algorithm will give the best performance. +*> = 2: the minimum block size for which the block routine +*> should be used; if the usable block size is less than +*> this value, an unblocked routine should be used. +*> = 3: the crossover point (in a block routine, for N less +*> than this value, an unblocked routine should be used) +*> = 4: the number of shifts, used in the nonsymmetric +*> eigenvalue routines (DEPRECATED) +*> = 5: the minimum column dimension for blocking to be used; +*> rectangular blocks must have dimension at least k by m, +*> where k is given by ILAENV(2,...) and m by ILAENV(5,...) +*> = 6: the crossover point for the SVD (when reducing an m by n +*> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds +*> this value, a QR factorization is used first to reduce +*> the matrix to a triangular form.) +*> = 7: the number of processors +*> = 8: the crossover point for the multishift QR method +*> for nonsymmetric eigenvalue problems (DEPRECATED) +*> = 9: maximum size of the subproblems at the bottom of the +*> computation tree in the divide-and-conquer algorithm +*> (used by xGELSD and xGESDD) +*> =10: ieee NaN arithmetic can be trusted not to trap +*> =11: infinity arithmetic can be trusted not to trap +*> 12 <= ISPEC <= 16: +*> xHSEQR or related subroutines, +*> see IPARMQ for detailed explanation +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is CHARACTER*(*) +*> The name of the calling subroutine, in either upper case or +*> lower case. +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is CHARACTER*(*) +*> The character options to the subroutine NAME, concatenated +*> into a single character string. For example, UPLO = 'U', +*> TRANS = 'T', and DIAG = 'N' for a triangular routine would +*> be specified as OPTS = 'UTN'. +*> \endverbatim +*> +*> \param[in] N1 +*> \verbatim +*> N1 is INTEGER +*> \endverbatim +*> +*> \param[in] N2 +*> \verbatim +*> N2 is INTEGER +*> \endverbatim +*> +*> \param[in] N3 +*> \verbatim +*> N3 is INTEGER +*> \endverbatim +*> +*> \param[in] N4 +*> \verbatim +*> N4 is INTEGER +*> Problem dimensions for the subroutine NAME; these may not all +*> be required. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date June 2016 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The following conventions have been used when calling ILAENV from the +*> LAPACK routines: +*> 1) OPTS is a concatenation of all of the character options to +*> subroutine NAME, in the same order that they appear in the +*> argument list for NAME, even if they are not used in determining +*> the value of the parameter specified by ISPEC. +*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order +*> that they appear in the argument list for NAME. N1 is used +*> first, N2 second, and so on, and unused problem dimensions are +*> passed a value of -1. +*> 3) The parameter value returned by ILAENV is checked for validity in +*> the calling subroutine. For example, ILAENV is used to retrieve +*> the optimal blocksize for STRTRI as follows: +*> +*> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) +*> IF( NB.LE.1 ) NB = MAX( 1, N ) +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) +* +* -- LAPACK auxiliary routine (version 3.6.1) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* June 2016 +* +* .. Scalar Arguments .. + CHARACTER*( * ) NAME, OPTS + INTEGER ISPEC, N1, N2, N3, N4 +* .. +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I, IC, IZ, NB, NBMIN, NX + LOGICAL CNAME, SNAME + CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC CHAR, ICHAR, INT, MIN, REAL +* .. +* .. External Functions .. + INTEGER IEEECK, IPARMQ + EXTERNAL IEEECK, IPARMQ +* .. +* .. Executable Statements .. +* + GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, + $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC +* +* Invalid value for ISPEC +* + ILAENV = -1 + RETURN +* + 10 CONTINUE +* +* Convert NAME to upper case if the first character is lower case. +* + ILAENV = 1 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 20 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 20 CONTINUE + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO 30 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + 30 CONTINUE + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO 40 I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + 40 CONTINUE + END IF + END IF +* + C1 = SUBNAM( 1: 1 ) + SNAME = C1.EQ.'S' .OR. C1.EQ.'D' + CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' + IF( .NOT.( CNAME .OR. SNAME ) ) + $ RETURN + C2 = SUBNAM( 2: 3 ) + C3 = SUBNAM( 4: 6 ) + C4 = C3( 2: 3 ) +* + GO TO ( 50, 60, 70 )ISPEC +* + 50 CONTINUE +* +* ISPEC = 1: block size +* +* In these examples, separate code is provided for setting NB for +* real and complex. We assume that NB will take the same value in +* single or double precision. +* + NB = 1 +* + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. + $ C3.EQ.'QLF' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'PO' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRF' ) THEN + NB = 64 + ELSE IF( C3.EQ.'TRD' ) THEN + NB = 32 + ELSE IF( C3.EQ.'GST' ) THEN + NB = 64 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NB = 32 + END IF + END IF + ELSE IF( C2.EQ.'GB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N4.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'PB' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + ELSE + IF( N2.LE.64 ) THEN + NB = 1 + ELSE + NB = 32 + END IF + END IF + END IF + ELSE IF( C2.EQ.'TR' ) THEN + IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + ELSE IF ( C3.EQ.'EVC' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( C2.EQ.'LA' ) THEN + IF( C3.EQ.'UUM' ) THEN + IF( SNAME ) THEN + NB = 64 + ELSE + NB = 64 + END IF + END IF + ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN + IF( C3.EQ.'EBZ' ) THEN + NB = 1 + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NB = 32 + IF( C3.EQ.'HD3' ) THEN + IF( SNAME ) THEN + NB = 32 + ELSE + NB = 32 + END IF + END IF + END IF + ILAENV = NB + RETURN +* + 60 CONTINUE +* +* ISPEC = 2: minimum block size +* + NBMIN = 2 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + ELSE IF( C3.EQ.'TRI' ) THEN + IF( SNAME ) THEN + NBMIN = 2 + ELSE + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( C3.EQ.'TRF' ) THEN + IF( SNAME ) THEN + NBMIN = 8 + ELSE + NBMIN = 8 + END IF + ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NBMIN = 2 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NBMIN = 2 + END IF + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NBMIN = 2 + IF( C3.EQ.'HD3' ) THEN + NBMIN = 2 + END IF + END IF + ILAENV = NBMIN + RETURN +* + 70 CONTINUE +* +* ISPEC = 3: crossover point +* + NX = 0 + IF( C2.EQ.'GE' ) THEN + IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. + $ 'QLF' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'HRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + ELSE IF( C3.EQ.'BRD' ) THEN + IF( SNAME ) THEN + NX = 128 + ELSE + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'SY' ) THEN + IF( SNAME .AND. C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN + IF( C3.EQ.'TRD' ) THEN + NX = 32 + END IF + ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN + IF( C3( 1: 1 ).EQ.'G' ) THEN + IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. + $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) + $ THEN + NX = 128 + END IF + END IF + ELSE IF( C2.EQ.'GG' ) THEN + NX = 128 + IF( C3.EQ.'HD3' ) THEN + NX = 128 + END IF + END IF + ILAENV = NX + RETURN +* + 80 CONTINUE +* +* ISPEC = 4: number of shifts (used by xHSEQR) +* + ILAENV = 6 + RETURN +* + 90 CONTINUE +* +* ISPEC = 5: minimum column dimension (not used) +* + ILAENV = 2 + RETURN +* + 100 CONTINUE +* +* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) +* + ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) + RETURN +* + 110 CONTINUE +* +* ISPEC = 7: number of processors (not used) +* + ILAENV = 1 + RETURN +* + 120 CONTINUE +* +* ISPEC = 8: crossover point for multishift (used by xHSEQR) +* + ILAENV = 50 + RETURN +* + 130 CONTINUE +* +* ISPEC = 9: maximum size of the subproblems at the bottom of the +* computation tree in the divide-and-conquer algorithm +* (used by xGELSD and xGESDD) +* + ILAENV = 25 + RETURN +* + 140 CONTINUE +* +* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 1, 0.0, 1.0 ) + END IF + RETURN +* + 150 CONTINUE +* +* ISPEC = 11: infinity arithmetic can be trusted not to trap +* +* ILAENV = 0 + ILAENV = 1 + IF( ILAENV.EQ.1 ) THEN + ILAENV = IEEECK( 0, 0.0, 1.0 ) + END IF + RETURN +* + 160 CONTINUE +* +* 12 <= ISPEC <= 16: xHSEQR or related subroutines. +* + ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) + RETURN +* +* End of ILAENV +* + END +*> \brief \b IPARMQ +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download IPARMQ + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* .. Scalar Arguments .. +* INTEGER IHI, ILO, ISPEC, LWORK, N +* CHARACTER NAME*( * ), OPTS*( * ) +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> This program sets problem and machine dependent parameters +*> useful for xHSEQR and related subroutines for eigenvalue +*> problems. It is called whenever +*> IPARMQ is called with 12 <= ISPEC <= 16 +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] ISPEC +*> \verbatim +*> ISPEC is integer scalar +*> ISPEC specifies which tunable parameter IPARMQ should +*> return. +*> +*> ISPEC=12: (INMIN) Matrices of order nmin or less +*> are sent directly to xLAHQR, the implicit +*> double shift QR algorithm. NMIN must be +*> at least 11. +*> +*> ISPEC=13: (INWIN) Size of the deflation window. +*> This is best set greater than or equal to +*> the number of simultaneous shifts NS. +*> Larger matrices benefit from larger deflation +*> windows. +*> +*> ISPEC=14: (INIBL) Determines when to stop nibbling and +*> invest in an (expensive) multi-shift QR sweep. +*> If the aggressive early deflation subroutine +*> finds LD converged eigenvalues from an order +*> NW deflation window and LD.GT.(NW*NIBBLE)/100, +*> then the next QR sweep is skipped and early +*> deflation is applied immediately to the +*> remaining active diagonal block. Setting +*> IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a +*> multi-shift QR sweep whenever early deflation +*> finds a converged eigenvalue. Setting +*> IPARMQ(ISPEC=14) greater than or equal to 100 +*> prevents TTQRE from skipping a multi-shift +*> QR sweep. +*> +*> ISPEC=15: (NSHFTS) The number of simultaneous shifts in +*> a multi-shift QR iteration. +*> +*> ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the +*> following meanings. +*> 0: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are not +*> accumulated when updating the +*> far-from-diagonal matrix entries. +*> 1: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are +*> accumulated, and matrix-matrix +*> multiplication is used to update the +*> far-from-diagonal matrix entries. +*> 2: During the multi-shift QR/QZ sweep, +*> blocked eigenvalue reordering, blocked +*> Hessenberg-triangular reduction, +*> reflections and/or rotations are +*> accumulated, and 2-by-2 block structure +*> is exploited during matrix-matrix +*> multiplies. +*> (If xTRMM is slower than xGEMM, then +*> IPARMQ(ISPEC=16)=1 may be more efficient than +*> IPARMQ(ISPEC=16)=2 despite the greater level of +*> arithmetic work implied by the latter choice.) +*> \endverbatim +*> +*> \param[in] NAME +*> \verbatim +*> NAME is character string +*> Name of the calling subroutine +*> \endverbatim +*> +*> \param[in] OPTS +*> \verbatim +*> OPTS is character string +*> This is a concatenation of the string arguments to +*> TTQRE. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is integer scalar +*> N is the order of the Hessenberg matrix H. +*> \endverbatim +*> +*> \param[in] ILO +*> \verbatim +*> ILO is INTEGER +*> \endverbatim +*> +*> \param[in] IHI +*> \verbatim +*> IHI is INTEGER +*> It is assumed that H is already upper triangular +*> in rows and columns 1:ILO-1 and IHI+1:N. +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is integer scalar +*> The amount of workspace available. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2015 +* +*> \ingroup auxOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> Little is known about how best to choose these parameters. +*> It is possible to use different values of the parameters +*> for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR. +*> +*> It is probably best to choose different parameters for +*> different matrices and different parameters at different +*> times during the iteration, but this has not been +*> implemented --- yet. +*> +*> +*> The best choices of most of the parameters depend +*> in an ill-understood way on the relative execution +*> rate of xLAQR3 and xLAQR5 and on the nature of each +*> particular eigenvalue problem. Experiment may be the +*> only practical way to determine which choices are most +*> effective. +*> +*> Following is a list of default values supplied by IPARMQ. +*> These defaults may be adjusted in order to attain better +*> performance in any particular computational environment. +*> +*> IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point. +*> Default: 75. (Must be at least 11.) +*> +*> IPARMQ(ISPEC=13) Recommended deflation window size. +*> This depends on ILO, IHI and NS, the +*> number of simultaneous shifts returned +*> by IPARMQ(ISPEC=15). The default for +*> (IHI-ILO+1).LE.500 is NS. The default +*> for (IHI-ILO+1).GT.500 is 3*NS/2. +*> +*> IPARMQ(ISPEC=14) Nibble crossover point. Default: 14. +*> +*> IPARMQ(ISPEC=15) Number of simultaneous shifts, NS. +*> a multi-shift QR iteration. +*> +*> If IHI-ILO+1 is ... +*> +*> greater than ...but less ... the +*> or equal to ... than default is +*> +*> 0 30 NS = 2+ +*> 30 60 NS = 4+ +*> 60 150 NS = 10 +*> 150 590 NS = ** +*> 590 3000 NS = 64 +*> 3000 6000 NS = 128 +*> 6000 infinity NS = 256 +*> +*> (+) By default matrices of this order are +*> passed to the implicit double shift routine +*> xLAHQR. See IPARMQ(ISPEC=12) above. These +*> values of NS are used only in case of a rare +*> xLAHQR failure. +*> +*> (**) The asterisks (**) indicate an ad-hoc +*> function increasing from 10 to 64. +*> +*> IPARMQ(ISPEC=16) Select structured matrix multiply. +*> (See ISPEC=16 above for details.) +*> Default: 3. +*> \endverbatim +*> +* ===================================================================== + INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) +* +* -- LAPACK auxiliary routine (version 3.6.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2015 +* +* .. Scalar Arguments .. + INTEGER IHI, ILO, ISPEC, LWORK, N + CHARACTER NAME*( * ), OPTS*( * ) +* +* ================================================================ +* .. Parameters .. + INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22 + PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14, + $ ISHFTS = 15, IACC22 = 16 ) + INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP + PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14, + $ NIBBLE = 14, KNWSWP = 500 ) + REAL TWO + PARAMETER ( TWO = 2.0 ) +* .. +* .. Local Scalars .. + INTEGER NH, NS + INTEGER I, IC, IZ + CHARACTER SUBNAM*6 +* .. +* .. Intrinsic Functions .. + INTRINSIC LOG, MAX, MOD, NINT, REAL +* .. +* .. Executable Statements .. + IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR. + $ ( ISPEC.EQ.IACC22 ) ) THEN +* +* ==== Set the number simultaneous shifts ==== +* + NH = IHI - ILO + 1 + NS = 2 + IF( NH.GE.30 ) + $ NS = 4 + IF( NH.GE.60 ) + $ NS = 10 + IF( NH.GE.150 ) + $ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) ) + IF( NH.GE.590 ) + $ NS = 64 + IF( NH.GE.3000 ) + $ NS = 128 + IF( NH.GE.6000 ) + $ NS = 256 + NS = MAX( 2, NS-MOD( NS, 2 ) ) + END IF +* + IF( ISPEC.EQ.INMIN ) THEN +* +* +* ===== Matrices of order smaller than NMIN get sent +* . to xLAHQR, the classic double shift algorithm. +* . This must be at least 11. ==== +* + IPARMQ = NMIN +* + ELSE IF( ISPEC.EQ.INIBL ) THEN +* +* ==== INIBL: skip a multi-shift qr iteration and +* . whenever aggressive early deflation finds +* . at least (NIBBLE*(window size)/100) deflations. ==== +* + IPARMQ = NIBBLE +* + ELSE IF( ISPEC.EQ.ISHFTS ) THEN +* +* ==== NSHFTS: The number of simultaneous shifts ===== +* + IPARMQ = NS +* + ELSE IF( ISPEC.EQ.INWIN ) THEN +* +* ==== NW: deflation window size. ==== +* + IF( NH.LE.KNWSWP ) THEN + IPARMQ = NS + ELSE + IPARMQ = 3*NS / 2 + END IF +* + ELSE IF( ISPEC.EQ.IACC22 ) THEN +* +* ==== IACC22: Whether to accumulate reflections +* . before updating the far-from-diagonal elements +* . and whether to use 2-by-2 block structure while +* . doing it. A small amount of work could be saved +* . by making this choice dependent also upon the +* . NH=IHI-ILO+1. +* +* +* Convert NAME to upper case if the first character is lower case. +* + IPARMQ = 0 + SUBNAM = NAME + IC = ICHAR( SUBNAM( 1: 1 ) ) + IZ = ICHAR( 'Z' ) + IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN +* +* ASCII character set +* + IF( IC.GE.97 .AND. IC.LE.122 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.97 .AND. IC.LE.122 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + END DO + END IF +* + ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN +* +* EBCDIC character set +* + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN + SUBNAM( 1: 1 ) = CHAR( IC+64 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. + $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. + $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: + $ I ) = CHAR( IC+64 ) + END DO + END IF +* + ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN +* +* Prime machines: ASCII+128 +* + IF( IC.GE.225 .AND. IC.LE.250 ) THEN + SUBNAM( 1: 1 ) = CHAR( IC-32 ) + DO I = 2, 6 + IC = ICHAR( SUBNAM( I: I ) ) + IF( IC.GE.225 .AND. IC.LE.250 ) + $ SUBNAM( I: I ) = CHAR( IC-32 ) + END DO + END IF + END IF +* + IF( SUBNAM( 2:6 ).EQ.'GGHRD' .OR. + $ SUBNAM( 2:6 ).EQ.'GGHD3' ) THEN + IPARMQ = 1 + IF( NH.GE.K22MIN ) + $ IPARMQ = 2 + ELSE IF ( SUBNAM( 4:6 ).EQ.'EXC' ) THEN + IF( NH.GE.KACMIN ) + $ IPARMQ = 1 + IF( NH.GE.K22MIN ) + $ IPARMQ = 2 + ELSE IF ( SUBNAM( 2:6 ).EQ.'HSEQR' .OR. + $ SUBNAM( 2:5 ).EQ.'LAQR' ) THEN + IF( NS.GE.KACMIN ) + $ IPARMQ = 1 + IF( NS.GE.K22MIN ) + $ IPARMQ = 2 + END IF +* + ELSE +* ===== invalid value of ispec ===== + IPARMQ = -1 +* + END IF +* +* ==== End of IPARMQ ==== +* + END +*> \brief \b LSAME +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition: +* =========== +* +* LOGICAL FUNCTION LSAME( CA, CB ) +* +* .. Scalar Arguments .. +* CHARACTER CA, CB +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> LSAME returns .TRUE. if CA is the same letter as CB regardless of +*> case. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] CA +*> \verbatim +*> \endverbatim +*> +*> \param[in] CB +*> \verbatim +*> CA and CB specify the single characters to be compared. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + LOGICAL FUNCTION LSAME( CA, CB ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER CA, CB +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC ICHAR +* .. +* .. Local Scalars .. + INTEGER INTA, INTB, ZCODE +* .. +* .. Executable Statements .. +* +* Test if the characters are equal +* + LSAME = CA.EQ.CB + IF( LSAME ) + $ RETURN +* +* Now test for equivalence if both characters are alphabetic. +* + ZCODE = ICHAR( 'Z' ) +* +* Use 'Z' rather than 'A' so that ASCII can be detected on Prime +* machines, on which ICHAR returns a value with bit 8 set. +* ICHAR('A') on Prime machines returns 193 which is the same as +* ICHAR('A') on an EBCDIC machine. +* + INTA = ICHAR( CA ) + INTB = ICHAR( CB ) +* + IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN +* +* ASCII is assumed - ZCODE is the ASCII code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 + IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 +* + ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN +* +* EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or +* upper case 'Z'. +* + IF( INTA.GE.129 .AND. INTA.LE.137 .OR. + $ INTA.GE.145 .AND. INTA.LE.153 .OR. + $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 + IF( INTB.GE.129 .AND. INTB.LE.137 .OR. + $ INTB.GE.145 .AND. INTB.LE.153 .OR. + $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 +* + ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN +* +* ASCII is assumed, on Prime machines - ZCODE is the ASCII code +* plus 128 of either lower or upper case 'Z'. +* + IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 + IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 + END IF + LSAME = INTA.EQ.INTB +* +* RETURN +* +* End of LSAME +* + END +*> \brief \b XERBLA +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download XERBLA + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE XERBLA( SRNAME, INFO ) +* +* .. Scalar Arguments .. +* CHARACTER*(*) SRNAME +* INTEGER INFO +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> XERBLA is an error handler for the LAPACK routines. +*> It is called by an LAPACK routine if an input parameter has an +*> invalid value. A message is printed and execution stops. +*> +*> Installers may consider modifying the STOP statement in order to +*> call system-specific exception-handling facilities. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SRNAME +*> \verbatim +*> SRNAME is CHARACTER*(*) +*> The name of the routine which called XERBLA. +*> \endverbatim +*> +*> \param[in] INFO +*> \verbatim +*> INFO is INTEGER +*> The position of the invalid parameter in the parameter list +*> of the calling routine. +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== + SUBROUTINE XERBLA( SRNAME, INFO ) +* +* -- LAPACK auxiliary routine (version 3.4.0) -- +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 +* +* .. Scalar Arguments .. + CHARACTER*(*) SRNAME + INTEGER INFO +* .. +* +* ===================================================================== +* +* .. Intrinsic Functions .. + INTRINSIC LEN_TRIM +* .. +* .. Executable Statements .. +* + WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO +* + STOP +* + 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', + $ 'an illegal value' ) +* +* End of XERBLA +* + END + SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DAXPY constant times a vector plus a vector. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (DA.EQ.0.0d0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,4) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DY(I) + DA*DX(I) + END DO + END IF + IF (N.LT.4) RETURN + MP1 = M + 1 + DO I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I+1) = DY(I+1) + DA*DX(I+1) + DY(I+2) = DY(I+2) + DA*DX(I+2) + DY(I+3) = DY(I+3) + DA*DX(I+3) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DCOPY copies a vector, x, to a vector, y. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,7) + IF (M.NE.0) THEN + DO I = 1,M + DY(I) = DX(I) + END DO + IF (N.LT.7) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,7 + DY(I) = DX(I) + DY(I+1) = DX(I+1) + DY(I+2) = DX(I+2) + DY(I+3) = DX(I+3) + DY(I+4) = DX(I+4) + DY(I+5) = DX(I+5) + DY(I+6) = DX(I+6) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END + DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* DDOT forms the dot product of two vectors. +* uses unrolled loops for increments equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + DOUBLE PRECISION DTEMP + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + DDOT = 0.0d0 + DTEMP = 0.0d0 + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,5) + IF (M.NE.0) THEN + DO I = 1,M + DTEMP = DTEMP + DX(I)*DY(I) + END DO + IF (N.LT.5) THEN + DDOT=DTEMP + RETURN + END IF + END IF + MP1 = M + 1 + DO I = MP1,N,5 + DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) + + $ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4) + END DO + ELSE +* +* code for unequal increments or equal increments +* not equal to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DTEMP = DTEMP + DX(IX)*DY(IY) + IX = IX + INCX + IY = IY + INCY + END DO + END IF + DDOT = DTEMP + RETURN + END + SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER K,LDA,LDB,LDC,M,N + CHARACTER TRANSA,TRANSB +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* Purpose +* ======= +* +* DGEMM performs one of the matrix-matrix operations +* +* C := alpha*op( A )*op( B ) + beta*C, +* +* where op( X ) is one of +* +* op( X ) = X or op( X ) = X**T, +* +* alpha and beta are scalars, and A, B and C are matrices, with op( A ) +* an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. +* +* Arguments +* ========== +* +* TRANSA - CHARACTER*1. +* On entry, TRANSA specifies the form of op( A ) to be used in +* the matrix multiplication as follows: +* +* TRANSA = 'N' or 'n', op( A ) = A. +* +* TRANSA = 'T' or 't', op( A ) = A**T. +* +* TRANSA = 'C' or 'c', op( A ) = A**T. +* +* Unchanged on exit. +* +* TRANSB - CHARACTER*1. +* On entry, TRANSB specifies the form of op( B ) to be used in +* the matrix multiplication as follows: +* +* TRANSB = 'N' or 'n', op( B ) = B. +* +* TRANSB = 'T' or 't', op( B ) = B**T. +* +* TRANSB = 'C' or 'c', op( B ) = B**T. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix +* op( A ) and of the matrix C. M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix +* op( B ) and the number of columns of the matrix C. N must be +* at least zero. +* Unchanged on exit. +* +* K - INTEGER. +* On entry, K specifies the number of columns of the matrix +* op( A ) and the number of rows of the matrix op( B ). K must +* be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is +* k when TRANSA = 'N' or 'n', and is m otherwise. +* Before entry with TRANSA = 'N' or 'n', the leading m by k +* part of the array A must contain the matrix A, otherwise +* the leading k by m part of the array A must contain the +* matrix A. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When TRANSA = 'N' or 'n' then +* LDA must be at least max( 1, m ), otherwise LDA must be at +* least max( 1, k ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is +* n when TRANSB = 'N' or 'n', and is k otherwise. +* Before entry with TRANSB = 'N' or 'n', the leading k by n +* part of the array B must contain the matrix B, otherwise +* the leading n by k part of the array B must contain the +* matrix B. +* Unchanged on exit. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. When TRANSB = 'N' or 'n' then +* LDB must be at least max( 1, k ), otherwise LDB must be at +* least max( 1, n ). +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then C need not be set on input. +* Unchanged on exit. +* +* C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). +* Before entry, the leading m by n part of the array C must +* contain the matrix C, except when beta is zero, in which +* case C need not be set on entry. +* On exit, the array C is overwritten by the m by n matrix +* ( alpha*op( A )*op( B ) + beta*C ). +* +* LDC - INTEGER. +* On entry, LDC specifies the first dimension of C as declared +* in the calling (sub) program. LDC must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,L,NCOLA,NROWA,NROWB + LOGICAL NOTA,NOTB +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Set NOTA and NOTB as true if A and B respectively are not +* transposed and set NROWA, NCOLA and NROWB as the number of rows +* and columns of A and the number of rows of B respectively. +* + NOTA = LSAME(TRANSA,'N') + NOTB = LSAME(TRANSB,'N') + IF (NOTA) THEN + NROWA = M + NCOLA = K + ELSE + NROWA = K + NCOLA = M + END IF + IF (NOTB) THEN + NROWB = K + ELSE + NROWB = N + END IF +* +* Test the input parameters. +* + INFO = 0 + IF ((.NOT.NOTA) .AND. (.NOT.LSAME(TRANSA,'C')) .AND. + + (.NOT.LSAME(TRANSA,'T'))) THEN + INFO = 1 + ELSE IF ((.NOT.NOTB) .AND. (.NOT.LSAME(TRANSB,'C')) .AND. + + (.NOT.LSAME(TRANSB,'T'))) THEN + INFO = 2 + ELSE IF (M.LT.0) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (K.LT.0) THEN + INFO = 5 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 8 + ELSE IF (LDB.LT.MAX(1,NROWB)) THEN + INFO = 10 + ELSE IF (LDC.LT.MAX(1,M)) THEN + INFO = 13 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + (((ALPHA.EQ.ZERO).OR. (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN +* +* And if alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + IF (BETA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + C(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1,N + DO 30 I = 1,M + C(I,J) = BETA*C(I,J) + 30 CONTINUE + 40 CONTINUE + END IF + RETURN + END IF +* +* Start the operations. +* + IF (NOTB) THEN + IF (NOTA) THEN +* +* Form C := alpha*A*B + beta*C. +* + DO 90 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 50 I = 1,M + C(I,J) = ZERO + 50 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 60 I = 1,M + C(I,J) = BETA*C(I,J) + 60 CONTINUE + END IF + DO 80 L = 1,K + IF (B(L,J).NE.ZERO) THEN + TEMP = ALPHA*B(L,J) + DO 70 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 70 CONTINUE + END IF + 80 CONTINUE + 90 CONTINUE + ELSE +* +* Form C := alpha*A**T*B + beta*C +* + DO 120 J = 1,N + DO 110 I = 1,M + TEMP = ZERO + DO 100 L = 1,K + TEMP = TEMP + A(L,I)*B(L,J) + 100 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 110 CONTINUE + 120 CONTINUE + END IF + ELSE + IF (NOTA) THEN +* +* Form C := alpha*A*B**T + beta*C +* + DO 170 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 130 I = 1,M + C(I,J) = ZERO + 130 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 140 I = 1,M + C(I,J) = BETA*C(I,J) + 140 CONTINUE + END IF + DO 160 L = 1,K + IF (B(J,L).NE.ZERO) THEN + TEMP = ALPHA*B(J,L) + DO 150 I = 1,M + C(I,J) = C(I,J) + TEMP*A(I,L) + 150 CONTINUE + END IF + 160 CONTINUE + 170 CONTINUE + ELSE +* +* Form C := alpha*A**T*B**T + beta*C +* + DO 200 J = 1,N + DO 190 I = 1,M + TEMP = ZERO + DO 180 L = 1,K + TEMP = TEMP + A(L,I)*B(J,L) + 180 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP + ELSE + C(I,J) = ALPHA*TEMP + BETA*C(I,J) + END IF + 190 CONTINUE + 200 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMM . +* + END + SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER INCX,INCY,LDA,M,N + CHARACTER TRANS +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DGEMV performs one of the matrix-vector operations +* +* y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, +* +* where alpha and beta are scalars, x and y are vectors and A is an +* m by n matrix. +* +* Arguments +* ========== +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' y := alpha*A*x + beta*y. +* +* TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. +* +* TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix A. +* M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry, the leading m by n part of the array A must +* contain the matrix of coefficients. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, m ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of DIMENSION at least +* ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' +* and at least +* ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. +* Before entry, the incremented array X must contain the +* vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then Y need not be set on input. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of DIMENSION at least +* ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' +* and at least +* ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. +* Before entry with BETA non-zero, the incremented array Y +* must contain the vector y. On exit, Y is overwritten by the +* updated vector y. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY,LENX,LENY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 1 + ELSE IF (M.LT.0) THEN + INFO = 2 + ELSE IF (N.LT.0) THEN + INFO = 3 + ELSE IF (LDA.LT.MAX(1,M)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + ELSE IF (INCY.EQ.0) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGEMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN +* +* Set LENX and LENY, the lengths of the vectors x and y, and set +* up the start points in X and Y. +* + IF (LSAME(TRANS,'N')) THEN + LENX = N + LENY = M + ELSE + LENX = M + LENY = N + END IF + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (LENX-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (LENY-1)*INCY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* +* First form y := beta*y. +* + IF (BETA.NE.ONE) THEN + IF (INCY.EQ.1) THEN + IF (BETA.EQ.ZERO) THEN + DO 10 I = 1,LENY + Y(I) = ZERO + 10 CONTINUE + ELSE + DO 20 I = 1,LENY + Y(I) = BETA*Y(I) + 20 CONTINUE + END IF + ELSE + IY = KY + IF (BETA.EQ.ZERO) THEN + DO 30 I = 1,LENY + Y(IY) = ZERO + IY = IY + INCY + 30 CONTINUE + ELSE + DO 40 I = 1,LENY + Y(IY) = BETA*Y(IY) + IY = IY + INCY + 40 CONTINUE + END IF + END IF + END IF + IF (ALPHA.EQ.ZERO) RETURN + IF (LSAME(TRANS,'N')) THEN +* +* Form y := alpha*A*x + y. +* + JX = KX + IF (INCY.EQ.1) THEN + DO 60 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = ALPHA*X(JX) + DO 50 I = 1,M + Y(I) = Y(I) + TEMP*A(I,J) + 50 CONTINUE + END IF + JX = JX + INCX + 60 CONTINUE + ELSE + DO 80 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = ALPHA*X(JX) + IY = KY + DO 70 I = 1,M + Y(IY) = Y(IY) + TEMP*A(I,J) + IY = IY + INCY + 70 CONTINUE + END IF + JX = JX + INCX + 80 CONTINUE + END IF + ELSE +* +* Form y := alpha*A**T*x + y. +* + JY = KY + IF (INCX.EQ.1) THEN + DO 100 J = 1,N + TEMP = ZERO + DO 90 I = 1,M + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 100 CONTINUE + ELSE + DO 120 J = 1,N + TEMP = ZERO + IX = KX + DO 110 I = 1,M + TEMP = TEMP + A(I,J)*X(IX) + IX = IX + INCX + 110 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP + JY = JY + INCY + 120 CONTINUE + END IF + END IF +* + RETURN +* +* End of DGEMV . +* + END + SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER INCX,INCY,LDA,M,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DGER performs the rank 1 operation +* +* A := alpha*x*y**T + A, +* +* where alpha is a scalar, x is an m element vector, y is an n element +* vector and A is an m by n matrix. +* +* Arguments +* ========== +* +* M - INTEGER. +* On entry, M specifies the number of rows of the matrix A. +* M must be at least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( m - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the m +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. +* Unchanged on exit. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry, the leading m by n part of the array A must +* contain the matrix of coefficients. On exit, A is +* overwritten by the updated matrix. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,J,JY,KX +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (M.LT.0) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (INCX.EQ.0) THEN + INFO = 5 + ELSE IF (INCY.EQ.0) THEN + INFO = 7 + ELSE IF (LDA.LT.MAX(1,M)) THEN + INFO = 9 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DGER ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((M.EQ.0) .OR. (N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* + IF (INCY.GT.0) THEN + JY = 1 + ELSE + JY = 1 - (N-1)*INCY + END IF + IF (INCX.EQ.1) THEN + DO 20 J = 1,N + IF (Y(JY).NE.ZERO) THEN + TEMP = ALPHA*Y(JY) + DO 10 I = 1,M + A(I,J) = A(I,J) + X(I)*TEMP + 10 CONTINUE + END IF + JY = JY + INCY + 20 CONTINUE + ELSE + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (M-1)*INCX + END IF + DO 40 J = 1,N + IF (Y(JY).NE.ZERO) THEN + TEMP = ALPHA*Y(JY) + IX = KX + DO 30 I = 1,M + A(I,J) = A(I,J) + X(IX)*TEMP + IX = IX + INCX + 30 CONTINUE + END IF + JY = JY + INCY + 40 CONTINUE + END IF +* + RETURN +* +* End of DGER . +* + END + DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) +* .. Scalar Arguments .. + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION X(*) +* .. +* +* Purpose +* ======= +* +* DNRM2 returns the euclidean norm of a vector via the function +* name, so that +* +* DNRM2 := sqrt( x'*x ) +* +* Further Details +* =============== +* +* -- This version written on 25-October-1982. +* Modified on 14-October-1993 to inline the call to DLASSQ. +* Sven Hammarling, Nag Ltd. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ + INTEGER IX +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS,SQRT +* .. + IF (N.LT.1 .OR. INCX.LT.1) THEN + NORM = ZERO + ELSE IF (N.EQ.1) THEN + NORM = ABS(X(1)) + ELSE + SCALE = ZERO + SSQ = ONE +* The following loop is equivalent to this call to the LAPACK +* auxiliary routine: +* CALL DLASSQ( N, X, INCX, SCALE, SSQ ) +* + DO 10 IX = 1,1 + (N-1)*INCX,INCX + IF (X(IX).NE.ZERO) THEN + ABSXI = ABS(X(IX)) + IF (SCALE.LT.ABSXI) THEN + SSQ = ONE + SSQ* (SCALE/ABSXI)**2 + SCALE = ABSXI + ELSE + SSQ = SSQ + (ABSXI/SCALE)**2 + END IF + END IF + 10 CONTINUE + NORM = SCALE*SQRT(SSQ) + END IF +* + DNRM2 = NORM + RETURN +* +* End of DNRM2. +* + END + SUBROUTINE DSCAL(N,DA,DX,INCX) +* .. Scalar Arguments .. + DOUBLE PRECISION DA + INTEGER INCX,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*) +* .. +* +* Purpose +* ======= +* +* DSCAL scales a vector by a constant. +* uses unrolled loops for increment equal to one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 3/93 to return if incx .le. 0. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + INTEGER I,M,MP1,NINCX +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0 .OR. INCX.LE.0) RETURN + IF (INCX.EQ.1) THEN +* +* code for increment equal to 1 +* +* +* clean-up loop +* + M = MOD(N,5) + IF (M.NE.0) THEN + DO I = 1,M + DX(I) = DA*DX(I) + END DO + IF (N.LT.5) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I+1) = DA*DX(I+1) + DX(I+2) = DA*DX(I+2) + DX(I+3) = DA*DX(I+3) + DX(I+4) = DA*DX(I+4) + END DO + ELSE +* +* code for increment not equal to 1 +* + NINCX = N*INCX + DO I = 1,NINCX,INCX + DX(I) = DA*DX(I) + END DO + END IF + RETURN + END + SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) +* .. Scalar Arguments .. + INTEGER INCX,INCY,N +* .. +* .. Array Arguments .. + DOUBLE PRECISION DX(*),DY(*) +* .. +* +* Purpose +* ======= +* +* interchanges two vectors. +* uses unrolled loops for increments equal one. +* +* Further Details +* =============== +* +* jack dongarra, linpack, 3/11/78. +* modified 12/3/93, array(1) declarations changed to array(*) +* +* ===================================================================== +* +* .. Local Scalars .. + DOUBLE PRECISION DTEMP + INTEGER I,IX,IY,M,MP1 +* .. +* .. Intrinsic Functions .. + INTRINSIC MOD +* .. + IF (N.LE.0) RETURN + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN +* +* code for both increments equal to 1 +* +* +* clean-up loop +* + M = MOD(N,3) + IF (M.NE.0) THEN + DO I = 1,M + DTEMP = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP + END DO + IF (N.LT.3) RETURN + END IF + MP1 = M + 1 + DO I = MP1,N,3 + DTEMP = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP + DTEMP = DX(I+1) + DX(I+1) = DY(I+1) + DY(I+1) = DTEMP + DTEMP = DX(I+2) + DX(I+2) = DY(I+2) + DY(I+2) = DTEMP + END DO + ELSE +* +* code for unequal increments or equal increments not equal +* to 1 +* + IX = 1 + IY = 1 + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 + DO I = 1,N + DTEMP = DX(IX) + DX(IX) = DY(IY) + DY(IY) = DTEMP + IX = IX + INCX + IY = IY + INCY + END DO + END IF + RETURN + END + SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER INCX,INCY,LDA,N + CHARACTER UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DSYMV performs the matrix-vector operation +* +* y := alpha*A*x + beta*y, +* +* where alpha and beta are scalars, x and y are n element vectors and +* A is an n by n symmetric matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array A is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of A +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of A +* is to be referenced. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of A is not referenced. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then Y need not be set on input. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. On exit, Y is overwritten by the updated +* vector y. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 5 + ELSE IF (INCX.EQ.0) THEN + INFO = 7 + ELSE IF (INCY.EQ.0) THEN + INFO = 10 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN +* +* Set up the start points in X and Y. +* + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (N-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (N-1)*INCY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through the triangular part +* of A. +* +* First form y := beta*y. +* + IF (BETA.NE.ONE) THEN + IF (INCY.EQ.1) THEN + IF (BETA.EQ.ZERO) THEN + DO 10 I = 1,N + Y(I) = ZERO + 10 CONTINUE + ELSE + DO 20 I = 1,N + Y(I) = BETA*Y(I) + 20 CONTINUE + END IF + ELSE + IY = KY + IF (BETA.EQ.ZERO) THEN + DO 30 I = 1,N + Y(IY) = ZERO + IY = IY + INCY + 30 CONTINUE + ELSE + DO 40 I = 1,N + Y(IY) = BETA*Y(IY) + IY = IY + INCY + 40 CONTINUE + END IF + END IF + END IF + IF (ALPHA.EQ.ZERO) RETURN + IF (LSAME(UPLO,'U')) THEN +* +* Form y when A is stored in upper triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 60 J = 1,N + TEMP1 = ALPHA*X(J) + TEMP2 = ZERO + DO 50 I = 1,J - 1 + Y(I) = Y(I) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(I) + 50 CONTINUE + Y(J) = Y(J) + TEMP1*A(J,J) + ALPHA*TEMP2 + 60 CONTINUE + ELSE + JX = KX + JY = KY + DO 80 J = 1,N + TEMP1 = ALPHA*X(JX) + TEMP2 = ZERO + IX = KX + IY = KY + DO 70 I = 1,J - 1 + Y(IY) = Y(IY) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(IX) + IX = IX + INCX + IY = IY + INCY + 70 CONTINUE + Y(JY) = Y(JY) + TEMP1*A(J,J) + ALPHA*TEMP2 + JX = JX + INCX + JY = JY + INCY + 80 CONTINUE + END IF + ELSE +* +* Form y when A is stored in lower triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 100 J = 1,N + TEMP1 = ALPHA*X(J) + TEMP2 = ZERO + Y(J) = Y(J) + TEMP1*A(J,J) + DO 90 I = J + 1,N + Y(I) = Y(I) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(I) + 90 CONTINUE + Y(J) = Y(J) + ALPHA*TEMP2 + 100 CONTINUE + ELSE + JX = KX + JY = KY + DO 120 J = 1,N + TEMP1 = ALPHA*X(JX) + TEMP2 = ZERO + Y(JY) = Y(JY) + TEMP1*A(J,J) + IX = JX + IY = JY + DO 110 I = J + 1,N + IX = IX + INCX + IY = IY + INCY + Y(IY) = Y(IY) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(IX) + 110 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP2 + JX = JX + INCX + JY = JY + INCY + 120 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYMV . +* + END + SUBROUTINE DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER INCX,INCY,LDA,N + CHARACTER UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DSYR2 performs the symmetric rank 2 operation +* +* A := alpha*x*y**T + alpha*y*x**T + A, +* +* where alpha is a scalar, x and y are n element vectors and A is an n +* by n symmetric matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array A is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of A +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of A +* is to be referenced. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. +* Unchanged on exit. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of A is not referenced. On exit, the +* upper triangular part of the array A is overwritten by the +* upper triangular part of the updated matrix. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of A is not referenced. On exit, the +* lower triangular part of the array A is overwritten by the +* lower triangular part of the updated matrix. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (INCX.EQ.0) THEN + INFO = 5 + ELSE IF (INCY.EQ.0) THEN + INFO = 7 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 9 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYR2 ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN +* +* Set up the start points in X and Y if the increments are not both +* unity. +* + IF ((INCX.NE.1) .OR. (INCY.NE.1)) THEN + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (N-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (N-1)*INCY + END IF + JX = KX + JY = KY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through the triangular part +* of A. +* + IF (LSAME(UPLO,'U')) THEN +* +* Form A when A is stored in the upper triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 20 J = 1,N + IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(J) + TEMP2 = ALPHA*X(J) + DO 10 I = 1,J + A(I,J) = A(I,J) + X(I)*TEMP1 + Y(I)*TEMP2 + 10 CONTINUE + END IF + 20 CONTINUE + ELSE + DO 40 J = 1,N + IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(JY) + TEMP2 = ALPHA*X(JX) + IX = KX + IY = KY + DO 30 I = 1,J + A(I,J) = A(I,J) + X(IX)*TEMP1 + Y(IY)*TEMP2 + IX = IX + INCX + IY = IY + INCY + 30 CONTINUE + END IF + JX = JX + INCX + JY = JY + INCY + 40 CONTINUE + END IF + ELSE +* +* Form A when A is stored in the lower triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 60 J = 1,N + IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(J) + TEMP2 = ALPHA*X(J) + DO 50 I = J,N + A(I,J) = A(I,J) + X(I)*TEMP1 + Y(I)*TEMP2 + 50 CONTINUE + END IF + 60 CONTINUE + ELSE + DO 80 J = 1,N + IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(JY) + TEMP2 = ALPHA*X(JX) + IX = JX + IY = JY + DO 70 I = J,N + A(I,J) = A(I,J) + X(IX)*TEMP1 + Y(IY)*TEMP2 + IX = IX + INCX + IY = IY + INCY + 70 CONTINUE + END IF + JX = JX + INCX + JY = JY + INCY + 80 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYR2 . +* + END + SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER K,LDA,LDB,LDC,N + CHARACTER TRANS,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* Purpose +* ======= +* +* DSYR2K performs one of the symmetric rank 2k operations +* +* C := alpha*A*B**T + alpha*B*A**T + beta*C, +* +* or +* +* C := alpha*A**T*B + alpha*B**T*A + beta*C, +* +* where alpha and beta are scalars, C is an n by n symmetric matrix +* and A and B are n by k matrices in the first case and k by n +* matrices in the second case. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array C is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of C +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of C +* is to be referenced. +* +* Unchanged on exit. +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + +* beta*C. +* +* TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + +* beta*C. +* +* TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A + +* beta*C. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix C. N must be +* at least zero. +* Unchanged on exit. +* +* K - INTEGER. +* On entry with TRANS = 'N' or 'n', K specifies the number +* of columns of the matrices A and B, and on entry with +* TRANS = 'T' or 't' or 'C' or 'c', K specifies the number +* of rows of the matrices A and B. K must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is +* k when TRANS = 'N' or 'n', and is n otherwise. +* Before entry with TRANS = 'N' or 'n', the leading n by k +* part of the array A must contain the matrix A, otherwise +* the leading k by n part of the array A must contain the +* matrix A. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When TRANS = 'N' or 'n' +* then LDA must be at least max( 1, n ), otherwise LDA must +* be at least max( 1, k ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is +* k when TRANS = 'N' or 'n', and is n otherwise. +* Before entry with TRANS = 'N' or 'n', the leading n by k +* part of the array B must contain the matrix B, otherwise +* the leading k by n part of the array B must contain the +* matrix B. +* Unchanged on exit. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. When TRANS = 'N' or 'n' +* then LDB must be at least max( 1, n ), otherwise LDB must +* be at least max( 1, k ). +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. +* Unchanged on exit. +* +* C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array C must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of C is not referenced. On exit, the +* upper triangular part of the array C is overwritten by the +* upper triangular part of the updated matrix. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array C must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of C is not referenced. On exit, the +* lower triangular part of the array C is overwritten by the +* lower triangular part of the updated matrix. +* +* LDC - INTEGER. +* On entry, LDC specifies the first dimension of C as declared +* in the calling (sub) program. LDC must be at least +* max( 1, n ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,J,L,NROWA + LOGICAL UPPER +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Test the input parameters. +* + IF (LSAME(TRANS,'N')) THEN + NROWA = N + ELSE + NROWA = K + END IF + UPPER = LSAME(UPLO,'U') +* + INFO = 0 + IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN + INFO = 1 + ELSE IF ((.NOT.LSAME(TRANS,'N')) .AND. + + (.NOT.LSAME(TRANS,'T')) .AND. + + (.NOT.LSAME(TRANS,'C'))) THEN + INFO = 2 + ELSE IF (N.LT.0) THEN + INFO = 3 + ELSE IF (K.LT.0) THEN + INFO = 4 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 7 + ELSE IF (LDB.LT.MAX(1,NROWA)) THEN + INFO = 9 + ELSE IF (LDC.LT.MAX(1,N)) THEN + INFO = 12 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYR2K',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. (((ALPHA.EQ.ZERO).OR. + + (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN +* +* And when alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + IF (UPPER) THEN + IF (BETA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,J + C(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1,N + DO 30 I = 1,J + C(I,J) = BETA*C(I,J) + 30 CONTINUE + 40 CONTINUE + END IF + ELSE + IF (BETA.EQ.ZERO) THEN + DO 60 J = 1,N + DO 50 I = J,N + C(I,J) = ZERO + 50 CONTINUE + 60 CONTINUE + ELSE + DO 80 J = 1,N + DO 70 I = J,N + C(I,J) = BETA*C(I,J) + 70 CONTINUE + 80 CONTINUE + END IF + END IF + RETURN + END IF +* +* Start the operations. +* + IF (LSAME(TRANS,'N')) THEN +* +* Form C := alpha*A*B**T + alpha*B*A**T + C. +* + IF (UPPER) THEN + DO 130 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 90 I = 1,J + C(I,J) = ZERO + 90 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 100 I = 1,J + C(I,J) = BETA*C(I,J) + 100 CONTINUE + END IF + DO 120 L = 1,K + IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN + TEMP1 = ALPHA*B(J,L) + TEMP2 = ALPHA*A(J,L) + DO 110 I = 1,J + C(I,J) = C(I,J) + A(I,L)*TEMP1 + + + B(I,L)*TEMP2 + 110 CONTINUE + END IF + 120 CONTINUE + 130 CONTINUE + ELSE + DO 180 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 140 I = J,N + C(I,J) = ZERO + 140 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 150 I = J,N + C(I,J) = BETA*C(I,J) + 150 CONTINUE + END IF + DO 170 L = 1,K + IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN + TEMP1 = ALPHA*B(J,L) + TEMP2 = ALPHA*A(J,L) + DO 160 I = J,N + C(I,J) = C(I,J) + A(I,L)*TEMP1 + + + B(I,L)*TEMP2 + 160 CONTINUE + END IF + 170 CONTINUE + 180 CONTINUE + END IF + ELSE +* +* Form C := alpha*A**T*B + alpha*B**T*A + C. +* + IF (UPPER) THEN + DO 210 J = 1,N + DO 200 I = 1,J + TEMP1 = ZERO + TEMP2 = ZERO + DO 190 L = 1,K + TEMP1 = TEMP1 + A(L,I)*B(L,J) + TEMP2 = TEMP2 + B(L,I)*A(L,J) + 190 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP1 + ALPHA*TEMP2 + ELSE + C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 + + + ALPHA*TEMP2 + END IF + 200 CONTINUE + 210 CONTINUE + ELSE + DO 240 J = 1,N + DO 230 I = J,N + TEMP1 = ZERO + TEMP2 = ZERO + DO 220 L = 1,K + TEMP1 = TEMP1 + A(L,I)*B(L,J) + TEMP2 = TEMP2 + B(L,I)*A(L,J) + 220 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP1 + ALPHA*TEMP2 + ELSE + C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 + + + ALPHA*TEMP2 + END IF + 230 CONTINUE + 240 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYR2K. +* + END + SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER LDA,LDB,M,N + CHARACTER DIAG,SIDE,TRANSA,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*) +* .. +* +* Purpose +* ======= +* +* DTRMM performs one of the matrix-matrix operations +* +* B := alpha*op( A )*B, or B := alpha*B*op( A ), +* +* where alpha is a scalar, B is an m by n matrix, A is a unit, or +* non-unit, upper or lower triangular matrix and op( A ) is one of +* +* op( A ) = A or op( A ) = A**T. +* +* Arguments +* ========== +* +* SIDE - CHARACTER*1. +* On entry, SIDE specifies whether op( A ) multiplies B from +* the left or right as follows: +* +* SIDE = 'L' or 'l' B := alpha*op( A )*B. +* +* SIDE = 'R' or 'r' B := alpha*B*op( A ). +* +* Unchanged on exit. +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the matrix A is an upper or +* lower triangular matrix as follows: +* +* UPLO = 'U' or 'u' A is an upper triangular matrix. +* +* UPLO = 'L' or 'l' A is a lower triangular matrix. +* +* Unchanged on exit. +* +* TRANSA - CHARACTER*1. +* On entry, TRANSA specifies the form of op( A ) to be used in +* the matrix multiplication as follows: +* +* TRANSA = 'N' or 'n' op( A ) = A. +* +* TRANSA = 'T' or 't' op( A ) = A**T. +* +* TRANSA = 'C' or 'c' op( A ) = A**T. +* +* Unchanged on exit. +* +* DIAG - CHARACTER*1. +* On entry, DIAG specifies whether or not A is unit triangular +* as follows: +* +* DIAG = 'U' or 'u' A is assumed to be unit triangular. +* +* DIAG = 'N' or 'n' A is not assumed to be unit +* triangular. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of B. M must be at +* least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of B. N must be +* at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. When alpha is +* zero then A is not referenced and B need not be set before +* entry. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m +* when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. +* Before entry with UPLO = 'U' or 'u', the leading k by k +* upper triangular part of the array A must contain the upper +* triangular matrix and the strictly lower triangular part of +* A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading k by k +* lower triangular part of the array A must contain the lower +* triangular matrix and the strictly upper triangular part of +* A is not referenced. +* Note that when DIAG = 'U' or 'u', the diagonal elements of +* A are not referenced either, but are assumed to be unity. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When SIDE = 'L' or 'l' then +* LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' +* then LDA must be at least max( 1, n ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). +* Before entry, the leading m by n part of the array B must +* contain the matrix B, and on exit is overwritten by the +* transformed matrix. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. LDB must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,K,NROWA + LOGICAL LSIDE,NOUNIT,UPPER +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Test the input parameters. +* + LSIDE = LSAME(SIDE,'L') + IF (LSIDE) THEN + NROWA = M + ELSE + NROWA = N + END IF + NOUNIT = LSAME(DIAG,'N') + UPPER = LSAME(UPLO,'U') +* + INFO = 0 + IF ((.NOT.LSIDE) .AND. (.NOT.LSAME(SIDE,'R'))) THEN + INFO = 1 + ELSE IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN + INFO = 2 + ELSE IF ((.NOT.LSAME(TRANSA,'N')) .AND. + + (.NOT.LSAME(TRANSA,'T')) .AND. + + (.NOT.LSAME(TRANSA,'C'))) THEN + INFO = 3 + ELSE IF ((.NOT.LSAME(DIAG,'U')) .AND. (.NOT.LSAME(DIAG,'N'))) THEN + INFO = 4 + ELSE IF (M.LT.0) THEN + INFO = 5 + ELSE IF (N.LT.0) THEN + INFO = 6 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 9 + ELSE IF (LDB.LT.MAX(1,M)) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (M.EQ.0 .OR. N.EQ.0) RETURN +* +* And when alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + B(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + RETURN + END IF +* +* Start the operations. +* + IF (LSIDE) THEN + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*A*B. +* + IF (UPPER) THEN + DO 50 J = 1,N + DO 40 K = 1,M + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + DO 30 I = 1,K - 1 + B(I,J) = B(I,J) + TEMP*A(I,K) + 30 CONTINUE + IF (NOUNIT) TEMP = TEMP*A(K,K) + B(K,J) = TEMP + END IF + 40 CONTINUE + 50 CONTINUE + ELSE + DO 80 J = 1,N + DO 70 K = M,1,-1 + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + B(K,J) = TEMP + IF (NOUNIT) B(K,J) = B(K,J)*A(K,K) + DO 60 I = K + 1,M + B(I,J) = B(I,J) + TEMP*A(I,K) + 60 CONTINUE + END IF + 70 CONTINUE + 80 CONTINUE + END IF + ELSE +* +* Form B := alpha*A**T*B. +* + IF (UPPER) THEN + DO 110 J = 1,N + DO 100 I = M,1,-1 + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 90 K = 1,I - 1 + TEMP = TEMP + A(K,I)*B(K,J) + 90 CONTINUE + B(I,J) = ALPHA*TEMP + 100 CONTINUE + 110 CONTINUE + ELSE + DO 140 J = 1,N + DO 130 I = 1,M + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 120 K = I + 1,M + TEMP = TEMP + A(K,I)*B(K,J) + 120 CONTINUE + B(I,J) = ALPHA*TEMP + 130 CONTINUE + 140 CONTINUE + END IF + END IF + ELSE + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*B*A. +* + IF (UPPER) THEN + DO 180 J = N,1,-1 + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = 1,M + B(I,J) = TEMP*B(I,J) + 150 CONTINUE + DO 170 K = 1,J - 1 + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 160 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 160 CONTINUE + END IF + 170 CONTINUE + 180 CONTINUE + ELSE + DO 220 J = 1,N + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 190 I = 1,M + B(I,J) = TEMP*B(I,J) + 190 CONTINUE + DO 210 K = J + 1,N + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 200 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 200 CONTINUE + END IF + 210 CONTINUE + 220 CONTINUE + END IF + ELSE +* +* Form B := alpha*B*A**T. +* + IF (UPPER) THEN + DO 260 K = 1,N + DO 240 J = 1,K - 1 + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 230 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 230 CONTINUE + END IF + 240 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 250 I = 1,M + B(I,K) = TEMP*B(I,K) + 250 CONTINUE + END IF + 260 CONTINUE + ELSE + DO 300 K = N,1,-1 + DO 280 J = K + 1,N + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 270 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 270 CONTINUE + END IF + 280 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 290 I = 1,M + B(I,K) = TEMP*B(I,K) + 290 CONTINUE + END IF + 300 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMM . +* + END + SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) +* .. Scalar Arguments .. + INTEGER INCX,LDA,N + CHARACTER DIAG,TRANS,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*) +* .. +* +* Purpose +* ======= +* +* DTRMV performs one of the matrix-vector operations +* +* x := A*x, or x := A**T*x, +* +* where x is an n element vector and A is an n by n unit, or non-unit, +* upper or lower triangular matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the matrix is an upper or +* lower triangular matrix as follows: +* +* UPLO = 'U' or 'u' A is an upper triangular matrix. +* +* UPLO = 'L' or 'l' A is a lower triangular matrix. +* +* Unchanged on exit. +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' x := A*x. +* +* TRANS = 'T' or 't' x := A**T*x. +* +* TRANS = 'C' or 'c' x := A**T*x. +* +* Unchanged on exit. +* +* DIAG - CHARACTER*1. +* On entry, DIAG specifies whether or not A is unit +* triangular as follows: +* +* DIAG = 'U' or 'u' A is assumed to be unit triangular. +* +* DIAG = 'N' or 'n' A is not assumed to be unit +* triangular. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular matrix and the strictly lower triangular part of +* A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular matrix and the strictly upper triangular part of +* A is not referenced. +* Note that when DIAG = 'U' or 'u', the diagonal elements of +* A are not referenced either, but are assumed to be unity. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. On exit, X is overwritten with the +* tranformed vector x. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,J,JX,KX + LOGICAL NOUNIT +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 2 + ELSE IF (.NOT.LSAME(DIAG,'U') .AND. .NOT.LSAME(DIAG,'N')) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (N.EQ.0) RETURN +* + NOUNIT = LSAME(DIAG,'N') +* +* Set up the start point in X if the increment is not unity. This +* will be ( N - 1 )*INCX too small for descending loops. +* + IF (INCX.LE.0) THEN + KX = 1 - (N-1)*INCX + ELSE IF (INCX.NE.1) THEN + KX = 1 + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* + IF (LSAME(TRANS,'N')) THEN +* +* Form x := A*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 20 J = 1,N + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 10 I = 1,J - 1 + X(I) = X(I) + TEMP*A(I,J) + 10 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 20 CONTINUE + ELSE + JX = KX + DO 40 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 30 I = 1,J - 1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX + INCX + 30 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX + INCX + 40 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 60 J = N,1,-1 + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 50 I = N,J + 1,-1 + X(I) = X(I) + TEMP*A(I,J) + 50 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 60 CONTINUE + ELSE + KX = KX + (N-1)*INCX + JX = KX + DO 80 J = N,1,-1 + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 70 I = N,J + 1,-1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX - INCX + 70 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX - INCX + 80 CONTINUE + END IF + END IF + ELSE +* +* Form x := A**T*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 100 J = N,1,-1 + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 90 I = J - 1,1,-1 + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + X(J) = TEMP + 100 CONTINUE + ELSE + JX = KX + (N-1)*INCX + DO 120 J = N,1,-1 + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 110 I = J - 1,1,-1 + IX = IX - INCX + TEMP = TEMP + A(I,J)*X(IX) + 110 CONTINUE + X(JX) = TEMP + JX = JX - INCX + 120 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 140 J = 1,N + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 130 I = J + 1,N + TEMP = TEMP + A(I,J)*X(I) + 130 CONTINUE + X(J) = TEMP + 140 CONTINUE + ELSE + JX = KX + DO 160 J = 1,N + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = J + 1,N + IX = IX + INCX + TEMP = TEMP + A(I,J)*X(IX) + 150 CONTINUE + X(JX) = TEMP + JX = JX + INCX + 160 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMV . +* + END diff --git a/dataassim/math/numrec/dsymv.f b/dataassim/math/numrec/dsymv.f new file mode 100644 index 0000000..5fa4341 --- /dev/null +++ b/dataassim/math/numrec/dsymv.f @@ -0,0 +1,266 @@ + SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER INCX,INCY,LDA,N + CHARACTER UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DSYMV performs the matrix-vector operation +* +* y := alpha*A*x + beta*y, +* +* where alpha and beta are scalars, x and y are n element vectors and +* A is an n by n symmetric matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array A is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of A +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of A +* is to be referenced. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of A is not referenced. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. When BETA is +* supplied as zero then Y need not be set on input. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. On exit, Y is overwritten by the updated +* vector y. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 5 + ELSE IF (INCX.EQ.0) THEN + INFO = 7 + ELSE IF (INCY.EQ.0) THEN + INFO = 10 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN +* +* Set up the start points in X and Y. +* + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (N-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (N-1)*INCY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through the triangular part +* of A. +* +* First form y := beta*y. +* + IF (BETA.NE.ONE) THEN + IF (INCY.EQ.1) THEN + IF (BETA.EQ.ZERO) THEN + DO 10 I = 1,N + Y(I) = ZERO + 10 CONTINUE + ELSE + DO 20 I = 1,N + Y(I) = BETA*Y(I) + 20 CONTINUE + END IF + ELSE + IY = KY + IF (BETA.EQ.ZERO) THEN + DO 30 I = 1,N + Y(IY) = ZERO + IY = IY + INCY + 30 CONTINUE + ELSE + DO 40 I = 1,N + Y(IY) = BETA*Y(IY) + IY = IY + INCY + 40 CONTINUE + END IF + END IF + END IF + IF (ALPHA.EQ.ZERO) RETURN + IF (LSAME(UPLO,'U')) THEN +* +* Form y when A is stored in upper triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 60 J = 1,N + TEMP1 = ALPHA*X(J) + TEMP2 = ZERO + DO 50 I = 1,J - 1 + Y(I) = Y(I) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(I) + 50 CONTINUE + Y(J) = Y(J) + TEMP1*A(J,J) + ALPHA*TEMP2 + 60 CONTINUE + ELSE + JX = KX + JY = KY + DO 80 J = 1,N + TEMP1 = ALPHA*X(JX) + TEMP2 = ZERO + IX = KX + IY = KY + DO 70 I = 1,J - 1 + Y(IY) = Y(IY) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(IX) + IX = IX + INCX + IY = IY + INCY + 70 CONTINUE + Y(JY) = Y(JY) + TEMP1*A(J,J) + ALPHA*TEMP2 + JX = JX + INCX + JY = JY + INCY + 80 CONTINUE + END IF + ELSE +* +* Form y when A is stored in lower triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 100 J = 1,N + TEMP1 = ALPHA*X(J) + TEMP2 = ZERO + Y(J) = Y(J) + TEMP1*A(J,J) + DO 90 I = J + 1,N + Y(I) = Y(I) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(I) + 90 CONTINUE + Y(J) = Y(J) + ALPHA*TEMP2 + 100 CONTINUE + ELSE + JX = KX + JY = KY + DO 120 J = 1,N + TEMP1 = ALPHA*X(JX) + TEMP2 = ZERO + Y(JY) = Y(JY) + TEMP1*A(J,J) + IX = JX + IY = JY + DO 110 I = J + 1,N + IX = IX + INCX + IY = IY + INCY + Y(IY) = Y(IY) + TEMP1*A(I,J) + TEMP2 = TEMP2 + A(I,J)*X(IX) + 110 CONTINUE + Y(JY) = Y(JY) + ALPHA*TEMP2 + JX = JX + INCX + JY = JY + INCY + 120 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYMV . +* + END diff --git a/dataassim/math/numrec/dsyr2.f b/dataassim/math/numrec/dsyr2.f new file mode 100644 index 0000000..b2b2f3d --- /dev/null +++ b/dataassim/math/numrec/dsyr2.f @@ -0,0 +1,233 @@ + SUBROUTINE DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER INCX,INCY,LDA,N + CHARACTER UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*),Y(*) +* .. +* +* Purpose +* ======= +* +* DSYR2 performs the symmetric rank 2 operation +* +* A := alpha*x*y**T + alpha*y*x**T + A, +* +* where alpha is a scalar, x and y are n element vectors and A is an n +* by n symmetric matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array A is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of A +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of A +* is to be referenced. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. +* Unchanged on exit. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Y - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCY ) ). +* Before entry, the incremented array Y must contain the n +* element vector y. +* Unchanged on exit. +* +* INCY - INTEGER. +* On entry, INCY specifies the increment for the elements of +* Y. INCY must not be zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of A is not referenced. On exit, the +* upper triangular part of the array A is overwritten by the +* upper triangular part of the updated matrix. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of A is not referenced. On exit, the +* lower triangular part of the array A is overwritten by the +* lower triangular part of the updated matrix. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (N.LT.0) THEN + INFO = 2 + ELSE IF (INCX.EQ.0) THEN + INFO = 5 + ELSE IF (INCY.EQ.0) THEN + INFO = 7 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 9 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYR2 ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN +* +* Set up the start points in X and Y if the increments are not both +* unity. +* + IF ((INCX.NE.1) .OR. (INCY.NE.1)) THEN + IF (INCX.GT.0) THEN + KX = 1 + ELSE + KX = 1 - (N-1)*INCX + END IF + IF (INCY.GT.0) THEN + KY = 1 + ELSE + KY = 1 - (N-1)*INCY + END IF + JX = KX + JY = KY + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through the triangular part +* of A. +* + IF (LSAME(UPLO,'U')) THEN +* +* Form A when A is stored in the upper triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 20 J = 1,N + IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(J) + TEMP2 = ALPHA*X(J) + DO 10 I = 1,J + A(I,J) = A(I,J) + X(I)*TEMP1 + Y(I)*TEMP2 + 10 CONTINUE + END IF + 20 CONTINUE + ELSE + DO 40 J = 1,N + IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(JY) + TEMP2 = ALPHA*X(JX) + IX = KX + IY = KY + DO 30 I = 1,J + A(I,J) = A(I,J) + X(IX)*TEMP1 + Y(IY)*TEMP2 + IX = IX + INCX + IY = IY + INCY + 30 CONTINUE + END IF + JX = JX + INCX + JY = JY + INCY + 40 CONTINUE + END IF + ELSE +* +* Form A when A is stored in the lower triangle. +* + IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN + DO 60 J = 1,N + IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(J) + TEMP2 = ALPHA*X(J) + DO 50 I = J,N + A(I,J) = A(I,J) + X(I)*TEMP1 + Y(I)*TEMP2 + 50 CONTINUE + END IF + 60 CONTINUE + ELSE + DO 80 J = 1,N + IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN + TEMP1 = ALPHA*Y(JY) + TEMP2 = ALPHA*X(JX) + IX = JX + IY = JY + DO 70 I = J,N + A(I,J) = A(I,J) + X(IX)*TEMP1 + Y(IY)*TEMP2 + IX = IX + INCX + IY = IY + INCY + 70 CONTINUE + END IF + JX = JX + INCX + JY = JY + INCY + 80 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYR2 . +* + END diff --git a/dataassim/math/numrec/dsyr2k.f b/dataassim/math/numrec/dsyr2k.f new file mode 100644 index 0000000..7289b05 --- /dev/null +++ b/dataassim/math/numrec/dsyr2k.f @@ -0,0 +1,329 @@ + SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA,BETA + INTEGER K,LDA,LDB,LDC,N + CHARACTER TRANS,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) +* .. +* +* Purpose +* ======= +* +* DSYR2K performs one of the symmetric rank 2k operations +* +* C := alpha*A*B**T + alpha*B*A**T + beta*C, +* +* or +* +* C := alpha*A**T*B + alpha*B**T*A + beta*C, +* +* where alpha and beta are scalars, C is an n by n symmetric matrix +* and A and B are n by k matrices in the first case and k by n +* matrices in the second case. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the upper or lower +* triangular part of the array C is to be referenced as +* follows: +* +* UPLO = 'U' or 'u' Only the upper triangular part of C +* is to be referenced. +* +* UPLO = 'L' or 'l' Only the lower triangular part of C +* is to be referenced. +* +* Unchanged on exit. +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + +* beta*C. +* +* TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + +* beta*C. +* +* TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A + +* beta*C. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix C. N must be +* at least zero. +* Unchanged on exit. +* +* K - INTEGER. +* On entry with TRANS = 'N' or 'n', K specifies the number +* of columns of the matrices A and B, and on entry with +* TRANS = 'T' or 't' or 'C' or 'c', K specifies the number +* of rows of the matrices A and B. K must be at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is +* k when TRANS = 'N' or 'n', and is n otherwise. +* Before entry with TRANS = 'N' or 'n', the leading n by k +* part of the array A must contain the matrix A, otherwise +* the leading k by n part of the array A must contain the +* matrix A. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When TRANS = 'N' or 'n' +* then LDA must be at least max( 1, n ), otherwise LDA must +* be at least max( 1, k ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is +* k when TRANS = 'N' or 'n', and is n otherwise. +* Before entry with TRANS = 'N' or 'n', the leading n by k +* part of the array B must contain the matrix B, otherwise +* the leading k by n part of the array B must contain the +* matrix B. +* Unchanged on exit. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. When TRANS = 'N' or 'n' +* then LDB must be at least max( 1, n ), otherwise LDB must +* be at least max( 1, k ). +* Unchanged on exit. +* +* BETA - DOUBLE PRECISION. +* On entry, BETA specifies the scalar beta. +* Unchanged on exit. +* +* C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array C must contain the upper +* triangular part of the symmetric matrix and the strictly +* lower triangular part of C is not referenced. On exit, the +* upper triangular part of the array C is overwritten by the +* upper triangular part of the updated matrix. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array C must contain the lower +* triangular part of the symmetric matrix and the strictly +* upper triangular part of C is not referenced. On exit, the +* lower triangular part of the array C is overwritten by the +* lower triangular part of the updated matrix. +* +* LDC - INTEGER. +* On entry, LDC specifies the first dimension of C as declared +* in the calling (sub) program. LDC must be at least +* max( 1, n ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP1,TEMP2 + INTEGER I,INFO,J,L,NROWA + LOGICAL UPPER +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Test the input parameters. +* + IF (LSAME(TRANS,'N')) THEN + NROWA = N + ELSE + NROWA = K + END IF + UPPER = LSAME(UPLO,'U') +* + INFO = 0 + IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN + INFO = 1 + ELSE IF ((.NOT.LSAME(TRANS,'N')) .AND. + + (.NOT.LSAME(TRANS,'T')) .AND. + + (.NOT.LSAME(TRANS,'C'))) THEN + INFO = 2 + ELSE IF (N.LT.0) THEN + INFO = 3 + ELSE IF (K.LT.0) THEN + INFO = 4 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 7 + ELSE IF (LDB.LT.MAX(1,NROWA)) THEN + INFO = 9 + ELSE IF (LDC.LT.MAX(1,N)) THEN + INFO = 12 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DSYR2K',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF ((N.EQ.0) .OR. (((ALPHA.EQ.ZERO).OR. + + (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN +* +* And when alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + IF (UPPER) THEN + IF (BETA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,J + C(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + ELSE + DO 40 J = 1,N + DO 30 I = 1,J + C(I,J) = BETA*C(I,J) + 30 CONTINUE + 40 CONTINUE + END IF + ELSE + IF (BETA.EQ.ZERO) THEN + DO 60 J = 1,N + DO 50 I = J,N + C(I,J) = ZERO + 50 CONTINUE + 60 CONTINUE + ELSE + DO 80 J = 1,N + DO 70 I = J,N + C(I,J) = BETA*C(I,J) + 70 CONTINUE + 80 CONTINUE + END IF + END IF + RETURN + END IF +* +* Start the operations. +* + IF (LSAME(TRANS,'N')) THEN +* +* Form C := alpha*A*B**T + alpha*B*A**T + C. +* + IF (UPPER) THEN + DO 130 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 90 I = 1,J + C(I,J) = ZERO + 90 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 100 I = 1,J + C(I,J) = BETA*C(I,J) + 100 CONTINUE + END IF + DO 120 L = 1,K + IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN + TEMP1 = ALPHA*B(J,L) + TEMP2 = ALPHA*A(J,L) + DO 110 I = 1,J + C(I,J) = C(I,J) + A(I,L)*TEMP1 + + + B(I,L)*TEMP2 + 110 CONTINUE + END IF + 120 CONTINUE + 130 CONTINUE + ELSE + DO 180 J = 1,N + IF (BETA.EQ.ZERO) THEN + DO 140 I = J,N + C(I,J) = ZERO + 140 CONTINUE + ELSE IF (BETA.NE.ONE) THEN + DO 150 I = J,N + C(I,J) = BETA*C(I,J) + 150 CONTINUE + END IF + DO 170 L = 1,K + IF ((A(J,L).NE.ZERO) .OR. (B(J,L).NE.ZERO)) THEN + TEMP1 = ALPHA*B(J,L) + TEMP2 = ALPHA*A(J,L) + DO 160 I = J,N + C(I,J) = C(I,J) + A(I,L)*TEMP1 + + + B(I,L)*TEMP2 + 160 CONTINUE + END IF + 170 CONTINUE + 180 CONTINUE + END IF + ELSE +* +* Form C := alpha*A**T*B + alpha*B**T*A + C. +* + IF (UPPER) THEN + DO 210 J = 1,N + DO 200 I = 1,J + TEMP1 = ZERO + TEMP2 = ZERO + DO 190 L = 1,K + TEMP1 = TEMP1 + A(L,I)*B(L,J) + TEMP2 = TEMP2 + B(L,I)*A(L,J) + 190 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP1 + ALPHA*TEMP2 + ELSE + C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 + + + ALPHA*TEMP2 + END IF + 200 CONTINUE + 210 CONTINUE + ELSE + DO 240 J = 1,N + DO 230 I = J,N + TEMP1 = ZERO + TEMP2 = ZERO + DO 220 L = 1,K + TEMP1 = TEMP1 + A(L,I)*B(L,J) + TEMP2 = TEMP2 + B(L,I)*A(L,J) + 220 CONTINUE + IF (BETA.EQ.ZERO) THEN + C(I,J) = ALPHA*TEMP1 + ALPHA*TEMP2 + ELSE + C(I,J) = BETA*C(I,J) + ALPHA*TEMP1 + + + ALPHA*TEMP2 + END IF + 230 CONTINUE + 240 CONTINUE + END IF + END IF +* + RETURN +* +* End of DSYR2K. +* + END diff --git a/dataassim/math/numrec/dtrmm.f b/dataassim/math/numrec/dtrmm.f new file mode 100644 index 0000000..fc03769 --- /dev/null +++ b/dataassim/math/numrec/dtrmm.f @@ -0,0 +1,349 @@ + SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) +* .. Scalar Arguments .. + DOUBLE PRECISION ALPHA + INTEGER LDA,LDB,M,N + CHARACTER DIAG,SIDE,TRANSA,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),B(LDB,*) +* .. +* +* Purpose +* ======= +* +* DTRMM performs one of the matrix-matrix operations +* +* B := alpha*op( A )*B, or B := alpha*B*op( A ), +* +* where alpha is a scalar, B is an m by n matrix, A is a unit, or +* non-unit, upper or lower triangular matrix and op( A ) is one of +* +* op( A ) = A or op( A ) = A**T. +* +* Arguments +* ========== +* +* SIDE - CHARACTER*1. +* On entry, SIDE specifies whether op( A ) multiplies B from +* the left or right as follows: +* +* SIDE = 'L' or 'l' B := alpha*op( A )*B. +* +* SIDE = 'R' or 'r' B := alpha*B*op( A ). +* +* Unchanged on exit. +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the matrix A is an upper or +* lower triangular matrix as follows: +* +* UPLO = 'U' or 'u' A is an upper triangular matrix. +* +* UPLO = 'L' or 'l' A is a lower triangular matrix. +* +* Unchanged on exit. +* +* TRANSA - CHARACTER*1. +* On entry, TRANSA specifies the form of op( A ) to be used in +* the matrix multiplication as follows: +* +* TRANSA = 'N' or 'n' op( A ) = A. +* +* TRANSA = 'T' or 't' op( A ) = A**T. +* +* TRANSA = 'C' or 'c' op( A ) = A**T. +* +* Unchanged on exit. +* +* DIAG - CHARACTER*1. +* On entry, DIAG specifies whether or not A is unit triangular +* as follows: +* +* DIAG = 'U' or 'u' A is assumed to be unit triangular. +* +* DIAG = 'N' or 'n' A is not assumed to be unit +* triangular. +* +* Unchanged on exit. +* +* M - INTEGER. +* On entry, M specifies the number of rows of B. M must be at +* least zero. +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the number of columns of B. N must be +* at least zero. +* Unchanged on exit. +* +* ALPHA - DOUBLE PRECISION. +* On entry, ALPHA specifies the scalar alpha. When alpha is +* zero then A is not referenced and B need not be set before +* entry. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m +* when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. +* Before entry with UPLO = 'U' or 'u', the leading k by k +* upper triangular part of the array A must contain the upper +* triangular matrix and the strictly lower triangular part of +* A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading k by k +* lower triangular part of the array A must contain the lower +* triangular matrix and the strictly upper triangular part of +* A is not referenced. +* Note that when DIAG = 'U' or 'u', the diagonal elements of +* A are not referenced either, but are assumed to be unity. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. When SIDE = 'L' or 'l' then +* LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' +* then LDA must be at least max( 1, n ). +* Unchanged on exit. +* +* B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). +* Before entry, the leading m by n part of the array B must +* contain the matrix B, and on exit is overwritten by the +* transformed matrix. +* +* LDB - INTEGER. +* On entry, LDB specifies the first dimension of B as declared +* in the calling (sub) program. LDB must be at least +* max( 1, m ). +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 3 Blas routine. +* +* -- Written on 8-February-1989. +* Jack Dongarra, Argonne National Laboratory. +* Iain Duff, AERE Harwell. +* Jeremy Du Croz, Numerical Algorithms Group Ltd. +* Sven Hammarling, Numerical Algorithms Group Ltd. +* +* ===================================================================== +* +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,J,K,NROWA + LOGICAL LSIDE,NOUNIT,UPPER +* .. +* .. Parameters .. + DOUBLE PRECISION ONE,ZERO + PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) +* .. +* +* Test the input parameters. +* + LSIDE = LSAME(SIDE,'L') + IF (LSIDE) THEN + NROWA = M + ELSE + NROWA = N + END IF + NOUNIT = LSAME(DIAG,'N') + UPPER = LSAME(UPLO,'U') +* + INFO = 0 + IF ((.NOT.LSIDE) .AND. (.NOT.LSAME(SIDE,'R'))) THEN + INFO = 1 + ELSE IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN + INFO = 2 + ELSE IF ((.NOT.LSAME(TRANSA,'N')) .AND. + + (.NOT.LSAME(TRANSA,'T')) .AND. + + (.NOT.LSAME(TRANSA,'C'))) THEN + INFO = 3 + ELSE IF ((.NOT.LSAME(DIAG,'U')) .AND. (.NOT.LSAME(DIAG,'N'))) THEN + INFO = 4 + ELSE IF (M.LT.0) THEN + INFO = 5 + ELSE IF (N.LT.0) THEN + INFO = 6 + ELSE IF (LDA.LT.MAX(1,NROWA)) THEN + INFO = 9 + ELSE IF (LDB.LT.MAX(1,M)) THEN + INFO = 11 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMM ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (M.EQ.0 .OR. N.EQ.0) RETURN +* +* And when alpha.eq.zero. +* + IF (ALPHA.EQ.ZERO) THEN + DO 20 J = 1,N + DO 10 I = 1,M + B(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + RETURN + END IF +* +* Start the operations. +* + IF (LSIDE) THEN + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*A*B. +* + IF (UPPER) THEN + DO 50 J = 1,N + DO 40 K = 1,M + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + DO 30 I = 1,K - 1 + B(I,J) = B(I,J) + TEMP*A(I,K) + 30 CONTINUE + IF (NOUNIT) TEMP = TEMP*A(K,K) + B(K,J) = TEMP + END IF + 40 CONTINUE + 50 CONTINUE + ELSE + DO 80 J = 1,N + DO 70 K = M,1,-1 + IF (B(K,J).NE.ZERO) THEN + TEMP = ALPHA*B(K,J) + B(K,J) = TEMP + IF (NOUNIT) B(K,J) = B(K,J)*A(K,K) + DO 60 I = K + 1,M + B(I,J) = B(I,J) + TEMP*A(I,K) + 60 CONTINUE + END IF + 70 CONTINUE + 80 CONTINUE + END IF + ELSE +* +* Form B := alpha*A**T*B. +* + IF (UPPER) THEN + DO 110 J = 1,N + DO 100 I = M,1,-1 + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 90 K = 1,I - 1 + TEMP = TEMP + A(K,I)*B(K,J) + 90 CONTINUE + B(I,J) = ALPHA*TEMP + 100 CONTINUE + 110 CONTINUE + ELSE + DO 140 J = 1,N + DO 130 I = 1,M + TEMP = B(I,J) + IF (NOUNIT) TEMP = TEMP*A(I,I) + DO 120 K = I + 1,M + TEMP = TEMP + A(K,I)*B(K,J) + 120 CONTINUE + B(I,J) = ALPHA*TEMP + 130 CONTINUE + 140 CONTINUE + END IF + END IF + ELSE + IF (LSAME(TRANSA,'N')) THEN +* +* Form B := alpha*B*A. +* + IF (UPPER) THEN + DO 180 J = N,1,-1 + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = 1,M + B(I,J) = TEMP*B(I,J) + 150 CONTINUE + DO 170 K = 1,J - 1 + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 160 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 160 CONTINUE + END IF + 170 CONTINUE + 180 CONTINUE + ELSE + DO 220 J = 1,N + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 190 I = 1,M + B(I,J) = TEMP*B(I,J) + 190 CONTINUE + DO 210 K = J + 1,N + IF (A(K,J).NE.ZERO) THEN + TEMP = ALPHA*A(K,J) + DO 200 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 200 CONTINUE + END IF + 210 CONTINUE + 220 CONTINUE + END IF + ELSE +* +* Form B := alpha*B*A**T. +* + IF (UPPER) THEN + DO 260 K = 1,N + DO 240 J = 1,K - 1 + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 230 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 230 CONTINUE + END IF + 240 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 250 I = 1,M + B(I,K) = TEMP*B(I,K) + 250 CONTINUE + END IF + 260 CONTINUE + ELSE + DO 300 K = N,1,-1 + DO 280 J = K + 1,N + IF (A(J,K).NE.ZERO) THEN + TEMP = ALPHA*A(J,K) + DO 270 I = 1,M + B(I,J) = B(I,J) + TEMP*B(I,K) + 270 CONTINUE + END IF + 280 CONTINUE + TEMP = ALPHA + IF (NOUNIT) TEMP = TEMP*A(K,K) + IF (TEMP.NE.ONE) THEN + DO 290 I = 1,M + B(I,K) = TEMP*B(I,K) + 290 CONTINUE + END IF + 300 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMM . +* + END diff --git a/dataassim/math/numrec/dtrmv.f b/dataassim/math/numrec/dtrmv.f new file mode 100644 index 0000000..5356cbb --- /dev/null +++ b/dataassim/math/numrec/dtrmv.f @@ -0,0 +1,282 @@ + SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) +* .. Scalar Arguments .. + INTEGER INCX,LDA,N + CHARACTER DIAG,TRANS,UPLO +* .. +* .. Array Arguments .. + DOUBLE PRECISION A(LDA,*),X(*) +* .. +* +* Purpose +* ======= +* +* DTRMV performs one of the matrix-vector operations +* +* x := A*x, or x := A**T*x, +* +* where x is an n element vector and A is an n by n unit, or non-unit, +* upper or lower triangular matrix. +* +* Arguments +* ========== +* +* UPLO - CHARACTER*1. +* On entry, UPLO specifies whether the matrix is an upper or +* lower triangular matrix as follows: +* +* UPLO = 'U' or 'u' A is an upper triangular matrix. +* +* UPLO = 'L' or 'l' A is a lower triangular matrix. +* +* Unchanged on exit. +* +* TRANS - CHARACTER*1. +* On entry, TRANS specifies the operation to be performed as +* follows: +* +* TRANS = 'N' or 'n' x := A*x. +* +* TRANS = 'T' or 't' x := A**T*x. +* +* TRANS = 'C' or 'c' x := A**T*x. +* +* Unchanged on exit. +* +* DIAG - CHARACTER*1. +* On entry, DIAG specifies whether or not A is unit +* triangular as follows: +* +* DIAG = 'U' or 'u' A is assumed to be unit triangular. +* +* DIAG = 'N' or 'n' A is not assumed to be unit +* triangular. +* +* Unchanged on exit. +* +* N - INTEGER. +* On entry, N specifies the order of the matrix A. +* N must be at least zero. +* Unchanged on exit. +* +* A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). +* Before entry with UPLO = 'U' or 'u', the leading n by n +* upper triangular part of the array A must contain the upper +* triangular matrix and the strictly lower triangular part of +* A is not referenced. +* Before entry with UPLO = 'L' or 'l', the leading n by n +* lower triangular part of the array A must contain the lower +* triangular matrix and the strictly upper triangular part of +* A is not referenced. +* Note that when DIAG = 'U' or 'u', the diagonal elements of +* A are not referenced either, but are assumed to be unity. +* Unchanged on exit. +* +* LDA - INTEGER. +* On entry, LDA specifies the first dimension of A as declared +* in the calling (sub) program. LDA must be at least +* max( 1, n ). +* Unchanged on exit. +* +* X - DOUBLE PRECISION array of dimension at least +* ( 1 + ( n - 1 )*abs( INCX ) ). +* Before entry, the incremented array X must contain the n +* element vector x. On exit, X is overwritten with the +* tranformed vector x. +* +* INCX - INTEGER. +* On entry, INCX specifies the increment for the elements of +* X. INCX must not be zero. +* Unchanged on exit. +* +* Further Details +* =============== +* +* Level 2 Blas routine. +* The vector and matrix arguments are not referenced when N = 0, or M = 0 +* +* -- Written on 22-October-1986. +* Jack Dongarra, Argonne National Lab. +* Jeremy Du Croz, Nag Central Office. +* Sven Hammarling, Nag Central Office. +* Richard Hanson, Sandia National Labs. +* +* ===================================================================== +* +* .. Parameters .. + DOUBLE PRECISION ZERO + PARAMETER (ZERO=0.0D+0) +* .. +* .. Local Scalars .. + DOUBLE PRECISION TEMP + INTEGER I,INFO,IX,J,JX,KX + LOGICAL NOUNIT +* .. +* .. External Functions .. + LOGICAL LSAME + EXTERNAL LSAME +* .. +* .. External Subroutines .. + EXTERNAL XERBLA +* .. +* .. Intrinsic Functions .. + INTRINSIC MAX +* .. +* +* Test the input parameters. +* + INFO = 0 + IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN + INFO = 1 + ELSE IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + + .NOT.LSAME(TRANS,'C')) THEN + INFO = 2 + ELSE IF (.NOT.LSAME(DIAG,'U') .AND. .NOT.LSAME(DIAG,'N')) THEN + INFO = 3 + ELSE IF (N.LT.0) THEN + INFO = 4 + ELSE IF (LDA.LT.MAX(1,N)) THEN + INFO = 6 + ELSE IF (INCX.EQ.0) THEN + INFO = 8 + END IF + IF (INFO.NE.0) THEN + CALL XERBLA('DTRMV ',INFO) + RETURN + END IF +* +* Quick return if possible. +* + IF (N.EQ.0) RETURN +* + NOUNIT = LSAME(DIAG,'N') +* +* Set up the start point in X if the increment is not unity. This +* will be ( N - 1 )*INCX too small for descending loops. +* + IF (INCX.LE.0) THEN + KX = 1 - (N-1)*INCX + ELSE IF (INCX.NE.1) THEN + KX = 1 + END IF +* +* Start the operations. In this version the elements of A are +* accessed sequentially with one pass through A. +* + IF (LSAME(TRANS,'N')) THEN +* +* Form x := A*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 20 J = 1,N + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 10 I = 1,J - 1 + X(I) = X(I) + TEMP*A(I,J) + 10 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 20 CONTINUE + ELSE + JX = KX + DO 40 J = 1,N + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 30 I = 1,J - 1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX + INCX + 30 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX + INCX + 40 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 60 J = N,1,-1 + IF (X(J).NE.ZERO) THEN + TEMP = X(J) + DO 50 I = N,J + 1,-1 + X(I) = X(I) + TEMP*A(I,J) + 50 CONTINUE + IF (NOUNIT) X(J) = X(J)*A(J,J) + END IF + 60 CONTINUE + ELSE + KX = KX + (N-1)*INCX + JX = KX + DO 80 J = N,1,-1 + IF (X(JX).NE.ZERO) THEN + TEMP = X(JX) + IX = KX + DO 70 I = N,J + 1,-1 + X(IX) = X(IX) + TEMP*A(I,J) + IX = IX - INCX + 70 CONTINUE + IF (NOUNIT) X(JX) = X(JX)*A(J,J) + END IF + JX = JX - INCX + 80 CONTINUE + END IF + END IF + ELSE +* +* Form x := A**T*x. +* + IF (LSAME(UPLO,'U')) THEN + IF (INCX.EQ.1) THEN + DO 100 J = N,1,-1 + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 90 I = J - 1,1,-1 + TEMP = TEMP + A(I,J)*X(I) + 90 CONTINUE + X(J) = TEMP + 100 CONTINUE + ELSE + JX = KX + (N-1)*INCX + DO 120 J = N,1,-1 + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 110 I = J - 1,1,-1 + IX = IX - INCX + TEMP = TEMP + A(I,J)*X(IX) + 110 CONTINUE + X(JX) = TEMP + JX = JX - INCX + 120 CONTINUE + END IF + ELSE + IF (INCX.EQ.1) THEN + DO 140 J = 1,N + TEMP = X(J) + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 130 I = J + 1,N + TEMP = TEMP + A(I,J)*X(I) + 130 CONTINUE + X(J) = TEMP + 140 CONTINUE + ELSE + JX = KX + DO 160 J = 1,N + TEMP = X(JX) + IX = JX + IF (NOUNIT) TEMP = TEMP*A(J,J) + DO 150 I = J + 1,N + IX = IX + INCX + TEMP = TEMP + A(I,J)*X(IX) + 150 CONTINUE + X(JX) = TEMP + JX = JX + INCX + 160 CONTINUE + END IF + END IF + END IF +* + RETURN +* +* End of DTRMV . +* + END diff --git a/dataassim/math/numrec/f77_sources/d_svdfit.f b/dataassim/math/numrec/f77_sources/d_svdfit.f new file mode 100644 index 0000000..5902572 --- /dev/null +++ b/dataassim/math/numrec/f77_sources/d_svdfit.f @@ -0,0 +1,38 @@ + SUBROUTINE svdfit(x,y,sig,ndata,a,ma,u,v,w,mp,np,chisq,funcs) + INTEGER ma,mp,ndata,np,NMAX,MMAX + REAL chisq,a(ma),sig(ndata),u(mp,np),v(np,np),w(np),x(ndata), + *y(ndata),TOL + EXTERNAL funcs + PARAMETER (NMAX=1000,MMAX=50,TOL=1.e-5) +CU USES svbksb,svdcmp + INTEGER i,j + REAL sum,thresh,tmp,wmax,afunc(MMAX),b(NMAX) + do 12 i=1,ndata + call funcs(x(i),afunc,ma) + tmp=1./sig(i) + do 11 j=1,ma + u(i,j)=afunc(j)*tmp +11 continue + b(i)=y(i)*tmp +12 continue + call svdcmp(u,ndata,ma,mp,np,w,v) + wmax=0. + do 13 j=1,ma + if(w(j).gt.wmax)wmax=w(j) +13 continue + thresh=TOL*wmax + do 14 j=1,ma + if(w(j).lt.thresh)w(j)=0. +14 continue + call svbksb(u,w,v,ndata,ma,mp,np,b,a) + chisq=0. + do 16 i=1,ndata + call funcs(x(i),afunc,ma) + sum=0. + do 15 j=1,ma + sum=sum+a(j)*afunc(j) +15 continue + chisq=chisq+((y(i)-sum)/sig(i))**2 +16 continue + return + END diff --git a/dataassim/math/optimization/CompassSearch.f b/dataassim/math/optimization/CompassSearch.f index 86e635f..ca93768 100644 --- a/dataassim/math/optimization/CompassSearch.f +++ b/dataassim/math/optimization/CompassSearch.f @@ -3,7 +3,7 @@ implicit none integer ndim double precision xbest(1:ndim),fbest, - & bmin(1:ndim),bmax(1:ndim),xtol + & bmin(1:ndim),bmax(1:ndim),xtol,f1dim double precision fvalpre,dmax,xpre(1:ndim),ftol,direction(ndim) integer i,n logical resetran2 @@ -62,7 +62,7 @@ ! =1 convergence criterion reached (minimum found) ! integer ndim - double precision xbest(1:ndim),fbest, + double precision xbest(1:ndim),fbest,f1dim, & bmin(1:ndim),bmax(1:ndim),xtol,dx1,dx2 external funkmin,f1dim !------------------------------- Locals ----------------------------------------------------------- @@ -71,10 +71,10 @@ & xvec(1:ndim),xcent(1:ndim),fcent,dif,shrink, & direction(ndim),dmax,fcent0,ran2_reset,ran2 integer i,j,k,iter - parameter(shrink=0.618d0) + parameter(shrink=0.95d0) ! diftol=xtol - delta=0.618d0 + delta=0.95d0 do i=1,ndim xcent(i)=xbest(i) enddo diff --git a/dataassim/math/optimization/GenericOptim.f b/dataassim/math/optimization/GenericOptim.f new file mode 100644 index 0000000..b099c39 --- /dev/null +++ b/dataassim/math/optimization/GenericOptim.f @@ -0,0 +1,35 @@ + subroutine GenericOptim(FuncToMinimize,f1dim_FuncToMinimize, + &ndim,beta,betamin,betamax,fatbeta) + implicit none + integer ndim,i + double precision beta(ndim),betamin(ndim),betamax(ndim), + &fatbeta +! + double precision ftol,fatbeta0,beta0(ndim) + parameter(ftol=1.0d-10) + external FuncToMinimize,f1dim_FuncToMinimize + call FuncToMinimize(ndim,beta,fatbeta) +10 fatbeta0=fatbeta + do i=1,ndim + beta0(i)=beta(i) + enddo + call nongradopt(ndim,FuncToMinimize,f1dim_FuncToMinimize,beta, + &betamin,betamax,ftol,fatbeta) + call FuncToMinimize(ndim,beta,fatbeta) + write(*,*)fatbeta + call RepeatCompassSearch(ndim,beta,fatbeta,betamin,betamax, + &FuncToMinimize,f1dim_FuncToMinimize,ftol) + call FuncToMinimize(ndim,beta,fatbeta) + write(*,*)fatbeta + write(*,*) + + if((fatbeta0-fatbeta).gt.ftol)goto 10 + if(fatbeta0.lt.fatbeta)then + fatbeta=fatbeta0 + do i=1,ndim + beta(i)=beta0(i) + enddo + endif + return + end subroutine GenericOptim +!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ diff --git a/dataassim/math/optimization/GenericRegres.f b/dataassim/math/optimization/GenericRegres.f index bd9c715..0ed4c2b 100644 --- a/dataassim/math/optimization/GenericRegres.f +++ b/dataassim/math/optimization/GenericRegres.f @@ -17,10 +17,11 @@ &beta_in_out(ndim0),betamin0(ndim0),betamax0(ndim0), &shorty0(npoints,ny),shortx0(npoints,nx),fatbeta ! - integer i,j,INFO,ndim,k + integer i,j,INFO,ndim,k,n,i2,icompete,isitnaninf,nave double precision xtol,beta(ndim0+nx*npoints), &betacp(ndim0+nx*npoints),fatbetacp,beta0(ndim0+nx*npoints), - &fatbeta0,ftol,gacontrol(12),ran2,ftol_relax + &fatbeta0,ftol,gacontrol(12),ran2,ftol_relax,term1,term2,discount, + &history(2000,ndim0+3),upper,lower,f1dim_generic,generic_pikaia parameter(xtol=1.0d-7,ftol=1.0d-7) external funkmin_generic,FCN_generic,f1dim_generic,generic_pikaia !----------------------------------------------------- @@ -97,26 +98,124 @@ c (default is 0) 10 call funkmin_generic(ndim,beta,fatbeta) do i=1,ndim beta0(i)=beta(i) + history(1,i)=beta(i) enddo fatbeta0=fatbeta + history(1,ndim+1)=fatbeta +!entrance counter + history(1,ndim+2)=1.0d0 +!failure counter + history(1,ndim+3)=0.0d0 +!Is it a competition among different initial guesses? + icompete=0 +!j the total number of calls to nongradopt; k is the number of returns to the current best and reset +!to zero if a better minumum is found; n is the number of scouting points over the landscape of the cost function. +!The first initial guess provided by the user is always part of the set of scouting points.the rest consist of outcomes +!from calls to nongradopt if they are significantly different from the current best. j=0 k=0 - ftol_relax=ftol*100.0d0 -30 call nongradopt(ndim,funkmin_generic, - &f1dim_generic,beta,betamin,betamax,ftol_relax,fatbeta) + n=1 + nave=1 + ftol_relax=ftol*1000.0d0 + discount=2.0d0 +!relax the convergence criterion for scouting +30 fatbetacp=fatbeta + do i=1,ndim + betacp(i)=beta(i) + enddo + INFO=iregrestype + call odr_leastsquare(ndim,FCN_generic,beta,nobs, + &xvars(1:nobs,1:nxvars),nxvars,yobs(1:nobs,1:nyvars), + &nyvars,weitx(1:nobs,1:nxvars),weity(1:nobs,1:nyvars), + &iderivative,shortx(1:nobs,1:nxvars), + &shorty(1:nobs,1:nyvars),fatbeta,INFO) call funkmin_generic(ndim,beta,fatbeta) - if((fatbeta+1.0d0).eq.fatbeta.or.fatbeta.gt.fatbeta0)then + if(isitnaninf(fatbeta).eq.1.or.fatbeta.gt.fatbetacp)then + fatbeta=fatbetacp do i=1,ndim + beta(i)=betacp(i) + enddo + else + fatbetacp=fatbeta + do i=1,ndim + betacp(i)=beta(i) + enddo + endif + call nongradopt(ndim,funkmin_generic,f1dim_generic, + &beta,betamin,betamax,ftol_relax,fatbeta) + if(isitnaninf(fatbeta).eq.1.or.fatbeta.gt.fatbetacp)then + fatbeta=fatbetacp + do i=1,ndim + beta(i)=betacp(i) + enddo + endif + if(fatbeta.gt.1.0d0)then + term1=fatbeta*ftol_relax + else + term1=ftol_relax*10.0d0 + endif + if(fatbeta.gt.fatbeta0)then +!failure + if((fatbeta-fatbeta0).gt.term1)then + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.5d0 +!even though fatbeta is much worse than fatbeta0, it is an output of optimization after all so +!include it in the set if it has not already been included in the set. + i=1 + i2=1 +40 if(dabs(history(i2,i)-beta(i)).gt.ftol_relax)then + if(dabs(history(i2,ndim+1)-fatbeta).lt.term1)then + history(i2,ndim+3)=history(i2,ndim+3)+1.0d0 + goto 60 + endif + if(i2.ge.n)goto 50 + i2=i2+1 + i=1 + goto 40 + else + if(i.ge.ndim)goto 60 + i=i+1 + goto 40 + endif +50 n=n+1 + do i=1,ndim + history(n,i)=beta(i) + enddo + history(n,ndim+1)=fatbeta + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 +!use average only when there is imporvement + nave=n + else +!the difference is minimal even though fatbeta is larger than fatbeta0. +!Increment the counter for arriving at the same minimum. + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.0d0 + k=k+1 + endif +60 do i=1,ndim beta(i)=beta0(i) enddo fatbeta=fatbeta0 else - if((fatbeta0-fatbeta).lt.ftol_relax)then -!increment the counter for arriving at the same minimum +!success + if((fatbeta0-fatbeta).lt.term1)then +!negligible improvement. Increment the counter for arriving at the same minimum. +!no increment for the set of central initial guesses + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+0.5d0 k=k+1 else -!reset the counter for arriving at a better minimum +!reset the counter for arriving at a better minimum. +!Increment the set of central initial guesses + if(dabs(discount-2.0d0).lt.ftol)then + discount=dmax1(0.001d0,(fatbeta0-fatbeta)/1000.0d0) + endif k=0 + n=n+1 + do i=1,ndim + history(n,i)=beta(i) + enddo + history(n,ndim+1)=fatbeta + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 endif do i=1,ndim beta0(i)=beta(i) @@ -124,54 +223,125 @@ c (default is 0) fatbeta0=fatbeta endif j=j+1 -!try different initial guesses - if(j.lt.100.and.k.lt.5)then - if(ran2().gt.0.3d0)then + if(j.lt.20.and.k.lt.2)then + if(j.lt.10)then + term1=0.01d0+dmin1(history(1,ndim+3)*0.025d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 do i=1,ndim - if(ran2().gt.0.5d0)then - beta(i)=beta(i)+(ran2()**(3.0d0/dble(k+1)))* - &(betamax(i)-beta(i)) - else - beta(i)=beta(i)-(ran2()**(3.0d0/dble(k+1)))* - &(beta(i)-betamin(i)) + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo + icompete=1 + goto 70 + endif +!try average + if(n.gt.nave)then + term1=1.0d0/(history(1,ndim+1)+1.0d-5) + do i=2,n + term1=term1+1.0d0/(history(i,ndim+1)+1.0d-5) + enddo + do i=1,ndim + beta(i)=history(1,i)/(term1*(history(1,ndim+1)+1.0d-5)) + do icompete=2,n + beta(i)=beta(i)+history(icompete,i)/ + &(term1*(history(icompete,ndim+1)+1.0d-5)) + enddo + enddo + nave=n + icompete=0 + goto 70 + endif +!try different initial guesses + if(ran2().gt.0.2d0)then +!guess around the best + icompete=1 + term1=history(1,ndim+1)+ + &discount*history(1,ndim+2)*history(1,ndim+3) + do i=2,n + term2=history(i,ndim+1)+ + &discount*history(i,ndim+2)*history(i,ndim+3) + if(term2.le.term1)then + term1=term2 + do i2=1,ndim+3 + history(n+1,i2)=history(i,i2) + history(i,i2)=history(1,i2) + history(1,i2)=history(n+1,i2) + enddo endif enddo + term1=0.01d0+dmin1(history(1,ndim+2)*history(1,ndim+3)* + &0.015d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo else +!completely random guess do i=1,ndim beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) enddo + icompete=0 endif - call funkmin_generic(ndim,beta,fatbeta) +70 call funkmin_generic(ndim,beta,fatbeta) goto 30 else if((ftol_relax-ftol).gt.ftol)then + if(k.le.1)then + n=n+1 + do i=1,ndim+3 + history(n,i)=history(1,i) + enddo + do i=1,ndim + history(1,i)=beta(i) + enddo + history(1,ndim+1)=fatbeta + history(1,ndim+2)=0.0d0 + history(1,ndim+3)=0.0d0 + do i=1,n + do icompete=1,ndim + betacp(icompete)=history(i,icompete) + enddo + fatbetacp=history(i,ndim+1) + call RepeatCompassSearch(ndim,betacp,fatbetacp, + &betamin,betamax,funkmin_generic,f1dim_generic,ftol_relax) + call funkmin_generic(ndim,betacp,fatbetacp) + if(isitnaninf(fatbetacp).eq.0.and.fatbetacp.lt. + &fatbeta)then + do icompete=1,ndim + beta(icompete)=betacp(icompete) + enddo + fatbeta=fatbetacp + endif + enddo + do i=1,ndim + beta0(i)=beta(i) + enddo + fatbeta0=fatbeta + icompete=1 + j=0 + else + icompete=0 + endif ftol_relax=ftol goto 30 endif endif + + goto 110 + call RepeatCompassSearch(ndim,beta,fatbeta, &betamin,betamax,funkmin_generic,f1dim_generic,xtol) call funkmin_generic(ndim,beta,fatbeta) - k=0 - if((fatbeta+1.0d0).eq.fatbeta)k=1 - do i=1,ndim - if((beta(i)+1.0d0).eq.beta(i))k=1 - enddo - if(k.eq.1)then - do i=1,ndim - beta(i)=betamin(i)+(betamax(i)-betamin(i))*ran2() - enddo - goto 10 - endif - if(fatbeta.ge.fatbeta0)then + if(isitnaninf(fatbeta).eq.1.or.fatbeta.ge.fatbeta0)then !if RepeatCompassSearch cannot improve, we end the search do i=1,ndim beta(i)=beta0(i) enddo fatbeta=fatbeta0 goto 110 - else - if((fatbeta0-fatbeta).lt.ftol)goto 40 endif do i=1,12 gacontrol(i)=-1.0d0 @@ -182,65 +352,40 @@ c (default is 0) do i=1,ndim beta0(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) enddo - idobounded=0 + fatbeta0=fatbeta call pikaia(generic_pikaia,ndim,gacontrol,beta0,fatbeta0,j) fatbeta0=1.0d+100 if(j.eq.0)then do i=1,ndim beta0(i)=betamin(i)+beta0(i)*(betamax(i)-betamin(i)) enddo - idobounded=1 call funkmin_generic(ndim,beta0,fatbeta0) - k=0 - if((fatbeta0+1.0d0).eq.fatbeta0)k=1 - do i=1,ndim - if((beta0(i)+1.0d0).eq.beta0(i))k=1 - enddo - if(k.eq.1)fatbeta0=1.0d+100 endif - -40 if(fatbeta0.gt.fatbeta)then +80 if(isitnaninf(fatbeta0).eq.1.or.fatbeta0.gt.fatbeta)then fatbeta0=fatbeta do i=1,ndim beta0(i)=beta(i) enddo - endif - do i=1,ndim - beta(i)=beta0(i) - enddo - fatbeta=fatbeta0 -! - INFO=iregrestype - idobounded=0 - call odr_leastsquare(ndim,FCN_generic,beta,nobs, - &xvars(1:nobs,1:nxvars),nxvars,yobs(1:nobs,1:nyvars), - &nyvars,weitx(1:nobs,1:nxvars),weity(1:nobs,1:nyvars), - &iderivative,shortx(1:nobs,1:nxvars), - &shorty(1:nobs,1:nyvars),fatbeta,INFO) - idobounded=1 - call funkmin_generic(ndim,beta,fatbeta) - k=0 - if((fatbeta+1.0d0).eq.fatbeta)k=1 - do i=1,ndim - if((beta(i)+1.0d0).eq.beta(i))k=1 - enddo - if(k.eq.1)fatbeta=1.0d+100 - if(dabs(fatbeta).le.dabs(fatbeta0))then else do i=1,ndim beta(i)=beta0(i) enddo fatbeta=fatbeta0 endif - do i=1,ndim - if(beta(i).lt.betamin(i).or.beta(i).gt.betamax(i))then - do j=1,ndim - beta(j)=beta0(j) - enddo - fatbeta=fatbeta0 - endif - enddo - fatbeta0=fatbeta +! + INFO=iregrestype + call odr_leastsquare(ndim,FCN_generic,beta,nobs, + &xvars(1:nobs,1:nxvars),nxvars,yobs(1:nobs,1:nyvars), + &nyvars,weitx(1:nobs,1:nxvars),weity(1:nobs,1:nyvars), + &iderivative,shortx(1:nobs,1:nxvars), + &shorty(1:nobs,1:nyvars),fatbeta,INFO) + call funkmin_generic(ndim,beta,fatbeta) + if(isitnaninf(fatbeta).eq.1.or.fatbeta.gt.fatbeta0)then + do i=1,ndim + beta(i)=beta0(i) + enddo + fatbeta=fatbeta0 + endif iregrestype=iregrestype0 if(iregrestype.eq.2)then do i=1,npoints @@ -266,13 +411,7 @@ c (default is 0) call nongradopt(ndim,funkmin_generic, &f1dim_generic,beta,betamin,betamax,ftol,fatbeta) call funkmin_generic(ndim,beta,fatbeta) - k=0 - if((fatbeta+1.0d0).eq.fatbeta)k=1 - do i=1,ndim - if((beta(i)+1.0d0).eq.beta(i))k=1 - enddo - if(k.eq.1)fatbeta=1.0d+100 - if(dabs(fatbeta).ge.dabs(fatbeta0))then + if(isitnaninf(fatbeta).eq.1.or.fatbeta.ge.fatbeta0)then fatbeta=fatbeta0 do i=1,ndim beta(i)=beta0(i) @@ -286,19 +425,13 @@ c (default is 0) call RepeatCompassSearch(ndim,betacp,fatbetacp, &betamin,betamax,funkmin_generic,f1dim_generic,xtol) call funkmin_generic(ndim,betacp,fatbetacp) - k=0 - if((fatbetacp+1.0d0).eq.fatbetacp)k=1 - do i=1,ndim - if((betacp(i)+1.0d0).eq.betacp(i))k=1 - enddo - if(k.eq.1)fatbetacp=1.0d+100 - if(dabs(fatbetacp).lt.dabs(fatbeta))then + if(isitnaninf(fatbetacp).eq.1.or.fatbetacp.ge.fatbeta)then + goto 110 + else fatbeta=fatbetacp do i=1,ndim beta(i)=betacp(i) enddo - else - goto 110 endif if(j.ge.2.or.fatbeta.eq.fatbeta0)goto 110 if(dabs(fatbeta0-fatbeta).gt.ftol)then @@ -310,7 +443,7 @@ c (default is 0) call linmin(beta,betamin,betamax,betacp,ndim, &f1dim_generic,fatbeta) call funkmin_generic(ndim,beta,fatbeta) - if(dabs(fatbeta).lt.dabs(fatbeta0))goto 100 + if(isitnaninf(fatbeta).eq.0.and.fatbeta.lt.fatbeta0)goto 100 fatbeta=fatbeta0 do i=1,ndim beta(i)=beta0(i) diff --git a/dataassim/math/optimization/cpCompassSearch.f b/dataassim/math/optimization/cpCompassSearch.f index 186b50a..415f6a7 100644 --- a/dataassim/math/optimization/cpCompassSearch.f +++ b/dataassim/math/optimization/cpCompassSearch.f @@ -3,7 +3,7 @@ implicit none integer ndim double precision xbest(1:ndim),fbest, - & bmin(1:ndim),bmax(1:ndim),xtol + & bmin(1:ndim),bmax(1:ndim),xtol,f1dim double precision fvalpre,dmax,xpre(1:ndim),ftol,direction(ndim) parameter(ftol=1.0d-7) integer i,n @@ -62,7 +62,7 @@ ! =1 convergence criterion reached (minimum found) ! integer ndim - double precision xbest(1:ndim),fbest, + double precision xbest(1:ndim),fbest,f1dim, & bmin(1:ndim),bmax(1:ndim),xtol,dx1,dx2 external funkmin,f1dim !------------------------------- Locals ----------------------------------------------------------- diff --git a/dataassim/math/optimization/cpnongradopt.f b/dataassim/math/optimization/cpnongradopt.f index 7b7c460..25c8700 100644 --- a/dataassim/math/optimization/cpnongradopt.f +++ b/dataassim/math/optimization/cpnongradopt.f @@ -7,7 +7,7 @@ ! integer ndim double precision beta(1:ndim),bmin(1:ndim), - & bmax(1:ndim),ftol,fatbeta + &bmax(1:ndim),ftol,fatbeta,f1dim ! ! ------------------ Inputs ----------------------------- ! ndim: the total number of parameters to be estimated diff --git a/dataassim/math/optimization/cppowell.f b/dataassim/math/optimization/cppowell.f index f74ee1f..f49023d 100644 --- a/dataassim/math/optimization/cppowell.f +++ b/dataassim/math/optimization/cppowell.f @@ -4,7 +4,7 @@ implicit none INTEGER iter,n,np,NMAX,ITMAX double precision fret,ftol,p(np),xi(np,np),TINY, - & pmin(np),pmax(np) + & pmin(np),pmax(np),f1dim PARAMETER (NMAX=1000,TINY=1.0d-25) CU USES funkmin,linmin INTEGER i,ibig,j @@ -57,7 +57,7 @@ C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. SUBROUTINE cplinmin(p,pmin,pmax,xi,n,f1dim,fret) implicit none INTEGER n - double precision fret,p(n),xi(n),TOL,pmin(n),pmax(n) + double precision fret,p(n),xi(n),TOL,pmin(n),pmax(n),f1dim PARAMETER (TOL=1.0d-8) CU USES brent,f1dim,mnbrak INTEGER j,k,ierr diff --git a/dataassim/math/optimization/lbfgsroutines.f b/dataassim/math/optimization/lbfgsroutines.f index 8cbfd39..ae2cf95 100644 --- a/dataassim/math/optimization/lbfgsroutines.f +++ b/dataassim/math/optimization/lbfgsroutines.f @@ -192,7 +192,7 @@ c ************ integer l1,l2,l3,lws,lr,lz,lt,ld,lwa,lwy,lsy,lss,lwt,lwn,lsnd - if (task .eq. 'START') then + if (task .eqv. 'START') then isave(1) = m*n isave(2) = m**2 isave(3) = 4*m**2 @@ -442,7 +442,7 @@ c ************ double precision one,zero parameter (one=1.0d0,zero=0.0d0) - if (task .eq. 'START') then + if (task .eqv. 'START') then call timer(time1) @@ -508,7 +508,7 @@ c open a summary file 'iterate.dat' c Check the input arguments for errors. call errclb(n,m,factr,l,u,nbd,task,info,k) - if (task(1:5) .eq. 'ERROR') then + if (task(1:5) .eqv. 'ERROR') then call prn3lb(n,x,f,task,iprint,info,itfile, + iter,nfgv,nintol,nskip,nact,sbgnrm, + zero,nint,word,iback,stp,xstep,k, @@ -571,11 +571,11 @@ c restore local variables. c After returning from the driver go to the point where execution c is to resume. - if (task(1:5) .eq. 'FG_LN') goto 666 - if (task(1:5) .eq. 'NEW_X') goto 777 - if (task(1:5) .eq. 'FG_ST') goto 111 - if (task(1:4) .eq. 'STOP') then - if (task(7:9) .eq. 'CPU') then + if (task(1:5) .eqv. 'FG_LN') goto 666 + if (task(1:5) .eqv. 'NEW_X') goto 777 + if (task(1:5) .eqv. 'FG_ST') goto 111 + if (task(1:4) .eqv. 'STOP') then + if (task(7:9) .eqv. 'CPU') then c restore the previous iterate. call dcopy(n,t,1,x,1) call dcopy(n,r,1,g,1) @@ -771,7 +771,7 @@ c refresh the lbfgs memory and restart the iteration. lnscht = lnscht + cpu2 - cpu1 goto 222 endif - else if (task(1:5) .eq. 'FG_LN') then + else if (task(1:5) .eqv. 'FG_LN') then c return to the driver for calculating f and g; reenter at 666. goto 1000 else @@ -2444,7 +2444,7 @@ c ********** double precision ftol,gtol,xtol parameter (ftol=1.0d-3,gtol=0.9d0,xtol=0.1d0) - if (task(1:5) .eq. 'FG_LN') goto 556 + if (task(1:5) .eqv. 'FG_LN') goto 556 dtd = ddot(n,d,1,d,1) dnorm = sqrt(dtd) @@ -2789,7 +2789,7 @@ c ************ integer i - if (task(1:5) .eq. 'ERROR') goto 999 + if (task(1:5) .eqv. 'ERROR') goto 999 if (iprint .ge. 0) then write (6,3003) @@ -3271,7 +3271,7 @@ c c task = 'START' c 10 continue c call dcsrch( ... ) -c if (task .eq. 'FG') then +c if (task .eqv. 'FG') then c Evaluate the function and the gradient at stp c goto 10 c end if @@ -3377,7 +3377,7 @@ c ********** c Initialization block. - if (task(1:5) .eq. 'START') then + if (task(1:5) .eqv. 'START') then c Check the input arguments for errors. @@ -3392,7 +3392,7 @@ c Check the input arguments for errors. c Exit if there are errors on input. - if (task(1:5) .eq. 'ERROR') return + if (task(1:5) .eqv. 'ERROR') return c Initialize local variables. @@ -3479,7 +3479,7 @@ c Test for convergence. c Test for termination. - if (task(1:4) .eq. 'WARN' .or. task(1:4) .eq. 'CONV') goto 1000 + if (task(1:4) .eqv. 'WARN' .or. task(1:4) .eqv. 'CONV') goto 1000 c A modified function is used to predict the step during the c first stage if a lower function value has been obtained but diff --git a/dataassim/math/optimization/mcts.f b/dataassim/math/optimization/mcts.f new file mode 100644 index 0000000..f47cfd3 --- /dev/null +++ b/dataassim/math/optimization/mcts.f @@ -0,0 +1,173 @@ + Subroutine mctsglobalmin(ndim,funkmin_nongrad,f1dim_nongrad, + &beta,betamin,betamax,ftol,fatbeta) + implicit none + integer ndim + double precision beta(ndim),betamin(ndim),betamax(ndim), + &ftol,fatbeta +! + integer i,j,k,n,i2,icompete + double precision ran2,ftol_relax,term1,term2,beta0(ndim), + &fatbeta0,history(2000,ndim+3),discount + external funkmin_nongrad,f1dim_nongrad +!----------------------------------------------------- +!the cost funcation value for the first initial guess must be provided! + do i=1,ndim + beta0(i)=beta(i) + history(1,i)=beta(i) + enddo + fatbeta0=fatbeta + history(1,ndim+1)=fatbeta +!entrance counter + history(1,ndim+2)=1.0d0 +!failure counter + history(1,ndim+3)=0.0d0 +!Is it a competition among different initial guesses? + icompete=0 +!j the total number of calls to nongradopt; k is the number of returns to the current best and reset +!to zero if a better minumum is found; n is the number of scouting points over the landscape of the cost function. +!The first initial guess provided by the user is always part of the set of scouting points.the rest consist of outcomes +!from calls to nongradopt if they are significantly different from the current best. + j=0 + k=0 + n=1 + ftol_relax=ftol*1000.0d0 + discount=2.0d0 +!relax the convergence criterion for scouting +30 call nongradopt(ndim,funkmin_nongrad,f1dim_nongrad, + &beta,betamin,betamax,ftol_relax,fatbeta) + call funkmin_generic(ndim,beta,fatbeta) + if((fatbeta+1.0d0).eq.fatbeta.or.fatbeta.gt.fatbeta0)then +!failure + if((fatbeta+1.0d0).ne.fatbeta)then + if((fatbeta-fatbeta0).gt.10.0d0*ftol_relax)then + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.5d0 +!even though fatbeta is much worse than fatbeta0, it is an output of optimization after all so +!include it in the set if it has not already been included in the set. + i=1 + i2=1 +40 if(dabs(history(i2,i)-beta(i)).gt.ftol_relax)then + if(dabs(history(i2,ndim+1)-fatbeta).lt.ftol_relax)then + history(i2,ndim+3)=history(i2,ndim+3)+1.0d0 + goto 60 + endif + if(i2.ge.n)goto 50 + i2=i2+1 + i=1 + goto 40 + else + if(i.ge.ndim)goto 60 + i=i+1 + goto 40 + endif +50 n=n+1 + do i=1,ndim + history(n,i)=beta(i) + enddo + history(n,ndim+1)=fatbeta + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 + else +!the difference is minimal even though fatbeta is larger than fatbeta0. +!Increment the counter for arriving at the same minimum. + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.0d0 + k=k+1 + endif + else + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+2.0d0 + endif +60 do i=1,ndim + beta(i)=beta0(i) + enddo + fatbeta=fatbeta0 + else +!success + if((fatbeta0-fatbeta).lt.10.0d0*ftol_relax)then +!negligible improvement. Increment the counter for arriving at the same minimum. +!no increment for the set of central initial guesses + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+0.1d0 + k=k+1 + else +!reset the counter for arriving at a better minimum. +!Increment the set of central initial guesses + if(dabs(discount-2.0d0).lt.ftol)then + discount=dmax1(0.001d0,(fatbeta0-fatbeta)/1000.0d0) + endif + k=0 + n=n+1 + do i=1,ndim+3 + history(n,i)=history(1,i) + enddo + do i=1,ndim + history(1,i)=beta(i) + enddo + history(1,ndim+1)=fatbeta + history(1,ndim+2)=0.0d0 + history(1,ndim+3)=0.0d0 + endif + do i=1,ndim + beta0(i)=beta(i) + enddo + fatbeta0=fatbeta + endif + j=j+1 + if(j.lt.990.and.k.lt.3)then +!try different initial guesses + if(ran2().gt.0.1d0)then +!guess around the best + icompete=1 + term1=history(1,ndim+1)+ + &discount*history(1,ndim+2)*history(1,ndim+3) + do i=2,n + term2=history(i,ndim+1)+ + &discount*history(i,ndim+2)*history(i,ndim+3) + if(term2.le.term1)then + term1=term2 + do i2=1,ndim+3 + history(n+1,i2)=history(i,i2) + history(i,i2)=history(1,i2) + history(1,i2)=history(n+1,i2) + enddo + endif + enddo + term1=0.5d0*history(i,ndim+2)*history(i,ndim+3) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + if(ran2().gt.0.5d0)then + if((betamax(i)-history(1,i)).gt. + &(betamax(i)-betamin(i))*1.0d-5)then + beta(i)=history(1,i)+(ran2()**(4.0d0/(term1+1.0d0)))* + &(betamax(i)-history(1,i)) + else + beta(i)=betamax(i)- + &(ran2()**4.0d0)*(betamax(i)-betamin(i)) + endif + else + if((history(1,i)-betamin(i)).gt. + &(betamax(i)-betamin(i))*1.0d-5)then + beta(i)=history(1,i)-(ran2()**(4.0d0/(term1+1.0d0)))* + &(history(1,i)-betamin(i)) + else + beta(i)=betamin(i)+ + &(ran2()**4.0d0)*(betamax(i)-betamin(i)) + endif + endif + enddo + else +!completely random guess + icompete=0 + do i=1,ndim + beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) + enddo + endif + call funkmin_generic(ndim,beta,fatbeta) + goto 30 + else + if((ftol_relax-ftol).gt.ftol)then + ftol_relax=ftol + if(k.le.1)j=0 + goto 30 + endif + endif + return + end subroutine mctsglobalmin +!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ diff --git a/dataassim/math/optimization/nongradopt.f b/dataassim/math/optimization/nongradopt.f index 2bb037d..e448ad8 100644 --- a/dataassim/math/optimization/nongradopt.f +++ b/dataassim/math/optimization/nongradopt.f @@ -6,7 +6,7 @@ ! integer ndim double precision beta(1:ndim),bmin(1:ndim), - & bmax(1:ndim),ftol,fatbeta + &bmax(1:ndim),ftol,fatbeta,f1dim ! ! ------------------ Inputs ----------------------------- ! ndim: the total number of parameters to be estimated @@ -24,7 +24,7 @@ integer n,nn,mpamoeba,npamoeba,iredo,maxredo,ITMAX, & icycle - parameter(maxredo=10,ITMAX=10000) + parameter(maxredo=5,ITMAX=50000) double precision fbest,xbest(1:ndim),term, & xinidir(1:ndim,1:ndim),xbest0(1:ndim), & pamoeba(1:ndim+1,1:ndim),famoeba(1:ndim+1) @@ -50,7 +50,7 @@ fatbeta=fbest goto 10 endif - if((fbest-fatbeta).gt.ftol)then + if((fbest-fatbeta).gt.100.0d0*ftol)then if(iredo.gt.maxredo)goto 10 iredo=iredo+1 goto 3 @@ -92,6 +92,9 @@ if((fbest-fatbeta).gt.ftol*100.0d0.and.term.gt.1.0d-2)then term=term/3.0d0 fbest=fatbeta + do n=1,ndim + xbest(n)=beta(n) + enddo goto 30 endif do n=1,ndim @@ -144,7 +147,7 @@ return endif enddo - if((fbest-fatbeta).gt.ftol)then + if((fbest-fatbeta).gt.ftol*100.0d0)then if(iredo.gt.maxredo)then if(icycle.lt.maxredo)then icycle=icycle+1 @@ -167,15 +170,15 @@ external funkmin CU USES guamotry,funkmin INTEGER i,ihi,ilo,inhi,j,m,n - double precision rtol,sum,swap,ysave,ytry,psum(ndim), + double precision rtol,cumx,swap,ysave,ytry,pcumx(ndim), & guamotry,degen iter=0 1 do 12 n=1,ndim - sum=0.0d0 + cumx=0.0d0 do 11 m=1,ndim+1 - sum=sum+p(m,n) + cumx=cumx+p(m,n) 11 continue - psum(n)=sum + pcumx(n)=cumx 12 continue 2 ilo=1 if (y(1).gt.y(2)) then @@ -232,20 +235,20 @@ CU USES guamotry,funkmin endif if(iter.ge.ITMAX)return iter=iter+2 - ytry=guamotry(p,y,psum,mp,np,ndim,funkmin,ihi,-1.0d0) + ytry=guamotry(p,y,pcumx,mp,np,ndim,funkmin,ihi,-1.0d0) if (ytry.le.y(ilo))then - ytry=guamotry(p,y,psum,mp,np,ndim,funkmin,ihi,2.0d0) + ytry=guamotry(p,y,pcumx,mp,np,ndim,funkmin,ihi,2.0d0) else if (ytry.ge.y(inhi)) then ysave=y(ihi) - ytry=guamotry(p,y,psum,mp,np,ndim,funkmin,ihi,0.5d0) + ytry=guamotry(p,y,pcumx,mp,np,ndim,funkmin,ihi,0.5d0) if (ytry.ge.ysave) then do 16 i=1,ndim+1 if(i.ne.ilo)then do 15 j=1,ndim - psum(j)=0.5d0*(p(i,j)+p(ilo,j)) - p(i,j)=psum(j) + pcumx(j)=0.5d0*(p(i,j)+p(ilo,j)) + p(i,j)=pcumx(j) 15 continue - call funkmin(ndim,psum,y(i)) + call funkmin(ndim,pcumx,y(i)) endif 16 continue iter=iter+ndim diff --git a/dataassim/math/optimization/odr_leastsquare.f b/dataassim/math/optimization/odr_leastsquare.f index f9d6371..b9c88e0 100644 --- a/dataassim/math/optimization/odr_leastsquare.f +++ b/dataassim/math/optimization/odr_leastsquare.f @@ -24,7 +24,6 @@ C VARIABLE DECLARATIONS double precision weity(N,NQ),weitx(N,M),shorty(N,NQ), &shortx(N,M),fvalue,BETA(NP),X(N,M),Y(N,NQ) EXTERNAL FCN - LWORK=18+11*NP+NP**2+M+M**2+4*N*NQ+6*N*M+2*N*NQ*NP+ &2*N*NQ*M+NQ**2+5*NQ+NQ*(NP+M)+N*1*NQ LIWORK=20+NP+NQ*(NP+M) @@ -96,7 +95,7 @@ C VARIABLE DECLARATIONS + WORK(LWORK),X(N,M),Y(N,NQ) !------------For using information in WORK---------------------------- LOGICAL - + ISODR + +ISODR INTEGER + DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, @@ -105,7 +104,7 @@ C VARIABLE DECLARATIONS + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + FSI,FJACBI,WE1I,DIFFI, + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, - + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + LWKMN c integer i1,i2,i3,i4,i5,iderivative @@ -230,7 +229,7 @@ C READ PROBLEM DATA, AND SET NONDEFAULT VALUE FOR ARGUMENT IFIXX + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + FSI,FJACBI,WE1I,DIFFI, + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, - + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + LWKMN) fvalue=0.0d0 do I=1,N diff --git a/dataassim/math/optimization/odrpack.f b/dataassim/math/optimization/odrpack.f index 82c2b84..8072c4a 100644 --- a/dataassim/math/optimization/odrpack.f +++ b/dataassim/math/optimization/odrpack.f @@ -6,7 +6,7 @@ *DMPREC DOUBLE PRECISION FUNCTION DMPREC() implicit none - integer ibeta,it,irnd,ngrd,machep,negep,iexp,minexp, + integer ibeta,it,irnd,ngrd,machep,negep,iexp,minexp, *maxexp double precision eps,epsneg,xmin,xmax @@ -209,146 +209,146 @@ c TD = I1MACH(14) c DMPREC = B ** (1-TD) call machar_odr(ibeta,it,irnd,ngrd,machep,negep,iexp, - *minexp, maxexp,eps,epsneg,xmin,xmax) + *minexp,maxexp,eps,epsneg,xmin,xmax) DMPREC=eps RETURN END SUBROUTINE machar_odr(ibeta,it,irnd,ngrd,machep,negep, - *iexp,minexp, maxexp,eps,epsneg,xmin,xmax) + *iexp,minexp,maxexp,eps,epsneg,xmin,xmax) implicit none - INTEGER ibeta,iexp,irnd,it,machep,maxexp,minexp,negep,ngrd - double precision eps,epsneg,xmax,xmin - INTEGER i,itemp,iz,j,k,mx,nxres + INTEGER ibeta,iexp,irnd,it,machep,maxexp,minexp,negep,ngrd + double precision eps,epsneg,xmax,xmin + INTEGER i,itemp,iz,j,k,mx,nxres double precision a,b,beta,betah,betain,one,t,temp,temp1,tempa, - &two,y,z,zero, CONV - CONV(i)=dble(i) - one=CONV(1) - two=one+one - zero=one-one - a=one -1 continue - a=a+a - temp=a+one - temp1=temp-a - if (temp1-one.eq.zero) goto 1 - b=one -2 continue - b=b+b - temp=a+b - itemp=int(temp-a) - if (itemp.eq.0) goto 2 - ibeta=itemp - beta=CONV(ibeta) - it=0 - b=one -3 continue - it=it+1 - b=b*beta - temp=b+one - temp1=temp-b - if (temp1-one.eq.zero) goto 3 - irnd=0 - betah=beta/two - temp=a+betah - if (temp-a.ne.zero) irnd=1 - tempa=a+beta - temp=tempa+betah - if ((irnd.eq.0).and.(temp-tempa.ne.zero)) irnd=2 - negep=it+3 - betain=one/beta - a=one - do 11 i=1, negep - a=a*betain -11 continue - b=a -4 continue - temp=one-a - if (temp-one.ne.zero) goto 5 - a=a*beta - negep=negep-1 - goto 4 -5 negep=-negep - epsneg=a - machep=-it-3 - a=b -6 continue - temp=one+a - if (temp-one.ne.zero) goto 7 - a=a*beta - machep=machep+1 - goto 6 -7 eps=a - ngrd=0 - temp=one+eps - if ((irnd.eq.0).and.(temp*one-one.ne.zero)) ngrd=1 - i=0 - k=1 - z=betain - t=one+eps - nxres=0 -8 continue - y=z - z=y*y - a=z*one - temp=z*t - if ((a+a.eq.zero).or.(dabs(z).ge.y)) goto 9 - temp1=temp*betain - if (temp1*beta.eq.z) goto 9 - i=i+1 - k=k+k - goto 8 -9 if (ibeta.ne.10) then - iexp=i+1 - mx=k+k - else - iexp=2 - iz=ibeta -10 if (k.ge.iz) then - iz=iz*ibeta - iexp=iexp+1 - goto 10 - endif - mx=iz+iz-1 - endif -20 xmin=y - y=y*betain - a=y*one - temp=y*t - if (((a+a).ne.zero).and.(dabs(y).lt.xmin)) then - k=k+1 - temp1=temp*betain - if ((temp1*beta.ne.y).or.(temp.eq.y)) then - goto 20 - else - nxres=3 - xmin=y - endif - endif - minexp=-k - if ((mx.le.k+k-3).and.(ibeta.ne.10)) then - mx=mx+mx - iexp=iexp+1 - endif - maxexp=mx+minexp - irnd=irnd+nxres - if (irnd.ge.2) maxexp=maxexp-2 - i=maxexp+minexp - if ((ibeta.eq.2).and.(i.eq.0)) maxexp=maxexp-1 - if (i.gt.20) maxexp=maxexp-1 - if (a.ne.y) maxexp=maxexp-2 - xmax=one-epsneg - if (xmax*one.ne.xmax) xmax=one-beta*epsneg - xmax=xmax/(beta*beta*beta*xmin) - i=maxexp+minexp+3 - do 12 j=1,i - if (ibeta.eq.2) xmax=xmax+xmax - if (ibeta.ne.2) xmax=xmax*beta -12 continue - return - END -C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. + &two,y,z,zero,CONV + CONV(i)=dble(i) + one=CONV(1) + two=one+one + zero=one-one + a=one +1 continue + a=a+a + temp=a+one + temp1=temp-a + if (temp1-one.eq.zero) goto 1 + b=one +2 continue + b=b+b + temp=a+b + itemp=int(temp-a) + if (itemp.eq.0) goto 2 + ibeta=itemp + beta=CONV(ibeta) + it=0 + b=one +3 continue + it=it+1 + b=b*beta + temp=b+one + temp1=temp-b + if (temp1-one.eq.zero) goto 3 + irnd=0 + betah=beta/two + temp=a+betah + if (temp-a.ne.zero) irnd=1 + tempa=a+beta + temp=tempa+betah + if ((irnd.eq.0).and.(temp-tempa.ne.zero)) irnd=2 + negep=it+3 + betain=one/beta + a=one + do 11 i=1, negep + a=a*betain +11 continue + b=a +4 continue + temp=one-a + if (temp-one.ne.zero) goto 5 + a=a*beta + negep=negep-1 + goto 4 +5 negep=-negep + epsneg=a + machep=-it-3 + a=b +6 continue + temp=one+a + if (temp-one.ne.zero) goto 7 + a=a*beta + machep=machep+1 + goto 6 +7 eps=a + ngrd=0 + temp=one+eps + if ((irnd.eq.0).and.(temp*one-one.ne.zero)) ngrd=1 + i=0 + k=1 + z=betain + t=one+eps + nxres=0 +8 continue + y=z + z=y*y + a=z*one + temp=z*t + if ((a+a.eq.zero).or.(dabs(z).ge.y)) goto 9 + temp1=temp*betain + if (temp1*beta.eq.z) goto 9 + i=i+1 + k=k+k + goto 8 +9 if (ibeta.ne.10) then + iexp=i+1 + mx=k+k + else + iexp=2 + iz=ibeta +10 if (k.ge.iz) then + iz=iz*ibeta + iexp=iexp+1 + goto 10 + endif + mx=iz+iz-1 + endif +20 xmin=y + y=y*betain + a=y*one + temp=y*t + if (((a+a).ne.zero).and.(dabs(y).lt.xmin)) then + k=k+1 + temp1=temp*betain + if ((temp1*beta.ne.y).or.(temp.eq.y)) then + goto 20 + else + nxres=3 + xmin=y + endif + endif + minexp=-k + if ((mx.le.k+k-3).and.(ibeta.ne.10)) then + mx=mx+mx + iexp=iexp+1 + endif + maxexp=mx+minexp + irnd=irnd+nxres + if (irnd.ge.2) maxexp=maxexp-2 + i=maxexp+minexp + if ((ibeta.eq.2).and.(i.eq.0)) maxexp=maxexp-1 + if (i.gt.20) maxexp=maxexp-1 + if (a.ne.y) maxexp=maxexp-2 + xmax=one-epsneg + if (xmax*one.ne.xmax) xmax=one-beta*epsneg + xmax=xmax/(beta*beta*beta*xmin) + i=maxexp+minexp+3 + do 12 j=1,i + if (ibeta.eq.2) xmax=xmax+xmax + if (ibeta.ne.2) xmax=xmax*beta +12 continue + return + END +C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. *DODR SUBROUTINE DODR @@ -966,7 +966,6 @@ C FIND STARTING LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + LWKMN) - IF (ACCESS) THEN C SET STARTING LOCATIONS FOR WORK VECTORS @@ -1050,9 +1049,8 @@ C STORE VALUES INTO THE WORK VECTORS IWORK(NITERI) = NITER IWORK(NJEVI) = NJEV IWORK(IDFI) = IDF - IWORK(INT2I) = INT2 + IWORK(INT2I) = INT2 END IF - RETURN END *DESUBI @@ -5916,7 +5914,6 @@ C***FIRST EXECUTABLE STATEMENT DODMN C INITIALIZE NECESSARY VARIABLES - CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) ACCESS = .TRUE. @@ -5936,7 +5933,6 @@ C INITIALIZE NECESSARY VARIABLES DIDVCV = .FALSE. INTDBL = .FALSE. LSTEP = .TRUE. - C PRINT INITIAL SUMMARY IF DESIRED IF (IPR1.NE.0 .AND. LUNRPT.NE.0) THEN @@ -6295,7 +6291,6 @@ C PRINT ITERATION REPORT END IF END IF END IF - C CHECK IF FINISHED IF (INFO.EQ.0) THEN @@ -6315,9 +6310,7 @@ C STEP FAILED - RECOMPUTE UNLESS A STOPPING CRITERIA HAS BEEN MET GO TO 110 END IF END IF - 150 CONTINUE - IF (ISTOP.GT.0) INFO = INFO + 100 C STORE UNWEIGHTED EPSILONS AND X+DELTA TO RETURN TO USER @@ -6329,12 +6322,9 @@ C STORE UNWEIGHTED EPSILONS AND X+DELTA TO RETURN TO USER END IF CALL DUNPAC(NP,BETAC,BETA,IFIXB) CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) - C COMPUTE COVARIANCE MATRIX OF ESTIMATED PARAMETERS C IN UPPER NP BY NP PORTION OF WORK(VCV) IF REQUESTED - - IF (DOVCV .AND. ISTOP.EQ.0) THEN - + IF (DOVCV .AND. ISTOP.EQ.0) THEN C RE-EVALUATE JACOBIAN AT FINAL SOLUTION, IF REQUESTED C OTHERWISE, JACOBIAN FROM BEGINNING OF LAST ITERATION WILL BE USED C TO COMPUTE COVARIANCE MATRIX @@ -6350,8 +6340,6 @@ C TO COMPUTE COVARIANCE MATRIX + T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + NJEV,NFEV,ISTOP,INFO) - - IF (ISTOP.NE.0) THEN INFO = 51000 GO TO 200 @@ -6359,7 +6347,6 @@ C TO COMPUTE COVARIANCE MATRIX GO TO 200 END IF END IF - IF (IMPLCT) THEN CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(N*NQ+1),N) RSS = DDOT_odr(N*M,DELTA,1,WRK(N*NQ+1),1) @@ -6383,9 +6370,7 @@ C TO COMPUTE COVARIANCE MATRIX END IF DIDVCV = .TRUE. END IF - END IF - C SET JPVT TO INDICATE DROPPED, FIXED AND ESTIMATED PARAMETERS 200 DO 210 I=0,NP-1 @@ -12072,15 +12057,23 @@ C***FIRST EXECUTABLE STATEMENT DNRM2_odr DNRM2_odr = ZERO GO TO 300 - 10 ASSIGN 30 TO NEXT +! 10 ASSIGN 30 TO NEXT + 10 NEXT=30 SUM = ZERO NN = N * INCX C BEGIN MAIN LOOP I = 1 C 20 GO TO NEXT,(30, 50, 70, 110) - 20 GO TO NEXT +! 20 GO TO NEXT +!------------------------------ +20 IF(NEXT.EQ.30) goto 30 + IF(NEXT.EQ.50) goto 50 + IF(NEXT.EQ.70) goto 70 + IF(NEXT.EQ.110) goto 110 + 30 IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 - ASSIGN 50 TO NEXT +! ASSIGN 50 TO NEXT + NEXT=50 XMAX = ZERO C PHASE 1. SUM IS ZERO @@ -12089,13 +12082,15 @@ C PHASE 1. SUM IS ZERO IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 C PREPARE FOR PHASE 2. - ASSIGN 70 TO NEXT +! ASSIGN 70 TO NEXT + NEXT=70 GO TO 105 C PREPARE FOR PHASE 4. 100 I = J - ASSIGN 110 TO NEXT +! ASSIGN 110 TO NEXT + NEXT=110 SUM = (SUM / DX(I)) / DX(I) 105 XMAX = DABS(DX(I)) GO TO 115 diff --git a/dataassim/math/optimization/odrpack95/d_drive1.f b/dataassim/math/optimization/odrpack95/d_drive1.f new file mode 100644 index 0000000..53cbd6e --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_drive1.f @@ -0,0 +1,226 @@ + PROGRAM SAMPLE + +C ODRPACK ARGUMENT DEFINITIONS +C ==> FCN NAME OF THE USER SUPPLIED FUNCTION SUBROUTINE +C ==> N NUMBER OF OBSERVATIONS +C ==> M COLUMNS OF DATA IN THE EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C <==> BETA FUNCTION PARAMETERS +C ==> Y RESPONSE VARIABLE +C ==> LDY LEADING DIMENSION OF ARRAY Y +C ==> X EXPLANATORY VARIABLE +C ==> LDX LEADING DIMENSION OF ARRAY X +C ==> WE "EPSILON" WEIGHTS +C ==> LDWE LEADING DIMENSION OF ARRAY WE +C ==> LD2WE SECOND DIMENSION OF ARRAY WE +C ==> WD "DELTA" WEIGHTS +C ==> LDWD LEADING DIMENSION OF ARRAY WD +C ==> LD2WD SECOND DIMENSION OF ARRAY WD +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> JOB TASK TO BE PERFORMED +C ==> NDIGIT GOOD DIGITS IN SUBROUTINE FUNCTION RESULTS +C ==> TAUFAC TRUST REGION INITIALIZATION FACTOR +C ==> SSTOL SUM OF SQUARES CONVERGENCE CRITERION +C ==> PARTOL PARAMETER CONVERGENCE CRITERION +C ==> MAXIT MAXIMUM NUMBER OF ITERATIONS +C ==> IPRINT PRINT CONTROL +C ==> LUNERR LOGICAL UNIT FOR ERROR REPORTS +C ==> LUNRPT LOGICAL UNIT FOR COMPUTATION REPORTS +C ==> STPB STEP SIZES FOR FINITE DIFFERENCE DERIVATIVES WRT BETA +C ==> STPD STEP SIZES FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA +C ==> LDSTPD LEADING DIMENSION OF ARRAY STPD +C ==> SCLB SCALE VALUES FOR PARAMETERS BETA +C ==> SCLD SCALE VALUES FOR ERRORS DELTA IN EXPLANATORY VARIABLE +C ==> LDSCLD LEADING DIMENSION OF ARRAY SCLD +C <==> WORK DOUBLE PRECISION WORK VECTOR +C ==> LWORK DIMENSION OF VECTOR WORK +C <== IWORK INTEGER WORK VECTOR +C ==> LIWORK DIMENSION OF VECTOR IWORK +C <== INFO STOPPING CONDITION + +C PARAMETERS SPECIFYING MAXIMUM PROBLEM SIZES HANDLED BY THIS DRIVER +C MAXN MAXIMUM NUMBER OF OBSERVATIONS +C MAXM MAXIMUM NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C MAXNP MAXIMUM NUMBER OF FUNCTION PARAMETERS +C MAXNQ MAXIMUM NUMBER OF RESPONSES PER OBSERVATION + +C PARAMETER DECLARATIONS AND SPECIFICATIONS + INTEGER LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=25,MAXNP=5,MAXNQ=1, + + LDY=MAXN,LDX=MAXN, + + LDWE=1,LD2WE=1,LDWD=1,LD2WD=1, + + LDIFX=MAXN,LDSTPD=1,LDSCLD=1, + + LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + + 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + + 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + + 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + + LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C VARIABLE DECLARATIONS + INTEGER I,INFO,IPRINT,J,JOB,L,LUNERR,LUNRPT,M,MAXIT,N, + + NDIGIT,NP,NQ + INTEGER IFIXB(MAXNP),IFIXX(LDIFX,MAXM),IWORK(LIWORK) + DOUBLE PRECISION PARTOL,SSTOL,TAUFAC + DOUBLE PRECISION BETA(MAXNP),SCLB(MAXNP),SCLD(LDSCLD,MAXM), + + STPB(MAXNP),STPD(LDSTPD,MAXM), + + WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + + WORK(LWORK),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + + +C SPECIFY DEFAULT VALUES FOR DODRC ARGUMENTS + WE(1,1,1) = -1.0D0 + WD(1,1,1) = -1.0D0 + IFIXB(1) = -1 + IFIXX(1,1) = -1 + JOB = -1 + NDIGIT = -1 + TAUFAC = -1.0D0 + SSTOL = -1.0D0 + PARTOL = -1.0D0 + MAXIT = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + STPB(1) = -1.0D0 + STPD(1,1) = -1.0D0 + SCLB(1) = -1.0D0 + SCLD(1,1) = -1.0D0 + +C SET UP ODRPACK REPORT FILES + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT1') + +C READ PROBLEM DATA, AND SET NONDEFAULT VALUE FOR ARGUMENT IFIXX + OPEN (UNIT=5,FILE='DATA1') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M),(Y(I,L),L=1,NQ) + IF (X(I,1).EQ.0.0D0 .OR. X(I,1).EQ.100.0D0) THEN + IFIXX(I,1) = 0 + ELSE + IFIXX(I,1) = 1 + END IF + 10 CONTINUE + +C SPECIFY TASK: EXPLICIT ORTHOGONAL DISTANCE REGRESSION +C WITH USER SUPPLIED DERIVATIVES (CHECKED) +C COVARIANCE MATRIX CONSTRUCTED WITH RECOMPUTED DERIVATIVES +C DELTA INITIALIZED TO ZERO +C NOT A RESTART +C AND INDICATE SHORT INITIAL REPORT +C SHORT ITERATION REPORTS EVERY ITERATION, AND +C LONG FINAL REPORT + JOB = 00020 + IPRINT = 1112 + +C COMPUTE SOLUTION + CALL DODRC(FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, + + SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, + + SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + + LDN,LDM,LDNP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,F,FJACB,FJACD, + + ISTOP) + +C SUBROUTINE ARGUMENTS +C ==> N NUMBER OF OBSERVATIONS +C ==> M NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C ==> LDN LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING N +C ==> LDM LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING M +C ==> LDNP LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING NP +C ==> BETA CURRENT VALUES OF PARAMETERS +C ==> XPLUSD CURRENT VALUE OF EXPLANATORY VARIABLE, I.E., X + DELTA +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> IDEVAL INDICATOR FOR SELECTING COMPUTATION TO BE PERFORMED +C <== F PREDICTED FUNCTION VALUES +C <== FJACB JACOBIAN WITH RESPECT TO BETA +C <== FJACD JACOBIAN WITH RESPECT TO ERRORS DELTA +C <== ISTOP STOPPING CONDITION, WHERE +C 0 MEANS CURRENT BETA AND X+DELTA WERE +C ACCEPTABLE AND VALUES WERE COMPUTED SUCCESSFULLY +C 1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD SELECT VALUES +C CLOSER TO MOST RECENTLY USED VALUES IF POSSIBLE +C -1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD STOP + +C INPUT ARGUMENTS, NOT TO BE CHANGED BY THIS ROUTINE: + INTEGER I,IDEVAL,ISTOP,L,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + DOUBLE PRECISION BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C OUTPUT ARGUMENTS: + DOUBLE PRECISION F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) +C LOCAL VARIABLES + INTRINSIC EXP + + +C CHECK FOR UNACCEPTABLE VALUES FOR THIS PROBLEM + IF (BETA(1) .LT. 0.0D0) THEN + ISTOP = 1 + RETURN + ELSE + ISTOP = 0 + END IF + +C COMPUTE PREDICTED VALUES + IF (MOD(IDEVAL,10).GE.1) THEN + DO 110 L = 1,NQ + DO 100 I = 1,N + F(I,L) = BETA(1) + + + BETA(2)*(EXP(BETA(3)*XPLUSD(I,1)) - 1.0D0)**2 + 100 CONTINUE + 110 CONTINUE + END IF + +C COMPUTE DERIVATIVES WITH RESPECT TO BETA + IF (MOD(IDEVAL/10,10).GE.1) THEN + DO 210 L = 1,NQ + DO 200 I = 1,N + FJACB(I,1,L) = 1.0D0 + FJACB(I,2,L) = (EXP(BETA(3)*XPLUSD(I,1)) - 1.0D0)**2 + FJACB(I,3,L) = BETA(2)*2* + + (EXP(BETA(3)*XPLUSD(I,1)) - 1.0D0)* + + EXP(BETA(3)*XPLUSD(I,1))*XPLUSD(I,1) + 200 CONTINUE + 210 CONTINUE + END IF + +C COMPUTE DERIVATIVES WITH RESPECT TO DELTA + IF (MOD(IDEVAL/100,10).GE.1) THEN + DO 310 L = 1,NQ + DO 300 I = 1,N + FJACD(I,1,L) = BETA(2)*2* + + (EXP(BETA(3)*XPLUSD(I,1)) - 1.0D0)* + + EXP(BETA(3)*XPLUSD(I,1))*BETA(3) + 300 CONTINUE + 310 CONTINUE + END IF + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/d_drive2.f b/dataassim/math/optimization/odrpack95/d_drive2.f new file mode 100644 index 0000000..d97e562 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_drive2.f @@ -0,0 +1,160 @@ + PROGRAM SAMPLE + +C ODRPACK ARGUMENT DEFINITIONS +C ==> FCN NAME OF THE USER SUPPLIED FUNCTION SUBROUTINE +C ==> N NUMBER OF OBSERVATIONS +C ==> M COLUMNS OF DATA IN THE EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C <==> BETA FUNCTION PARAMETERS +C ==> Y RESPONSE VARIABLE (UNUSED WHEN MODEL IS IMPLICIT) +C ==> LDY LEADING DIMENSION OF ARRAY Y +C ==> X EXPLANATORY VARIABLE +C ==> LDX LEADING DIMENSION OF ARRAY X +C ==> WE INITIAL PENALTY PARAMETER FOR IMPLICIT MODEL +C ==> LDWE LEADING DIMENSION OF ARRAY WE +C ==> LD2WE SECOND DIMENSION OF ARRAY WE +C ==> WD "DELTA" WEIGHTS +C ==> LDWD LEADING DIMENSION OF ARRAY WD +C ==> LD2WD SECOND DIMENSION OF ARRAY WD +C ==> JOB TASK TO BE PERFORMED +C ==> IPRINT PRINT CONTROL +C ==> LUNERR LOGICAL UNIT FOR ERROR REPORTS +C ==> LUNRPT LOGICAL UNIT FOR COMPUTATION REPORTS +C <==> WORK DOUBLE PRECISION WORK VECTOR +C ==> LWORK DIMENSION OF VECTOR WORK +C <== IWORK INTEGER WORK VECTOR +C ==> LIWORK DIMENSION OF VECTOR IWORK +C <== INFO STOPPING CONDITION + +C PARAMETERS SPECIFYING MAXIMUM PROBLEM SIZES HANDLED BY THIS DRIVER +C MAXN MAXIMUM NUMBER OF OBSERVATIONS +C MAXM MAXIMUM NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C MAXNP MAXIMUM NUMBER OF FUNCTION PARAMETERS +C MAXNQ MAXIMUM NUMBER OF RESPONSES PER OBSERVATION + +C PARAMETER DECLARATIONS AND SPECIFICATIONS + INTEGER LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=25,MAXNP=5,MAXNQ=2, + + LDY=MAXN,LDX=MAXN, + + LDWE=1,LD2WE=1,LDWD=1,LD2WD=1, + + LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + + 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + + 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + + 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + + LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C VARIABLE DECLARATIONS + INTEGER I,INFO,IPRINT,J,JOB,LUNERR,LUNRPT,M,N,NP,NQ + INTEGER IWORK(LIWORK) + DOUBLE PRECISION BETA(MAXNP), + + WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + + WORK(LWORK),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + + +C SPECIFY DEFAULT VALUES FOR DODR ARGUMENTS + WE(1,1,1) = -1.0D0 + WD(1,1,1) = -1.0D0 + JOB = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + +C SET UP ODRPACK REPORT FILES + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT2') + +C READ PROBLEM DATA + OPEN (UNIT=5,FILE='DATA2') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M) + 10 CONTINUE + +C SPECIFY TASK: IMPLICIT ORTHOGONAL DISTANCE REGRESSION +C WITH FORWARD FINITE DIFFERENCE DERIVATIVES +C COVARIANCE MATRIX CONSTRUCTED WITH RECOMPUTED DERIVATIVES +C DELTA INITIALIZED TO ZERO +C NOT A RESTART + JOB = 00001 + +C COMPUTE SOLUTION + CALL DODR(FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + JOB, + + IPRINT,LUNERR,LUNRPT, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + + LDN,LDM,LDNP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,F,FJACB,FJACD, + + ISTOP) + +C SUBROUTINE ARGUMENTS +C ==> N NUMBER OF OBSERVATIONS +C ==> M NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C ==> LDN LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING N +C ==> LDM LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING M +C ==> LDNP LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING NP +C ==> BETA CURRENT VALUES OF PARAMETERS +C ==> XPLUSD CURRENT VALUE OF EXPLANATORY VARIABLE, I.E., X + DELTA +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> IDEVAL INDICATOR FOR SELECTING COMPUTATION TO BE PERFORMED +C <== F PREDICTED FUNCTION VALUES +C <== FJACB JACOBIAN WITH RESPECT TO BETA +C <== FJACD JACOBIAN WITH RESPECT TO ERRORS DELTA +C <== ISTOP STOPPING CONDITION, WHERE +C 0 MEANS CURRENT BETA AND X+DELTA WERE +C ACCEPTABLE AND VALUES WERE COMPUTED SUCCESSFULLY +C 1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD SELECT VALUES +C CLOSER TO MOST RECENTLY USED VALUES IF POSSIBLE +C -1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD STOP + +C INPUT ARGUMENTS, NOT TO BE CHANGED BY THIS ROUTINE: + INTEGER I,IDEVAL,ISTOP,L,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + DOUBLE PRECISION BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C OUTPUT ARGUMENTS: + DOUBLE PRECISION F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) + + +C CHECK FOR UNACCEPTABLE VALUES FOR THIS PROBLEM + IF (BETA(1) .GT. 0.0D0) THEN + ISTOP = 1 + RETURN + ELSE + ISTOP = 0 + END IF + +C COMPUTE PREDICTED VALUES + IF (MOD(IDEVAL,10).GE.1) THEN + DO 110 L = 1,NQ + DO 100 I = 1,N + F(I,L) = BETA(3)*(XPLUSD(I,1)-BETA(1))**2 + + + 2*BETA(4)*(XPLUSD(I,1)-BETA(1))* + + (XPLUSD(I,2)-BETA(2)) + + + BETA(5)*(XPLUSD(I,2)-BETA(2))**2 - 1.0D0 + 100 CONTINUE + 110 CONTINUE + END IF + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/d_drive3.f b/dataassim/math/optimization/odrpack95/d_drive3.f new file mode 100644 index 0000000..ec2e4ef --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_drive3.f @@ -0,0 +1,248 @@ + PROGRAM SAMPLE + +C ODRPACK ARGUMENT DEFINITIONS +C ==> FCN NAME OF THE USER SUPPLIED FUNCTION SUBROUTINE +C ==> N NUMBER OF OBSERVATIONS +C ==> M COLUMNS OF DATA IN THE EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C <==> BETA FUNCTION PARAMETERS +C ==> Y RESPONSE VARIABLE +C ==> LDY LEADING DIMENSION OF ARRAY Y +C ==> X EXPLANATORY VARIABLE +C ==> LDX LEADING DIMENSION OF ARRAY X +C ==> WE "EPSILON" WEIGHTS +C ==> LDWE LEADING DIMENSION OF ARRAY WE +C ==> LD2WE SECOND DIMENSION OF ARRAY WE +C ==> WD "DELTA" WEIGHTS +C ==> LDWD LEADING DIMENSION OF ARRAY WD +C ==> LD2WD SECOND DIMENSION OF ARRAY WD +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> JOB TASK TO BE PERFORMED +C ==> NDIGIT GOOD DIGITS IN SUBROUTINE FCN RESULTS +C ==> TAUFAC TRUST REGION INITIALIZATION FACTOR +C ==> SSTOL SUM OF SQUARES CONVERGENCE CRITERION +C ==> PARTOL PARAMETER CONVERGENCE CRITERION +C ==> MAXIT MAXIMUM NUMBER OF ITERATIONS +C ==> IPRINT PRINT CONTROL +C ==> LUNERR LOGICAL UNIT FOR ERROR REPORTS +C ==> LUNRPT LOGICAL UNIT FOR COMPUTATION REPORTS +C ==> STPB STEP SIZES FOR FINITE DIFFERENCE DERIVATIVES WRT BETA +C ==> STPD STEP SIZES FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA +C ==> LDSTPD LEADING DIMENSION OF ARRAY STPD +C ==> SCLB SCALE VALUES FOR PARAMETERS BETA +C ==> SCLD SCALE VALUES FOR ERRORS DELTA IN EXPLANATORY VARIABLE +C ==> LDSCLD LEADING DIMENSION OF ARRAY SCLD +C <==> WORK DOUBLE PRECISION WORK VECTOR +C ==> LWORK DIMENSION OF VECTOR WORK +C <== IWORK INTEGER WORK VECTOR +C ==> LIWORK DIMENSION OF VECTOR IWORK +C <== INFO STOPPING CONDITION + +C PARAMETERS SPECIFYING MAXIMUM PROBLEM SIZES HANDLED BY THIS DRIVER +C MAXN MAXIMUM NUMBER OF OBSERVATIONS +C MAXM MAXIMUM NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C MAXNP MAXIMUM NUMBER OF FUNCTION PARAMETERS +C MAXNQ MAXIMUM NUMBER OF RESPONSES PER OBSERVATION + +C PARAMETER DECLARATIONS AND SPECIFICATIONS + INTEGER LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=100,MAXNP=25,MAXNQ=5, + + LDY=MAXN,LDX=MAXN, + + LDWE=MAXN,LD2WE=MAXNQ,LDWD=MAXN,LD2WD=1, + + LDIFX=MAXN,LDSCLD=1,LDSTPD=1, + + LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + + 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + + 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + + 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + + LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C VARIABLE DECLARATIONS + INTEGER I,INFO,IPRINT,J,JOB,L,LUNERR,LUNRPT,M,MAXIT,N, + + NDIGIT,NP,NQ + INTEGER IFIXB(MAXNP),IFIXX(LDIFX,MAXM),IWORK(LIWORK) + DOUBLE PRECISION PARTOL,SSTOL,TAUFAC + DOUBLE PRECISION BETA(MAXNP),SCLB(MAXNP),SCLD(LDSCLD,MAXM), + + STPB(MAXNP),STPD(LDSTPD,MAXM), + + WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + + WORK(LWORK),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + + +C SPECIFY DEFAULT VALUES FOR DODRC ARGUMENTS + WE(1,1,1) = -1.0D0 + WD(1,1,1) = -1.0D0 + IFIXB(1) = -1 + IFIXX(1,1) = -1 + JOB = -1 + NDIGIT = -1 + TAUFAC = -1.0D0 + SSTOL = -1.0D0 + PARTOL = -1.0D0 + MAXIT = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + STPB(1) = -1.0D0 + STPD(1,1) = -1.0D0 + SCLB(1) = -1.0D0 + SCLD(1,1) = -1.0D0 + +C SET UP ODRPACK REPORT FILES + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT3') + +C READ PROBLEM DATA + OPEN (UNIT=5,FILE='DATA3') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M),(Y(I,L),L=1,NQ) + 10 CONTINUE + +C SPECIFY TASK AS EXPLICIT ORTHOGONAL DISTANCE REGRESSION +C WITH CENTRAL DIFFERENCE DERIVATIVES +C COVARIANCE MATRIX CONSTRUCTED WITH RECOMPUTED DERIVATIVES +C DELTA INITIALIZED BY USER +C NOT A RESTART +C AND INDICATE LONG INITIAL REPORT +C NO ITERATION REPORTS +C LONG FINAL REPORT + JOB = 01010 + IPRINT = 2002 + +C INITIALIZE DELTA, AND SPECIFY FIRST DECADE OF FREQUENCIES AS FIXED + DO 20 I=1,N + IF (X(I,1).LT.100.0D0) THEN + WORK(I) = 0.0D0 + IFIXX(I,1) = 0 + ELSE IF (X(I,1).LE.150.0D0) THEN + WORK(I) = 0.0D0 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.1000.0D0) THEN + WORK(I) = 25.0D0 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.10000.0D0) THEN + WORK(I) = 560.0D0 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.100000.0D0) THEN + WORK(I) = 9500.0D0 + IFIXX(I,1) = 1 + ELSE + WORK(I) = 144000.0D0 + IFIXX(I,1) = 1 + END IF + 20 CONTINUE + +C SET WEIGHTS + DO 30 I=1,N + IF (X(I,1).EQ.100.0D0 .OR. X(I,1).EQ.150.0D0) THEN + WE(I,1,1) = 0.0D0 + WE(I,1,2) = 0.0D0 + WE(I,2,1) = 0.0D0 + WE(I,2,2) = 0.0D0 + ELSE + WE(I,1,1) = 559.6D0 + WE(I,1,2) = -1634.0D0 + WE(I,2,1) = -1634.0D0 + WE(I,2,2) = 8397.0D0 + END IF + WD(I,1,1) = (1.0D-4)/(X(I,1)**2) + 30 CONTINUE + +C COMPUTE SOLUTION + CALL DODRC(FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, + + SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, + + SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + + LDN,LDM,LDNP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,F,FJACB,FJACD, + + ISTOP) + +C SUBROUTINE ARGUMENTS +C ==> N NUMBER OF OBSERVATIONS +C ==> M NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C ==> LDN LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING N +C ==> LDM LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING M +C ==> LDNP LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING NP +C ==> BETA CURRENT VALUES OF PARAMETERS +C ==> XPLUSD CURRENT VALUE OF EXPLANATORY VARIABLE, I.E., X + DELTA +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> IDEVAL INDICATOR FOR SELECTING COMPUTATION TO BE PERFORMED +C <== F PREDICTED FUNCTION VALUES +C <== FJACB JACOBIAN WITH RESPECT TO BETA +C <== FJACD JACOBIAN WITH RESPECT TO ERRORS DELTA +C <== ISTOP STOPPING CONDITION, WHERE +C 0 MEANS CURRENT BETA AND X+DELTA WERE +C ACCEPTABLE AND VALUES WERE COMPUTED SUCCESSFULLY +C 1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD SELECT VALUES +C CLOSER TO MOST RECENTLY USED VALUES IF POSSIBLE +C -1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD STOP + +C INPUT ARGUMENTS, NOT TO BE CHANGED BY THIS ROUTINE: + INTEGER I,IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + DOUBLE PRECISION BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C OUTPUT ARGUMENTS: + DOUBLE PRECISION F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) +C LOCAL VARIABLES + DOUBLE PRECISION FREQ,PI,OMEGA,CTHETA,STHETA,THETA,PHI,R + INTRINSIC ATAN2,EXP,SQRT + + +C CHECK FOR UNACCEPTABLE VALUES FOR THIS PROBLEM + DO 10 I=1,N + IF (XPLUSD(I,1).LT.0.0D0) THEN + ISTOP = 1 + RETURN + END IF + 10 CONTINUE + ISTOP = 0 + + PI = 3.141592653589793238462643383279D0 + + THETA = PI*BETA(4)*0.5D0 + CTHETA = COS(THETA) + STHETA = SIN(THETA) + +C COMPUTE PREDICTED VALUES + IF (MOD(IDEVAL,10).GE.1) THEN + DO 100 I = 1,N + FREQ = XPLUSD(I,1) + OMEGA = (2.0D0*PI*FREQ*EXP(-BETA(3)))**BETA(4) + PHI = ATAN2((OMEGA*STHETA),(1+OMEGA*CTHETA)) + R = (BETA(1)-BETA(2)) * + + SQRT((1+OMEGA*CTHETA)**2+ + + (OMEGA*STHETA)**2)**(-BETA(5)) + F(I,1) = BETA(2) + R*COS(BETA(5)*PHI) + F(I,2) = R*SIN(BETA(5)*PHI) + 100 CONTINUE + END IF + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/d_lpkbls.f b/dataassim/math/optimization/odrpack95/d_lpkbls.f new file mode 100644 index 0000000..ca2e31e --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_lpkbls.f @@ -0,0 +1,2249 @@ +*DASUM + DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX) +C***BEGIN PROLOGUE DASUM +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A3A +C***KEYWORDS ADD,BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,MAGNITUDE,SUM, +C VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE SUM OF MAGNITUDES OF D.P. VECTOR COMPONENTS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DASUM DOUBLE PRECISION RESULT (ZERO IF N .LE. 0) +C RETURNS SUM OF MAGNITUDES OF DOUBLE PRECISION DX. +C DASUM = SUM FROM 0 TO N-1 OF DABS(DX(1+I*INCX)) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DASUM + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + INTEGER + + I,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,MOD + + +C***FIRST EXECUTABLE STATEMENT DASUM + + + DASUM = 0.D0 + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + NS = N*INCX + DO 10 I=1,NS,INCX + DASUM = DASUM + DABS(DX(I)) + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 6. + + 20 M = MOD(N,6) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DASUM = DASUM + DABS(DX(I)) + 30 CONTINUE + IF( N .LT. 6 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,6 + DASUM = DASUM + DABS(DX(I)) + DABS(DX(I+1)) + DABS(DX(I+2)) + 1 + DABS(DX(I+3)) + DABS(DX(I+4)) + DABS(DX(I+5)) + 50 CONTINUE + RETURN + END +*DAXPY + SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DAXPY +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A7 +C***KEYWORDS BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,TRIAD,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P COMPUTATION Y = A*X + Y +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DA DOUBLE PRECISION SCALAR MULTIPLIER +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DY DOUBLE PRECISION RESULT (UNCHANGED IF N .LE. 0) +C OVERWRITE DOUBLE PRECISION DY WITH DOUBLE PRECISION DA*DX + DY. +C FOR I = 0 TO N-1, REPLACE DY(LY+I*INCY) WITH DA*DX(LX+I*INCX) + +C DY(LY+I*INCY), WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N +C AND LY IS DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DAXPY + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DAXPY + + + IF(N.LE.0.OR.DA.EQ.0.D0) RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR NONEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 4. + + 20 M = MOD(N,4) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DY(I) + DA*DX(I) + 30 CONTINUE + IF( N .LT. 4 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I + 1) = DY(I + 1) + DA*DX(I + 1) + DY(I + 2) = DY(I + 2) + DA*DX(I + 2) + DY(I + 3) = DY(I + 3) + DA*DX(I + 3) + 50 CONTINUE + RETURN + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DY(I) = DA*DX(I) + DY(I) + 70 CONTINUE + RETURN + END +*DCHEX + SUBROUTINE DCHEX(R,LDR,P,K,L,Z,LDZ,NZ,C,S,JOB) +C***BEGIN PROLOGUE DCHEX +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D7B +C***KEYWORDS CHOLESKY DECOMPOSITION,DOUBLE PRECISION,EXCHANGE, +C LINEAR ALGEBRA,LINPACK,MATRIX,POSITIVE DEFINITE +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE UPDATES THE CHOLESKY FACTORIZATION A=TRANS(R)*R OF A +C POSITIVE DEFINITE MATRIX A OF ORDER P UNDER DIAGONAL +C PERMUTATIONS OF THE FORM TRANS(E)*A*E WHERE E IS A +C PERMUTATION MATRIX. +C***DESCRIPTION +C DCHEX UPDATES THE CHOLESKY FACTORIZATION +C A = TRANS(R)*R +C OF A POSITIVE DEFINITE MATRIX A OF ORDER P UNDER DIAGONAL +C PERMUTATIONS OF THE FORM +C TRANS(E)*A*E +C WHERE E IS A PERMUTATION MATRIX. SPECIFICALLY, GIVEN +C AN UPPER TRIANGULAR MATRIX R AND A PERMUTATION MATRIX +C E (WHICH IS SPECIFIED BY K, L, AND JOB), DCHEX DETERMINES +C AN ORTHOGONAL MATRIX U SUCH THAT +C U*R*E = RR, +C WHERE RR IS UPPER TRIANGULAR. AT THE USERS OPTION, THE +C TRANSFORMATION U WILL BE MULTIPLIED INTO THE ARRAY Z. +C IF A = TRANS(X)*X, SO THAT R IS THE TRIANGULAR PART OF THE +C QR FACTORIZATION OF X, THEN RR IS THE TRIANGULAR PART OF THE +C QR FACTORIZATION OF X*E, I.E. X WITH ITS COLUMNS PERMUTED. +C FOR A LESS TERSE DESCRIPTION OF WHAT DCHEX DOES AND HOW +C IT MAY BE APPLIED, SEE THE LINPACK GUIDE. +C THE MATRIX Q IS DETERMINED AS THE PRODUCT U(L-K)*...*U(1) +C OF PLANE ROTATIONS OF THE FORM +C ( C(I) S(I) ) +C ( ) , +C ( -S(I) C(I) ) +C WHERE C(I) IS DOUBLE PRECISION. THE ROWS THESE ROTATIONS OPERATE +C ON ARE DESCRIBED BELOW. +C THERE ARE TWO TYPES OF PERMUTATIONS, WHICH ARE DETERMINED +C BY THE VALUE OF JOB. +C 1. RIGHT CIRCULAR SHIFT (JOB = 1). +C THE COLUMNS ARE REARRANGED IN THE FOLLOWING ORDER. +C 1,...,K-1,L,K,K+1,...,L-1,L+1,...,P. +C U IS THE PRODUCT OF L-K ROTATIONS U(I), WHERE U(I) +C ACTS IN THE (L-I,L-I+1)-PLANE. +C 2. LEFT CIRCULAR SHIFT (JOB = 2). +C THE COLUMNS ARE REARRANGED IN THE FOLLOWING ORDER +C 1,...,K-1,K+1,K+2,...,L,K,L+1,...,P. +C U IS THE PRODUCT OF L-K ROTATIONS U(I), WHERE U(I) +C ACTS IN THE (K+I-1,K+I)-PLANE. +C ON ENTRY +C R DOUBLE PRECISION(LDR,P), WHERE LDR .GE. P. +C R CONTAINS THE UPPER TRIANGULAR FACTOR +C THAT IS TO BE UPDATED. ELEMENTS OF R +C BELOW THE DIAGONAL ARE NOT REFERENCED. +C LDR INTEGER. +C LDR IS THE LEADING DIMENSION OF THE ARRAY R. +C P INTEGER. +C P IS THE ORDER OF THE MATRIX R. +C K INTEGER. +C K IS THE FIRST COLUMN TO BE PERMUTED. +C L INTEGER. +C L IS THE LAST COLUMN TO BE PERMUTED. +C L MUST BE STRICTLY GREATER THAN K. +C Z DOUBLE PRECISION(LDZ,N)Z), WHERE LDZ .GE. P. +C Z IS AN ARRAY OF NZ P-VECTORS INTO WHICH THE +C TRANSFORMATION U IS MULTIPLIED. Z IS +C NOT REFERENCED IF NZ = 0. +C LDZ INTEGER. +C LDZ IS THE LEADING DIMENSION OF THE ARRAY Z. +C NZ INTEGER. +C NZ IS THE NUMBER OF COLUMNS OF THE MATRIX Z. +C JOB INTEGER. +C JOB DETERMINES THE TYPE OF PERMUTATION. +C JOB = 1 RIGHT CIRCULAR SHIFT. +C JOB = 2 LEFT CIRCULAR SHIFT. +C ON RETURN +C R CONTAINS THE UPDATED FACTOR. +C Z CONTAINS THE UPDATED MATRIX Z. +C C DOUBLE PRECISION(P). +C C CONTAINS THE COSINES OF THE TRANSFORMING ROTATIONS. +C S DOUBLE PRECISION(P). +C S CONTAINS THE SINES OF THE TRANSFORMING ROTATIONS. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DROTG +C***END PROLOGUE DCHEX + +C...SCALAR ARGUMENTS + INTEGER + + JOB,K,L,LDR,LDZ,NZ,P + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + C(*),R(LDR,*),S(*),Z(LDZ,*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + T,T1 + INTEGER + + I,II,IL,IU,J,JJ,KM1,KP1,LM1,LMK + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DROTG + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MAX0,MIN0 + + +C***FIRST EXECUTABLE STATEMENT DCHEX + + + KM1 = K - 1 + KP1 = K + 1 + LMK = L - K + LM1 = L - 1 + +C PERFORM THE APPROPRIATE TASK. + + GO TO (10,130), JOB + +C RIGHT CIRCULAR SHIFT. + + 10 CONTINUE + +C REORDER THE COLUMNS. + + DO 20 I = 1, L + II = L - I + 1 + S(I) = R(II,L) + 20 CONTINUE + DO 40 JJ = K, LM1 + J = LM1 - JJ + K + DO 30 I = 1, J + R(I,J+1) = R(I,J) + 30 CONTINUE + R(J+1,J+1) = 0.0D0 + 40 CONTINUE + IF (K .EQ. 1) GO TO 60 + DO 50 I = 1, KM1 + II = L - I + 1 + R(I,K) = S(II) + 50 CONTINUE + 60 CONTINUE + +C CALCULATE THE ROTATIONS. + + T = S(1) + DO 70 I = 1, LMK + T1 = S(I) + CALL DROTG(S(I+1),T,C(I),T1) + S(I) = T1 + T = S(I+1) + 70 CONTINUE + R(K,K) = T + DO 90 J = KP1, P + IL = MAX0(1,L-J+1) + DO 80 II = IL, LMK + I = L - II + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 80 CONTINUE + 90 CONTINUE + +C IF REQUIRED, APPLY THE TRANSFORMATIONS TO Z. + + IF (NZ .LT. 1) GO TO 120 + DO 110 J = 1, NZ + DO 100 II = 1, LMK + I = L - II + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE + GO TO 260 + +C LEFT CIRCULAR SHIFT + + 130 CONTINUE + +C REORDER THE COLUMNS + + DO 140 I = 1, K + II = LMK + I + S(II) = R(I,K) + 140 CONTINUE + DO 160 J = K, LM1 + DO 150 I = 1, J + R(I,J) = R(I,J+1) + 150 CONTINUE + JJ = J - KM1 + S(JJ) = R(J+1,J+1) + 160 CONTINUE + DO 170 I = 1, K + II = LMK + I + R(I,L) = S(II) + 170 CONTINUE + DO 180 I = KP1, L + R(I,L) = 0.0D0 + 180 CONTINUE + +C REDUCTION LOOP. + + DO 220 J = K, P + IF (J .EQ. K) GO TO 200 + +C APPLY THE ROTATIONS. + + IU = MIN0(J-1,L-1) + DO 190 I = K, IU + II = I - K + 1 + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 190 CONTINUE + 200 CONTINUE + IF (J .GE. L) GO TO 210 + JJ = J - K + 1 + T = S(JJ) + CALL DROTG(R(J,J),T,C(JJ),S(JJ)) + 210 CONTINUE + 220 CONTINUE + +C APPLY THE ROTATIONS TO Z. + + IF (NZ .LT. 1) GO TO 250 + DO 240 J = 1, NZ + DO 230 I = K, LM1 + II = I - KM1 + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + 260 CONTINUE + RETURN + END +*DCOPY + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DCOPY +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A5 +C***KEYWORDS BLAS,COPY,DOUBLE PRECISION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. VECTOR COPY Y = X +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DY COPY OF VECTOR DX (UNCHANGED IF N .LE. 0) +C COPY DOUBLE PRECISION DX TO DOUBLE PRECISION DY. +C FOR I = 0 TO N-1, COPY DX(LX+I*INCX) TO DY(LY+I*INCY), +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DCOPY + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DCOPY + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 7. + + 20 M = MOD(N,7) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DX(I) + 30 CONTINUE + IF( N .LT. 7 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,7 + DY(I) = DX(I) + DY(I + 1) = DX(I + 1) + DY(I + 2) = DX(I + 2) + DY(I + 3) = DX(I + 3) + DY(I + 4) = DX(I + 4) + DY(I + 5) = DX(I + 5) + DY(I + 6) = DX(I + 6) + 50 CONTINUE + RETURN + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + 60 CONTINUE + NS=N*INCX + DO 70 I=1,NS,INCX + DY(I) = DX(I) + 70 CONTINUE + RETURN + END +*DDOT + DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DDOT +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A4 +C***KEYWORDS BLAS,DOUBLE PRECISION,INNER PRODUCT,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. INNER PRODUCT OF D.P. VECTORS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DDOT DOUBLE PRECISION DOT PRODUCT (ZERO IF N .LE. 0) +C RETURNS THE DOT PRODUCT OF DOUBLE PRECISION DX AND DY. +C DDOT = SUM FOR I = 0 TO N-1 OF DX(LX+I*INCX) * DY(LY+I*INCY) +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DDOT + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DDOT + + + DDOT = 0.D0 + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DDOT = DDOT + DX(IX)*DY(IY) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1. + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DDOT = DDOT + DX(I)*DY(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DDOT = DDOT + DX(I)*DY(I) + DX(I+1)*DY(I+1) + + 1 DX(I + 2)*DY(I + 2) + DX(I + 3)*DY(I + 3) + DX(I + 4)*DY(I + 4) + 50 CONTINUE + RETURN + +C CODE FOR POSITIVE EQUAL INCREMENTS .NE.1. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DDOT = DDOT + DX(I)*DY(I) + 70 CONTINUE + RETURN + END +*DNRM2 + DOUBLE PRECISION FUNCTION DNRM2(N,DX,INCX) +C***BEGIN PROLOGUE DNRM2 +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A3B +C***KEYWORDS BLAS,DOUBLE PRECISION,EUCLIDEAN,L2,LENGTH,LINEAR ALGEBRA, +C NORM,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE EUCLIDEAN LENGTH (L2 NORM) OF D.P. VECTOR +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DNRM2 DOUBLE PRECISION RESULT (ZERO IF N .LE. 0) +C EUCLIDEAN NORM OF THE N-VECTOR STORED IN DX() WITH STORAGE +C INCREMENT INCX . +C IF N .LE. 0 RETURN WITH RESULT = 0. +C IF N .GE. 1 THEN INCX MUST BE .GE. 1 +C C.L. LAWSON, 1978 JAN 08 +C FOUR PHASE METHOD USING TWO BUILT-IN CONSTANTS THAT ARE +C HOPEFULLY APPLICABLE TO ALL MACHINES. +C CUTLO = MAXIMUM OF DSQRT(U/EPS) OVER ALL KNOWN MACHINES. +C CUTHI = MINIMUM OF DSQRT(V) OVER ALL KNOWN MACHINES. +C WHERE +C EPS = SMALLEST NO. SUCH THAT EPS + 1. .GT. 1. +C U = SMALLEST POSITIVE NO. (UNDERFLOW LIMIT) +C V = LARGEST NO. (OVERFLOW LIMIT) +C BRIEF OUTLINE OF ALGORITHM.. +C PHASE 1 SCANS ZERO COMPONENTS. +C MOVE TO PHASE 2 WHEN A COMPONENT IS NONZERO AND .LE. CUTLO +C MOVE TO PHASE 3 WHEN A COMPONENT IS .GT. CUTLO +C MOVE TO PHASE 4 WHEN A COMPONENT IS .GE. CUTHI/M +C WHERE M = N FOR X() REAL AND M = 2*N FOR COMPLEX. + +C VALUES FOR CUTLO AND CUTHI.. +C FROM THE ENVIRONMENTAL PARAMETERS LISTED IN THE IMSL CONVERTER +C DOCUMENT THE LIMITING VALUES ARE AS FOLLOWS.. +C CUTLO, S.P. U/EPS = 2**(-102) FOR HONEYWELL. CLOSE SECONDS ARE +C UNIVAC AND DEC AT 2**(-103) +C THUS CUTLO = 2**(-51) = 4.44089E-16 +C CUTHI, S.P. V = 2**127 FOR UNIVAC, HONEYWELL, AND DEC. +C THUS CUTHI = 2**(63.5) = 1.30438E19 +C CUTLO, D.P. U/EPS = 2**(-67) FOR HONEYWELL AND DEC. +C THUS CUTLO = 2**(-33.5) = 8.23181D-11 +C CUTHI, D.P. SAME AS S.P. CUTHI = 1.30438D19 +C DATA CUTLO, CUTHI / 8.232D-11, 1.304D19 / +C DATA CUTLO, CUTHI / 4.441E-16, 1.304E19 / +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DNRM2 + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + CUTHI,CUTLO,HITEST,ONE,SUM,XMAX,ZERO + INTEGER + + I,J,NEXT,NN + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DSQRT,FLOAT + +C...DATA STATEMENTS + DATA + + ZERO,ONE/0.0D0,1.0D0/ + DATA + + CUTLO,CUTHI/8.232D-11,1.304D19/ + + +C***FIRST EXECUTABLE STATEMENT DNRM2 + + + XMAX = ZERO + IF(N .GT. 0) GO TO 10 + DNRM2 = ZERO + GO TO 300 + + 10 ASSIGN 30 TO NEXT + SUM = ZERO + NN = N * INCX +C BEGIN MAIN LOOP + I = 1 +C 20 GO TO NEXT,(30, 50, 70, 110) + 20 GO TO NEXT + 30 IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 + ASSIGN 50 TO NEXT + XMAX = ZERO + +C PHASE 1. SUM IS ZERO + + 50 IF( DX(I) .EQ. ZERO) GO TO 200 + IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 + +C PREPARE FOR PHASE 2. + ASSIGN 70 TO NEXT + GO TO 105 + +C PREPARE FOR PHASE 4. + + 100 I = J + ASSIGN 110 TO NEXT + SUM = (SUM / DX(I)) / DX(I) + 105 XMAX = DABS(DX(I)) + GO TO 115 + +C PHASE 2. SUM IS SMALL. +C SCALE TO AVOID DESTRUCTIVE UNDERFLOW. + + 70 IF( DABS(DX(I)) .GT. CUTLO ) GO TO 75 + +C COMMON CODE FOR PHASES 2 AND 4. +C IN PHASE 4 SUM IS LARGE. SCALE TO AVOID OVERFLOW. + + 110 IF( DABS(DX(I)) .LE. XMAX ) GO TO 115 + SUM = ONE + SUM * (XMAX / DX(I))**2 + XMAX = DABS(DX(I)) + GO TO 200 + + 115 SUM = SUM + (DX(I)/XMAX)**2 + GO TO 200 + + +C PREPARE FOR PHASE 3. + + 75 SUM = (SUM * XMAX) * XMAX + + +C FOR REAL OR D.P. SET HITEST = CUTHI/N +C FOR COMPLEX SET HITEST = CUTHI/(2*N) + + 85 HITEST = CUTHI/FLOAT( N ) + +C PHASE 3. SUM IS MID-RANGE. NO SCALING. + + DO 95 J =I,NN,INCX + IF(DABS(DX(J)) .GE. HITEST) GO TO 100 + 95 SUM = SUM + DX(J)**2 + DNRM2 = DSQRT( SUM ) + GO TO 300 + + 200 CONTINUE + I = I + INCX + IF ( I .LE. NN ) GO TO 20 + +C END OF MAIN LOOP. + +C COMPUTE SQUARE ROOT AND ADJUST FOR SCALING. + + DNRM2 = XMAX * DSQRT(SUM) + 300 CONTINUE + RETURN + END +*DPODI + SUBROUTINE DPODI(A,LDA,N,DET,JOB) +C***BEGIN PROLOGUE DPODI +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2B1B,D3B1B +C***KEYWORDS DETERMINANT,DOUBLE PRECISION,FACTOR,INVERSE, +C LINEAR ALGEBRA,LINPACK,MATRIX,POSITIVE DEFINITE +C***AUTHOR MOLER, C. B., (U. OF NEW MEXICO) +C***PURPOSE COMPUTES THE DETERMINANT AND INVERSE OF A CERTAIN DOUBLE +C PRECISION SYMMETRIC POSITIVE DEFINITE MATRIX (SEE ABSTRACT) +C USING THE FACTORS COMPUTED BY DPOCO, DPOFA OR DQRDC. +C***DESCRIPTION +C DPODI COMPUTES THE DETERMINANT AND INVERSE OF A CERTAIN +C DOUBLE PRECISION SYMMETRIC POSITIVE DEFINITE MATRIX (SEE BELOW) +C USING THE FACTORS COMPUTED BY DPOCO, DPOFA OR DQRDC. +C ON ENTRY +C A DOUBLE PRECISION(LDA, N) +C THE OUTPUT A FROM DPOCO OR DPOFA +C OR THE OUTPUT X FROM DQRDC. +C LDA INTEGER +C THE LEADING DIMENSION OF THE ARRAY A . +C N INTEGER +C THE ORDER OF THE MATRIX A . +C JOB INTEGER +C = 11 BOTH DETERMINANT AND INVERSE. +C = 01 INVERSE ONLY. +C = 10 DETERMINANT ONLY. +C ON RETURN +C A IF DPOCO OR DPOFA WAS USED TO FACTOR A , THEN +C DPODI PRODUCES THE UPPER HALF OF INVERSE(A) . +C IF DQRDC WAS USED TO DECOMPOSE X , THEN +C DPODI PRODUCES THE UPPER HALF OF INVERSE(TRANS(X)*X) +C WHERE TRANS(X) IS THE TRANSPOSE. +C ELEMENTS OF A BELOW THE DIAGONAL ARE UNCHANGED. +C IF THE UNITS DIGIT OF JOB IS ZERO, A IS UNCHANGED. +C DET DOUBLE PRECISION(2) +C DETERMINANT OF A OR OF TRANS(X)*X IF REQUESTED. +C OTHERWISE NOT REFERENCED. +C DETERMINANT = DET(1) * 10.0**DET(2) +C WITH 1.0 .LE. DET(1) .LT. 10.0 +C OR DET(1) .EQ. 0.0 . +C ERROR CONDITION +C A DIVISION BY ZERO WILL OCCUR IF THE INPUT FACTOR CONTAINS +C A ZERO ON THE DIAGONAL AND THE INVERSE IS REQUESTED. +C IT WILL NOT OCCUR IF THE SUBROUTINES ARE CALLED CORRECTLY +C AND IF DPOCO OR DPOFA HAS SET INFO .EQ. 0 . +C LINPACK. THIS VERSION DATED 08/14/78 . +C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY,DSCAL +C***END PROLOGUE DPODI + +C...SCALAR ARGUMENTS + INTEGER JOB,LDA,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION A(LDA,*),DET(*) + +C...LOCAL SCALARS + DOUBLE PRECISION S,T + INTEGER I,J,JM1,K,KP1 + +C...EXTERNAL SUBROUTINES + EXTERNAL DAXPY,DSCAL + +C...INTRINSIC FUNCTIONS + INTRINSIC MOD + + +C***FIRST EXECUTABLE STATEMENT DPODI + + + IF (JOB/10 .EQ. 0) GO TO 70 + DET(1) = 1.0D0 + DET(2) = 0.0D0 + S = 10.0D0 + DO 50 I = 1, N + DET(1) = A(I,I)**2*DET(1) +C ...EXIT + IF (DET(1) .EQ. 0.0D0) GO TO 60 + 10 IF (DET(1) .GE. 1.0D0) GO TO 20 + DET(1) = S*DET(1) + DET(2) = DET(2) - 1.0D0 + GO TO 10 + 20 CONTINUE + 30 IF (DET(1) .LT. S) GO TO 40 + DET(1) = DET(1)/S + DET(2) = DET(2) + 1.0D0 + GO TO 30 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + +C COMPUTE INVERSE(R) + + IF (MOD(JOB,10) .EQ. 0) GO TO 140 + DO 100 K = 1, N + A(K,K) = 1.0D0/A(K,K) + T = -A(K,K) + CALL DSCAL(K-1,T,A(1,K),1) + KP1 = K + 1 + IF (N .LT. KP1) GO TO 90 + DO 80 J = KP1, N + T = A(K,J) + A(K,J) = 0.0D0 + CALL DAXPY(K,T,A(1,K),1,A(1,J),1) + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C FORM INVERSE(R) * TRANS(INVERSE(R)) + + DO 130 J = 1, N + JM1 = J - 1 + IF (JM1 .LT. 1) GO TO 120 + DO 110 K = 1, JM1 + T = A(K,J) + CALL DAXPY(K,T,A(1,J),1,A(1,K),1) + 110 CONTINUE + 120 CONTINUE + T = A(J,J) + CALL DSCAL(J,T,A(1,J),1) + 130 CONTINUE + 140 CONTINUE + RETURN + END +*DQRDC + SUBROUTINE DQRDC(X,LDX,N,P,QRAUX,JPVT,WORK,JOB) +C***BEGIN PROLOGUE DQRDC +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D5 +C***KEYWORDS DECOMPOSITION,DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK, +C MATRIX,ORTHOGONAL TRIANGULAR +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE USES HOUSEHOLDER TRANSFORMATIONS TO COMPUTE THE QR FACTORI- +C ZATION OF N BY P MATRIX X. COLUMN PIVOTING IS OPTIONAL. +C***DESCRIPTION +C DQRDC USES HOUSEHOLDER TRANSFORMATIONS TO COMPUTE THE QR +C FACTORIZATION OF AN N BY P MATRIX X. COLUMN PIVOTING +C BASED ON THE 2-NORMS OF THE REDUCED COLUMNS MAY BE +C PERFORMED AT THE USER'S OPTION. +C ON ENTRY +C X DOUBLE PRECISION(LDX,P), WHERE LDX .GE. N. +C X CONTAINS THE MATRIX WHOSE DECOMPOSITION IS TO BE +C COMPUTED. +C LDX INTEGER. +C LDX IS THE LEADING DIMENSION OF THE ARRAY X. +C N INTEGER. +C N IS THE NUMBER OF ROWS OF THE MATRIX X. +C P INTEGER. +C P IS THE NUMBER OF COLUMNS OF THE MATRIX X. +C JPVT INTEGER(P). +C JPVT CONTAINS INTEGERS THAT CONTROL THE SELECTION +C OF THE PIVOT COLUMNS. THE K-TH COLUMN X(K) OF X +C IS PLACED IN ONE OF THREE CLASSES ACCORDING TO THE +C VALUE OF JPVT(K). +C IF JPVT(K) .GT. 0, THEN X(K) IS AN INITIAL +C COLUMN. +C IF JPVT(K) .EQ. 0, THEN X(K) IS A FREE COLUMN. +C IF JPVT(K) .LT. 0, THEN X(K) IS A FINAL COLUMN. +C BEFORE THE DECOMPOSITION IS COMPUTED, INITIAL COLUMNS +C ARE MOVED TO THE BEGINNING OF THE ARRAY X AND FINAL +C COLUMNS TO THE END. BOTH INITIAL AND FINAL COLUMNS +C ARE FROZEN IN PLACE DURING THE COMPUTATION AND ONLY +C FREE COLUMNS ARE MOVED. AT THE K-TH STAGE OF THE +C REDUCTION, IF X(K) IS OCCUPIED BY A FREE COLUMN +C IT IS INTERCHANGED WITH THE FREE COLUMN OF LARGEST +C REDUCED NORM. JPVT IS NOT REFERENCED IF +C JOB .EQ. 0. +C WORK DOUBLE PRECISION(P). +C WORK IS A WORK ARRAY. WORK IS NOT REFERENCED IF +C JOB .EQ. 0. +C JOB INTEGER. +C JOB IS AN INTEGER THAT INITIATES COLUMN PIVOTING. +C IF JOB .EQ. 0, NO PIVOTING IS DONE. +C IF JOB .NE. 0, PIVOTING IS DONE. +C ON RETURN +C X X CONTAINS IN ITS UPPER TRIANGLE THE UPPER +C TRIANGULAR MATRIX R OF THE QR FACTORIZATION. +C BELOW ITS DIAGONAL X CONTAINS INFORMATION FROM +C WHICH THE ORTHOGONAL PART OF THE DECOMPOSITION +C CAN BE RECOVERED. NOTE THAT IF PIVOTING HAS +C BEEN REQUESTED, THE DECOMPOSITION IS NOT THAT +C OF THE ORIGINAL MATRIX X BUT THAT OF X +C WITH ITS COLUMNS PERMUTED AS DESCRIBED BY JPVT. +C QRAUX DOUBLE PRECISION(P). +C QRAUX CONTAINS FURTHER INFORMATION REQUIRED TO RECOVER +C THE ORTHOGONAL PART OF THE DECOMPOSITION. +C JPVT JPVT(K) CONTAINS THE INDEX OF THE COLUMN OF THE +C ORIGINAL MATRIX THAT HAS BEEN INTERCHANGED INTO +C THE K-TH COLUMN, IF PIVOTING WAS REQUESTED. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY,DDOT,DNRM2,DSCAL,DSWAP +C***END PROLOGUE DQRDC + +C...SCALAR ARGUMENTS + INTEGER + + JOB,LDX,N,P + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + QRAUX(*),WORK(*),X(LDX,*) + INTEGER + + JPVT(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + MAXNRM,NRMXL,T,TT + INTEGER + + J,JJ,JP,L,LP1,LUP,MAXJ,PL,PU + LOGICAL + + NEGJ,SWAPJ + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT,DNRM2 + EXTERNAL + + DDOT,DNRM2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY,DSCAL,DSWAP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DMAX1,DSIGN,DSQRT,MIN0 + + +C***FIRST EXECUTABLE STATEMENT DQRDC + + + PL = 1 + PU = 0 + IF (JOB .EQ. 0) GO TO 60 + +C PIVOTING HAS BEEN REQUESTED. REARRANGE THE COLUMNS +C ACCORDING TO JPVT. + + DO 20 J = 1, P + SWAPJ = JPVT(J) .GT. 0 + NEGJ = JPVT(J) .LT. 0 + JPVT(J) = J + IF (NEGJ) JPVT(J) = -J + IF (.NOT.SWAPJ) GO TO 10 + IF (J .NE. PL) CALL DSWAP(N,X(1,PL),1,X(1,J),1) + JPVT(J) = JPVT(PL) + JPVT(PL) = J + PL = PL + 1 + 10 CONTINUE + 20 CONTINUE + PU = P + DO 50 JJ = 1, P + J = P - JJ + 1 + IF (JPVT(J) .GE. 0) GO TO 40 + JPVT(J) = -JPVT(J) + IF (J .EQ. PU) GO TO 30 + CALL DSWAP(N,X(1,PU),1,X(1,J),1) + JP = JPVT(PU) + JPVT(PU) = JPVT(J) + JPVT(J) = JP + 30 CONTINUE + PU = PU - 1 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + +C COMPUTE THE NORMS OF THE FREE COLUMNS. + + IF (PU .LT. PL) GO TO 80 + DO 70 J = PL, PU + QRAUX(J) = DNRM2(N,X(1,J),1) + WORK(J) = QRAUX(J) + 70 CONTINUE + 80 CONTINUE + +C PERFORM THE HOUSEHOLDER REDUCTION OF X. + + LUP = MIN0(N,P) + DO 200 L = 1, LUP + IF (L .LT. PL .OR. L .GE. PU) GO TO 120 + +C LOCATE THE COLUMN OF LARGEST NORM AND BRING IT +C INTO THE PIVOT POSITION. + + MAXNRM = 0.0D0 + MAXJ = L + DO 100 J = L, PU + IF (QRAUX(J) .LE. MAXNRM) GO TO 90 + MAXNRM = QRAUX(J) + MAXJ = J + 90 CONTINUE + 100 CONTINUE + IF (MAXJ .EQ. L) GO TO 110 + CALL DSWAP(N,X(1,L),1,X(1,MAXJ),1) + QRAUX(MAXJ) = QRAUX(L) + WORK(MAXJ) = WORK(L) + JP = JPVT(MAXJ) + JPVT(MAXJ) = JPVT(L) + JPVT(L) = JP + 110 CONTINUE + 120 CONTINUE + QRAUX(L) = 0.0D0 + IF (L .EQ. N) GO TO 190 + +C COMPUTE THE HOUSEHOLDER TRANSFORMATION FOR COLUMN L. + + NRMXL = DNRM2(N-L+1,X(L,L),1) + IF (NRMXL .EQ. 0.0D0) GO TO 180 + IF (X(L,L) .NE. 0.0D0) NRMXL = DSIGN(NRMXL,X(L,L)) + CALL DSCAL(N-L+1,1.0D0/NRMXL,X(L,L),1) + X(L,L) = 1.0D0 + X(L,L) + +C APPLY THE TRANSFORMATION TO THE REMAINING COLUMNS, +C UPDATING THE NORMS. + + LP1 = L + 1 + IF (P .LT. LP1) GO TO 170 + DO 160 J = LP1, P + T = -DDOT(N-L+1,X(L,L),1,X(L,J),1)/X(L,L) + CALL DAXPY(N-L+1,T,X(L,L),1,X(L,J),1) + IF (J .LT. PL .OR. J .GT. PU) GO TO 150 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 150 + TT = 1.0D0 - (DABS(X(L,J))/QRAUX(J))**2 + TT = DMAX1(TT,0.0D0) + T = TT + TT = 1.0D0 + 0.05D0*TT*(QRAUX(J)/WORK(J))**2 + IF (TT .EQ. 1.0D0) GO TO 130 + QRAUX(J) = QRAUX(J)*DSQRT(T) + GO TO 140 + 130 CONTINUE + QRAUX(J) = DNRM2(N-L,X(L+1,J),1) + WORK(J) = QRAUX(J) + 140 CONTINUE + 150 CONTINUE + 160 CONTINUE + 170 CONTINUE + +C SAVE THE TRANSFORMATION. + + QRAUX(L) = X(L,L) + X(L,L) = -NRMXL + 180 CONTINUE + 190 CONTINUE + 200 CONTINUE + RETURN + END +*DQRSL + SUBROUTINE DQRSL(X,LDX,N,K,QRAUX,Y,QY,QTY,B,RSD,XB,JOB,INFO) +C***BEGIN PROLOGUE DQRSL +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D9,D2A1 +C***KEYWORDS DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK,MATRIX, +C ORTHOGONAL TRIANGULAR,SOLVE +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE APPLIES THE OUTPUT OF DQRDC TO COMPUTE COORDINATE +C TRANSFORMATIONS, PROJECTIONS, AND LEAST SQUARES SOLUTIONS. +C***DESCRIPTION +C DQRSL APPLIES THE OUTPUT OF DQRDC TO COMPUTE COORDINATE +C TRANSFORMATIONS, PROJECTIONS, AND LEAST SQUARES SOLUTIONS. +C FOR K .LE. MIN(N,P), LET XK BE THE MATRIX +C XK = (X(JPVT(1)),X(JPVT(2)), ... ,X(JPVT(K))) +C FORMED FROM COLUMNNS JPVT(1), ... ,JPVT(K) OF THE ORIGINAL +C N X P MATRIX X THAT WAS INPUT TO DQRDC (IF NO PIVOTING WAS +C DONE, XK CONSISTS OF THE FIRST K COLUMNS OF X IN THEIR +C ORIGINAL ORDER). DQRDC PRODUCES A FACTORED ORTHOGONAL MATRIX Q +C AND AN UPPER TRIANGULAR MATRIX R SUCH THAT +C XK = Q * (R) +C (0) +C THIS INFORMATION IS CONTAINED IN CODED FORM IN THE ARRAYS +C X AND QRAUX. +C ON ENTRY +C X DOUBLE PRECISION(LDX,P). +C X CONTAINS THE OUTPUT OF DQRDC. +C LDX INTEGER. +C LDX IS THE LEADING DIMENSION OF THE ARRAY X. +C N INTEGER. +C N IS THE NUMBER OF ROWS OF THE MATRIX XK. IT MUST +C HAVE THE SAME VALUE AS N IN DQRDC. +C K INTEGER. +C K IS THE NUMBER OF COLUMNS OF THE MATRIX XK. K +C MUST NOT BE GREATER THAN MIN(N,P), WHERE P IS THE +C SAME AS IN THE CALLING SEQUENCE TO DQRDC. +C QRAUX DOUBLE PRECISION(P). +C QRAUX CONTAINS THE AUXILIARY OUTPUT FROM DQRDC. +C Y DOUBLE PRECISION(N) +C Y CONTAINS AN N-VECTOR THAT IS TO BE MANIPULATED +C BY DQRSL. +C JOB INTEGER. +C JOB SPECIFIES WHAT IS TO BE COMPUTED. JOB HAS +C THE DECIMAL EXPANSION ABCDE, WITH THE FOLLOWING +C MEANING. +C IF A .NE. 0, COMPUTE QY. +C IF B,C,D, OR E .NE. 0, COMPUTE QTY. +C IF C .NE. 0, COMPUTE B. +C IF D .NE. 0, COMPUTE RSD. +C IF E .NE. 0, COMPUTE XB. +C NOTE THAT A REQUEST TO COMPUTE B, RSD, OR XB +C AUTOMATICALLY TRIGGERS THE COMPUTATION OF QTY, FOR +C WHICH AN ARRAY MUST BE PROVIDED IN THE CALLING +C SEQUENCE. +C ON RETURN +C QY DOUBLE PRECISION(N). +C QY CONTAINS Q*Y, IF ITS COMPUTATION HAS BEEN +C REQUESTED. +C QTY DOUBLE PRECISION(N). +C QTY CONTAINS TRANS(Q)*Y, IF ITS COMPUTATION HAS +C BEEN REQUESTED. HERE TRANS(Q) IS THE +C TRANSPOSE OF THE MATRIX Q. +C B DOUBLE PRECISION(K) +C B CONTAINS THE SOLUTION OF THE LEAST SQUARES PROBLEM +C MINIMIZE NORM2(Y - XK*B), +C IF ITS COMPUTATION HAS BEEN REQUESTED. (NOTE THAT +C IF PIVOTING WAS REQUESTED IN DQRDC, THE J-TH +C COMPONENT OF B WILL BE ASSOCIATED WITH COLUMN JPVT(J) +C OF THE ORIGINAL MATRIX X THAT WAS INPUT INTO DQRDC.) +C RSD DOUBLE PRECISION(N). +C RSD CONTAINS THE LEAST SQUARES RESIDUAL Y - XK*B, +C IF ITS COMPUTATION HAS BEEN REQUESTED. RSD IS +C ALSO THE ORTHOGONAL PROJECTION OF Y ONTO THE +C ORTHOGONAL COMPLEMENT OF THE COLUMN SPACE OF XK. +C XB DOUBLE PRECISION(N). +C XB CONTAINS THE LEAST SQUARES APPROXIMATION XK*B, +C IF ITS COMPUTATION HAS BEEN REQUESTED. XB IS ALSO +C THE ORTHOGONAL PROJECTION OF Y ONTO THE COLUMN SPACE +C OF X. +C INFO INTEGER. +C INFO IS ZERO UNLESS THE COMPUTATION OF B HAS +C BEEN REQUESTED AND R IS EXACTLY SINGULAR. IN +C THIS CASE, INFO IS THE INDEX OF THE FIRST ZERO +C DIAGONAL ELEMENT OF R AND B IS LEFT UNALTERED. +C THE PARAMETERS QY, QTY, B, RSD, AND XB ARE NOT REFERENCED +C IF THEIR COMPUTATION IS NOT REQUESTED AND IN THIS CASE +C CAN BE REPLACED BY DUMMY VARIABLES IN THE CALLING PROGRAM. +C TO SAVE STORAGE, THE USER MAY IN SOME CASES USE THE SAME +C ARRAY FOR DIFFERENT PARAMETERS IN THE CALLING SEQUENCE. A +C FREQUENTLY OCCURING EXAMPLE IS WHEN ONE WISHES TO COMPUTE +C ANY OF B, RSD, OR XB AND DOES NOT NEED Y OR QTY. IN THIS +C CASE ONE MAY IDENTIFY Y, QTY, AND ONE OF B, RSD, OR XB, WHILE +C PROVIDING SEPARATE ARRAYS FOR ANYTHING ELSE THAT IS TO BE +C COMPUTED. THUS THE CALLING SEQUENCE +C CALL DQRSL(X,LDX,N,K,QRAUX,Y,DUM,Y,B,Y,DUM,110,INFO) +C WILL RESULT IN THE COMPUTATION OF B AND RSD, WITH RSD +C OVERWRITING Y. MORE GENERALLY, EACH ITEM IN THE FOLLOWING +C LIST CONTAINS GROUPS OF PERMISSIBLE IDENTIFICATIONS FOR +C A SINGLE CALLING SEQUENCE. +C 1. (Y,QTY,B) (RSD) (XB) (QY) +C 2. (Y,QTY,RSD) (B) (XB) (QY) +C 3. (Y,QTY,XB) (B) (RSD) (QY) +C 4. (Y,QY) (QTY,B) (RSD) (XB) +C 5. (Y,QY) (QTY,RSD) (B) (XB) +C 6. (Y,QY) (QTY,XB) (B) (RSD) +C IN ANY GROUP THE VALUE RETURNED IN THE ARRAY ALLOCATED TO +C THE GROUP CORRESPONDS TO THE LAST MEMBER OF THE GROUP. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY,DCOPY,DDOT +C***END PROLOGUE DQRSL + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,K,LDX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(*),QRAUX(*),QTY(*),QY(*),RSD(*),X(LDX,*),XB(*), + + Y(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + T,TEMP + INTEGER + + I,J,JJ,JU,KP1 + LOGICAL + + CB,CQTY,CQY,CR,CXB + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT + EXTERNAL + + DDOT + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY,DCOPY + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN0,MOD + + +C***FIRST EXECUTABLE STATEMENT DQRSL + + + INFO = 0 + +C DETERMINE WHAT IS TO BE COMPUTED. + + CQY = JOB/10000 .NE. 0 + CQTY = MOD(JOB,10000) .NE. 0 + CB = MOD(JOB,1000)/100 .NE. 0 + CR = MOD(JOB,100)/10 .NE. 0 + CXB = MOD(JOB,10) .NE. 0 + JU = MIN0(K,N-1) + +C SPECIAL ACTION WHEN N=1. + + IF (JU .NE. 0) GO TO 40 + IF (CQY) QY(1) = Y(1) + IF (CQTY) QTY(1) = Y(1) + IF (CXB) XB(1) = Y(1) + IF (.NOT.CB) GO TO 30 + IF (X(1,1) .NE. 0.0D0) GO TO 10 + INFO = 1 + GO TO 20 + 10 CONTINUE + B(1) = Y(1)/X(1,1) + 20 CONTINUE + 30 CONTINUE + IF (CR) RSD(1) = 0.0D0 + GO TO 250 + 40 CONTINUE + +C SET UP TO COMPUTE QY OR QTY. + + IF (CQY) CALL DCOPY(N,Y,1,QY,1) + IF (CQTY) CALL DCOPY(N,Y,1,QTY,1) + IF (.NOT.CQY) GO TO 70 + +C COMPUTE QY. + + DO 60 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 50 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT(N-J+1,X(J,J),1,QY(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,QY(J),1) + X(J,J) = TEMP + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + IF (.NOT.CQTY) GO TO 100 + +C COMPUTE TRANS(Q)*Y. + + DO 90 J = 1, JU + IF (QRAUX(J) .EQ. 0.0D0) GO TO 80 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT(N-J+1,X(J,J),1,QTY(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,QTY(J),1) + X(J,J) = TEMP + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C SET UP TO COMPUTE B, RSD, OR XB. + + IF (CB) CALL DCOPY(K,QTY,1,B,1) + KP1 = K + 1 + IF (CXB) CALL DCOPY(K,QTY,1,XB,1) + IF (CR .AND. K .LT. N) CALL DCOPY(N-K,QTY(KP1),1,RSD(KP1),1) + IF (.NOT.CXB .OR. KP1 .GT. N) GO TO 120 + DO 110 I = KP1, N + XB(I) = 0.0D0 + 110 CONTINUE + 120 CONTINUE + IF (.NOT.CR) GO TO 140 + DO 130 I = 1, K + RSD(I) = 0.0D0 + 130 CONTINUE + 140 CONTINUE + IF (.NOT.CB) GO TO 190 + +C COMPUTE B. + + DO 170 JJ = 1, K + J = K - JJ + 1 + IF (X(J,J) .NE. 0.0D0) GO TO 150 + INFO = J +C ......EXIT + GO TO 180 + 150 CONTINUE + B(J) = B(J)/X(J,J) + IF (J .EQ. 1) GO TO 160 + T = -B(J) + CALL DAXPY(J-1,T,X(1,J),1,B,1) + 160 CONTINUE + 170 CONTINUE + 180 CONTINUE + 190 CONTINUE + IF (.NOT.CR .AND. .NOT.CXB) GO TO 240 + +C COMPUTE RSD OR XB AS REQUIRED. + + DO 230 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 220 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + IF (.NOT.CR) GO TO 200 + T = -DDOT(N-J+1,X(J,J),1,RSD(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,RSD(J),1) + 200 CONTINUE + IF (.NOT.CXB) GO TO 210 + T = -DDOT(N-J+1,X(J,J),1,XB(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,XB(J),1) + 210 CONTINUE + X(J,J) = TEMP + 220 CONTINUE + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + RETURN + END +*DROT + SUBROUTINE DROT(N,DX,INCX,DY,INCY,DC,DS) +C***BEGIN PROLOGUE DROT +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A8 +C***KEYWORDS BLAS,GIVENS ROTATION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE APPLY D.P. GIVENS ROTATION +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C DC D.P. ELEMENT OF ROTATION MATRIX +C DS D.P. ELEMENT OF ROTATION MATRIX +C --OUTPUT-- +C DX ROTATED VECTOR (UNCHANGED IF N .LE. 0) +C DY ROTATED VECTOR (UNCHANGED IF N .LE. 0) +C MULTIPLY THE 2 X 2 MATRIX ( DC DS) TIMES THE 2 X N MATRIX (DX**T) +C (-DS DC) (DY**T) +C WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN +C DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE +C LX = (-INCX)*N, AND SIMILARLY FOR DY USING LY AND INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DROT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DC,DS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,W,Z,ZERO + INTEGER + + I,KX,KY,NSTEPS + +C...DATA STATEMENTS + DATA + + ZERO,ONE/0.D0,1.D0/ + + +C***FIRST EXECUTABLE STATEMENT DROT + + + IF(N .LE. 0 .OR. (DS .EQ. ZERO .AND. DC .EQ. ONE)) GO TO 40 + IF(.NOT. (INCX .EQ. INCY .AND. INCX .GT. 0)) GO TO 20 + + NSTEPS=INCX*N + DO 10 I=1,NSTEPS,INCX + W=DX(I) + Z=DY(I) + DX(I)=DC*W+DS*Z + DY(I)=-DS*W+DC*Z + 10 CONTINUE + GO TO 40 + + 20 CONTINUE + KX=1 + KY=1 + + IF(INCX .LT. 0) KX=1-(N-1)*INCX + IF(INCY .LT. 0) KY=1-(N-1)*INCY + + DO 30 I=1,N + W=DX(KX) + Z=DY(KY) + DX(KX)=DC*W+DS*Z + DY(KY)=-DS*W+DC*Z + KX=KX+INCX + KY=KY+INCY + 30 CONTINUE + 40 CONTINUE + + RETURN + END +*DROTG + SUBROUTINE DROTG(DA,DB,DC,DS) +C***BEGIN PROLOGUE DROTG +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1B10 +C***KEYWORDS BLAS,GIVENS ROTATION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE CONSTRUCT D.P. PLANE GIVENS ROTATION +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C DA DOUBLE PRECISION SCALAR +C DB DOUBLE PRECISION SCALAR +C --OUTPUT-- +C DA DOUBLE PRECISION RESULT R +C DB DOUBLE PRECISION RESULT Z +C DC DOUBLE PRECISION RESULT +C DS DOUBLE PRECISION RESULT +C DESIGNED BY C. L. LAWSON, JPL, 1977 SEPT 08 +C CONSTRUCT THE GIVENS TRANSFORMATION +C ( DC DS ) +C G = ( ) , DC**2 + DS**2 = 1 , +C (-DS DC ) +C WHICH ZEROS THE SECOND ENTRY OF THE 2-VECTOR (DA,DB)**T . +C THE QUANTITY R = (+/-)DSQRT(DA**2 + DB**2) OVERWRITES DA IN +C STORAGE. THE VALUE OF DB IS OVERWRITTEN BY A VALUE Z WHICH +C ALLOWS DC AND DS TO BE RECOVERED BY THE FOLLOWING ALGORITHM. +C IF Z=1 SET DC=0.D0 AND DS=1.D0 +C IF DABS(Z) .LT. 1 SET DC=DSQRT(1-Z**2) AND DS=Z +C IF DABS(Z) .GT. 1 SET DC=1/Z AND DS=DSQRT(1-DC**2) +C NORMALLY, THE SUBPROGRAM DROT(N,DX,INCX,DY,INCY,DC,DS) WILL +C NEXT BE CALLED TO APPLY THE TRANSFORMATION TO A 2 BY N MATRIX. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DROTG + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA,DB,DC,DS + +C...LOCAL SCALARS + DOUBLE PRECISION + + R,U,V + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DSQRT + + +C***FIRST EXECUTABLE STATEMENT DROTG + + + IF (DABS(DA) .LE. DABS(DB)) GO TO 10 + +C *** HERE DABS(DA) .GT. DABS(DB) *** + + U = DA + DA + V = DB / U + +C NOTE THAT U AND R HAVE THE SIGN OF DA + + R = DSQRT(.25D0 + V**2) * U + +C NOTE THAT DC IS POSITIVE + + DC = DA / R + DS = V * (DC + DC) + DB = DS + DA = R + RETURN + +C *** HERE DABS(DA) .LE. DABS(DB) *** + + 10 IF (DB .EQ. 0.D0) GO TO 20 + U = DB + DB + V = DA / U + +C NOTE THAT U AND R HAVE THE SIGN OF DB +C (R IS IMMEDIATELY STORED IN DA) + + DA = DSQRT(.25D0 + V**2) * U + +C NOTE THAT DS IS POSITIVE + + DS = DB / DA + DC = V * (DS + DS) + IF (DC .EQ. 0.D0) GO TO 15 + DB = 1.D0 / DC + RETURN + 15 DB = 1.D0 + RETURN + +C *** HERE DA = DB = 0.D0 *** + + 20 DC = 1.D0 + DS = 0.D0 + RETURN + + END +*DSCAL + SUBROUTINE DSCAL(N,DA,DX,INCX) +C***BEGIN PROLOGUE DSCAL +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A6 +C***KEYWORDS BLAS,LINEAR ALGEBRA,SCALE,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. VECTOR SCALE X = A*X +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DA DOUBLE PRECISION SCALE FACTOR +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DX DOUBLE PRECISION RESULT (UNCHANGED IF N.LE.0) +C REPLACE DOUBLE PRECISION DX BY DOUBLE PRECISION DA*DX. +C FOR I = 0 TO N-1, REPLACE DX(1+I*INCX) WITH DA * DX(1+I*INCX) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DSCAL + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + INTEGER + + I,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DSCAL + + + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + NS = N*INCX + DO 10 I = 1,NS,INCX + DX(I) = DA*DX(I) + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DX(I) = DA*DX(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I + 1) = DA*DX(I + 1) + DX(I + 2) = DA*DX(I + 2) + DX(I + 3) = DA*DX(I + 3) + DX(I + 4) = DA*DX(I + 4) + 50 CONTINUE + RETURN + END +*DSWAP + SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DSWAP +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A5 +C***KEYWORDS BLAS,DOUBLE PRECISION,INTERCHANGE,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE INTERCHANGE D.P. VECTORS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DX INPUT VECTOR DY (UNCHANGED IF N .LE. 0) +C DY INPUT VECTOR DX (UNCHANGED IF N .LE. 0) +C INTERCHANGE DOUBLE PRECISION DX AND DOUBLE PRECISION DY. +C FOR I = 0 TO N-1, INTERCHANGE DX(LX+I*INCX) AND DY(LY+I*INCY), +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DSWAP + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + DTEMP1,DTEMP2,DTEMP3 + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DSWAP + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DTEMP1 = DX(IX) + DX(IX) = DY(IY) + DY(IY) = DTEMP1 + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 3. + + 20 M = MOD(N,3) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 30 CONTINUE + IF( N .LT. 3 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,3 + DTEMP1 = DX(I) + DTEMP2 = DX(I+1) + DTEMP3 = DX(I+2) + DX(I) = DY(I) + DX(I+1) = DY(I+1) + DX(I+2) = DY(I+2) + DY(I) = DTEMP1 + DY(I+1) = DTEMP2 + DY(I+2) = DTEMP3 + 50 CONTINUE + RETURN + 60 CONTINUE + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + NS = N*INCX + DO 70 I=1,NS,INCX + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 70 CONTINUE + RETURN + END +*DTRCO + SUBROUTINE DTRCO(T,LDT,N,RCOND,Z,JOB) +C***BEGIN PROLOGUE DTRCO +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2A3 +C***KEYWORDS CONDITION,DOUBLE PRECISION,FACTOR,LINEAR ALGEBRA,LINPACK, +C MATRIX,TRIANGULAR +C***AUTHOR MOLER, C. B., (U. OF NEW MEXICO) +C***PURPOSE ESTIMATES THE CONDITION OF A DOUBLE PRECISION TRIANGULAR +C MATRIX. +C***DESCRIPTION +C DTRCO ESTIMATES THE CONDITION OF A DOUBLE PRECISION TRIANGULAR +C MATRIX. +C ON ENTRY +C T DOUBLE PRECISION(LDT,N) +C T CONTAINS THE TRIANGULAR MATRIX. THE ZERO +C ELEMENTS OF THE MATRIX ARE NOT REFERENCED, AND +C THE CORRESPONDING ELEMENTS OF THE ARRAY CAN BE +C USED TO STORE OTHER INFORMATION. +C LDT INTEGER +C LDT IS THE LEADING DIMENSION OF THE ARRAY T. +C N INTEGER +C N IS THE ORDER OF THE SYSTEM. +C JOB INTEGER +C = 0 T IS LOWER TRIANGULAR. +C = NONZERO T IS UPPER TRIANGULAR. +C ON RETURN +C RCOND DOUBLE PRECISION +C AN ESTIMATE OF THE RECIPROCAL CONDITION OF T . +C FOR THE SYSTEM T*X = B , RELATIVE PERTURBATIONS +C IN T AND B OF SIZE EPSILON MAY CAUSE +C RELATIVE PERTURBATIONS IN X OF SIZE EPSILON/RCOND . +C IF RCOND IS SO SMALL THAT THE LOGICAL EXPRESSION +C 1.0 + RCOND .EQ. 1.0 +C IS TRUE, THEN T MAY BE SINGULAR TO WORKING +C PRECISION. IN PARTICULAR, RCOND IS ZERO IF +C EXACT SINGULARITY IS DETECTED OR THE ESTIMATE +C UNDERFLOWS. +C Z DOUBLE PRECISION(N) +C A WORK VECTOR WHOSE CONTENTS ARE USUALLY UNIMPORTANT. +C IF T IS CLOSE TO A SINGULAR MATRIX, THEN Z IS +C AN APPROXIMATE NULL VECTOR IN THE SENSE THAT +C NORM(A*Z) = RCOND*NORM(A)*NORM(Z) . +C LINPACK. THIS VERSION DATED 08/14/78 . +C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DASUM,DAXPY,DSCAL +C***END PROLOGUE DTRCO + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + RCOND + INTEGER + + JOB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,*),Z(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + EK,S,SM,TNORM,W,WK,WKM,YNORM + INTEGER + + I1,J,J1,J2,K,KK,L + LOGICAL + + LOWER + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DASUM + EXTERNAL + + DASUM + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY,DSCAL + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DMAX1,DSIGN + + +C***FIRST EXECUTABLE STATEMENT DTRCO + + + LOWER = JOB .EQ. 0 + +C COMPUTE 1-NORM OF T + + TNORM = 0.0D0 + DO 10 J = 1, N + L = J + IF (LOWER) L = N + 1 - J + I1 = 1 + IF (LOWER) I1 = J + TNORM = DMAX1(TNORM,DASUM(L,T(I1,J),1)) + 10 CONTINUE + +C RCOND = 1/(NORM(T)*(ESTIMATE OF NORM(INVERSE(T)))) . +C ESTIMATE = NORM(Z)/NORM(Y) WHERE T*Z = Y AND TRANS(T)*Y = E . +C TRANS(T) IS THE TRANSPOSE OF T . +C THE COMPONENTS OF E ARE CHOSEN TO CAUSE MAXIMUM LOCAL +C GROWTH IN THE ELEMENTS OF Y . +C THE VECTORS ARE FREQUENTLY RESCALED TO AVOID OVERFLOW. + +C SOLVE TRANS(T)*Y = E + + EK = 1.0D0 + DO 20 J = 1, N + Z(J) = 0.0D0 + 20 CONTINUE + DO 100 KK = 1, N + K = KK + IF (LOWER) K = N + 1 - KK + IF (Z(K) .NE. 0.0D0) EK = DSIGN(EK,-Z(K)) + IF (DABS(EK-Z(K)) .LE. DABS(T(K,K))) GO TO 30 + S = DABS(T(K,K))/DABS(EK-Z(K)) + CALL DSCAL(N,S,Z,1) + EK = S*EK + 30 CONTINUE + WK = EK - Z(K) + WKM = -EK - Z(K) + S = DABS(WK) + SM = DABS(WKM) + IF (T(K,K) .EQ. 0.0D0) GO TO 40 + WK = WK/T(K,K) + WKM = WKM/T(K,K) + GO TO 50 + 40 CONTINUE + WK = 1.0D0 + WKM = 1.0D0 + 50 CONTINUE + IF (KK .EQ. N) GO TO 90 + J1 = K + 1 + IF (LOWER) J1 = 1 + J2 = N + IF (LOWER) J2 = K - 1 + DO 60 J = J1, J2 + SM = SM + DABS(Z(J)+WKM*T(K,J)) + Z(J) = Z(J) + WK*T(K,J) + S = S + DABS(Z(J)) + 60 CONTINUE + IF (S .GE. SM) GO TO 80 + W = WKM - WK + WK = WKM + DO 70 J = J1, J2 + Z(J) = Z(J) + W*T(K,J) + 70 CONTINUE + 80 CONTINUE + 90 CONTINUE + Z(K) = WK + 100 CONTINUE + S = 1.0D0/DASUM(N,Z,1) + CALL DSCAL(N,S,Z,1) + + YNORM = 1.0D0 + +C SOLVE T*Z = Y + + DO 130 KK = 1, N + K = N + 1 - KK + IF (LOWER) K = KK + IF (DABS(Z(K)) .LE. DABS(T(K,K))) GO TO 110 + S = DABS(T(K,K))/DABS(Z(K)) + CALL DSCAL(N,S,Z,1) + YNORM = S*YNORM + 110 CONTINUE + IF (T(K,K) .NE. 0.0D0) Z(K) = Z(K)/T(K,K) + IF (T(K,K) .EQ. 0.0D0) Z(K) = 1.0D0 + I1 = 1 + IF (LOWER) I1 = K + 1 + IF (KK .GE. N) GO TO 120 + W = -Z(K) + CALL DAXPY(N-KK,W,T(I1,K),1,Z(I1),1) + 120 CONTINUE + 130 CONTINUE +C MAKE ZNORM = 1.0 + S = 1.0D0/DASUM(N,Z,1) + CALL DSCAL(N,S,Z,1) + YNORM = S*YNORM + + IF (TNORM .NE. 0.0D0) RCOND = YNORM/TNORM + IF (TNORM .EQ. 0.0D0) RCOND = 0.0D0 + RETURN + END +*DTRSL + SUBROUTINE DTRSL(T,LDT,N,B,JOB,INFO) +C***BEGIN PROLOGUE DTRSL +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2A3 +C***KEYWORDS DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK,MATRIX,SOLVE, +C TRIANGULAR +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE SOLVES SYSTEMS OF THE FORM T*X=B OR TRANS(T)*X=B WHERE T +C IS A TRIANGULAR MATRIX OF ORDER N. +C***DESCRIPTION +C DTRSL SOLVES SYSTEMS OF THE FORM +C T * X = B +C OR +C TRANS(T) * X = B +C WHERE T IS A TRIANGULAR MATRIX OF ORDER N. HERE TRANS(T) +C DENOTES THE TRANSPOSE OF THE MATRIX T. +C ON ENTRY +C T DOUBLE PRECISION(LDT,N) +C T CONTAINS THE MATRIX OF THE SYSTEM. THE ZERO +C ELEMENTS OF THE MATRIX ARE NOT REFERENCED, AND +C THE CORRESPONDING ELEMENTS OF THE ARRAY CAN BE +C USED TO STORE OTHER INFORMATION. +C LDT INTEGER +C LDT IS THE LEADING DIMENSION OF THE ARRAY T. +C N INTEGER +C N IS THE ORDER OF THE SYSTEM. +C B DOUBLE PRECISION(N). +C B CONTAINS THE RIGHT HAND SIDE OF THE SYSTEM. +C JOB INTEGER +C JOB SPECIFIES WHAT KIND OF SYSTEM IS TO BE SOLVED. +C IF JOB IS +C 00 SOLVE T*X=B, T LOWER TRIANGULAR, +C 01 SOLVE T*X=B, T UPPER TRIANGULAR, +C 10 SOLVE TRANS(T)*X=B, T LOWER TRIANGULAR, +C 11 SOLVE TRANS(T)*X=B, T UPPER TRIANGULAR. +C ON RETURN +C B B CONTAINS THE SOLUTION, IF INFO .EQ. 0. +C OTHERWISE B IS UNALTERED. +C INFO INTEGER +C INFO CONTAINS ZERO IF THE SYSTEM IS NONSINGULAR. +C OTHERWISE INFO CONTAINS THE INDEX OF +C THE FIRST ZERO DIAGONAL ELEMENT OF T. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY,DDOT +C***END PROLOGUE DTRSL + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(*),T(LDT,*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP + INTEGER + + CASE,J,JJ + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT + EXTERNAL + + DDOT + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DTRSL + + +C BEGIN BLOCK PERMITTING ...EXITS TO 150 + +C CHECK FOR ZERO DIAGONAL ELEMENTS. + + DO 10 INFO = 1, N +C ......EXIT + IF (T(INFO,INFO) .EQ. 0.0D0) GO TO 150 + 10 CONTINUE + INFO = 0 + +C DETERMINE THE TASK AND GO TO IT. + + CASE = 1 + IF (MOD(JOB,10) .NE. 0) CASE = 2 + IF (MOD(JOB,100)/10 .NE. 0) CASE = CASE + 2 + GO TO (20,50,80,110), CASE + +C SOLVE T*X=B FOR T LOWER TRIANGULAR + + 20 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 40 + DO 30 J = 2, N + TEMP = -B(J-1) + CALL DAXPY(N-J+1,TEMP,T(J,J-1),1,B(J),1) + B(J) = B(J)/T(J,J) + 30 CONTINUE + 40 CONTINUE + GO TO 140 + +C SOLVE T*X=B FOR T UPPER TRIANGULAR. + + 50 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 70 + DO 60 JJ = 2, N + J = N - JJ + 1 + TEMP = -B(J+1) + CALL DAXPY(J,TEMP,T(1,J+1),1,B(1),1) + B(J) = B(J)/T(J,J) + 60 CONTINUE + 70 CONTINUE + GO TO 140 + +C SOLVE TRANS(T)*X=B FOR T LOWER TRIANGULAR. + + 80 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 100 + DO 90 JJ = 2, N + J = N - JJ + 1 + B(J) = B(J) - DDOT(JJ-1,T(J+1,J),1,B(J+1),1) + B(J) = B(J)/T(J,J) + 90 CONTINUE + 100 CONTINUE + GO TO 140 + +C SOLVE TRANS(T)*X=B FOR T UPPER TRIANGULAR. + + 110 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 130 + DO 120 J = 2, N + B(J) = B(J) - DDOT(J-1,T(1,J),1,B(1),1) + B(J) = B(J)/T(J,J) + 120 CONTINUE + 130 CONTINUE + 140 CONTINUE + 150 CONTINUE + RETURN + END +*IDAMAX + INTEGER FUNCTION IDAMAX(N,DX,INCX) +C***BEGIN PROLOGUE IDAMAX +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A2 +C***KEYWORDS BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,MAXIMUM COMPONENT, +C VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE FIND LARGEST COMPONENT OF D.P. VECTOR +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C IDAMAX SMALLEST INDEX (ZERO IF N .LE. 0) +C FIND SMALLEST INDEX OF MAXIMUM MAGNITUDE OF DOUBLE PRECISION DX. +C IDAMAX = FIRST I, I = 1 TO N, TO MINIMIZE ABS(DX(1-INCX+I*INCX) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE IDAMAX + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + DMAX,XMAG + INTEGER + + I,II,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS + + +C***FIRST EXECUTABLE STATEMENT IDAMAX + + + IDAMAX = 0 + IF(N.LE.0) RETURN + IDAMAX = 1 + IF(N.LE.1)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + DMAX = DABS(DX(1)) + NS = N*INCX + II = 1 + DO 10 I = 1,NS,INCX + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 5 + IDAMAX = II + DMAX = XMAG + 5 II = II + 1 + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + + 20 DMAX = DABS(DX(1)) + DO 30 I = 2,N + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 30 + IDAMAX = I + DMAX = XMAG + 30 CONTINUE + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/d_mprec0.f b/dataassim/math/optimization/odrpack95/d_mprec0.f new file mode 100644 index 0000000..edaa203 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_mprec0.f @@ -0,0 +1,203 @@ +*DMPREC + DOUBLE PRECISION FUNCTION DMPREC() +C***BEGIN PROLOGUE DPREC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE DETERMINE MACHINE PRECISION FOR TARGET MACHINE AND COMPILER +C ASSUMING FLOATING-POINT NUMBERS ARE REPRESENTED IN THE +C T-DIGIT, BASE-B FORM +C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) +C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T, AND +C 0 .LT. X(1). +C TO ALTER THIS FUNCTION FOR A PARTICULAR TARGET MACHINE, +C EITHER +C ACTIVATE THE DESIRED SET OF DATA STATEMENTS BY +C REMOVING THE C FROM COLUMN 1 +C OR +C SET B, TD AND TS USING I1MACH BY ACTIVATING +C THE DECLARATION STATEMENTS FOR I1MACH +C AND THE STATEMENTS PRECEEDING THE FIRST +C EXECUTABLE STATEMENT BELOW. +C***END PROLOGUE DPREC + +C...LOCAL SCALARS + DOUBLE PRECISION + + B + INTEGER + + TD,TS + +C...EXTERNAL FUNCTIONS +C INTEGER +C + I1MACH +C EXTERNAL +C + I1MACH + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) + +C DOUBLE PRECISION B +C THE BASE OF THE TARGET MACHINE. +C (MAY BE DEFINED USING I1MACH(10).) +C INTEGER TD +C THE NUMBER OF BASE-B DIGITS IN DOUBLE PRECISION. +C (MAY BE DEFINED USING I1MACH(14).) +C INTEGER TS +C THE NUMBER OF BASE-B DIGITS IN SINGLE PRECISION. +C (MAY BE DEFINED USING I1MACH(11).) + + +C MACHINE CONSTANTS FOR COMPUTERS FOLLOWING IEEE ARITHMETIC STANDARD +C (E.G., MOTOROLA 68000 BASED MACHINES SUCH AS SUN AND SPARC +C WORKSTATIONS, AND AT&T PC 7300; AND 8087 BASED MICROS SUCH AS THE +C IBM PC AND THE AT&T 6300). +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 60 / + +C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM +C THE BURROUGHS 6700/7700 SYSTEMS +C DATA B / 8 / +C DATA TS / 13 / +C DATA TD / 26 / + +C MACHINE CONSTANTS FOR THE CDC 6000/7000 (FTN5 COMPILER) +C THE CYBER 170/180 SERIES UNDER NOS +C DATA B / 2 / +C DATA TS / 48 / +C DATA TD / 96 / + +C MACHINE CONSTANTS FOR THE CDC 6000/7000 (FTN COMPILER) +C THE CYBER 170/180 SERIES UNDER NOS/VE +C THE CYBER 200 SERIES +C DATA B / 2 / +C DATA TS / 47 / +C DATA TD / 94 / + +C MACHINE CONSTANTS FOR THE CRAY +C DATA B / 2 / +C DATA TS / 47 / +C DATA TD / 94 / + +C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE HARRIS COMPUTER +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 38 / + +C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 +C THE HONEYWELL 600/6000 SERIES +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 63 / + +C MACHINE CONSTANTS FOR THE HP 2100 +C (3 WORD DOUBLE PRECISION OPTION WITH FTN4) +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 39 / + +C MACHINE CONSTANTS FOR THE HP 2100 +C (4 WORD DOUBLE PRECISION OPTION WITH FTN4) +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 55 / + +C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE IBM PC +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE INTERDATA (PERKIN ELMER) 7/32 +C INTERDATA (PERKIN ELMER) 8/32 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 54 / + +C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 62 / + +C MACHINE CONSTANTS FOR THE PDP-11 SYSTEM +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE PERKIN-ELMER 3230 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE PRIME 850 AND PRIME 4050 +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 47 / + +C MACHINE CONSTANTS FOR THE SEL SYSTEMS 85/86 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR SUN AND SPARC WORKSTATIONS +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 60 / + +C MACHINE CONSTANTS FOR THE VAX-11 WITH FORTRAN IV-PLUS COMPILER +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE VAX/VMS SYSTEM WITHOUT G_FLOATING +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE VAX/VMS SYSTEM WITH G_FLOATING +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE XEROX SIGMA 5/7/9 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + + +C***FIRST EXECUTABLE STATEMENT DMPREC + + +C B = I1MACH(10) +C TS = I1MACH(11) +C TD = I1MACH(14) + + DMPREC = B ** (1-TD) + + RETURN + + END diff --git a/dataassim/math/optimization/odrpack95/d_odr.f b/dataassim/math/optimization/odrpack95/d_odr.f new file mode 100644 index 0000000..df0db44 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/d_odr.f @@ -0,0 +1,10985 @@ +*DODR + SUBROUTINE DODR + + (FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + JOB, + + IPRINT,LUNERR,LUNRPT, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODR +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***CATEGORY NO. G2E,I1B1 +C***KEYWORDS ORTHOGONAL DISTANCE REGRESSION, +C NONLINEAR LEAST SQUARES, +C MEASUREMENT ERROR MODELS, +C ERRORS IN VARIABLES +C***AUTHOR BOGGS, PAUL T. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C GAITHERSBURG, MD 20899 +C BYRD, RICHARD H. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C ROGERS, JANET E. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C SCHNABEL, ROBERT B. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C AND +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION (SHORT CALL STATEMENT) +C***DESCRIPTION +C FOR DETAILS, SEE ODRPACK USER'S REFERENCE GUIDE. +C***REFERENCES BOGGS, P. T., R. H. BYRD, J. R. DONALDSON, AND +C R. B. SCHNABEL (1989), +C "ALGORITHM 676 --- ODRPACK: SOFTWARE FOR WEIGHTED +C ORTHOGONAL DISTANCE REGRESSION," +C ACM TRANS. MATH. SOFTWARE., 15(4):348-364. +C BOGGS, P. T., R. H. BYRD, J. E. ROGERS, AND +C R. B. SCHNABEL (1992), +C "USER'S REFERENCE GUIDE FOR ODRPACK VERSION 2.01, +C SOFTWARE FOR WEIGHTED ORTHOGONAL DISTANCE REGRESSION," +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C INTERNAL REPORT NUMBER 92-4834. +C BOGGS, P. T., R. H. BYRD, AND R. B. SCHNABEL (1987), +C "A STABLE AND EFFICIENT ALGORITHM FOR NONLINEAR +C ORTHOGONAL DISTANCE REGRESSION," +C SIAM J. SCI. STAT. COMPUT., 8(6):1052-1078. +C***ROUTINES CALLED DODCNT +C***END PROLOGUE DODR + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE,LIWORK,LWORK, + + M,N,NDIGIT,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + NEGONE,PARTOL,SSTOL,TAUFAC,ZERO + INTEGER + + IPRINT,LDIFX,LDSCLD,LDSTPD,LUNERR,LUNRPT,MAXIT + LOGICAL + + SHORT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + SCLB(1),SCLD(1,1),STPB(1),STPD(1,1),WD1(1,1,1) + INTEGER + + IFIXB(1),IFIXX(1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODCNT + +C...DATA STATEMENTS + DATA + + NEGONE,ZERO + + /-1.0D0,0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C N: THE NUMBER OF OBSERVATIONS. +C NEGONE: THE VALUE -1.0D0. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C WD: THE DELTA WEIGHTS. +C WD1: A DUMMY ARRAY USED WHEN WD(1,1,1)=0.0D0. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODR + + +C INITIALIZE NECESSARY VARIABLES TO INDICATE USE OF DEFAULT VALUES + + IFIXB(1) = -1 + IFIXX(1,1) = -1 + LDIFX = 1 + NDIGIT = -1 + TAUFAC = NEGONE + SSTOL = NEGONE + PARTOL = NEGONE + MAXIT = -1 + STPB(1) = NEGONE + STPD(1,1) = NEGONE + LDSTPD = 1 + SCLB(1) = NEGONE + SCLD(1,1) = NEGONE + LDSCLD = 1 + + SHORT = .TRUE. + + IF (WD(1,1,1).NE.ZERO) THEN + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + ELSE + WD1(1,1,1) = NEGONE + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD1,1,1, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END IF + + RETURN + + END +*DODRC + SUBROUTINE DODRC + + (FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, + + SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, + + SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODRC +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***CATEGORY NO. G2E,I1B1 +C***KEYWORDS ORTHOGONAL DISTANCE REGRESSION, +C NONLINEAR LEAST SQUARES, +C MEASUREMENT ERROR MODELS, +C ERRORS IN VARIABLES +C***AUTHOR BOGGS, PAUL T. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C GAITHERSBURG, MD 20899 +C BYRD, RICHARD H. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C ROGERS, JANET E. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C SCHNABEL, ROBERT B. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C AND +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION (LONG CALL STATEMENT) +C***DESCRIPTION +C FOR DETAILS, SEE ODRPACK USER'S REFERENCE GUIDE. +C***REFERENCES BOGGS, P. T., R. H. BYRD, J. R. DONALDSON, AND +C R. B. SCHNABEL (1989), +C "ALGORITHM 676 --- ODRPACK: SOFTWARE FOR WEIGHTED +C ORTHOGONAL DISTANCE REGRESSION," +C ACM TRANS. MATH. SOFTWARE., 15(4):348-364. +C BOGGS, P. T., R. H. BYRD, J. E. ROGERS, AND +C R. B. SCHNABEL (1992), +C "USER'S REFERENCE GUIDE FOR ODRPACK VERSION 2.01, +C SOFTWARE FOR WEIGHTED ORTHOGONAL DISTANCE REGRESSION," +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C INTERNAL REPORT NUMBER 92-4834. +C BOGGS, P. T., R. H. BYRD, AND R. B. SCHNABEL (1987), +C "A STABLE AND EFFICIENT ALGORITHM FOR NONLINEAR +C ORTHOGONAL DISTANCE REGRESSION," +C SIAM J. SCI. STAT. COMPUT., 8(6):1052-1078. +C***ROUTINES CALLED DODCNT +C***END PROLOGUE DODRC + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,N,NDIGIT,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + NEGONE,ZERO + LOGICAL + + SHORT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + WD1(1,1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODCNT + +C...DATA STATEMENTS + DATA + + NEGONE,ZERO + + /-1.0D0,0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C WD: THE DELTA WEIGHTS. +C WD1: A DUMMY ARRAY USED WHEN WD(1,1,1)=0.0D0. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODRC + + + SHORT = .FALSE. + + IF (WD(1,1,1).NE.ZERO) THEN + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + ELSE + WD1(1,1,1) = NEGONE + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD1,1,1, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END IF + + RETURN + + END +*DACCES + SUBROUTINE DACCES + + (N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) +C***BEGIN PROLOGUE DACCES +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DIWINF,DWINF +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE ACCESS OR STORE VALUES IN THE WORK ARRAYS +C***END PROLOGUE DACESS + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRS,ALPHA,ETA,OLMAVG,PARTOL,PNORM,PRERS,RCOND, + + RNORMS,RVAR,SSTOL,TAU,TAUFAC + INTEGER + + IDF,INT2,IPR1,IPR2,IPR2F,IPR3,IRANK,ISTOP,ISTOPI,JOB,JPVT, + + LDWE,LD2WE,LIWORK,LUNRPT,LWORK,M,MAXIT,N,NETA,NFEV,NITER,NJEV, + + NNZW,NP,NPP,NQ,OMEGA,QRAUX,SD,U,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + + ACCESS,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + WORK(LWORK),WSS(3) + INTEGER + + IWORK(LIWORK) + +C...LOCAL SCALARS + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I, + + DELTAI,DELTNI,DELTSI,DIFFI,EPSI, + + EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,IDFI,INT2I,IPRINI,IPRINT, + + IRANKI,JOBI,JPVTI,LDTTI,LIWKMN,LUNERI,LUNRPI,LWKMN,MAXITI, + + MSGB,MSGD,NETAI,NFEVI,NITERI,NJEVI,NNZWI,NPPI,NROWI, + + NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + + VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WSSI,WSSDEI,WSSEPI,XPLUSI +C...EXTERNAL SUBROUTINES + EXTERNAL + + DIWINF,DWINF + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACCESS: THE VARIABLE DESIGNATING WHETHER INFORMATION IS TO BE +C ACCESSED FROM THE WORK ARRAYS (ACCESS=TRUE) OR STORED IN +C THEM (ACCESS=FALSE). +C ACTRS: THE SAVED ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C EPSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY EPS. +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IDFI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C INT2: THE NUMBER OF INTERNAL DOUBLING STEPS. +C INT2I: THE LOCATION IN ARRAY IWORK OF VARIABLE INT2. +C IPR1: THE VALUE OF THE FOURTH DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE INITIAL SUMMARY REPORT. +C IPR2: THE VALUE OF THE THIRD DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE ITERATION REPORTS. +C IPR2F: THE VALUE OF THE SECOND DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FREQUENCY OF THE ITERATION REPORTS. +C IPR3: THE VALUE OF THE FIRST DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FINAL SUMMARY REPORT. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS TO BE +C FOUND BY ODR (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C JPVT: THE PIVOT VECTOR. +C JPVTI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE JPVT. +C LDTTI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGB: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGD: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITER: THE NUMBER OF ITERATIONS TAKEN. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABLE NITER. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS ACTUALLY ESTIMATED. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. +C OLMAVG: THE AVERAGE NUMBER OF LEVENBERG-MARQUARDT STEPS PER +C ITERATION. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGA: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERS: THE SAVED PREDICTED RELATIVE REDUCTION IN THE +C SUM-OF-SQUARES. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C QRAUX: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCOND. +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORMS: THE NORM OF THE SAVED WEIGHTED EPSILONS AND DELTAS. +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVAR: THE RESIDUAL VARIANCE, I.E. STANDARD DEVIATION SQUARED. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SCLB: THE SCALING VALUES USED FOR BETA. +C SCLD: THE SCALING VALUES USED FOR DELTA. +C SD: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=TRUE) OR THE LONG- +C CALL (SHORT=FALSE). +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C U: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCV: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WRK1: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSS: THE SUM OF THE SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM OF THE SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM OF THE SQUARES OF THE WEIGHTED EPSILONS. +C WSSI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(1). +C WSSDEI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(2). +C WSSEPI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(3). +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. + + +C***FIRST EXECUTABLE STATEMENT DACCES + + +C FIND STARTING LOCATIONS WITHIN INTEGER WORKSPACE + + CALL DIWINF(M,NP,NQ, + + MSGB,MSGD,JPVTI,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) + +C FIND STARTING LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) + + IF (ACCESS) THEN + +C SET STARTING LOCATIONS FOR WORK VECTORS + + JPVT = JPVTI + OMEGA = OMEGAI + QRAUX = QRAUXI + SD = SDI + VCV = VCVI + U = UI + WRK1 = WRK1I + WRK2 = WRK2I + WRK3 = WRK3I + WRK4 = WRK4I + WRK5 = WRK5I + WRK6 = WRK6I + +C ACCESS VALUES FROM THE WORK VECTORS + + ACTRS = WORK(ACTRSI) + ALPHA = WORK(ALPHAI) + ETA = WORK(ETAI) + OLMAVG = WORK(OLMAVI) + PARTOL = WORK(PARTLI) + PNORM = WORK(PNORMI) + PRERS = WORK(PRERSI) + RCOND = WORK(RCONDI) + WSS(1) = WORK(WSSI) + WSS(2) = WORK(WSSDEI) + WSS(3) = WORK(WSSEPI) + RVAR = WORK(RVARI) + RNORMS = WORK(RNORSI) + SSTOL = WORK(SSTOLI) + TAU = WORK(TAUI) + TAUFAC = WORK(TAUFCI) + + NETA = IWORK(NETAI) + IRANK = IWORK(IRANKI) + JOB = IWORK(JOBI) + LUNRPT = IWORK(LUNRPI) + MAXIT = IWORK(MAXITI) + NFEV = IWORK(NFEVI) + NITER = IWORK(NITERI) + NJEV = IWORK(NJEVI) + NNZW = IWORK(NNZWI) + NPP = IWORK(NPPI) + IDF = IWORK(IDFI) + INT2 = IWORK(INT2I) + +C SET UP PRINT CONTROL VARIABLES + + IPRINT = IWORK(IPRINI) + + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + + ELSE + +C STORE VALUES INTO THE WORK VECTORS + + WORK(ACTRSI) = ACTRS + WORK(ALPHAI) = ALPHA + WORK(OLMAVI) = OLMAVG + WORK(PARTLI) = PARTOL + WORK(PNORMI) = PNORM + WORK(PRERSI) = PRERS + WORK(RCONDI) = RCOND + WORK(WSSI) = WSS(1) + WORK(WSSDEI) = WSS(2) + WORK(WSSEPI) = WSS(3) + WORK(RVARI) = RVAR + WORK(RNORSI) = RNORMS + WORK(SSTOLI) = SSTOL + WORK(TAUI) = TAU + + IWORK(IRANKI) = IRANK + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NITERI) = NITER + IWORK(NJEVI) = NJEV + IWORK(IDFI) = IDF + IWORK(INT2I) = INT2 + END IF + + RETURN + END +*DESUBI + SUBROUTINE DESUBI + + (N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,E) +C***BEGIN PROLOGUE DESUBI +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE E = WD + ALPHA*TT**2 +C***END PROLOGUE DESUBI + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA + INTEGER + + LDTT,LDWD,LD2WD,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + E(M,M),TT(LDTT,M),WD(LDWD,LD2WD,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J,J1,J2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C E: THE VALUE OF THE ARRAY E = WD + ALPHA*TT**2 +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C J1: AN INDEXING VARIABLE. +C J2: AN INDEXING VARIABLE. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF RESPONSES PER OBSERVATION. +C TT: THE SCALING VALUES USED FOR DELTA. +C WD: THE SQUARED DELTA WEIGHTS, D**2. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DESUBI + + +C N.B. THE LOCATIONS OF WD AND TT ACCESSED DEPEND ON THE VALUE +C OF THE FIRST ELEMENT OF EACH ARRAY AND THE LEADING DIMENSIONS +C OF THE MULTIPLY SUBSCRIPTED ARRAYS. + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WD(1,1,1).GE.ZERO) THEN + IF (LDWD.GE.N) THEN +C THE ELEMENTS OF WD HAVE BEEN INDIVIDUALLY SPECIFIED + + IF (LD2WD.EQ.1) THEN +C THE ARRAYS STORED IN WD ARE DIAGONAL + CALL DZERO(M,M,E,M) + DO 10 J=1,M + E(J,J) = WD(I,1,J) + 10 CONTINUE + ELSE +C THE ARRAYS STORED IN WD ARE FULL POSITIVE SEMIDEFINITE MATRICES + DO 30 J1=1,M + DO 20 J2=1,M + E(J1,J2) = WD(I,J1,J2) + 20 CONTINUE + 30 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 110 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 110 CONTINUE + ELSE + DO 120 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 120 CONTINUE + END IF + ELSE + DO 130 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 130 CONTINUE + END IF + ELSE +C WD IS AN M BY M MATRIX + + IF (LD2WD.EQ.1) THEN +C THE ARRAY STORED IN WD IS DIAGONAL + CALL DZERO(M,M,E,M) + DO 140 J=1,M + E(J,J) = WD(1,1,J) + 140 CONTINUE + ELSE +C THE ARRAY STORED IN WD IS A FULL POSITIVE SEMIDEFINITE MATRICES + DO 160 J1=1,M + DO 150 J2=1,M + E(J1,J2) = WD(1,J1,J2) + 150 CONTINUE + 160 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 210 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 210 CONTINUE + ELSE + DO 220 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 220 CONTINUE + END IF + ELSE + DO 230 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 230 CONTINUE + END IF + END IF + ELSE +C WD IS A DIAGONAL MATRIX WITH ELEMENTS ABS(WD(1,1,1)) + CALL DZERO(M,M,E,M) + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 310 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(I,J)**2 + 310 CONTINUE + ELSE + DO 320 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,J)**2 + 320 CONTINUE + END IF + ELSE + DO 330 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,1)**2 + 330 CONTINUE + END IF + END IF + + RETURN + END +*DETAF + SUBROUTINE DETAF + + (FCN, + + N,M,NP,NQ, + + XPLUSD,BETA,EPSMAC,NROW, + + PARTMP,PV0, + + IFIXB,IFIXX,LDIFX, + + ISTOP,NFEV,ETA,NETA, + + WRK1,WRK2,WRK6,WRK7) +C***BEGIN PROLOGUE DETAF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE NOISE AND NUMBER OF GOOD DIGITS IN FUNCTION RESULTS +C (ADAPTED FROM STARPAC SUBROUTINE ETAFUN) +C***END PROLOGUE DETAF + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSMAC,ETA + INTEGER + + ISTOP,LDIFX,M,N,NETA,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),PARTMP(NP),PV0(N,NQ), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),WRK7(-2:2,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + A,B,FAC,HUNDRD,ONE,P1,P2,P5,STP,TWO,ZERO + INTEGER + + J,K,L + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,INT,LOG10,MAX,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P1,P2,P5,ONE,TWO,HUNDRD + + /0.0D0,0.1D0,0.2D0,0.5D0,1.0D0,2.0D0,1.0D2/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: PARAMETERS OF THE LOCAL FIT. +C B: PARAMETERS OF THE LOCAL FIT. +C BETA: THE FUNCTION PARAMETERS. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE NOISE IN THE MODEL RESULTS. +C FAC: A FACTOR USED IN THE COMPUTATIONS. +C HUNDRD: THE VALUE 1.0D2. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEX VARIABLE. +C K: AN INDEX VARIABLE. +C L: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE MODEL RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER AT WHICH THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C P1: THE VALUE 0.1D0. +C P2: THE VALUE 0.2D0. +C P5: THE VALUE 0.5D0. +C PARTMP: THE MODEL PARAMETERS. +C PV0: THE ORIGINAL PREDICTED VALUES. +C STP: A SMALL VALUE USED TO PERTURB THE PARAMETERS. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C WRK7: A WORK ARRAY OF (5 BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DETAF + + + STP = HUNDRD*EPSMAC + ETA = EPSMAC + + DO 40 J=-2,2 + IF (J.EQ.0) THEN + DO 10 L=1,NQ + WRK7(J,L) = PV0(NROW,L) + 10 CONTINUE + ELSE + DO 20 K=1,NP + IF (IFIXB(1).LT.0) THEN + PARTMP(K) = BETA(K) + J*STP*BETA(K) + ELSE IF (IFIXB(K).NE.0) THEN + PARTMP(K) = BETA(K) + J*STP*BETA(K) + ELSE + PARTMP(K) = BETA(K) + END IF + 20 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + PARTMP,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1,ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO 30 L=1,NQ + WRK7(J,L) = WRK2(NROW,L) + 30 CONTINUE + END IF + 40 CONTINUE + + DO 100 L=1,NQ + A = ZERO + B = ZERO + DO 50 J=-2,2 + A = A + WRK7(J,L) + B = B + J*WRK7(J,L) + 50 CONTINUE + A = P2*A + B = P1*B + IF ((WRK7(0,L).NE.ZERO) .AND. + + (ABS(WRK7(1,L)+WRK7(-1,L)).GT.HUNDRD*EPSMAC)) THEN + FAC = ONE/ABS(WRK7(0,L)) + ELSE + FAC = ONE + END IF + DO 60 J=-2,2 + WRK7(J,L) = ABS((WRK7(J,L)-(A+J*B))*FAC) + ETA = MAX(WRK7(J,L),ETA) + 60 CONTINUE + 100 CONTINUE + NETA = MAX(TWO,P5-LOG10(ETA)) + + RETURN + END +*DEVJAC + SUBROUTINE DEVJAC + + (FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN, + + STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) +C***BEGIN PROLOGUE DEVJAC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DDOT,DIFIX,DJACCD,DJACFD,DWGHT,DUNPAC,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE THE WEIGHTED JACOBIANS WRT BETA AND DELTA +C***END PROLOGUE DEVJAC + +C...SCALAR ARGUMENTS + INTEGER + + INFO,ISTOP,LDIFX,LDSTPD,LDTT,LDWE,LDX,LD2WE, + + M,N,NETA,NFEV,NJEV,NP,NQ + LOGICAL + + ANAJAC,CDJAC,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),BETAC(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + FN(N,NQ),SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WE1(LDWE,LD2WE,NQ),WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP), + + WRK6(N,NP,NQ),X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + INTEGER + + IDEVAL,J,K,K1,L + DOUBLE PRECISION + + ZERO + LOGICAL + + ERROR + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DIFIX,DJACCD,DJACFD,DWGHT,DUNPAC,DXPY + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT + EXTERNAL + + DDOT + +C...DATA STATEMENTS + DATA ZERO + + /0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETAC: THE CURRENT ESTIMATED VALUES OF THE UNFIXED BETA'S. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C DELTA: THE ESTIMATED VALUES OF DELTA. +C ERROR: THE VARIABLE DESIGNATING WHETHER ODRPACK DETECTED NONZERO +C VALUES IN ARRAY DELTA IN THE OLS CASE, AND THUS WHETHER +C THE USER MAY HAVE OVERWRITTEN IMPORTANT INFORMATION +C BY COMPUTING FJACD IN THE OLS CASE. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE PREDICTED VALUES OF THE FUNCTION AT THE CURRENT POINT. +C IDEVAL: THE VARIABLE DESIGNATING WHAT COMPUTATIONS ARE TO BE +C PERFORMED BY USER-SUPPLIED SUBROUTINE FCN. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF DELTA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISTOP: THE VARIABLE DESIGNATING THAT THE USER WISHES THE +C COMPUTATIONS STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C K1: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWE: THE LEADING DIMENSION OF ARRAYS WE AND WE1. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LD2WE: THE SECOND DIMENSION OF ARRAYS WE AND WE1. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C SSF: THE SCALE USED FOR THE BETA'S. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C WE1: THE SQUARE ROOTS OF THE EPSILON WEIGHTS IN ARRAY WE. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C X: THE INDEPENDENT VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DEVJAC + + +C INSERT CURRENT UNFIXED BETA ESTIMATES INTO BETA + + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + +C COMPUTE XPLUSD = X + DELTA + + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) + +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS (FJACB) AND +C THE JACOBIAN WRT DELTA (FJACD) + + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + IF (ANAJAC) THEN + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,WRK2,FJACB,FJACD, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV+1 + END IF +C MAKE SURE FIXED ELEMENTS OF FJACD ARE ZERO + IF (ISODR) THEN + DO 10 L=1,NQ + CALL DIFIX(N,M,IFIXX,LDIFX,FJACD(1,1,L),N,FJACD(1,1,L),N) + 10 CONTINUE + END IF + ELSE IF (CDJAC) THEN + CALL DJACCD(FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) + ELSE + CALL DJACFD(FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) + END IF + IF (ISTOP.LT.0) THEN + RETURN + ELSE IF (.NOT.ISODR) THEN +C TRY TO DETECT WHETHER THE USER HAS COMPUTED JFACD +C WITHIN FCN IN THE OLS CASE + ERROR = DDOT(N*M,DELTA,1,DELTA,1).NE.ZERO + IF (ERROR) THEN + INFO = 50300 + RETURN + END IF + END IF + +C WEIGHT THE JACOBIAN WRT THE ESTIMATED BETAS + + IF (IFIXB(1).LT.0) THEN + DO 20 K=1,NP + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACB(1,K,1),N*NP,FJACB(1,K,1),N*NP) + 20 CONTINUE + ELSE + K1 = 0 + DO 30 K=1,NP + IF (IFIXB(K).GE.1) THEN + K1 = K1 + 1 + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACB(1,K,1),N*NP,FJACB(1,K1,1),N*NP) + END IF + 30 CONTINUE + END IF + +C WEIGHT THE JACOBIAN'S WRT DELTA AS APPROPRIATE + + IF (ISODR) THEN + DO 40 J=1,M + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACD(1,J,1),N*M,FJACD(1,J,1),N*M) + 40 CONTINUE + END IF + + RETURN + END +*DFCTR + SUBROUTINE DFCTR(OKSEMI,A,LDA,N,INFO) +C***BEGIN PROLOGUE DFCTR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DDOT +C***DATE WRITTEN 910706 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE FACTOR THE POSITIVE (SEMI)DEFINITE MATRIX A USING A +C MODIFIED CHOLESKY FACTORIZATION +C (ADAPTED FROM LINPACK SUBROUTINE DPOFA) +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***END PROLOGUE DFCTR + +C...SCALAR ARGUMENTS + INTEGER INFO,LDA,N + LOGICAL OKSEMI + +C...ARRAY ARGUMENTS + DOUBLE PRECISION A(LDA,N) + +C...LOCAL SCALARS + DOUBLE PRECISION XI,S,T,TEN,ZERO + INTEGER J,K + +C...EXTERNAL FUNCTIONS + EXTERNAL DMPREC,DDOT + DOUBLE PRECISION DMPREC,DDOT + +C...INTRINSIC FUNCTIONS + INTRINSIC SQRT + +C...DATA STATEMENTS + DATA + + ZERO,TEN + + /0.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: THE ARRAY TO BE FACTORED. UPON RETURN, A CONTAINS THE +C UPPER TRIANGULAR MATRIX R SO THAT A = TRANS(R)*R +C WHERE THE STRICT LOWER TRIANGLE IS SET TO ZERO +C IF INFO .NE. 0 , THE FACTORIZATION IS NOT COMPLETE. +C I: AN INDEXING VARIABLE. +C INFO: AN IDICATOR VARIABLE, WHERE IF +C INFO = 0 THEN FACTORIZATION WAS COMPLETED +C INFO = K SIGNALS AN ERROR CONDITION. THE LEADING MINOR +C OF ORDER K IS NOT POSITIVE (SEMI)DEFINITE. +C J: AN INDEXING VARIABLE. +C LDA: THE LEADING DIMENSION OF ARRAY A. +C N: THE NUMBER OF ROWS AND COLUMNS OF DATA IN ARRAY A. +C OKSEMI: THE INDICATING WHETHER THE FACTORED ARRAY CAN BE POSITIVE +C SEMIDEFINITE (OKSEMI=TRUE) OR WHETHER IT MUST BE FOUND TO +C BE POSITIVE DEFINITE (OKSEMI=FALSE). +C TEN: THE VALUE 10.0D0. +C XI: A VALUE USED TO TEST FOR NON POSITIVE SEMIDEFINITENESS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DFCTR + + +C SET RELATIVE TOLERANCE FOR DETECTING NON POSITIVE SEMIDEFINITENESS. + XI = -TEN*DMPREC() + +C COMPUTE FACTORIZATION, STORING IN UPPER TRIANGULAR PORTION OF A + DO 20 J=1,N + INFO = J + S = ZERO + DO 10 K=1,J-1 + IF (A(K,K).EQ.ZERO) THEN + T = ZERO + ELSE + T = A(K,J) - DDOT(K-1,A(1,K),1,A(1,J),1) + T = T/A(K,K) + END IF + A(K,J) = T + S = S + T*T + 10 CONTINUE + S = A(J,J) - S +C ......EXIT + IF (A(J,J).LT.ZERO .OR. S.LT.XI*ABS(A(J,J))) THEN + RETURN + ELSE IF (.NOT.OKSEMI .AND. S.LE.ZERO) THEN + RETURN + ELSE IF (S.LE.ZERO) THEN + A(J,J) = ZERO + ELSE + A(J,J) = SQRT(S) + END IF + 20 CONTINUE + INFO = 0 + +C ZERO OUT LOWER PORTION OF A + DO 40 J=2,N + DO 30 K=1,J-1 + A(J,K) = ZERO + 30 CONTINUE + 40 CONTINUE + + RETURN + END +*DFCTRW + SUBROUTINE DFCTRW + + (N,M,NQ,NPP, + + ISODR, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + WRK0,WRK4, + + WE1,NNZW,INFO) +C***BEGIN PROLOGUE DFCTRW +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFCTR +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK INPUT PARAMETERS, INDICATING ERRORS FOUND USING +C NONZERO VALUES OF ARGUMENT INFO AS DESCRIBED IN THE +C ODRPACK REFERENCE GUIDE +C***END PROLOGUE DFCTRW + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDWD,LDWE,LD2WD,LD2WE, + + M,N,NNZW,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ),WD(LDWD,LD2WD,M), + + WRK0(NQ,NQ),WRK4(M,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,INF,J,J1,J2,L,L1,L2 + LOGICAL + + NOTZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DFCTR + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C J1: AN INDEXING VARIABLE. +C J2: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C L1: AN INDEXING VARIABLE. +C L2: AN INDEXING VARIABLE. +C LAST: THE LAST ROW OF THE ARRAY TO BE ACCESSED. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NOTZRO: THE VARIABLE DESIGNATING WHETHER A GIVEN COMPONENT OF THE +C WEIGHT ARRAY WE CONTAINS A NONZERO ELEMENT (NOTZRO=FALSE) +C OR NOT (NOTZRO=TRUE). +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATIONS. +C WE: THE (SQUARED) EPSILON WEIGHTS. +C WE1: THE FACTORED EPSILON WEIGHTS, S.T. TRANS(WE1)*WE1 = WE. +C WD: THE (SQUARED) DELTA WEIGHTS. +C WRK0: A WORK ARRAY OF (NQ BY NQ) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DFCTRW + + +C CHECK EPSILON WEIGHTS, AND STORE FACTORIZATION IN WE1 + + IF (WE(1,1,1).LT.ZERO) THEN +C WE CONTAINS A SCALAR + WE1(1,1,1) = -SQRT(ABS(WE(1,1,1))) + NNZW = N + + ELSE + NNZW = 0 + + IF (LDWE.EQ.1) THEN + + IF (LD2WE.EQ.1) THEN +C WE CONTAINS A DIAGONAL MATRIX + DO 110 L=1,NQ + IF (WE(1,1,L).GT.ZERO) THEN + NNZW = N + WE1(1,1,L) = SQRT(WE(1,1,L)) + ELSE IF (WE(1,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 110 CONTINUE + ELSE + +C WE CONTAINS A FULL NQ BY NQ SEMIDEFINITE MATRIX + DO 130 L1=1,NQ + DO 120 L2=L1,NQ + WRK0(L1,L2) = WE(1,L1,L2) + 120 CONTINUE + 130 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + DO 150 L1=1,NQ + DO 140 L2=1,NQ + WE1(1,L1,L2) = WRK0(L1,L2) + 140 CONTINUE + IF (WE1(1,L1,L1).NE.ZERO) THEN + NNZW = N + END IF + 150 CONTINUE + END IF + END IF + + ELSE + + IF (LD2WE.EQ.1) THEN +C WE CONTAINS AN ARRAY OF DIAGONAL MATRIX + DO 220 I=1,N + NOTZRO = .FALSE. + DO 210 L=1,NQ + IF (WE(I,1,L).GT.ZERO) THEN + NOTZRO = .TRUE. + WE1(I,1,L) = SQRT(WE(I,1,L)) + ELSE IF (WE(I,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 210 CONTINUE + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 220 CONTINUE + ELSE + +C WE CONTAINS AN ARRAY OF FULL NQ BY NQ SEMIDEFINITE MATRICES + DO 270 I=1,N + DO 240 L1=1,NQ + DO 230 L2=L1,NQ + WRK0(L1,L2) = WE(I,L1,L2) + 230 CONTINUE + 240 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + NOTZRO = .FALSE. + DO 260 L1=1,NQ + DO 250 L2=1,NQ + WE1(I,L1,L2) = WRK0(L1,L2) + 250 CONTINUE + IF (WE1(I,L1,L1).NE.ZERO) THEN + NOTZRO = .TRUE. + END IF + 260 CONTINUE + END IF + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 270 CONTINUE + END IF + END IF + END IF + +C CHECK FOR A SUFFICIENT NUMBER OF NONZERO EPSILON WEIGHTS + + IF (NNZW.LT.NPP) THEN + INFO = 30020 + END IF + + +C CHECK DELTA WEIGHTS + + 300 CONTINUE + IF (.NOT.ISODR .OR. WD(1,1,1).LT.ZERO) THEN +C PROBLEM IS NOT ODR, OR WD CONTAINS A SCALAR + RETURN + + ELSE + + IF (LDWD.EQ.1) THEN + + IF (LD2WD.EQ.1) THEN +C WD CONTAINS A DIAGONAL MATRIX + DO 310 J=1,M + IF (WD(1,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 310 CONTINUE + ELSE + +C WD CONTAINS A FULL M BY M POSITIVE DEFINITE MATRIX + DO 330 J1=1,M + DO 320 J2=J1,M + WRK4(J1,J2) = WD(1,J1,J2) + 320 CONTINUE + 330 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + END IF + + ELSE + + IF (LD2WD.EQ.1) THEN +C WD CONTAINS AN ARRAY OF DIAGONAL MATRICES + DO 420 I=1,N + DO 410 J=1,M + IF (WD(I,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 410 CONTINUE + 420 CONTINUE + ELSE + +C WD CONTAINS AN ARRAY OF FULL M BY M POSITIVE DEFINITE MATRICES + DO 470 I=1,N + DO 440 J1=1,M + DO 430 J2=J1,M + WRK4(J1,J2) = WD(I,J1,J2) + 430 CONTINUE + 440 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 470 CONTINUE + END IF + END IF + END IF + + RETURN + END +*DFLAGS + SUBROUTINE DFLAGS + + (JOB,RESTRT,INITD,DOVCV,REDOJ,ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) +C***BEGIN PROLOGUE DFLAGS +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET FLAGS INDICATING CONDITIONS SPECIFIED BY JOB +C***END PROLOGUE DFLAGS + +C...SCALAR ARGUMENTS + INTEGER + + JOB + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...LOCAL SCALARS + INTEGER + + J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER-SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE FIRST N BY M ELEMENTS OF +C ARRAY WORK (INITD=FALSE). +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: THE VALUE OF A SPECIFIC DIGIT OF JOB. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). + + +C***FIRST EXECUTABLE STATEMENT DFLAGS + + + IF (JOB.GE.0) THEN + + RESTRT= JOB.GE.10000 + + INITD = MOD(JOB,10000)/1000.EQ.0 + + J = MOD(JOB,1000)/100 + IF (J.EQ.0) THEN + DOVCV = .TRUE. + REDOJ = .TRUE. + ELSE IF (J.EQ.1) THEN + DOVCV = .TRUE. + REDOJ = .FALSE. + ELSE + DOVCV = .FALSE. + REDOJ = .FALSE. + END IF + + J = MOD(JOB,100)/10 + IF (J.EQ.0) THEN + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.1) THEN + ANAJAC = .FALSE. + CDJAC = .TRUE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.2) THEN + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .TRUE. + ELSE + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + END IF + + J = MOD(JOB,10) + IF (J.EQ.0) THEN + ISODR = .TRUE. + IMPLCT = .FALSE. + ELSE IF (J.EQ.1) THEN + ISODR = .TRUE. + IMPLCT = .TRUE. + ELSE + ISODR = .FALSE. + IMPLCT = .FALSE. + END IF + + ELSE + + RESTRT = .FALSE. + INITD = .TRUE. + DOVCV = .TRUE. + REDOJ = .TRUE. + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ISODR = .TRUE. + IMPLCT = .FALSE. + + END IF + + RETURN + END +*DHSTEP + DOUBLE PRECISION FUNCTION DHSTEP + + (ITYPE,NETA,I,J,STP,LDSTP) +C***BEGIN PROLOGUE DHSTEP +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET RELATIVE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES +C***END PROLOGUE DHSTEP + +C...SCALAR ARGUMENTS + INTEGER + + I,ITYPE,J,LDSTP,NETA + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + STP(LDSTP,J) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEN,THREE,TWO,ZERO + +C...DATA STATEMENTS + DATA + + ZERO,TWO,THREE,TEN + + /0.0D0,2.0D0,3.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN IDENTIFIER FOR SELECTING USER SUPPLIED STEP SIZES. +C ITYPE: THE FINITE DIFFERENCE METHOD BEING USED, WHERE +C ITYPE = 0 INDICATES FORWARD FINITE DIFFERENCES, AND +C ITYPE = 1 INDICATES CENTRAL FINITE DIFFERENCES. +C J: AN IDENTIFIER FOR SELECTING USER SUPPLIED STEP SIZES. +C LDSTP: THE LEADING DIMENSION OF ARRAY STP. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TEN: THE VALUE 10.0D0. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C ZERO: THE VALUE 0.0D0. + + + +C***FIRST EXECUTABLE STATEMENT DHSTEP + + +C SET DHSTEP TO RELATIVE FINITE DIFFERENCE STEP SIZE + + IF (STP(1,1).LE.ZERO) THEN + + IF (ITYPE.EQ.0) THEN +C USE DEFAULT FORWARD FINITE DIFFERENCE STEP SIZE + DHSTEP = TEN**(-ABS(NETA)/TWO - TWO) + + ELSE +C USE DEFAULT CENTRAL FINITE DIFFERENCE STEP SIZE + DHSTEP = TEN**(-ABS(NETA)/THREE) + END IF + + ELSE IF (LDSTP.EQ.1) THEN + DHSTEP = STP(1,J) + + ELSE + DHSTEP = STP(I,J) + END IF + + RETURN + END +*DIFIX + SUBROUTINE DIFIX + + (N,M,IFIX,LDIFIX,T,LDT,TFIX,LDTFIX) +C***BEGIN PROLOGUE DIFIX +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 910612 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET ELEMENTS OF T TO ZERO ACCORDING TO IFIX +C***END PROLOGUE DIFIX + +C...SCALAR ARGUMENTS + INTEGER + + LDIFIX,LDT,LDTFIX,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),TFIX(LDTFIX,M) + INTEGER + + IFIX(LDIFIX,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE ARRAY DESIGNATING WHETHER AN ELEMENT OF T IS TO BE +C SET TO ZERO. +C J: AN INDEXING VARIABLE. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C LDIFIX: THE LEADING DIMENSION OF ARRAY IFIX. +C LDTFIX: THE LEADING DIMENSION OF ARRAY TFIX. +C M: THE NUMBER OF COLUMNS OF DATA IN THE ARRAY. +C N: THE NUMBER OF ROWS OF DATA IN THE ARRAY. +C T: THE ARRAY BEING SET TO ZERO ACCORDING TO THE ELEMENTS +C OF IFIX. +C TFIX: THE RESULTING ARRAY. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DIFIX + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (IFIX(1,1).GE.ZERO) THEN + IF (LDIFIX.GE.N) THEN + DO 20 J=1,M + DO 10 I=1,N + IF (IFIX(I,J).EQ.0) THEN + TFIX(I,J) = ZERO + ELSE + TFIX(I,J) = T(I,J) + END IF + 10 CONTINUE + 20 CONTINUE + ELSE + DO 100 J=1,M + IF (IFIX(1,J).EQ.0) THEN + DO 30 I=1,N + TFIX(I,J) = ZERO + 30 CONTINUE + ELSE + DO 90 I=1,N + TFIX(I,J) = T(I,J) + 90 CONTINUE + END IF + 100 CONTINUE + END IF + END IF + + RETURN + END +*DINIWK + SUBROUTINE DINIWK + + (N,M,NP,WORK,LWORK,IWORK,LIWORK, + + X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + + BETA,SCLB, + + SSTOL,PARTOL,MAXIT,TAUFAC, + + JOB,IPRINT,LUNERR,LUNRPT, + + EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + SSFI,TTI,LDTTI,DELTAI) +C***BEGIN PROLOGUE DINIWK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFLAGS,DMPREC,DSCLB,DSCLD,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE INITIALIZE WORK VECTORS AS NECESSARY +C***END PROLOGUE DINIWK + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + DELTAI,EPSMAI,IPRINI,IPRINT,JOB,JOBI,LDIFX, + + LDSCLD,LDTTI,LDX,LIWORK,LUNERI,LUNERR,LUNRPI,LUNRPT,LWORK,M, + + MAXIT,MAXITI,N,NP,PARTLI,SSFI,SSTOLI,TAUFCI,TTI + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),WORK(LWORK),X(LDX,M) + INTEGER + + IFIXX(LDIFX,M),IWORK(LIWORK) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,THREE,TWO,ZERO + INTEGER + + I,J + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DMPREC + EXTERNAL + + DMPREC + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY,DFLAGS,DSCLB,DSCLD,DZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TWO,THREE + + /0.0D0,1.0D0,2.0D0,3.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER-SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C I: AN INDEXING VARIABLE. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE FIXED +C AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C IWORK: THE INTEGER WORK SPACE. +C J: AN INDEXING VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDTTI: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING CRITERIA. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING CRITERIA. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C THREE: THE VALUE 3.0D0. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF THE ARRAY TT. +C TWO: THE VALUE 2.0D0. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE INDEPENDENT VARIABLE. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DINIWK + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C STORE VALUE OF MACHINE PRECISION IN WORK VECTOR + + WORK(EPSMAI) = DMPREC() + +C SET TOLERANCE FOR STOPPING CRITERIA BASED ON THE CHANGE IN THE +C PARAMETERS (SEE ALSO SUBPROGRAM DODCNT) + + IF (PARTOL.LT.ZERO) THEN + WORK(PARTLI) = WORK(EPSMAI)**(TWO/THREE) + ELSE + WORK(PARTLI) = MIN(PARTOL, ONE) + END IF + +C SET TOLERANCE FOR STOPPING CRITERIA BASED ON THE CHANGE IN THE +C SUM OF SQUARES OF THE WEIGHTED OBSERVATIONAL ERRORS + + IF (SSTOL.LT.ZERO) THEN + WORK(SSTOLI) = SQRT(WORK(EPSMAI)) + ELSE + WORK(SSTOLI) = MIN(SSTOL, ONE) + END IF + +C SET FACTOR FOR COMPUTING TRUST REGION DIAMETER AT FIRST ITERATION + + IF (TAUFAC.LE.ZERO) THEN + WORK(TAUFCI) = ONE + ELSE + WORK(TAUFCI) = MIN(TAUFAC, ONE) + END IF + +C SET MAXIMUM NUMBER OF ITERATIONS + + IF (MAXIT.LT.0) THEN + IWORK(MAXITI) = 50 + ELSE + IWORK(MAXITI) = MAXIT + END IF + +C STORE PROBLEM INITIALIZATION AND COMPUTATIONAL METHOD CONTROL +C VARIABLE + + IF (JOB.LE.0) THEN + IWORK(JOBI) = 0 + ELSE + IWORK(JOBI) = JOB + END IF + +C SET PRINT CONTROL + + IF (IPRINT.LT.0) THEN + IWORK(IPRINI) = 2001 + ELSE + IWORK(IPRINI) = IPRINT + END IF + +C SET LOGICAL UNIT NUMBER FOR ERROR MESSAGES + + IF (LUNERR.LT.0) THEN + IWORK(LUNERI) = 6 + ELSE + IWORK(LUNERI) = LUNERR + END IF + +C SET LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS + + IF (LUNRPT.LT.0) THEN + IWORK(LUNRPI) = 6 + ELSE + IWORK(LUNRPI) = LUNRPT + END IF + +C COMPUTE SCALING FOR BETA'S AND DELTA'S + + IF (SCLB(1).LE.ZERO) THEN + CALL DSCLB(NP,BETA,WORK(SSFI)) + ELSE + CALL DCOPY(NP,SCLB,1,WORK(SSFI),1) + END IF + IF (ISODR) THEN + IF (SCLD(1,1).LE.ZERO) THEN + IWORK(LDTTI) = N + CALL DSCLD(N,M,X,LDX,WORK(TTI),IWORK(LDTTI)) + ELSE + IF (LDSCLD.EQ.1) THEN + IWORK(LDTTI) = 1 + CALL DCOPY(M,SCLD(1,1),1,WORK(TTI),1) + ELSE + IWORK(LDTTI) = N + DO 10 J=1,M + CALL DCOPY(N,SCLD(1,J),1, + + WORK(TTI+(J-1)*IWORK(LDTTI)),1) + 10 CONTINUE + END IF + END IF + END IF + +C INITIALIZE DELTA'S AS NECESSARY + + IF (ISODR) THEN + IF (INITD) THEN + CALL DZERO(N,M,WORK(DELTAI),N) + ELSE + IF (IFIXX(1,1).GE.0) THEN + IF (LDIFX.EQ.1) THEN + DO 20 J=1,M + IF (IFIXX(1,J).EQ.0) THEN + CALL DZERO(N,1,WORK(DELTAI+(J-1)*N),N) + END IF + 20 CONTINUE + ELSE + DO 40 J=1,M + DO 30 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + WORK(DELTAI-1+I+(J-1)*N) = ZERO + END IF + 30 CONTINUE + 40 CONTINUE + END IF + END IF + END IF + ELSE + CALL DZERO(N,M,WORK(DELTAI),N) + END IF + + RETURN + END +*DIWINF + SUBROUTINE DIWINF + + (M,NP,NQ, + + MSGBI,MSGDI,IFIX2I,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) +C***BEGIN PROLOGUE DIWINF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET STORAGE LOCATIONS WITHIN INTEGER WORK SPACE +C***END PROLOGUE DIWINF + +C...SCALAR ARGUMENTS + INTEGER + + IDFI,INT2I,IPRINI,IRANKI,ISTOPI,JOBI,IFIX2I,LDTTI,LIWKMN, + + LUNERI,LUNRPI,M,MAXITI,MSGBI,MSGDI,NETAI,NFEVI,NITERI,NJEVI, + + NNZWI,NP,NPPI,NQ,NROWI,NTOLI + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C IDFI: THE LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C IFIX2I: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY IFIX2. +C INT2I: THE LOCATION IN ARRAY IWORK OF VARIABLE INT2. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C LDTTI: THE LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGBI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGDI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABEL NITER. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. + + +C***FIRST EXECUTABLE STATEMENT DIWINF + + + IF (NP.GE.1 .AND. M.GE.1) THEN + MSGBI = 1 + MSGDI = MSGBI + NQ*NP+1 + IFIX2I = MSGDI + NQ*M+1 + ISTOPI = IFIX2I + NP + NNZWI = ISTOPI + 1 + NPPI = NNZWI + 1 + IDFI = NPPI + 1 + JOBI = IDFI + 1 + IPRINI = JOBI + 1 + LUNERI = IPRINI + 1 + LUNRPI = LUNERI + 1 + NROWI = LUNRPI + 1 + NTOLI = NROWI + 1 + NETAI = NTOLI + 1 + MAXITI = NETAI + 1 + NITERI = MAXITI + 1 + NFEVI = NITERI + 1 + NJEVI = NFEVI + 1 + INT2I = NJEVI + 1 + IRANKI = INT2I + 1 + LDTTI = IRANKI + 1 + LIWKMN = LDTTI + ELSE + MSGBI = 1 + MSGDI = 1 + IFIX2I = 1 + ISTOPI = 1 + NNZWI = 1 + NPPI = 1 + IDFI = 1 + JOBI = 1 + IPRINI = 1 + LUNERI = 1 + LUNRPI = 1 + NROWI = 1 + NTOLI = 1 + NETAI = 1 + MAXITI = 1 + NITERI = 1 + NFEVI = 1 + NJEVI = 1 + INT2I = 1 + IRANKI = 1 + LDTTI = 1 + LIWKMN = 1 + END IF + + RETURN + END +*DJACCD + SUBROUTINE DJACCD + + (FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) +C***BEGIN PROLOGUE DJACCD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE CENTRAL DIFFERENCE APPROXIMATIONS TO THE +C JACOBIAN WRT THE ESTIMATED BETAS AND WRT THE DELTAS +C***END PROLOGUE DJACCD + +C...SCALAR ARGUMENTS + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + + X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAK,ONE,TYPJ,ZERO + INTEGER + + I,J,K,L + LOGICAL + + DOIT,SETZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAK: THE K-TH FUNCTION PARAMETER. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOIT: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT A GIVEN +C BETA OR DELTA NEEDS TO BE COMPUTED (DOIT=TRUE) OR NOT +C (DOIT=FALSE). +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE FIXED +C AT THEIR INPUT VALUES OR NOT. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SETZRO: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT SOME +C DELTA NEEDS TO BE SET TO ZERO (SETZRO=TRUE) OR NOT +C (SETZRO=FALSE). +C SSF: THE SCALING VALUES USED FOR BETA. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJACCD + + +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS + + DO 60 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + IF (BETAK.EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETAK) + END IF + WRK3(K) = BETAK + + + SIGN(ONE,BETAK)*TYPJ*DHSTEP(1,NETA,1,K,STPB,1) + WRK3(K) = WRK3(K) - BETAK + + BETA(K) = BETAK + WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = WRK2(I,L) + 20 CONTINUE + 30 CONTINUE + END IF + + BETA(K) = BETAK - WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + + DO 50 L=1,NQ + DO 40 I=1,N + FJACB(I,K,L) = (FJACB(I,K,L)-WRK2(I,L))/(2*WRK3(K)) + 40 CONTINUE + 50 CONTINUE + BETA(K) = BETAK + END IF + 60 CONTINUE + +C COMPUTE THE JACOBIAN WRT THE X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + STP(I) = XPLUSD(I,J) + + + SIGN(ONE,XPLUSD(I,J)) + + *TYPJ*DHSTEP(1,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + END IF + + DO 150 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) - STP(I) + 150 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + + (2*STP(I)) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + + (2*STP(I)) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END +*DJACFD + SUBROUTINE DJACFD + + (FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) +C***BEGIN PROLOGUE DJACFD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE FORWARD DIFFERENCE APPROXIMATIONS TO THE +C JACOBIAN WRT THE ESTIMATED BETAS AND WRT THE DELTAS +C***END PROLOGUE DJACFD + +C...SCALAR ARGUMENTS + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ), + + SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + + X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAK,ONE,TYPJ,ZERO + INTEGER + + I,J,K,L + LOGICAL + + DOIT,SETZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAK: THE K-TH FUNCTION PARAMETER. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOIT: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT A +C GIVEN BETA OR DELTA NEEDS TO BE COMPUTED (DOIT=TRUE) +C OR NOT (DOIT=FALSE). +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE NEW PREDICTED VALUES FROM THE FUNCTION. +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SETZRO: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT SOME +C DELTA NEEDS TO BE SET TO ZERO (SETZRO=TRUE) OR NOT +C (SETZRO=FALSE). +C SSF: THE SCALE USED FOR THE BETA'S. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJACFD + + +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS + + DO 40 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + IF (BETAK.EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETAK) + END IF + WRK3(K) = BETAK + + + SIGN(ONE,BETAK)*TYPJ*DHSTEP(0,NETA,1,K,STPB,1) + WRK3(K) = WRK3(K) - BETAK + BETA(K) = BETAK + WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = (WRK2(I,L)-FN(I,L))/WRK3(K) + 20 CONTINUE + 30 CONTINUE + BETA(K) = BETAK + END IF + 40 CONTINUE + +C COMPUTE THE JACOBIAN WRT THE X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + + STP(I) = XPLUSD(I,J) + + + SIGN(ONE,XPLUSD(I,J)) + + *TYPJ*DHSTEP(0,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END +*DJCK + SUBROUTINE DJCK + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + + SSF,TT,LDTT, + + ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + + PV0,FJACB,FJACD, + + MSGB,MSGD,DIFF,ISTOP,NFEV,NJEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DJCKM +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE DRIVER ROUTINE FOR THE DERIVATIVE CHECKING PROCESS +C (ADAPTED FROM STARPAC SUBROUTINE DCKCNT) +C***END PROLOGUE DJCK + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSMAC,ETA + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT, + + M,N,NETA,NFEV,NJEV,NP,NQ,NROW,NTOL + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + PV0(N,NQ),SSF(NP),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(1+NQ*NP),MSGD(1+NQ*M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + DIFFJ,H0,HC0,ONE,P5,PV,TOL,TYPJ,ZERO + INTEGER + + IDEVAL,J,LQ,MSGB1,MSGD1 + LOGICAL + + ISFIXD,ISWRTB + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKM + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,INT,LOG10 + +C...DATA STATEMENTS + DATA + + ZERO,P5,ONE + + /0.0D0,0.5D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C H0: THE INITIAL RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C HC0: THE INITIAL RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C IDEVAL: THE VARIABLE DESIGNATING WHAT COMPUTATIONS ARE TO BE +C PERFORMED BY USER SUPPLIED SUBROUTINE FCN. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISFIXD: THE VARIABLE DESIGNATING WHETHER THE PARAMETER IS FIXED +C (ISFIXD=TRUE) OR NOT (ISFIXD=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA (ISWRTB=FALSE) ARE BEING CHECKED. +C J: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL RESULTS, EITHER +C SET BY THE USER OR COMPUTED BY DETAF. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C NUMERICAL DERIVATIVES AND THE USER SUPPLIED DERIVATIVES. +C ONE: THE VALUE 1.0D0. +C P5: THE VALUE 0.5D0. +C PV: THE SCALAR IN WHICH THE PREDICTED VALUE FROM THE MODEL FOR +C ROW NROW IS STORED. +C PV0: THE PREDICTED VALUES USING THE CURRENT PARAMETER ESTIMATES. +C SSF: THE SCALING VALUES USED FOR BETA. +C STPB: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT BETA. +C STPD: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA. +C TOL: THE AGREEMENT TOLERANCE. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCK + + +C SET TOLERANCE FOR CHECKING DERIVATIVES + + TOL = ETA**(0.25D0) + NTOL = MAX(ONE,P5-LOG10(TOL)) + + +C COMPUTE USER SUPPLIED DERIVATIVE VALUES + + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,WRK2,FJACB,FJACD, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV + 1 + END IF + +C CHECK DERIVATIVES WRT BETA FOR EACH RESPONSE OF OBSERVATION NROW + + MSGB1 = 0 + MSGD1 = 0 + + DO 30 LQ=1,NQ + +C SET PREDICTED VALUE OF MODEL AT CURRENT PARAMETER ESTIMATES + PV = PV0(NROW,LQ) + + ISWRTB = .TRUE. + DO 10 J=1,NP + + IF (IFIXB(1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (IFIXB(J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGB(1+LQ+(J-1)*NQ) = -1 + ELSE + IF (BETA(J).EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(J) + END IF + ELSE + TYPJ = ABS(BETA(J)) + END IF + + H0 = DHSTEP(0,NETA,1,J,STPB,1) + HC0 = H0 + +C CHECK DERIVATIVE WRT THE J-TH PARAMETER AT THE NROW-TH ROW + + CALL DJCKM(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,FJACB(NROW,J,LQ), + + DIFFJ,MSGB1,MSGB(2),ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + MSGB(1) = -1 + RETURN + ELSE + DIFF(LQ,J) = DIFFJ + END IF + END IF + + 10 CONTINUE + +C CHECK DERIVATIVES WRT X FOR EACH RESPONSE OF OBSERVATION NROW + + IF (ISODR) THEN + ISWRTB = .FALSE. + DO 20 J=1,M + + IF (IFIXX(1,1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGD(1+LQ+(J-1)*NQ) = -1 + ELSE + + IF (XPLUSD(NROW,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(NROW,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(NROW,J)) + END IF + + H0 = DHSTEP(0,NETA,NROW,J,STPD,LDSTPD) + HC0 = DHSTEP(1,NETA,NROW,J,STPD,LDSTPD) + +C CHECK DERIVATIVE WRT THE J-TH COLUMN OF DELTA AT ROW NROW + + CALL DJCKM(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,FJACD(NROW,J,LQ), + + DIFFJ,MSGD1,MSGD(2),ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + MSGD(1) = -1 + RETURN + ELSE + DIFF(LQ,NP+J) = DIFFJ + END IF + END IF + + 20 CONTINUE + END IF + 30 CONTINUE + MSGB(1) = MSGB1 + MSGD(1) = MSGD1 + + RETURN + END +*DJCKC + SUBROUTINE DJCKC + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + + FD,TYPJ,PVPSTP,STP0, + + PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DJCKF,DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK WHETHER HIGH CURVATURE COULD BE THE CAUSE OF THE +C DISAGREEMENT BETWEEN THE NUMERICAL AND ANALYTIC DERVIATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKCRV) +C***END PROLOGUE DJCKC + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,ETA,FD,HC,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CURVE,ONE,PVMCRV,PVPCRV,P01,STP,STPCRV,TEN,TWO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKF,DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SIGN + +C...DATA STATEMENTS + DATA + + P01,ONE,TWO,TEN + + /0.01D0,1.0D0,2.0D0,10.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CURVE: A MEASURE OF THE CURVATURE IN THE MODEL. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE MODEL +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C HC: THE RELATIVE STEP SIZE FOR CENTRAL FINITE DIFFERENCES. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA(ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE OF THE MODEL FOR ROW NROW . +C PVMCRV: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J)-STPCRV. +C PVPCRV: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J)+STPCRV. +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P01: THE VALUE 0.01D0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C STP: A STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C STPCRV: THE STEP SIZE SELECTED TO CHECK FOR CURVATURE IN THE MODEL. +C TEN: THE VALUE 10.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TWO: THE VALUE 2.0D0. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DJCKC + + + IF (ISWRTB) THEN + +C PERFORM CENTRAL DIFFERENCE COMPUTATIONS FOR DERIVATIVES WRT BETA + + STPCRV = (HC*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STPCRV, + + ISTOP,NFEV,PVPCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STPCRV, + + ISTOP,NFEV,PVMCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C PERFORM CENTRAL DIFFERENCE COMPUTATIONS FOR DERIVATIVES WRT DELTA + + STPCRV = (HC*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STPCRV, + + ISTOP,NFEV,PVPCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STPCRV, + + ISTOP,NFEV,PVMCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C ESTIMATE CURVATURE BY SECOND DERIVATIVE OF MODEL + + CURVE = ABS((PVPCRV-PV)+(PVMCRV-PV)) / (STPCRV*STPCRV) + CURVE = CURVE + + + ETA*(ABS(PVPCRV)+ABS(PVMCRV)+TWO*ABS(PV)) / (STPCRV**2) + + +C CHECK IF FINITE PRECISION ARITHMETIC COULD BE THE CULPRIT. + CALL DJCKF(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,J,LQ,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + IF (MSG(LQ,J).EQ.0) THEN + RETURN + END IF + +C CHECK IF HIGH CURVATURE COULD BE THE PROBLEM. + + STP = TWO*MAX(TOL*ABS(D)/CURVE,EPSMAC) + IF (STP.LT.ABS(TEN*STP0)) THEN + STP = MIN(STP,P01*ABS(STP0)) + END IF + + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + STP = (STP*SIGN(ONE,BETA(J)) + BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C COMPUTE THE NEW NUMERICAL DERIVATIVE + + FD = (PVPSTP-PV)/STP + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C CHECK WHETHER THE NEW NUMERICAL DERIVATIVE IS OK + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN + MSG(LQ,J) = 0 + +C CHECK IF FINITE PRECISION MAY BE THE CULPRIT (FUDGE FACTOR = 2) + ELSE IF (ABS(STP*(FD-D)).LT.TWO*ETA*(ABS(PV)+ABS(PVPSTP)) + + + CURVE*(EPSMAC*TYPJ)**2) THEN + MSG(LQ,J) = 5 + END IF + + RETURN + END +*DJCKF + SUBROUTINE DJCKF + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,J,LQ,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK WHETHER FINITE PRECISION ARITHMETIC COULD BE THE +C CAUSE OF THE DISAGREEMENT BETWEEN THE DERIVATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKFPA) +C***END PROLOGUE DJCKF + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + CURVE,D,DIFFJ,ETA,FD,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + HUNDRD,ONE,P1,STP,TWO + LOGICAL + + LARGE + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SIGN + +C...DATA STATEMENTS + DATA + + P1,ONE,TWO,HUNDRD + + /0.1D0,1.0D0,2.0D0,100.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CURVE: A MEASURE OF THE CURVATURE IN THE MODEL. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C ETA: THE RELATIVE NOISE IN THE MODEL +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C HUNDRD: THE VALUE 100.0D0. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA(ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LARGE: THE VALUE DESIGNATING WHETHER THE RECOMMENDED INCREASE IN +C THE STEP SIZE WOULD BE GREATER THAN TYPJ. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FOR ROW NROW . +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P1: THE VALUE 0.1D0. +C STP0: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TOL: THE AGREEMENT TOLERANCE. +C TWO: THE VALUE 2.0D0. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DJCKF + + +C FINITE PRECISION ARITHMETIC COULD BE THE PROBLEM. +C TRY A LARGER STEP SIZE BASED ON ESTIMATE OF CONDITION ERROR + + STP = ETA*(ABS(PV)+ABS(PVPSTP))/(TOL*ABS(D)) + IF (STP.GT.ABS(P1*STP0)) THEN + STP = MAX(STP,HUNDRD*ABS(STP0)) + END IF + IF (STP.GT.TYPJ) THEN + STP = TYPJ + LARGE = .TRUE. + ELSE + LARGE = .FALSE. + END IF + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + STP = (STP*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C CHECK FOR AGREEMENT + + IF ((ABS(FD-D)).LE.TOL*ABS(D)) THEN +C FORWARD DIFFERENCE QUOTIENT AND ANALYTIC DERIVATIVES AGREE. + MSG(LQ,J) = 0 + + ELSE IF ((ABS(FD-D).LE.ABS(TWO*CURVE*STP)) .OR. LARGE) THEN +C CURVATURE MAY BE THE CULPRIT (FUDGE FACTOR = 2) + IF (LARGE) THEN + MSG(LQ,J) = 4 + ELSE + MSG(LQ,J) = 5 + END IF + END IF + + RETURN + END +*DJCKM + SUBROUTINE DJCKM + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,D, + + DIFFJ,MSG1,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKM +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DJCKC,DJCKZ,DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK USER SUPPLIED ANALYTIC DERIVATIVES AGAINST NUMERICAL +C DERIVATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKMN) +C***END PROLOGUE DJCKM + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,ETA,H0,HC0,PV,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,MSG1,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BIG,FD,H,HC,H1,HC1,HUNDRD,ONE,PVPSTP,P01,P1,STP0, + + TEN,THREE,TOL2,TWO,ZERO + INTEGER + + I + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKC,DJCKZ,DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P01,P1,ONE,TWO,THREE,TEN,HUNDRD + + /0.0D0,0.01D0,0.1D0,1.0D0,2.0D0,3.0D0,1.0D1,1.0D2/ + DATA + + BIG,TOL2 + + /1.0D19,5.0D-2/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BIG: A BIG VALUE, USED TO INITIALIZE DIFFJ. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C H: THE RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C H0: THE INITIAL RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C H1: THE DEFAULT RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C HC: THE RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HC0: THE INITIAL RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HC1: THE DEFAULT RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HUNDRD: THE VALUE 100.0D0. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTAS (ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C MSG1: THE ERROR CHECKING RESULTS SUMMARY. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FROM THE MODEL FOR ROW NROW . +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE JTH +C PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P01: THE VALUE 0.01D0. +C P1: THE VALUE 0.1D0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TEN: THE VALUE 10.0D0. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TOL2: A MINIMUM AGREEMENT TOLERANCE. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCKM + + +C CALCULATE THE JTH PARTIAL DERIVATIVE USING FORWARD DIFFERENCE +C QUOTIENTS AND DECIDE IF IT AGREES WITH USER SUPPLIED VALUES + + H1 = SQRT(ETA) + HC1 = ETA**(ONE/THREE) + + MSG(LQ,J) = 7 + DIFFJ = BIG + + DO 10 I=1,3 + + IF (I.EQ.1) THEN +C TRY INITIAL RELATIVE STEP SIZE + H = H0 + HC = HC0 + + ELSE IF (I.EQ.2) THEN +C TRY LARGER RELATIVE STEP SIZE + H = MAX(TEN*H1, MIN(HUNDRD*H0, ONE)) + HC = MAX(TEN*HC1,MIN(HUNDRD*HC0,ONE)) + + ELSE IF (I.EQ.3) THEN +C TRY SMALLER RELATIVE STEP SIZE + H = MIN(P1*H1, MAX(P01*H,TWO*EPSMAC)) + HC = MIN(P1*HC1,MAX(P01*HC,TWO*EPSMAC)) + END IF + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + + STP0 = (H*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP0, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + + STP0 = (H*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) + + - XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP0, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP0 + +C CHECK FOR AGREEMENT + + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN +C NUMERICAL AND ANALYTIC DERIVATIVES AGREE + +C SET RELATIVE DIFFERENCE FOR DERIVATIVE CHECKING REPORT + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + DIFFJ = ABS(FD-D) + ELSE + DIFFJ = ABS(FD-D)/ABS(D) + END IF + +C SET MSG FLAG. + IF (D.EQ.ZERO) THEN + +C JTH ANALYTIC AND NUMERICAL DERIVATIVES ARE BOTH ZERO. + MSG(LQ,J) = 1 + + ELSE +C JTH ANALYTIC AND NUMERICAL DERIVATIVES ARE BOTH NONZERO. + MSG(LQ,J) = 0 + END IF + + ELSE + +C NUMERICAL AND ANALYTIC DERIVATIVES DISAGREE. CHECK WHY + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + CALL DJCKZ(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,EPSMAC,J,LQ,ISWRTB, + + TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + ELSE + CALL DJCKC(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + END IF + IF (MSG(LQ,J).LE.2) THEN + GO TO 20 + END IF + END IF + 10 CONTINUE + +C SET SUMMARY FLAG TO INDICATE QUESTIONABLE RESULTS + 20 CONTINUE + IF ((MSG(LQ,J).GE.7) .AND. (DIFFJ.LE.TOL2)) MSG(LQ,J) = 6 + IF ((MSG(LQ,J).GE.1) .AND. (MSG(LQ,J).LE.6)) THEN + MSG1 = MAX(MSG1,1) + ELSE IF (MSG(LQ,J).GE.7) THEN + MSG1 = 2 + END IF + + RETURN + END +*DJCKZ + SUBROUTINE DJCKZ + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,EPSMAC,J,LQ,ISWRTB, + + TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKZ +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE RECHECK THE DERIVATIVES IN THE CASE WHERE THE FINITE +C DIFFERENCE DERIVATIVE DISAGREES WITH THE ANALYTIC +C DERIVATIVE AND THE ANALYTIC DERIVATIVE IS ZERO +C (ADAPTED FROM STARPAC SUBROUTINE DCKZRO) +C***END PROLOGUE DJCKZ + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,FD,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CD,ONE,PVMSTP,THREE,TWO,ZERO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TWO,THREE + + /0.0D0,1.0D0,2.0D0,3.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CD: THE CENTRAL DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR X (ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FROM THE MODEL FOR ROW NROW . +C PVMSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) - STP0. +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCKZ + + +C RECALCULATE NUMERICAL DERIVATIVE USING CENTRAL DIFFERENCE AND STEP +C SIZE OF 2*STP0 + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STP0, + + ISTOP,NFEV,PVMSTP, + + WRK1,WRK2,WRK6) + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STP0, + + ISTOP,NFEV,PVMSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + CD = (PVPSTP-PVMSTP)/(TWO*STP0) + DIFFJ = MIN(ABS(CD-D),ABS(FD-D)) + +C CHECK FOR AGREEMENT + + IF (DIFFJ.LE.TOL*ABS(D)) THEN + +C FINITE DIFFERENCE AND ANALYTIC DERIVATIVES NOW AGREE. + IF (D.EQ.ZERO) THEN + MSG(LQ,J) = 1 + ELSE + MSG(LQ,J) = 0 + END IF + + ELSE IF (DIFFJ*TYPJ.LE.ABS(PV*EPSMAC**(ONE/THREE))) THEN +C DERIVATIVES ARE BOTH CLOSE TO ZERO + MSG(LQ,J) = 2 + + ELSE +C DERIVATIVES ARE NOT BOTH CLOSE TO ZERO + MSG(LQ,J) = 3 + END IF + + RETURN + END +*DODCHK + SUBROUTINE DODCHK + + (N,M,NP,NQ, + + ISODR,ANAJAC,IMPLCT, + + IFIXB, + + LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LDY, + + LWORK,LWKMN,LIWORK,LIWKMN, + + SCLB,SCLD,STPB,STPD, + + INFO) +C***BEGIN PROLOGUE DODCHK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK INPUT PARAMETERS, INDICATING ERRORS FOUND USING +C NONZERO VALUES OF ARGUMENT INFO +C***END PROLOGUE DODCHK + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWKMN,LIWORK,LWKMN,LWORK,M,N,NP,NQ + LOGICAL + + ANAJAC,IMPLCT,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M) + INTEGER + + IFIXB(NP) + +C...LOCAL SCALARS + INTEGER + + I,J,K,LAST,NPP + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C LAST: THE LAST ROW OF THE ARRAY TO BE ACCESSED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY X. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATIONS. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUE FOR DELTA. +C STPB: THE STEP FOR THE FINITE DIFFERENCE DERIVITIVE WRT BETA. +C STPD: THE STEP FOR THE FINITE DIFFERENCE DERIVITIVE WRT DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODCHK + + +C FIND ACTUAL NUMBER OF PARAMETERS BEING ESTIMATED + + IF (NP.LE.0 .OR. IFIXB(1).LT.0) THEN + NPP = NP + ELSE + NPP = 0 + DO 10 K=1,NP + IF (IFIXB(K).NE.0) THEN + NPP = NPP + 1 + END IF + 10 CONTINUE + END IF + +C CHECK PROBLEM SPECIFICATION PARAMETERS + + IF (N.LE.0 .OR. + + M.LE.0 .OR. + + (NPP.LE.0 .OR. NPP.GT.N) .OR. + + (NQ.LE.0)) THEN + + INFO = 10000 + IF (N.LE.0) THEN + INFO = INFO + 1000 + END IF + IF (M.LE.0) THEN + INFO = INFO + 100 + END IF + IF (NPP.LE.0 .OR. NPP.GT.N) THEN + INFO = INFO + 10 + END IF + IF (NQ.LE.0) THEN + INFO = INFO + 1 + END IF + + RETURN + + END IF + +C CHECK DIMENSION SPECIFICATION PARAMETERS + + IF ((.NOT.IMPLCT .AND. LDY.LT.N) .OR. + + (LDX.LT.N) .OR. + + (LDWE.NE.1 .AND. LDWE.LT.N) .OR. + + (LD2WE.NE.1 .AND. LD2WE.LT.NQ) .OR. + + (ISODR .AND. (LDWD.NE.1 .AND. LDWD.LT.N)) .OR. + + (ISODR .AND. (LD2WD.NE.1 .AND. LD2WD.LT.M)) .OR. + + (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) .OR. + + (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) .OR. + + (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) .OR. + + (LWORK.LT.LWKMN) .OR. + + (LIWORK.LT.LIWKMN)) THEN + + INFO = 20000 + IF (.NOT.IMPLCT .AND. LDY.LT.N) THEN + INFO = INFO + 1000 + END IF + IF (LDX.LT.N) THEN + INFO = INFO + 2000 + END IF + + IF ((LDWE.NE.1 .AND. LDWE.LT.N) .OR. + + (LD2WE.NE.1 .AND. LD2WE.LT.NQ)) THEN + INFO = INFO + 100 + END IF + IF (ISODR .AND. ((LDWD.NE.1 .AND. LDWD.LT.N) .OR. + + (LD2WD.NE.1 .AND. LD2WD.LT.M))) THEN + INFO = INFO + 200 + END IF + + IF (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) THEN + INFO = INFO + 10 + END IF + IF (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) THEN + INFO = INFO + 20 + END IF + IF (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) THEN + INFO = INFO + 40 + END IF + + IF (LWORK.LT.LWKMN) THEN + INFO = INFO + 1 + END IF + IF (LIWORK.LT.LIWKMN) THEN + INFO = INFO + 2 + END IF + RETURN + + END IF + +C CHECK DELTA SCALING + + IF (ISODR .AND. SCLD(1,1).GT.0) THEN + IF (LDSCLD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 120 J=1,M + DO 110 I=1,LAST + IF (SCLD(I,J).LE.0) THEN + INFO = 30200 + GO TO 130 + END IF + 110 CONTINUE + 120 CONTINUE + END IF + 130 CONTINUE + +C CHECK BETA SCALING + + IF (SCLB(1).GT.0) THEN + DO 210 K=1,NP + IF (SCLB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 30100 + ELSE + INFO = INFO + 100 + END IF + GO TO 220 + END IF + 210 CONTINUE + END IF + 220 CONTINUE + +C CHECK DELTA FINITE DIFFERENCE STEP SIZES + + IF (ANAJAC .AND. ISODR .AND. STPD(1,1).GT.0) THEN + IF (LDSTPD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 320 J=1,M + DO 310 I=1,LAST + IF (STPD(I,J).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 32000 + ELSE + INFO = INFO + 2000 + END IF + GO TO 330 + END IF + 310 CONTINUE + 320 CONTINUE + END IF + 330 CONTINUE + +C CHECK BETA FINITE DIFFERENCE STEP SIZES + + IF (ANAJAC .AND. STPB(1).GT.0) THEN + DO 410 K=1,NP + IF (STPB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 31000 + ELSE + INFO = INFO + 1000 + END IF + GO TO 420 + END IF + 410 CONTINUE + END IF + 420 CONTINUE + + RETURN + END +*DODCNT + SUBROUTINE DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODCNT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DODDRV +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION +C***END PROLOGUE DODCNT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,N,NDIGIT,NP,NQ + LOGICAL + + SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CNVTOL,ONE,PCHECK,PFAC,PSTART,THREE,TSTIMP,ZERO + INTEGER + + IPRNTI,IPR1,IPR2,IPR2F,IPR3,JOBI,JOB1,JOB2,JOB3,JOB4,JOB5, + + MAXITI,MAXIT1 + LOGICAL + + DONE,FSTITR,HEAD,IMPLCT,PRTPEN + +C...LOCAL ARRAYS + DOUBLE PRECISION + + PNLTY(1,1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODDRV + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DMPREC + EXTERNAL + + DMPREC + +C...DATA STATEMENTS + DATA + + PCHECK,PSTART,PFAC,ZERO,ONE,THREE + + /1.0D3,1.0D1,1.0D1,0.0D0,1.0D0,3.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CNVTOL: THE CONVERGENCE TOLERANCE FOR IMPLICIT MODELS. +C DONE: THE VARIABLE DESIGNATING WHETHER THE INPLICIT SOLUTION HAS +C BEEN FOUND (DONE=TRUE) OR NOT (DONE=FALSE). +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLES. +C IPRNTI: THE PRINT CONTROL VARIABLES. +C IPR1: THE 1ST DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR2: THE 2ND DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR3: THE 3RD DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR4: THE 4TH DIGIT OF THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOB1: THE 1ST DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB2: THE 2ND DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB3: THE 3RD DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB4: THE 4TH DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB5: THE 5TH DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: FOR IMPLICIT MODELS, THE NUMBER OF ITERATIONS ALLOWED FOR +C THE CURRENT PENALTY PARAMETER VALUE. +C MAXIT1: FOR IMPLICIT MODELS, THE NUMBER OF ITERATIONS ALLOWED FOR +C THE NEXT PENALTY PARAMETER VALUE. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C ONE: THE VALUE 1.0D0. +C PARTOL: THE USER SUPPLIED PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PCHECK: THE VALUE DESIGNATING THE MINIMUM PENALTY PARAMETER ALLOWED +C BEFORE THE IMPLICIT PROBLEM CAN BE CONSIDERED SOLVED. +C PFAC: THE FACTOR FOR INCREASING THE PENALTY PARAMETER. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PRTPEN: THE VALUE DESIGNATING WHETHER THE PENALTY PARAMETER IS TO BE +C PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C PSTART: THE FACTOR FOR INCREASING THE PENALTY PARAMETER. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C THREE: THE VALUE 3.0D0. +C TSTIMP: THE RELATIVE CHANGE IN THE PARAMETERS BETWEEN THE INITIAL +C VALUES AND THE SOLUTION. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE INDEPENDENT VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODCNT + + + IMPLCT = MOD(JOB,10).EQ.1 + FSTITR = .TRUE. + HEAD = .TRUE. + PRTPEN = .FALSE. + + IF (IMPLCT) THEN + +C SET UP FOR IMPLICIT PROBLEM + + IF (IPRINT.GE.0) THEN + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + ELSE + IPR1 = 2 + IPR2 = 0 + IPR2F = 0 + IPR3 = 1 + END IF + IPRNTI = IPR1*1000 + IPR2*100 + IPR2F*10 + + JOB5 = MOD(JOB,100000)/10000 + JOB4 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB2 = MOD(JOB,100)/10 + JOB1 = MOD(JOB,10) + JOBI = JOB5*10000 + JOB4*1000 + JOB3*100 + JOB2*10 + JOB1 + + IF (WE(1,1,1).LE.ZERO) THEN + PNLTY(1,1,1) = -PSTART + ELSE + PNLTY(1,1,1) = -WE(1,1,1) + END IF + + IF (PARTOL.LT.ZERO) THEN + CNVTOL = DMPREC()**(ONE/THREE) + ELSE + CNVTOL = MIN(PARTOL,ONE) + END IF + + IF (MAXIT.GE.1) THEN + MAXITI = MAXIT + ELSE + MAXITI = 100 + END IF + + DONE = MAXITI.EQ.0 + PRTPEN = .TRUE. + + 10 CONTINUE + CALL DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + PNLTY,1,1,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOBI,NDIGIT,TAUFAC, SSTOL,CNVTOL,MAXITI, + + IPRNTI,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) + + IF (DONE) THEN + RETURN + ELSE + DONE = MAXIT1.LE.0 .OR. + + (ABS(PNLTY(1,1,1)).GE.PCHECK .AND. + + TSTIMP.LE.CNVTOL) + END IF + + IF (DONE) THEN + IF (TSTIMP.LE.CNVTOL) THEN + INFO = (INFO/10)*10 + 2 + ELSE + INFO = (INFO/10)*10 + 4 + END IF + JOBI = 10000 + 1000 + JOB3*100 + JOB2*10 + JOB1 + MAXITI = 0 + IPRNTI = IPR3 + ELSE + PRTPEN = .TRUE. + PNLTY(1,1,1) = PFAC*PNLTY(1,1,1) + JOBI = 10000 + 1000 + 000 + JOB2*10 + JOB1 + MAXITI = MAXIT1 + IPRNTI = 0000 + IPR2*100 + IPR2F*10 + END IF + GO TO 10 + ELSE + CALL DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) + END IF + + RETURN + + END +*DODDRV + SUBROUTINE DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) +C***BEGIN PROLOGUE DODDRV +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DCOPY,DDOT,DETAF,DFCTRW,DFLAGS, +C DINIWK,DIWINF,DJCK,DNRM2,DODCHK,DODMN, +C DODPER,DPACK,DSETN,DUNPAC,DWGHT,DWINF,DXMY,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PERFORM ERROR CHECKING AND INITIALIZATION, AND BEGIN +C PROCEDURE FOR PERFORMING ORTHOGONAL DISTANCE REGRESSION +C (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST SQUARES (OLS) +C***END PROLOGUE DODDRV + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC,TSTIMP + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,MAXIT1, + + N,NDIGIT,NP,NQ + LOGICAL + + FSTITR,HEAD,PRTPEN,SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WE(LDWE,LD2WE,NQ),WD(LDWD,LD2WD,M),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + EPSMAC,ETA,P5,ONE,TEN,ZERO + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,DELTAI,DELTNI,DELTSI, + + DIFFI,EPSMAI,ETAI,FI,FJACBI,FJACDI,FNI,FSI,I,IDFI,INT2I,IPRINI, + + IRANKI,ISTOP,ISTOPI,JOBI,JPVTI,K,LDTT,LDTTI,LIWKMN, + + LUNERI,LUNRPI,LWKMN,LWRK,MAXITI,MSGB,MSGD,NETA,NETAI, + + NFEV,NFEVI,NITERI,NJEV,NJEVI,NNZW,NNZWI,NPP,NPPI,NROW,NROWI, + + NTOL,NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + + VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I,WRK, + + WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT,DNRM2 + EXTERNAL + + DDOT,DNRM2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY,DETAF,DFCTRW,DFLAGS,DINIWK,DIWINF,DJCK,DODCHK, + + DODMN,DODPER,DPACK,DSETN,DUNPAC,DWGHT,DWINF,DXMY,DXPY + +C...DATA STATEMENTS + DATA + + ZERO,P5,ONE,TEN + + /0.0D0,0.5D0,1.0D0,10.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY F. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C I: AN INDEX VARIABLE. +C IDFI: THE LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C INT2I: THE IN ARRAY IWORK OF VARIABLE INT2. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C JPVTI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY JPVT. +C K: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDTTI: THE LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXIT1: FOR IMPLICIT MODELS, THE ITERATIONS ALLOWED FOR THE NEXT +C PENALTY PARAMETER VALUE. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGB: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGD: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABLE NITER. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZW: THE NUMBER OF NONZERO OBSERVATIONAL ERROR WEIGHTS. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER AT WHICH THE DERIVATIVE IS TO BE CHECKED. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C NUMERICAL DERIVATIVES AND THE USER SUPPLIED DERIVATIVES, +C SET BY DJCK. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C ONE: THE VALUE 1.0D0. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C P5: THE VALUE 0.5D0. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCOND. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=TRUE) OR THE LONG-CALL +C (SHORT=FALSE). +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C STPB: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT BETA. +C STPD: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TEN: THE VALUE 10.0D0. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TSTIMP: THE RELATIVE CHANGE IN THE PARAMETERS BETWEEN THE INITIAL +C VALUES AND THE SOLUTION. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WRK: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSSI: THE LOCATION IN ARRAY WORK OF VARIABLE WSS. +C WSSDEI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSDEL. +C WSSEPI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSEPS. +C X: THE EXPLANATORY VARIABLE. +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODDRV + + +C INITIALIZE NECESSARY VARIABLES + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C SET STARTING LOCATIONS WITHIN INTEGER WORKSPACE +C (INVALID VALUES OF M, NP AND/OR NQ ARE HANDLED REASONABLY BY DIWINF) + + CALL DIWINF(M,NP,NQ, + + MSGB,MSGD,JPVTI,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) + +C SET STARTING LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE +C (INVALID VALUES OF N, M, NP, NQ, LDWE AND/OR LD2WE +C ARE HANDLED REASONABLY BY DWINF) + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,FI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) + IF (ISODR) THEN + WRK = WRK1I + LWRK = N*M*NQ + N*NQ + ELSE + WRK = WRK2I + LWRK = N*NQ + END IF + +C UPDATE THE PENALTY PARAMETERS +C (WE(1,1,1) IS NOT A USER SUPPLIED ARRAY IN THIS CASE) + IF (RESTRT .AND. IMPLCT) THEN + WE(1,1,1) = MAX(WORK(WE1I)**2,ABS(WE(1,1,1))) + WORK(WE1I) = -SQRT(ABS(WE(1,1,1))) + END IF + + IF (RESTRT) THEN + +C RESET MAXIMUM NUMBER OF ITERATIONS + + IF (MAXIT.GE.0) THEN + IWORK(MAXITI) = IWORK(NITERI) + MAXIT + ELSE + IWORK(MAXITI) = IWORK(NITERI) + 10 + END IF + + IF (IWORK(NITERI).LT.IWORK(MAXITI)) THEN + INFO = 0 + END IF + + IF (JOB.GE.0) IWORK(JOBI) = JOB + IF (IPRINT.GE.0) IWORK(IPRINI) = IPRINT + IF (PARTOL.GE.ZERO .AND. PARTOL.LT.ONE) WORK(PARTLI) = PARTOL + IF (SSTOL.GE.ZERO .AND. SSTOL.LT.ONE) WORK(SSTOLI) = SSTOL + + WORK(OLMAVI) = WORK(OLMAVI)*IWORK(NITERI) + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ,WORK(WE1I),LDWE,LD2WE,WORK(FI),N,WORK(FI),N) + WORK(WSSEPI) = DDOT(N*NQ,WORK(FI),1,WORK(FI),1) + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + + ELSE + +C PERFORM ERROR CHECKING + + INFO = 0 + + CALL DODCHK(N,M,NP,NQ, + + ISODR,ANAJAC,IMPLCT, + + IFIXB, + + LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LDY, + + LWORK,LWKMN,LIWORK,LIWKMN, + + SCLB,SCLD,STPB,STPD, + + INFO) + IF (INFO.GT.0) THEN + GO TO 50 + END IF + +C INITIALIZE WORK VECTORS AS NECESSARY + + DO 10 I=N*M+N*NQ+1,LWORK + WORK(I) = ZERO + 10 CONTINUE + DO 20 I=1,LIWORK + IWORK(I) = 0 + 20 CONTINUE + + CALL DINIWK(N,M,NP, + + WORK,LWORK,IWORK,LIWORK, + + X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + + BETA,SCLB, + + SSTOL,PARTOL,MAXIT,TAUFAC, + + JOB,IPRINT,LUNERR,LUNRPT, + + EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + SSFI,TTI,LDTTI,DELTAI) + + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + WORK(TAUI) = -WORK(TAUFCI) + +C SET UP FOR PARAMETER ESTIMATION - +C PULL BETA'S TO BE ESTIMATED AND CORRESPONDING SCALE VALUES +C AND STORE IN WORK(BETACI) AND WORK(SSI), RESPECTIVELY + + CALL DPACK(NP,IWORK(NPPI),WORK(BETACI),BETA,IFIXB) + CALL DPACK(NP,IWORK(NPPI),WORK(SSI),WORK(SSFI),IFIXB) + NPP = IWORK(NPPI) + +C CHECK THAT WD IS POSITIVE DEFINITE AND WE IS POSITIVE SEMIDEFINITE, +C SAVING FACTORIZATION OF WE, AND COUNTING NUMBER OF NONZERO WEIGHTS + + CALL DFCTRW(N,M,NQ,NPP, + + ISODR, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + WORK(WRK2I),WORK(WRK4I), + + WORK(WE1I),NNZW,INFO) + IWORK(NNZWI) = NNZW + + IF (INFO.NE.0) THEN + GO TO 50 + END IF + +C EVALUATE THE PREDICTED VALUES AND +C WEIGHTED EPSILONS AT THE STARTING POINT + + CALL DUNPAC(NP,WORK(BETACI),BETA,IFIXB) + CALL DXPY(N,M,X,LDX,WORK(DELTAI),N,WORK(XPLUSI),N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,WORK(XPLUSI), + + IFIXB,IFIXX,LDIFX, + + 002,WORK(FNI),WORK(WRK6I),WORK(WRK1I), + + ISTOP) + IWORK(ISTOPI) = ISTOP + IF (ISTOP.EQ.0) THEN + IWORK(NFEVI) = IWORK(NFEVI) + 1 + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ,WORK(WE1I),LDWE,LD2WE,WORK(FI),N,WORK(FI),N) + ELSE + INFO = 52000 + GO TO 50 + END IF + +C COMPUTE NORM OF THE INITIAL ESTIMATES + + CALL DWGHT(NPP,1,WORK(SSI),NPP,1,WORK(BETACI),NPP, + + WORK(WRK),NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,WORK(TTI),IWORK(LDTTI),1,WORK(DELTAI),N, + + WORK(WRK+NPP),N) + WORK(PNORMI) = DNRM2(NPP+N*M,WORK(WRK),1) + ELSE + WORK(PNORMI) = DNRM2(NPP,WORK(WRK),1) + END IF + +C COMPUTE SUM OF SQUARES OF THE WEIGHTED EPSILONS AND WEIGHTED DELTAS + + WORK(WSSEPI) = DDOT(N*NQ,WORK(FI),1,WORK(FI),1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,WORK(DELTAI),N,WORK(WRK),N) + WORK(WSSDEI) = DDOT(N*M,WORK(DELTAI),1,WORK(WRK),1) + ELSE + WORK(WSSDEI) = ZERO + END IF + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + +C SELECT FIRST ROW OF X + DELTA THAT CONTAINS NO ZEROS + + NROW = -1 + CALL DSETN(N,M,WORK(XPLUSI),N,NROW) + IWORK(NROWI) = NROW + +C SET NUMBER OF GOOD DIGITS IN FUNCTION RESULTS + + EPSMAC = WORK(EPSMAI) + IF (NDIGIT.LT.2) THEN + IWORK(NETAI) = -1 + NFEV = IWORK(NFEVI) + CALL DETAF(FCN, + + N,M,NP,NQ, + + WORK(XPLUSI),BETA,EPSMAC,NROW, + + WORK(BETANI),WORK(FNI), + + IFIXB,IFIXX,LDIFX, + + ISTOP,NFEV,ETA,NETA, + + WORK(WRK1I),WORK(WRK2I),WORK(WRK6I),WORK(WRK7I)) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IF (ISTOP.NE.0) THEN + INFO = 53000 + IWORK(NETAI) = 0 + WORK(ETAI) = ZERO + GO TO 50 + ELSE + IWORK(NETAI) = -NETA + WORK(ETAI) = ETA + END IF + ELSE + IWORK(NETAI) = MIN(NDIGIT,INT(P5-LOG10(EPSMAC))) + WORK(ETAI) = MAX(EPSMAC,TEN**(-NDIGIT)) + END IF + +C CHECK DERIVATIVES IF NECESSARY + + IF (CHKJAC .AND. ANAJAC) THEN + NTOL = -1 + NFEV = IWORK(NFEVI) + NJEV = IWORK(NJEVI) + NETA = IWORK(NETAI) + LDTT = IWORK(LDTTI) + ETA = WORK(ETAI) + EPSMAC = WORK(EPSMAI) + CALL DJCK(FCN, + + N,M,NP,NQ, + + BETA,WORK(XPLUSI), + + IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + + WORK(SSFI),WORK(TTI),LDTT, + + ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + + WORK(FNI),WORK(FJACBI),WORK(FJACDI), + + IWORK(MSGB),IWORK(MSGD),WORK(DIFFI), + + ISTOP,NFEV,NJEV, + + WORK(WRK1I),WORK(WRK2I),WORK(WRK6I)) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NJEVI) = NJEV + IWORK(NTOLI) = NTOL + IF (ISTOP.NE.0) THEN + INFO = 54000 + ELSE IF (IWORK(MSGB).NE.0 .OR. IWORK(MSGD).NE.0) THEN + INFO = 40000 + END IF + ELSE + +C INDICATE USER SUPPLIED DERIVATIVES WERE NOT CHECKED + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + END IF + +C PRINT APPROPRIATE ERROR MESSAGES + + 50 IF ((INFO.NE.0) .OR. (IWORK(MSGB).NE.-1)) THEN + IF (LUNERR.NE.0 .AND. IPRINT.NE.0) THEN + CALL DODPER + + (INFO,LUNERR,SHORT, + + N,M,NP,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN, + + WORK(FJACBI),WORK(FJACDI), + + WORK(DIFFI),IWORK(MSGB),ISODR,IWORK(MSGD), + + WORK(XPLUSI),IWORK(NROWI),IWORK(NETAI),IWORK(NTOLI)) + END IF + +C SET INFO TO REFLECT ERRORS IN THE USER SUPPLIED JACOBIANS + + IF (INFO.EQ.40000) THEN + IF (IWORK(MSGB).EQ.2 .OR. IWORK(MSGD).EQ.2) THEN + IF (IWORK(MSGB).EQ.2) THEN + INFO = INFO + 1000 + END IF + IF (IWORK(MSGD).EQ.2) THEN + INFO = INFO + 100 + END IF + ELSE + INFO = 0 + END IF + END IF + IF (INFO.NE.0) THEN + RETURN + END IF + END IF + END IF + +C SAVE THE INITIAL VALUES OF BETA + CALL DCOPY(NP,BETA,1,WORK(BETA0I),1) + +C FIND LEAST SQUARES SOLUTION + + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FSI),1) + LDTT = IWORK(LDTTI) + CALL DODMN(HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + + WE,WORK(WE1I),LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + WORK(BETACI),WORK(BETANI),WORK(BETASI),WORK(SI), + + WORK(DELTAI),WORK(DELTNI),WORK(DELTSI), + + WORK(TI),WORK(FI),WORK(FNI),WORK(FSI), + + WORK(FJACBI),IWORK(MSGB),WORK(FJACDI),IWORK(MSGD), + + WORK(SSFI),WORK(SSI),WORK(TTI),LDTT, + + STPB,STPD,LDSTPD, + + WORK(XPLUSI),WORK(WRK),LWRK, + + WORK,LWORK,IWORK,LIWORK,INFO) + MAXIT1 = IWORK(MAXITI) - IWORK(NITERI) + TSTIMP = ZERO + DO 100 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + TSTIMP = MAX(TSTIMP, + + ABS(BETA(K)-WORK(BETA0I-1+K))/WORK(SSFI-1+K)) + ELSE + TSTIMP = MAX(TSTIMP, + + ABS(BETA(K)-WORK(BETA0I-1+K))/ABS(BETA(K))) + END IF + 100 CONTINUE + + RETURN + + END +*DODLM + SUBROUTINE DODLM + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA2,TAU,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,NLMS,RCOND,IRANK, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODLM +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DDOT,DNRM2,DODSTP,DSCALE,DWGHT +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE LEVENBERG-MARQUARDT PARAMETER AND STEPS S AND T +C USING ANALOG OF THE TRUST-REGION LEVENBERG-MARQUARDT +C ALGORITHM +C***END PROLOGUE DODLM + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA2,EPSFCN,RCOND,TAU + INTEGER + + IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NLMS,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + + T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + + WRK(LWRK),WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M) + INTEGER + + JPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ALPHA1,ALPHAN,BOT,P001,P1,PHI1,PHI2,SA,TOP,ZERO + INTEGER + + I,IWRK,J,K,L + LOGICAL + + FORVCV + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT,DNRM2 + EXTERNAL + + DDOT,DNRM2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODSTP,DSCALE,DWGHT + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P001,P1 + + /0.0D0,0.001D0,0.1D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHAN: THE NEW LEVENBERG-MARQUARDT PARAMETER. +C ALPHA1: THE PREVIOUS LEVENBERG-MARQUARDT PARAMETER. +C ALPHA2: THE CURRENT LEVENBERG-MARQUARDT PARAMETER. +C BOT: THE LOWER LIMIT FOR SETTING ALPHA. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER THIS SUBROUTINE WAS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO SOME NUMERICAL ERROR DETECTED WITHIN +C SUBROUTINE DODSTP. +C IWRK: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C JPVT: THE PIVOT VECTOR. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NLMS: THE NUMBER OF LEVENBERG-MARQUARDT STEPS TAKEN. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OMEGA: THE ARRAY (I-FJACD*INV(P)*TRANS(FJACD))**(-1/2) WHERE +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C P001: THE VALUE 0.001D0 +C P1: THE VALUE 0.1D0 +C PHI1: THE PREVIOUS DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C PHI2: THE CURRENT DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF TFJACB. +C S: THE STEP FOR BETA. +C SA: THE SCALAR PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2). +C SS: THE SCALING VALUES USED FOR THE UNFIXED BETAS. +C T: THE STEP FOR DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TFJACB: THE ARRAY OMEGA*FJACB. +C TOP: THE UPPER LIMIT FOR SETTING ALPHA. +C TT: THE SCALE USED FOR THE DELTA'S. +C U: THE APPROXIMATE NULL VECTOR FOR TFJACB. +C WD: THE DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODLM + + FORVCV = .FALSE. + ISTOPC = 0 + +C COMPUTE FULL GAUSS-NEWTON STEP (ALPHA=0) + + ALPHA1 = ZERO + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA1,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,PHI1,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + +C INITIALIZE TAU IF NECESSARY + + IF (TAU.LT.ZERO) THEN + TAU = ABS(TAU)*PHI1 + END IF + +C CHECK IF FULL GAUSS-NEWTON STEP IS OPTIMAL + + IF ((PHI1-TAU).LE.P1*TAU) THEN + NLMS = 1 + ALPHA2 = ZERO + RETURN + END IF + +C FULL GAUSS-NEWTON STEP IS OUTSIDE TRUST REGION - +C FIND LOCALLY CONSTRAINED OPTIMAL STEP + + PHI1 = PHI1 - TAU + +C INITIALIZE UPPER AND LOWER BOUNDS FOR ALPHA + + BOT = ZERO + + DO 30 K=1,NPP + DO 20 L=1,NQ + DO 10 I=1,N + TFJACB(I,L,K) = FJACB(I,K,L) + 10 CONTINUE + 20 CONTINUE + WRK(K) = DDOT(N*NQ,TFJACB(1,1,K),1,F(1,1),1) + 30 CONTINUE + CALL DSCALE(NPP,1,SS,NPP,WRK,NPP,WRK,NPP) + + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(NPP+1),N) + IWRK = NPP + DO 50 J=1,M + DO 40 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = WRK(IWRK) + + + DDOT(NQ,FJACD(I,J,1),N*M,F(I,1),N) + 40 CONTINUE + 50 CONTINUE + CALL DSCALE(N,M,TT,LDTT,WRK(NPP+1),N,WRK(NPP+1),N) + TOP = DNRM2(NPP+N*M,WRK,1)/TAU + ELSE + TOP = DNRM2(NPP,WRK,1)/TAU + END IF + + IF (ALPHA2.GT.TOP .OR. ALPHA2.EQ.ZERO) THEN + ALPHA2 = P001*TOP + END IF + +C MAIN LOOP + + DO 60 I=1,10 + +C COMPUTE LOCALLY CONSTRAINED STEPS S AND T AND PHI(ALPHA) FOR +C CURRENT VALUE OF ALPHA + + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA2,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,PHI2,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + PHI2 = PHI2-TAU + +C CHECK WHETHER CURRENT STEP IS OPTIMAL + + IF (ABS(PHI2).LE.P1*TAU .OR. + + (ALPHA2.EQ.BOT .AND. PHI2.LT.ZERO)) THEN + NLMS = I+1 + RETURN + END IF + +C CURRENT STEP IS NOT OPTIMAL + +C UPDATE BOUNDS FOR ALPHA AND COMPUTE NEW ALPHA + + IF (PHI1-PHI2.EQ.ZERO) THEN + NLMS = 12 + RETURN + END IF + SA = PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2) + IF (PHI2.LT.ZERO) THEN + TOP = MIN(TOP,ALPHA2) + ELSE + BOT = MAX(BOT,ALPHA2) + END IF + IF (PHI1*PHI2.GT.ZERO) THEN + BOT = MAX(BOT,ALPHA2-SA) + ELSE + TOP = MIN(TOP,ALPHA2-SA) + END IF + + ALPHAN = ALPHA2 - SA*(PHI1+TAU)/TAU + IF (ALPHAN.GE.TOP .OR. ALPHAN.LE.BOT) THEN + ALPHAN = MAX(P001*TOP,SQRT(TOP*BOT)) + END IF + +C GET READY FOR NEXT ITERATION + + ALPHA1 = ALPHA2 + ALPHA2 = ALPHAN + PHI1 = PHI2 + 60 CONTINUE + +C SET NLMS TO INDICATE AN OPTIMAL STEP COULD NOT BE FOUND IN 10 TRYS + + NLMS = 12 + + RETURN + END +*DODMN + SUBROUTINE DODMN + + (HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + + WE,WE1,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + BETAC,BETAN,BETAS,S,DELTA,DELTAN,DELTAS, + + T,F,FN,FS,FJACB,MSGB,FJACD,MSGD, + + SSF,SS,TT,LDTT,STPB,STPD,LDSTPD, + + XPLUSD,WRK,LWRK,WORK,LWORK,IWORK,LIWORK,INFO) +C***BEGIN PROLOGUE DODMN +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DACCES,DCOPY,DDOT,DEVJAC,DFLAGS,DNRM2,DODLM, +C DODPCR,DODVCV,DUNPAC,DWGHT,DXMY,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE ITERATIVELY COMPUTE LEAST SQUARES SOLUTION +C***END PROLOGUE DODMN + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWORK,LWORK,LWRK,M,N,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),BETAC(NP),BETAN(NP),BETAS(NP), + + DELTA(N,M),DELTAN(N,M),DELTAS(N,M), + + F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ),FS(N,NQ), + + S(NP),SS(NP),SSF(NP),STPB(NP),STPD(LDSTPD,M), + + T(N,M),TT(LDTT,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ), + + WORK(LWORK),X(LDX,M),XPLUSD(N,M),WRK(LWRK),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK), + + MSGB(NQ*NP+1),MSGD(NQ*M+1) + LOGICAL + + FSTITR,HEAD,PRTPEN + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + ACTRED,ACTRS,ALPHA,DIRDER,ETA,OLMAVG,ONE, + + P0001,P1,P25,P5,P75,PARTOL,PNORM,PRERED,PRERS, + + RATIO,RCOND,RNORM,RNORMN,RNORMS,RSS,RVAR,SSTOL,TAU,TAUFAC, + + TEMP,TEMP1,TEMP2,TSNORM,ZERO + INTEGER + + I,IDF,IFLAG,INT2,IPR,IPR1,IPR2,IPR2F,IPR3,IRANK, + + ISTOP,ISTOPC,IWRK,J,JPVT,L,LOOPED,LUDFLT,LUNR,LUNRPT, + + MAXIT,NETA,NFEV,NITER,NJEV,NLMS,NNZW,NPP,NPR,OMEGA,QRAUX, + + SD,U,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + + ACCESS,ANAJAC,CDJAC,CHKJAC,CNVPAR,CNVSS,DIDVCV,DOVCV, + + IMPLCT,INITD,INTDBL,ISODR,LSTEP,REDOJ,RESTRT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + WSS(3) + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT,DNRM2 + EXTERNAL + + DDOT,DNRM2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DACCES,DCOPY,DEVJAC,DFLAGS, + + DODLM,DODPCR,DODVCV,DUNPAC,DWGHT,DXMY,DXPY + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN,MOD,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P0001,P1,P25,P5,P75,ONE + + /0.0D0,0.00010D0,0.10D0,0.250D0, + + 0.50D0,0.750D0,1.0D0/ + DATA + + LUDFLT + + /6/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACCESS: THE VARIABLE DESIGNATING WHETHER INFORMATION IS TO BE +C ACCESSED FROM THE WORK ARRAYS (ACCESS=TRUE) OR STORED IN +C THEM (ACCESS=FALSE). +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ACTRS: THE SAVED ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETAC: THE CURRENT ESTIMATED VALUES OF THE UNFIXED BETA'S. +C BETAN: THE NEW ESTIMATED VALUES OF THE UNFIXED BETA'S. +C BETAS: THE SAVED ESTIMATED VALUES OF THE UNFIXED BETA'S. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C CNVPAR: THE VARIABLE DESIGNATING WHETHER PARAMETER CONVERGENCE WAS +C ATTAINED (CNVPAR=TRUE) OR NOT (CNVPAR=FALSE). +C CNVSS: THE VARIABLE DESIGNATING WHETHER SUM-OF-SQUARES CONVERGENCE +C WAS ATTAINED (CNVSS=TRUE) OR NOT (CNVSS=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DELTAN: THE NEW ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DELTAS: THE SAVED ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DIRDER: THE DIRECTIONAL DERIVATIVE. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX +C SHOULD TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE NEW PREDICTED VALUES FROM THE FUNCTION. +C FS: THE SAVED PREDICTED VALUES FROM THE FUNCTION. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFLAG: THE VARIABLE DESIGNATING WHICH REPORT IS TO BE PRINTED. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C INT2: THE NUMBER OF INTERNAL DOUBLING STEPS TAKEN. +C INTDBL: THE VARIABLE DESIGNATING WHETHER INTERNAL DOUBLING IS TO BE +C USED (INTDBL=TRUE) OR NOT (INTDBL=FALSE). +C IPR: THE VALUES DESIGNATING THE LENGTH OF THE PRINTED REPORT. +C IPR1: THE VALUE OF THE 4TH DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE INITIAL SUMMARY REPORT. +C IPR2: THE VALUE OF THE 3RD DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE ITERATION REPORT. +C IPR2F: THE VALUE OF THE 2ND DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FREQUENCY OF THE ITERATION REPORTS. +C IPR3: THE VALUE OF THE 1ST DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FINAL SUMMARY REPORT. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO SOME NUMERICAL ERROR WITHIN ROUTINE DODSTP. +C IWORK: THE INTEGER WORK SPACE. +C IWRK: AN INDEX VARIABLE. +C J: AN INDEX VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JPVT: THE STARTING LOCATION IN IWORK OF ARRAY JPVT. +C L: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE AND WE1. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE AND WE1. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LOOPED: A COUNTER USED TO DETERMINE HOW MANY TIMES THE SUBLOOP +C HAS BEEN EXECUTED, WHERE IF THE COUNT BECOMES LARGE +C ENOUGH THE COMPUTATIONS WILL BE STOPPED. +C LSTEP: THE VARIABLE DESIGNATING WHETHER A SUCCESSFUL STEP HAS +C BEEN FOUND (LSTEP=TRUE) OR NOT (LSTEP=FALSE). +C LUDFLT: THE DEFAULT LOGICAL UNIT NUMBER, USED FOR COMPUTATION +C REPORTS TO THE SCREEN. +C LUNR: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS TAKEN. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NLMS: THE NUMBER OF LEVENBERG-MARQUARDT STEPS TAKEN. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NPR: THE NUMBER OF TIMES THE REPORT IS TO BE WRITTEN. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OLMAVG: THE AVERAGE NUMBER OF LEVENBERG-MARQUARDT STEPS PER +C ITERATION. +C OMEGA: THE STARTING LOCATION IN WORK OF ARRAY OMEGA. +C ONE: THE VALUE 1.0D0. +C P0001: THE VALUE 0.0001D0. +C P1: THE VALUE 0.1D0. +C P25: THE VALUE 0.25D0. +C P5: THE VALUE 0.5D0. +C P75: THE VALUE 0.75D0. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRERS: THE OLD PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VALUE DESIGNATING WHETHER THE PENALTY PARAMETER IS TO +C BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C QRAUX: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RATIO: THE RATIO OF THE ACTUAL RELATIVE REDUCTION TO THE PREDICTED +C RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORM: THE NORM OF THE WEIGHTED ERRORS. +C RNORMN: THE NEW NORM OF THE WEIGHTED ERRORS. +C RNORMS: THE SAVED NORM OF THE WEIGHTED ERRORS. +C RSS: THE RESIDUAL SUM OF SQUARES. +C RVAR: THE RESIDUAL VARIANCE. +C S: THE STEP FOR BETA. +C SD: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SS: THE SCALING VALUES USED FOR THE UNFIXED BETAS. +C SSF: THE SCALING VALUES USED FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C T: THE STEP FOR DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TEMP: A TEMPORARY STORAGE LOCATION. +C TEMP1: A TEMPORARY STORAGE LOCATION. +C TEMP2: A TEMPORARY STORAGE LOCATION. +C TSNORM: THE NORM OF THE SCALED STEP. +C TT: THE SCALING VALUES USED FOR DELTA. +C U: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCV: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE: THE EPSILON WEIGHTS. +C WE1: THE SQUARE ROOT OF THE EPSILON WEIGHTS. +C WD: THE DELTA WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C WRK: A WORK ARRAY, EQUIVALENCED TO WRK1 AND WRK2 +C WRK1: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODMN + + +C INITIALIZE NECESSARY VARIABLES + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + ACCESS = .TRUE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + RNORM = SQRT(WSS(1)) + + DIDVCV = .FALSE. + INTDBL = .FALSE. + LSTEP = .TRUE. + +C PRINT INITIAL SUMMARY IF DESIRED + + IF (IPR1.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 1 + IF (IPR1.GE.3 .AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR1.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR1,2) + END IF + LUNR = LUNRPT + DO 10 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR1.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 10 CONTINUE + + END IF + +C STOP IF INITIAL ESTIMATES ARE EXACT SOLUTION + + IF (RNORM.EQ.ZERO) THEN + INFO = 1 + OLMAVG = ZERO + ISTOP = 0 + GO TO 150 + END IF + +C STOP IF NUMBER OF ITERATIONS ALREADY EQUALS MAXIMUM PERMITTED + + IF (RESTRT .AND. (NITER.GE.MAXIT)) THEN + ISTOP = 0 + GO TO 150 + ELSE IF (NITER.GE.MAXIT) THEN + INFO = 4 + ISTOP = 0 + GO TO 150 + END IF + +C MAIN LOOP + + 100 CONTINUE + + NITER = NITER + 1 + RNORMS = RNORM + LOOPED = 0 + +C EVALUATE JACOBIAN USING BEST ESTIMATE OF FUNCTION (FS) + + IF ((NITER.EQ.1) .AND. (ANAJAC.AND.CHKJAC)) THEN + ISTOP = 0 + ELSE + CALL DEVJAC(FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FS, + + T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) + END IF + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + +C SUB LOOP FOR +C INTERNAL DOUBLING OR +C COMPUTING NEW STEP WHEN OLD FAILED + + 110 CONTINUE + +C COMPUTE STEPS S AND T + + IF (LOOPED.GT.100) THEN + INFO = 60000 + GO TO 200 + ELSE + LOOPED = LOOPED + 1 + CALL DODLM(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA,TAU,ETA,ISODR, + + WORK(WRK6),WORK(OMEGA), + + WORK(U),WORK(QRAUX),IWORK(JPVT), + + S,T,NLMS,RCOND,IRANK, + + WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + + WORK(WRK5),WRK,LWRK,ISTOPC) + END IF + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + OLMAVG = OLMAVG+NLMS + +C COMPUTE BETAN = BETAC + S +C DELTAN = DELTA + T + + CALL DXPY(NPP,1,BETAC,NPP,S,NPP,BETAN,NPP) + IF (ISODR) CALL DXPY(N,M,DELTA,N,T,N,DELTAN,N) + +C COMPUTE NORM OF SCALED STEPS S AND T (TSNORM) + + CALL DWGHT(NPP,1,SS,NPP,1,S,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,T,N,WRK(NPP+1),N) + TSNORM = DNRM2(NPP+N*M,WRK,1) + ELSE + TSNORM = DNRM2(NPP,WRK,1) + END IF + +C COMPUTE SCALED PREDICTED REDUCTION + + IWRK = 0 + DO 130 L=1,NQ + DO 120 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = DDOT(NPP,FJACB(I,1,L),N,S,1) + IF (ISODR) WRK(IWRK) = WRK(IWRK) + + + DDOT(M,FJACD(I,1,L),N,T(I,1),N) + 120 CONTINUE + 130 CONTINUE + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,T,N,WRK(N*NQ+1),N) + TEMP1 = DDOT(N*NQ,WRK,1,WRK,1) + DDOT(N*M,T,1,WRK(N*NQ+1),1) + TEMP1 = SQRT(TEMP1)/RNORM + ELSE + TEMP1 = DNRM2(N*NQ,WRK,1)/RNORM + END IF + TEMP2 = SQRT(ALPHA)*TSNORM/RNORM + PRERED = TEMP1**2+TEMP2**2/P5 + + DIRDER = -(TEMP1**2+TEMP2**2) + +C EVALUATE PREDICTED VALUES AT NEW POINT + + CALL DUNPAC(NP,BETAN,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTAN,N,XPLUSD,N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 002,FN,WORK(WRK6),WORK(WRK1), + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + END IF + + IF (ISTOP.LT.0) THEN + +C SET INFO TO INDICATE USER HAS STOPPED THE COMPUTATIONS IN FCN + + INFO = 51000 + GO TO 200 + ELSE IF (ISTOP.GT.0) THEN + +C SET NORM TO INDICATE STEP SHOULD BE REJECTED + + RNORMN = RNORM/(P1*P75) + ELSE + +C COMPUTE NORM OF NEW WEIGHTED EPSILONS AND WEIGHTED DELTAS (RNORMN) + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FN,1,WRK,1) + ELSE + CALL DXMY(N,NQ,FN,N,Y,LDY,WRK,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,WRK,N,WRK,N) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTAN,N,WRK(N*NQ+1),N) + RNORMN = SQRT(DDOT(N*NQ,WRK,1,WRK,1) + + + DDOT(N*M,DELTAN,1,WRK(N*NQ+1),1)) + ELSE + RNORMN = DNRM2(N*NQ,WRK,1) + END IF + END IF + +C COMPUTE SCALED ACTUAL REDUCTION + + IF (P1*RNORMN.LT.RNORM) THEN + ACTRED = ONE - (RNORMN/RNORM)**2 + ELSE + ACTRED = -ONE + END IF + +C COMPUTE RATIO OF ACTUAL REDUCTION TO PREDICTED REDUCTION + + IF(PRERED .EQ. ZERO) THEN + RATIO = ZERO + ELSE + RATIO = ACTRED/PRERED + END IF + +C CHECK ON LACK OF REDUCTION IN INTERNAL DOUBLING CASE + + IF (INTDBL .AND. (RATIO.LT.P0001 .OR. RNORMN.GT.RNORMS)) THEN + ISTOP = 0 + TAU = TAU*P5 + ALPHA = ALPHA/P5 + CALL DCOPY(NPP,BETAS,1,BETAN,1) + CALL DCOPY(N*M,DELTAS,1,DELTAN,1) + CALL DCOPY(N*NQ,FS,1,FN,1) + ACTRED = ACTRS + PRERED = PRERS + RNORMN = RNORMS + RATIO = P5 + END IF + +C UPDATE STEP BOUND + + INTDBL = .FALSE. + IF (RATIO.LT.P25) THEN + IF (ACTRED.GE.ZERO) THEN + TEMP = P5 + ELSE + TEMP = P5*DIRDER/(DIRDER+P5*ACTRED) + END IF + IF (P1*RNORMN.GE.RNORM .OR. TEMP.LT.P1) THEN + TEMP = P1 + END IF + TAU = TEMP*MIN(TAU,TSNORM/P1) + ALPHA = ALPHA/TEMP + + ELSE IF (ALPHA.EQ.ZERO) THEN + TAU = TSNORM/P5 + + ELSE IF (RATIO.GE.P75 .AND. NLMS.LE.11) THEN + +C STEP QUALIFIES FOR INTERNAL DOUBLING +C - UPDATE TAU AND ALPHA +C - SAVE INFORMATION FOR CURRENT POINT + + INTDBL = .TRUE. + + TAU = TSNORM/P5 + ALPHA = ALPHA*P5 + + CALL DCOPY(NPP,BETAN,1,BETAS,1) + CALL DCOPY(N*M,DELTAN,1,DELTAS,1) + CALL DCOPY(N*NQ,FN,1,FS,1) + ACTRS = ACTRED + PRERS = PRERED + RNORMS = RNORMN + END IF + +C IF INTERNAL DOUBLING, SKIP CONVERGENCE CHECKS + + IF (INTDBL .AND. TAU.GT.ZERO) THEN + INT2 = INT2+1 + GO TO 110 + END IF + +C CHECK ACCEPTANCE + + IF (RATIO.GE.P0001) THEN + CALL DCOPY(N*NQ,FN,1,FS,1) + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,N,F,N) + CALL DCOPY(NPP,BETAN,1,BETAC,1) + CALL DCOPY(N*M,DELTAN,1,DELTA,1) + RNORM = RNORMN + CALL DWGHT(NPP,1,SS,NPP,1,BETAC,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,DELTA,N,WRK(NPP+1),N) + PNORM = DNRM2(NPP+N*M,WRK,1) + ELSE + PNORM = DNRM2(NPP,WRK,1) + END IF + LSTEP = .TRUE. + ELSE + LSTEP = .FALSE. + END IF + +C TEST CONVERGENCE + + INFO = 0 + CNVSS = RNORM.EQ.ZERO + + .OR. + + (ABS(ACTRED).LE.SSTOL .AND. + + PRERED.LE.SSTOL .AND. + + P5*RATIO.LE.ONE) + CNVPAR = (TAU.LE.PARTOL*PNORM) .AND. (.NOT.IMPLCT) + IF (CNVSS) INFO = 1 + IF (CNVPAR) INFO = 2 + IF (CNVSS .AND. CNVPAR) INFO = 3 + +C PRINT ITERATION REPORT + + IF (INFO.NE.0 .OR. LSTEP) THEN + IF (IPR2.NE.0 .AND. IPR2F.NE.0 .AND. LUNRPT.NE.0) THEN + IF (IPR2F.EQ.1 .OR. MOD(NITER,IPR2F).EQ.1) THEN + IFLAG = 2 + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + WSS(1) = RNORM*RNORM + IF (IPR2.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR2.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR2,2) + END IF + LUNR = LUNRPT + DO 140 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR2.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 140 CONTINUE + FSTITR = .FALSE. + PRTPEN = .FALSE. + END IF + END IF + END IF + +C CHECK IF FINISHED + + IF (INFO.EQ.0) THEN + IF (LSTEP) THEN + +C BEGIN NEXT INTERATION UNLESS A STOPPING CRITERIA HAS BEEN MET + + IF (NITER.GE.MAXIT) THEN + INFO = 4 + ELSE + GO TO 100 + END IF + ELSE + +C STEP FAILED - RECOMPUTE UNLESS A STOPPING CRITERIA HAS BEEN MET + + GO TO 110 + END IF + END IF + + 150 CONTINUE + + IF (ISTOP.GT.0) INFO = INFO + 100 + +C STORE UNWEIGHTED EPSILONS AND X+DELTA TO RETURN TO USER + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) + +C COMPUTE COVARIANCE MATRIX OF ESTIMATED PARAMETERS +C IN UPPER NP BY NP PORTION OF WORK(VCV) IF REQUESTED + + IF (DOVCV .AND. ISTOP.EQ.0) THEN + +C RE-EVALUATE JACOBIAN AT FINAL SOLUTION, IF REQUESTED +C OTHERWISE, JACOBIAN FROM BEGINNING OF LAST ITERATION WILL BE USED +C TO COMPUTE COVARIANCE MATRIX + + IF (REDOJ) THEN + CALL DEVJAC(FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FS, + + T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) + + + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + END IF + + IF (IMPLCT) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(N*NQ+1),N) + RSS = DDOT(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + RSS = RNORM*RNORM + END IF + IF (REDOJ .OR. NITER.GE.1) THEN + CALL DODVCV(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + + ETA,ISODR, + + WORK(VCV),WORK(SD), + + WORK(WRK6),WORK(OMEGA), + + WORK(U),WORK(QRAUX),IWORK(JPVT), + + S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + + WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + + WORK(WRK5),WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + DIDVCV = .TRUE. + END IF + + END IF + +C SET JPVT TO INDICATE DROPPED, FIXED AND ESTIMATED PARAMETERS + + 200 DO 210 I=0,NP-1 + WORK(WRK3+I) = IWORK(JPVT+I) + IWORK(JPVT+I) = -2 + 210 CONTINUE + IF (REDOJ .OR. NITER.GE.1) THEN + DO 220 I=0,NPP-1 + J = WORK(WRK3+I) - 1 + IF (I.LE.NPP-IRANK-1) THEN + IWORK(JPVT+J) = 1 + ELSE + IWORK(JPVT+J) = -1 + END IF + 220 CONTINUE + IF (NPP.LT.NP) THEN + J = NPP-1 + DO 230 I=NP-1,0,-1 + IF (IFIXB(I+1).EQ.0) THEN + IWORK(JPVT+I) = 0 + ELSE + IWORK(JPVT+I) = IWORK(JPVT+J) + J = J - 1 + END IF + 230 CONTINUE + END IF + END IF + +C STORE VARIOUS SCALARS IN WORK ARRAYS FOR RETURN TO USER + + IF (NITER.GE.1) THEN + OLMAVG = OLMAVG/NITER + ELSE + OLMAVG = ZERO + END IF + +C COMPUTE WEIGHTED SUMS OF SQUARES FOR RETURN TO USER + + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,N,WRK,N) + WSS(3) = DDOT(N*NQ,WRK,1,WRK,1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(N*NQ+1),N) + WSS(2) = DDOT(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + WSS(2) = ZERO + END IF + WSS(1) = WSS(2) + WSS(3) + + ACCESS = .FALSE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + +C ENCODE EXISTANCE OF QUESTIONABLE RESULTS INTO INFO + + IF (INFO.LE.9 .OR. INFO.GE.60000) THEN + IF (MSGB(1).EQ.1 .OR. MSGD(1).EQ.1) THEN + INFO = INFO + 1000 + END IF + IF (ISTOP.NE.0) THEN + INFO = INFO + 100 + END IF + IF (IRANK.GE.1) THEN + IF (NPP.GT.IRANK) THEN + INFO = INFO + 10 + ELSE + INFO = INFO + 20 + END IF + END IF + END IF + +C PRINT FINAL SUMMARY + + IF (IPR3.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 3 + + IF (IPR3.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR3.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR3,2) + END IF + LUNR = LUNRPT + DO 240 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IWORK(JPVT),IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR3.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 240 CONTINUE + END IF + + RETURN + + END +*DODPC1 + SUBROUTINE DODPC1 + + (IPR,LUNRPT, + + ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + + MSGB1,MSGB,MSGD1,MSGD, + + N,M,NP,NQ,NPP,NNZW, + + X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + + Y,LDY,WE,LDWE,LD2WE,PNLTY, + + BETA,IFIXB,SSF,STPB, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,WSSDEL,WSSEPS) +C***BEGIN PROLOGUE DODPC1 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DHSTEP +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE INITIAL SUMMARY REPORT +C***END PROLOGUE DODPC1 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,PNLTY,SSTOL,TAUFAC,WSS,WSSDEL,WSSEPS + INTEGER + + IPR,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LUNRPT,M,MAXIT,MSGB1,MSGD1,N,NETA,NNZW,NP,NPP,NQ + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),SSF(NP),STPB(NP),STPD(LDSTPD,M), + + TT(LDTT,M),WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),X(LDX,M), + + Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ,NP),MSGD(NQ,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP1,TEMP2,TEMP3,ZERO + INTEGER + + I,ITEMP,J,JOB1,JOB2,JOB3,JOB4,JOB5,L + +C...LOCAL ARRAYS + CHARACTER TEMPC0*2,TEMPC1*5,TEMPC2*13 + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR FORWARD DIFFERENCES +C (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ITEMP: A TEMPORARY INTEGER VALUE. +C J: AN INDEXING VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOB1: THE 1ST DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB2: THE 2ND DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB3: THE 3RD DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB4: THE 4TH DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB5: THE 5TH DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR THE COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C A NEGATIVE VALUE INDICATES THAT NETA WAS ESTIMATED BY +C ODRPACK. A POSITIVE VALUE INDICTES THE VALUE WAS SUPPLIED +C BY THE USER. +C NNZW: THE NUMBER OF NONZERO OBSERVATIONAL ERROR WEIGHTS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C SSF: THE SCALING VALUES FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TEMPC0: A TEMPORARY CHARACTER*2 VALUE. +C TEMPC1: A TEMPORARY CHARACTER*5 VALUE. +C TEMPC2: A TEMPORARY CHARACTER*13 VALUE. +C TEMP1: A TEMPORARY DOUBLE PRECISION VALUE. +C TEMP2: A TEMPORARY DOUBLE PRECISION VALUE. +C TEMP3: A TEMPORARY DOUBLE PRECISION VALUE. +C TT: THE SCALING VALUES FOR DELTA. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C WSSDEL: THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS. +C WSSEPS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C X: THE EXPLANATORY VARIABLE. +C Y: THE RESPONSE VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODPC1 + + +C PRINT PROBLEM SIZE SPECIFICATION + + WRITE (LUNRPT,1000) N,NNZW,NQ,M,NP,NPP + + +C PRINT CONTROL VALUES + + JOB1 = JOB/10000 + JOB2 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB4 = MOD(JOB,100)/10 + JOB5 = MOD(JOB,10) + WRITE (LUNRPT,1100) JOB + IF (RESTRT) THEN + WRITE (LUNRPT,1110) JOB1 + ELSE + WRITE (LUNRPT,1111) JOB1 + END IF + IF (ISODR) THEN + IF (INITD) THEN + WRITE (LUNRPT,1120) JOB2 + ELSE + WRITE (LUNRPT,1121) JOB2 + END IF + ELSE + WRITE (LUNRPT,1122) JOB2,JOB5 + END IF + IF (DOVCV) THEN + WRITE (LUNRPT,1130) JOB3 + IF (REDOJ) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + ELSE + WRITE (LUNRPT,1133) JOB3 + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,1140) JOB4 + IF (CHKJAC) THEN + IF (MSGB1.GE.1 .OR. MSGD1.GE.1) THEN + WRITE (LUNRPT,1141) + ELSE + WRITE (LUNRPT,1142) + END IF + ELSE + WRITE (LUNRPT,1143) + END IF + ELSE IF (CDJAC) THEN + WRITE (LUNRPT,1144) JOB4 + ELSE + WRITE (LUNRPT,1145) JOB4 + END IF + IF (ISODR) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1150) JOB5 + ELSE + WRITE (LUNRPT,1151) JOB5 + END IF + ELSE + WRITE (LUNRPT,1152) JOB5 + END IF + IF (NETA.LT.0) THEN + WRITE (LUNRPT,1200) -NETA + ELSE + WRITE (LUNRPT,1210) NETA + END IF + WRITE (LUNRPT,1300) TAUFAC + + +C PRINT STOPPING CRITERIA + + WRITE (LUNRPT,1400) SSTOL,PARTOL,MAXIT + + +C PRINT INITIAL SUM OF SQUARES + + IF (IMPLCT) THEN + WRITE (LUNRPT,1500) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,1510) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,1600) WSS + IF (ISODR) THEN + WRITE (LUNRPT,1610) WSSDEL,WSSEPS + END IF + END IF + + + IF (IPR.GE.2) THEN + + +C PRINT FUNCTION PARAMETER DATA + + WRITE (LUNRPT,4000) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,4110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,4120) + ELSE + WRITE (LUNRPT,4200) + END IF + DO 130 J=1,NP + IF (IFIXB(1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (IFIXB(J).NE.0) THEN + TEMPC1 = ' NO' + ELSE + TEMPC1 = ' YES' + END IF + END IF + IF (ANAJAC) THEN + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + ITEMP = -1 + DO 110 L=1,NQ + ITEMP = MAX(ITEMP,MSGB(L,J)) + 110 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (SSF(1).LT.ZERO) THEN + TEMP1 = ABS(SSF(1)) + ELSE + TEMP1 = SSF(J) + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,4310) J,BETA(J),TEMPC1,TEMP1,TEMPC2 + ELSE + IF (CDJAC) THEN + TEMP2 = DHSTEP(1,NETA,1,J,STPB,1) + ELSE + TEMP2 = DHSTEP(0,NETA,1,J,STPB,1) + END IF + WRITE (LUNRPT,4320) J,BETA(J),TEMPC1,TEMP1,TEMP2 + END IF + 130 CONTINUE + +C PRINT EXPLANATORY VARIABLE DATA + + IF (ISODR) THEN + WRITE (LUNRPT,2010) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,2110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,2120) + ELSE + WRITE (LUNRPT,2130) + END IF + ELSE + WRITE (LUNRPT,2020) + WRITE (LUNRPT,2140) + END IF + IF (ISODR) THEN + DO 240 J = 1,M + TEMPC0 = '1,' + DO 230 I=1,N,N-1 + + IF (IFIXX(1,1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + ELSE + IF (IFIXX(I,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + END IF + END IF + + IF (TT(1,1).LT.ZERO) THEN + TEMP1 = ABS(TT(1,1)) + ELSE + IF (LDTT.EQ.1) THEN + TEMP1 = TT(1,J) + ELSE + TEMP1 = TT(I,J) + END IF + END IF + + IF (WD(1,1,1).LT.ZERO) THEN + TEMP2 = ABS(WD(1,1,1)) + ELSE + IF (LDWD.EQ.1) THEN + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(1,1,J) + ELSE + TEMP2 = WD(1,J,J) + END IF + ELSE + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(I,1,J) + ELSE + TEMP2 = WD(I,J,J) + END IF + END IF + END IF + + IF (ANAJAC) THEN + IF (CHKJAC .AND. + + (((MSGB1.GE.1) .OR. (MSGD1.GE.1)) .AND. + + (I.EQ.1))) THEN + ITEMP = -1 + DO 210 L=1,NQ + ITEMP = MAX(ITEMP,MSGD(L,J)) + 210 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + END IF + ELSE + TEMPC2 = ' ' + IF (CDJAC) THEN + TEMP3 = DHSTEP(1,NETA,I,J,STPD,LDSTPD) + ELSE + TEMP3 = DHSTEP(0,NETA,I,J,STPD,LDSTPD) + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5210) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + ELSE + WRITE (LUNRPT,5220) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + END IF + END IF + + TEMPC0 = 'N,' + + 230 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 240 CONTINUE + ELSE + + DO 260 J = 1,M + TEMPC0 = '1,' + DO 250 I=1,N,N-1 + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,J,X(I,J) + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,J,X(I,J) + END IF + TEMPC0 = 'N,' + 250 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 260 CONTINUE + END IF + +C PRINT RESPONSE VARIABLE DATA AND OBSERVATION ERROR WEIGHTS + + IF (.NOT.IMPLCT) THEN + WRITE (LUNRPT,3000) + WRITE (LUNRPT,3100) + DO 310 L=1,NQ + TEMPC0 = '1,' + DO 300 I=1,N,N-1 + IF (WE(1,1,1).LT.ZERO) THEN + TEMP1 = ABS(WE(1,1,1)) + ELSE IF (LDWE.EQ.1) THEN + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(1,1,L) + ELSE + TEMP1 = WE(1,L,L) + END IF + ELSE + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(I,1,L) + ELSE + TEMP1 = WE(I,L,L) + END IF + END IF + IF (NQ.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,L,Y(I,L),TEMP1 + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,L,Y(I,L),TEMP1 + END IF + TEMPC0 = 'N,' + 300 CONTINUE + IF (L.LT.NQ) WRITE (LUNRPT,6000) + 310 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (/' --- PROBLEM SIZE:'/ + + ' N = ',I5, + + ' (NUMBER WITH NONZERO WEIGHT = ',I5,')'/ + + ' NQ = ',I5/ + + ' M = ',I5/ + + ' NP = ',I5, + + ' (NUMBER UNFIXED = ',I5,')') + 1100 FORMAT + + (/' --- CONTROL VALUES:'/ + + ' JOB = ',I5.5/ + + ' = ABCDE, WHERE') + 1110 FORMAT + + (' A=',I1,' ==> FIT IS A RESTART.') + 1111 FORMAT + + (' A=',I1,' ==> FIT IS NOT A RESTART.') + 1120 FORMAT + + (' B=',I1,' ==> DELTAS ARE INITIALIZED', + + ' TO ZERO.') + 1121 FORMAT + + (' B=',I1,' ==> DELTAS ARE INITIALIZED', + + ' BY USER.') + 1122 FORMAT + + (' B=',I1,' ==> DELTAS ARE FIXED AT', + + ' ZERO SINCE E=',I1,'.') + 1130 FORMAT + + (' C=',I1,' ==> COVARIANCE MATRIX WILL', + + ' BE COMPUTED USING') + 1131 FORMAT + + (' DERIVATIVES RE-', + + 'EVALUATED AT THE SOLUTION.') + 1132 FORMAT + + (' DERIVATIVES FROM THE', + + ' LAST ITERATION.') + 1133 FORMAT + + (' C=',I1,' ==> COVARIANCE MATRIX WILL', + + ' NOT BE COMPUTED.') + 1140 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' SUPPLIED BY USER.') + 1141 FORMAT + + (' DERIVATIVES WERE CHECKED.'/ + + ' RESULTS APPEAR QUESTIONABLE.') + 1142 FORMAT + + (' DERIVATIVES WERE CHECKED.'/ + + ' RESULTS APPEAR CORRECT.') + 1143 FORMAT + + (' DERIVATIVES WERE NOT', + + ' CHECKED.') + 1144 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' ESTIMATED BY CENTRAL', + + ' DIFFERENCES.') + 1145 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' ESTIMATED BY FORWARD', + + ' DIFFERENCES.') + 1150 FORMAT + + (' E=',I1,' ==> METHOD IS IMPLICIT ODR.') + 1151 FORMAT + + (' E=',I1,' ==> METHOD IS EXPLICIT ODR.') + 1152 FORMAT + + (' E=',I1,' ==> METHOD IS EXPLICIT OLS.') + 1200 FORMAT + + (' NDIGIT = ',I5,' (ESTIMATED BY ODRPACK)') + 1210 FORMAT + + (' NDIGIT = ',I5,' (SUPPLIED BY USER)') + 1300 FORMAT + + (' TAUFAC = ',1P,D12.2) + 1400 FORMAT + + (/' --- STOPPING CRITERIA:'/ + + ' SSTOL = ',1P,D12.2, + + ' (SUM OF SQUARES STOPPING TOLERANCE)'/ + + ' PARTOL = ',1P,D12.2, + + ' (PARAMETER STOPPING TOLERANCE)'/ + + ' MAXIT = ',I5, + + ' (MAXIMUM NUMBER OF ITERATIONS)') + 1500 FORMAT + + (/' --- INITIAL SUM OF SQUARED WEIGHTED DELTAS =', + + 17X,1P,D17.8) + 1510 FORMAT + + ( ' INITIAL PENALTY FUNCTION VALUE =',1P,D17.8/ + + ' PENALTY TERM =',1P,D17.8/ + + ' PENALTY PARAMETER =',1P,D10.1) + 1600 FORMAT + + (/' --- INITIAL WEIGHTED SUM OF SQUARES =', + + 17X,1P,D17.8) + 1610 FORMAT + + ( ' SUM OF SQUARED WEIGHTED DELTAS =',1P,D17.8/ + + ' SUM OF SQUARED WEIGHTED EPSILONS =',1P,D17.8) + 2010 FORMAT + + (/' --- EXPLANATORY VARIABLE AND DELTA WEIGHT SUMMARY:') + 2020 FORMAT + + (/' --- EXPLANATORY VARIABLE SUMMARY:') + 2110 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT DERIVATIVE'/ + + ' ', + + ' ASSESSMENT'/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) '/) + 2120 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT '/ + + ' ', + + ' '/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) '/) + 2130 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT DERIVATIVE'/ + + ' ', + + ' STEP SIZE'/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) (STPD)'/) + 2140 FORMAT + + (/' INDEX X(I,J)'/ + + ' (I,J) '/) + 3000 FORMAT + + (/' --- RESPONSE VARIABLE AND EPSILON ERROR WEIGHT', + + ' SUMMARY:') + 3100 FORMAT + + (/' INDEX Y(I,L) WEIGHT'/ + + ' (I,L) (WE)'/) + 4000 FORMAT + + (/' --- FUNCTION PARAMETER SUMMARY:') + 4110 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' DERIVATIVE'/ + + ' ', + + ' ASSESSMENT'/, + + ' (K) (IFIXB) (SCLB)', + + ' '/) + 4120 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' '/ + + ' ', + + ' '/, + + ' (K) (IFIXB) (SCLB)', + + ' '/) + 4200 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' DERIVATIVE'/ + + ' ', + + ' STEP SIZE'/, + + ' (K) (IFIXB) (SCLB)', + + ' (STPB)'/) + 4310 FORMAT + + (7X,I5,1P,D16.8,4X,A5,D16.8,1X,A13) + 4320 FORMAT + + (7X,I5,1P,D16.8,4X,A5,D16.8,1X,D13.5) + 5110 FORMAT + + (9X,A2,I1,1P,2D12.3,4X,A5,2D10.2,1X,A13) + 5120 FORMAT + + (8X,A2,I2,1P,2D12.3,4X,A5,2D10.2,1X,A13) + 5210 FORMAT + + (9X,A2,I1,1P,2D12.3,4X,A5,2D10.2,1X,D13.5) + 5220 FORMAT + + (8X,A2,I2,1P,2D12.3,4X,A5,2D10.2,1X,D13.5) + 6000 FORMAT + + (' ') + END +*DODPC2 + SUBROUTINE DODPC2 + + (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + + PNLTY, + + NITER,NFEV,WSS,ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) +C***BEGIN PROLOGUE DODPC2 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE GENERATE ITERATION REPORTS +C***END PROLOGUE DODPC2 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRED,ALPHA,PNLTY,PNORM,PRERED,TAU,WSS + INTEGER + + IPR,LUNRPT,NFEV,NITER,NP + LOGICAL + + FSTITR,IMPLCT,PRTPEN + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + RATIO,ZERO + INTEGER + + J,K,L + CHARACTER GN*3 + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C BETA: THE FUNCTION PARAMETERS. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=.TRUE.) OR NOT (FSTITR=.FALSE.). +C GN: THE CHARACTER*3 VARIABLE INDICATING WHETHER A GAUSS-NEWTON +C STEP WAS TAKEN. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C RATIO: THE RATIO OF TAU TO PNORM. +C TAU: THE TRUST REGION DIAMETER. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODPC2 + + + IF (FSTITR) THEN + IF (IPR.EQ.1) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1121) + ELSE + WRITE (LUNRPT,1122) + END IF + ELSE + IF (IMPLCT) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + END IF + END IF + IF (PRTPEN) THEN + WRITE (LUNRPT,1133) PNLTY + END IF + + IF (ALPHA.EQ.ZERO) THEN + GN = 'YES' + ELSE + GN = ' NO' + END IF + IF (PNORM.NE.ZERO) THEN + RATIO = TAU/PNORM + ELSE + RATIO = ZERO + END IF + IF (IPR.EQ.1) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN + ELSE + J = 1 + K = MIN(3,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN,J,BETA(J) + ELSE + WRITE (LUNRPT,1142) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN,J,K,(BETA(L),L=J,K) + END IF + IF (NP.GT.3) THEN + DO 10 J=4,NP,3 + K = MIN(J+2,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1151) J,BETA(J) + ELSE + WRITE (LUNRPT,1152) J,K,(BETA(L),L=J,K) + END IF + 10 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1121 FORMAT + + (// + + ' CUM. PENALTY ACT. REL. PRED. REL.'/ + + ' IT. NO. FN FUNCTION SUM-OF-SQS SUM-OF-SQS', + + ' G-N'/ + + ' NUM. EVALS VALUE REDUCTION REDUCTION', + + ' TAU/PNORM STEP'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ----') + 1122 FORMAT + + (// + + ' CUM. ACT. REL. PRED. REL.'/ + + ' IT. NO. FN WEIGHTED SUM-OF-SQS SUM-OF-SQS', + + ' G-N'/ + + ' NUM. EVALS SUM-OF-SQS REDUCTION REDUCTION', + + ' TAU/PNORM STEP'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ----'/) + 1131 FORMAT + + (// + + ' CUM. PENALTY ACT. REL. PRED. REL.'/ + + ' IT. NO. FN FUNCTION SUM-OF-SQS SUM-OF-SQS', + + ' G-N BETA -------------->'/ + + ' NUM. EVALS VALUE REDUCTION REDUCTION', + + ' TAU/PNORM STEP INDEX VALUE'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ---- ----- -----') + 1132 FORMAT + + (// + + ' CUM. ACT. REL. PRED. REL.'/ + + ' IT. NO. FN WEIGHTED SUM-OF-SQS SUM-OF-SQS', + + ' G-N BETA -------------->'/ + + ' NUM. EVALS SUM-OF-SQS REDUCTION REDUCTION', + + ' TAU/PNORM STEP INDEX VALUE'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ---- ----- -----'/) + 1133 FORMAT + + (/' PENALTY PARAMETER VALUE = ', 1P,E10.1) + 1141 FORMAT + + (1X,I4,I8,1X,1P,D12.5,2D13.4,D11.3,3X,A3,7X,I3,3D16.8) + 1142 FORMAT + + (1X,I4,I8,1X,1P,D12.5,2D13.4,D11.3,3X,A3,1X,I3,' TO',I3,3D16.8) + 1151 FORMAT + + (76X,I3,1P,D16.8) + 1152 FORMAT + + (70X,I3,' TO',I3,1P,3D16.8) + END +*DODPC3 + SUBROUTINE DODPC3 + + (IPR,LUNRPT, + + ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + + N,M,NP,NQ,NPP, + + INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + + WSS,WSSDEL,WSSEPS,PNLTY,RVAR,IDF, + + BETA,SDBETA,IFIXB2,F,DELTA) +C***BEGIN PROLOGUE DODPC3 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPPT +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE FINAL SUMMARY REPORT +C***END PROLOGUE DODPC3 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PNLTY,RCOND,RVAR,WSS,WSSDEL,WSSEPS + INTEGER + + IDF,INFO,IPR,IRANK,ISTOP,LUNRPT,M, + + N,NFEV,NITER,NJEV,NP,NPP,NQ + LOGICAL + + ANAJAC,DIDVCV,DOVCV,IMPLCT,ISODR,REDOJ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),F(N,NQ),SDBETA(NP) + INTEGER + + IFIXB2(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TVAL + INTEGER + + D1,D2,D3,D4,D5,I,J,K,L,NPLM1 + CHARACTER FMT1*90 + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DPPT + EXTERNAL + + DPPT + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN,MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C D1: THE FIRST DIGIT OF INFO. +C D2: THE SECOND DIGIT OF INFO. +C D3: THE THIRD DIGIT OF INFO. +C D4: THE FOURTH DIGIT OF INFO. +C D5: THE FIFTH DIGIT OF INFO. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C F: THE ESTIMATED VALUES OF EPSILON. +C FMT1: A CHARACTER*90 VARIABLE USED FOR FORMATS. +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB2: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA WERE +C ESTIMATED, FIXED, OR DROPPED BECAUSE THEY CAUSED RANK +C DEFICIENCY, CORRESPONDING TO VALUES OF IFIXB2 EQUALING 1, +C 0, AND -1, RESPECTIVELY. IF IFIXB2 IS -2, THEN NO ATTEMPT +C WAS MADE TO ESTIMATE THE PARAMETERS BECAUSE MAXIT = 0. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPR: THE VARIABLE INDICATING WHAT IS TO BE PRINTED. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPLM1: THE NUMBER OF ITEMS TO BE PRINTED PER LINE, MINUS ONE. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF TFJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS +C TO BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE +C MATRIX (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RVAR: THE RESIDUAL VARIANCE. +C SDBETA: THE STANDARD ERRORS OF THE ESTIMATED PARAMETERS. +C TVAL: THE VALUE OF THE 97.5 PERCENT POINT FUNCTION FOR THE +C T DISTRIBUTION. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C WSSDEL: THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS. +C WSSEPS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. + + +C***FIRST EXECUTABLE STATEMENT DODPC3 + + + D1 = INFO/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C PRINT STOPPING CONDITIONS + + WRITE (LUNRPT,1000) + IF (INFO.LE.9) THEN + IF (INFO.EQ.1) THEN + WRITE (LUNRPT,1011) INFO + ELSE IF (INFO.EQ.2) THEN + WRITE (LUNRPT,1012) INFO + ELSE IF (INFO.EQ.3) THEN + WRITE (LUNRPT,1013) INFO + ELSE IF (INFO.EQ.4) THEN + WRITE (LUNRPT,1014) INFO + ELSE IF (INFO.LE.9) THEN + WRITE (LUNRPT,1015) INFO + END IF + ELSE IF (INFO.LE.9999) THEN + +C PRINT WARNING DIAGNOSTICS + + WRITE (LUNRPT,1020) INFO + IF (D2.EQ.1) WRITE (LUNRPT,1021) + IF (D3.EQ.1) WRITE (LUNRPT,1022) + IF (D4.EQ.1) WRITE (LUNRPT,1023) + IF (D4.EQ.2) WRITE (LUNRPT,1024) + IF (D5.EQ.1) THEN + WRITE (LUNRPT,1031) + ELSE IF (D5.EQ.2) THEN + WRITE (LUNRPT,1032) + ELSE IF (D5.EQ.3) THEN + WRITE (LUNRPT,1033) + ELSE IF (D5.EQ.4) THEN + WRITE (LUNRPT,1034) + ELSE IF (D5.LE.9) THEN + WRITE (LUNRPT,1035) D5 + END IF + ELSE + +C PRINT ERROR MESSAGES + + WRITE (LUNRPT,1040) INFO + IF (D1.EQ.5) THEN + WRITE (LUNRPT,1042) + IF (D2.NE.0) WRITE (LUNRPT,1043) D2 + IF (D3.EQ.3) THEN + WRITE (LUNRPT,1044) D3 + ELSE IF (D3.NE.0) THEN + WRITE (LUNRPT,1045) D3 + END IF + ELSE IF (D1.EQ.6) THEN + WRITE (LUNRPT,1050) + ELSE + WRITE (LUNRPT,1060) D1 + END IF + END IF + +C PRINT MISC. STOPPING INFO + + WRITE (LUNRPT,1300) NITER + WRITE (LUNRPT,1310) NFEV + IF (ANAJAC) WRITE (LUNRPT,1320) NJEV + WRITE (LUNRPT,1330) IRANK + WRITE (LUNRPT,1340) RCOND + WRITE (LUNRPT,1350) ISTOP + +C PRINT FINAL SUM OF SQUARES + + IF (IMPLCT) THEN + WRITE (LUNRPT,2000) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,2010) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,2100) WSS + IF (ISODR) THEN + WRITE (LUNRPT,2110) WSSDEL,WSSEPS + END IF + END IF + IF (DIDVCV) THEN + WRITE (LUNRPT,2200) SQRT(RVAR),IDF + END IF + + NPLM1 = 3 + +C PRINT ESTIMATED BETA'S, AND, +C IF, FULL RANK, THEIR STANDARD ERRORS + + WRITE (LUNRPT,3000) + IF (DIDVCV) THEN + WRITE (LUNRPT,7300) + TVAL = DPPT(0.975D0,IDF) + DO 10 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8400) J,BETA(J),SDBETA(J), + + BETA(J)-TVAL*SDBETA(J), + + BETA(J)+TVAL*SDBETA(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J) + END IF + 10 CONTINUE + IF (.NOT.REDOJ) WRITE (LUNRPT,7310) + ELSE + IF (DOVCV) THEN + IF (D1.LE.5) THEN + WRITE (LUNRPT,7410) + ELSE + WRITE (LUNRPT,7420) + END IF + END IF + + IF ((IRANK.EQ.0 .AND. NPP.EQ.NP) .OR. NITER.EQ.0) THEN + IF (NP.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 20 J=1,NP,NPLM1+1 + K = MIN(J+NPLM1,NP) + IF (K.EQ.J) THEN + WRITE (LUNRPT,8100) J,BETA(J) + ELSE + WRITE (LUNRPT,8200) J,K,(BETA(L),L=J,K) + END IF + 20 CONTINUE + IF (NITER.GE.1) THEN + WRITE (LUNRPT,8800) + ELSE + WRITE (LUNRPT,8900) + END IF + ELSE + WRITE (LUNRPT,7500) + DO 30 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8500) J,BETA(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J) + END IF + 30 CONTINUE + END IF + END IF + + IF (IPR.EQ.1) RETURN + + +C PRINT EPSILON'S AND DELTA'S TOGETHER IN A COLUMN IF THE NUMBER OF +C COLUMNS OF DATA IN EPSILON AND DELTA IS LESS THAN OR EQUAL TO THREE. + + IF (IMPLCT .AND. (M.LE.4)) THEN + WRITE (LUNRPT,4100) + WRITE (FMT1,9110) M + WRITE (LUNRPT,FMT1) (J,J=1,M) + DO 40 I=1,N + WRITE (LUNRPT,4130) I,(DELTA(I,J),J=1,M) + 40 CONTINUE + + ELSE IF (ISODR .AND. (NQ+M.LE.4)) THEN + WRITE (LUNRPT,4110) + WRITE (FMT1,9120) NQ,M + WRITE (LUNRPT,FMT1) (L,L=1,NQ),(J,J=1,M) + DO 50 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ),(DELTA(I,J),J=1,M) + 50 CONTINUE + + ELSE IF (.NOT.ISODR .AND. ((NQ.GE.2) .AND. (NQ.LE.4))) THEN + WRITE (LUNRPT,4120) + WRITE (FMT1,9130) NQ + WRITE (LUNRPT,FMT1) (L,L=1,NQ) + DO 60 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ) + 60 CONTINUE + ELSE + +C PRINT EPSILON'S AND DELTA'S SEPARATELY + + IF (.NOT.IMPLCT) THEN + +C PRINT EPSILON'S + + DO 80 J=1,NQ + WRITE (LUNRPT,4200) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 70 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,F(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(F(L,J),L=I,K) + END IF + 70 CONTINUE + 80 CONTINUE + END IF + +C PRINT DELTA'S + + IF (ISODR) THEN + DO 100 J=1,M + WRITE (LUNRPT,4300) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 90 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,DELTA(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(DELTA(L,J),L=I,K) + END IF + 90 CONTINUE + 100 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (/' --- STOPPING CONDITIONS:') + 1011 FORMAT + + (' INFO = ',I5,' ==> SUM OF SQUARES CONVERGENCE.') + 1012 FORMAT + + (' INFO = ',I5,' ==> PARAMETER CONVERGENCE.') + 1013 FORMAT + + (' INFO = ',I5,' ==> SUM OF SQUARES CONVERGENCE AND', + + ' PARAMETER CONVERGENCE.') + 1014 FORMAT + + (' INFO = ',I5,' ==> ITERATION LIMIT REACHED.') + 1015 FORMAT + + (' INFO = ',I5,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1020 FORMAT + + (' INFO = ',I5.4/ + + ' = ABCD, WHERE A NONZERO VALUE FOR DIGIT A,', + + ' B, OR C INDICATES WHY'/ + + ' THE RESULTS MIGHT BE QUESTIONABLE,', + + ' AND DIGIT D INDICATES'/ + + ' THE ACTUAL STOPPING CONDITION.') + 1021 FORMAT + + (' A=1 ==> DERIVATIVES ARE', + + ' QUESTIONABLE.') + 1022 FORMAT + + (' B=1 ==> USER SET ISTOP TO', + + ' NONZERO VALUE DURING LAST'/ + + ' CALL TO SUBROUTINE FCN.') + 1023 FORMAT + + (' C=1 ==> DERIVATIVES ARE NOT', + + ' FULL RANK AT THE SOLUTION.') + 1024 FORMAT + + (' C=2 ==> DERIVATIVES ARE ZERO', + + ' RANK AT THE SOLUTION.') + 1031 FORMAT + + (' D=1 ==> SUM OF SQUARES CONVERGENCE.') + 1032 FORMAT + + (' D=2 ==> PARAMETER CONVERGENCE.') + 1033 FORMAT + + (' D=3 ==> SUM OF SQUARES CONVERGENCE', + + ' AND PARAMETER CONVERGENCE.') + 1034 FORMAT + + (' D=4 ==> ITERATION LIMIT REACHED.') + 1035 FORMAT + + (' D=',I1,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1040 FORMAT + + (' INFO = ',I5.5/ + + ' = ABCDE, WHERE A NONZERO VALUE FOR A GIVEN', + + ' DIGIT INDICATES AN'/ + + ' ABNORMAL STOPPING CONDITION.') + 1042 FORMAT + + (' A=5 ==> USER STOPPED COMPUTATIONS', + + ' IN SUBROUTINE FCN.') + 1043 FORMAT + + (' B=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED DURING THE'/ + + ' FUNCTION EVALUATION.') + 1044 FORMAT + + (' C=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED BECAUSE'/ + + ' DERIVATIVES WITH', + + ' RESPECT TO DELTA WERE'/ + + ' COMPUTED BY', + + ' SUBROUTINE FCN WHEN'/ + + ' FIT IS OLS.') + 1045 FORMAT + + (' C=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED DURING THE'/ + + ' JACOBIAN EVALUATION.') + 1050 FORMAT + + (' A=6 ==> NUMERICAL INSTABILITIES', + + ' HAVE BEEN DETECTED,'/ + + ' POSSIBLY INDICATING', + + ' A DISCONTINUITY IN THE'/ + + ' DERIVATIVES OR A POOR', + + ' POOR CHOICE OF PROBLEM'/ + + ' SCALE OR WEIGHTS.') + 1060 FORMAT + + (' A=',I1,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1300 FORMAT + + (' NITER = ',I5, + + ' (NUMBER OF ITERATIONS)') + 1310 FORMAT + + (' NFEV = ',I5, + + ' (NUMBER OF FUNCTION EVALUATIONS)') + 1320 FORMAT + + (' NJEV = ',I5, + + ' (NUMBER OF JACOBIAN EVALUATIONS)') + 1330 FORMAT + + (' IRANK = ',I5, + + ' (RANK DEFICIENCY)') + 1340 FORMAT + + (' RCOND = ',1P,D12.2, + + ' (INVERSE CONDITION NUMBER)') +*1341 FORMAT +* + (' ==> POSSIBLY FEWER THAN 2 SIGNIFICANT', +* + ' DIGITS IN RESULTS;'/ +* + ' SEE ODRPACK REFERENCE', +* + ' GUIDE, SECTION 4.C.') + 1350 FORMAT + + (' ISTOP = ',I5, + + ' (RETURNED BY USER FROM', + + ' SUBROUTINE FCN)') + 2000 FORMAT + + (/' --- FINAL SUM OF SQUARED WEIGHTED DELTAS = ', + + 17X,1P,D17.8) + 2010 FORMAT + + ( ' FINAL PENALTY FUNCTION VALUE = ',1P,D17.8/ + + ' PENALTY TERM = ',1P,D17.8/ + + ' PENALTY PARAMETER = ',1P,D10.1) + 2100 FORMAT + + (/' --- FINAL WEIGHTED SUMS OF SQUARES = ',17X,1P,D17.8) + 2110 FORMAT + + ( ' SUM OF SQUARED WEIGHTED DELTAS = ',1P,D17.8/ + + ' SUM OF SQUARED WEIGHTED EPSILONS = ',1P,D17.8) + 2200 FORMAT + + (/' --- RESIDUAL STANDARD DEVIATION = ', + + 17X,1P,D17.8/ + + ' DEGREES OF FREEDOM =',I5) + 3000 FORMAT + + (/' --- ESTIMATED BETA(J), J = 1, ..., NP:') + 4100 FORMAT + + (/' --- ESTIMATED DELTA(I,*), I = 1, ..., N:') + 4110 FORMAT + + (/' --- ESTIMATED EPSILON(I) AND DELTA(I,*), I = 1, ..., N:') + 4120 FORMAT + + (/' --- ESTIMATED EPSILON(I), I = 1, ..., N:') + 4130 FORMAT(5X,I5,1P,5D16.8) + 4200 FORMAT + + (/' --- ESTIMATED EPSILON(I,',I3,'), I = 1, ..., N:') + 4300 FORMAT + + (/' --- ESTIMATED DELTA(I,',I3,'), I = 1, ..., N:') + 7100 FORMAT + + (/' INDEX VALUE'/) + 7200 FORMAT + + (/' INDEX VALUE -------------->'/) + 7300 FORMAT + + (/' BETA S.D. BETA', + + ' ---- 95% CONFIDENCE INTERVAL ----'/) + 7310 FORMAT + + (/' N.B. STANDARD ERRORS AND CONFIDENCE INTERVALS ARE', + + ' COMPUTED USING'/ + + ' DERIVATIVES CALCULATED AT THE BEGINNING', + + ' OF THE LAST ITERATION,'/ + + ' AND NOT USING DERIVATIVES RE-EVALUATED AT THE', + + ' FINAL SOLUTION.') + 7410 FORMAT + + (/' N.B. THE STANDARD ERRORS OF THE ESTIMATED BETAS WERE', + + ' NOT COMPUTED BECAUSE'/ + + ' THE DERIVATIVES WERE NOT AVAILABLE. EITHER MAXIT', + + ' IS 0 AND THE THIRD'/ + + ' DIGIT OF JOB IS GREATER THAN 1, OR THE MOST', + + ' RECENTLY TRIED VALUES OF'/ + + ' BETA AND/OR X+DELTA WERE IDENTIFIED AS', + + ' UNACCEPTABLE BY USER SUPPLIED'/ + + ' SUBROUTINE FCN.') + 7420 FORMAT + + (/' N.B. THE STANDARD ERRORS OF THE ESTIMATED BETAS WERE', + + ' NOT COMPUTED.'/ + + ' (SEE INFO ABOVE.)') + 7500 FORMAT + + (/' BETA STATUS') + 8100 FORMAT + + (11X,I5,1P,D16.8) + 8200 FORMAT + + (3X,I5,' TO',I5,1P,7D16.8) + 8400 FORMAT + + (3X,I5,1X,1P,D16.8,3X,D12.4,3X,D16.8,1X,'TO',D16.8) + 8500 FORMAT + + (3X,I5,1X,1P,D16.8,6X,'ESTIMATED') + 8600 FORMAT + + (3X,I5,1X,1P,D16.8,6X,' FIXED') + 8700 FORMAT + + (3X,I5,1X,1P,D16.8,6X,' DROPPED') + 8800 FORMAT + + (/' N.B. NO PARAMETERS WERE FIXED BY THE USER OR', + + ' DROPPED AT THE LAST'/ + + ' ITERATION BECAUSE THEY CAUSED THE MODEL TO BE', + + ' RANK DEFICIENT.') + 8900 FORMAT + + (/' N.B. NO CHANGE WAS MADE TO THE USER SUPPLIED PARAMETER', + + ' VALUES BECAUSE'/ + + ' MAXIT=0.') + 9110 FORMAT + + ('(/'' I'',', + + I2,'('' DELTA(I,'',I1,'')'')/)') + 9120 FORMAT + + ('(/'' I'',', + + I2,'('' EPSILON(I,'',I1,'')''),', + + I2,'('' DELTA(I,'',I1,'')'')/)') + 9130 FORMAT + + ('(/'' I'',', + + I2,'('' EPSILON(I,'',I1,'')'')/)') + + END +*DODPCR + SUBROUTINE DODPCR + + (IPR,LUNRPT, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,SDBETA, + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) +C***BEGIN PROLOGUE DODPCR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE COMPUTATION REPORTS +C***END PROLOGUE DODPCR + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRED,ALPHA,PARTOL,PNORM,PRERED,RCOND,RVAR, + + SSTOL,TAU,TAUFAC + INTEGER + + IDF,IFLAG,INFO,IPR,IRANK,ISTOP,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE, + + LDX,LDY,LD2WD,LD2WE,LUNRPT,M,MAXIT,N,NETA,NFEV, + + NITER,NJEV,NNZW,NP,NPP,NQ + LOGICAL + + DIDVCV,FSTITR,HEAD,PRTPEN + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),F(N,NQ),SDBETA(NP),SSF(NP), + + STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WSS(3),X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...LOCAL SCALARS + DOUBLE PRECISION + + PNLTY + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + CHARACTER TYP*3 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFLAG: THE VARIABLE DESIGNATING WHAT IS TO BE PRINTED. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION NUMBER OF TFJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RVAR: THE RESIDUAL VARIANCE. +C SDBETA: THE STANDARD DEVIATIONS OF THE ESTIMATED BETA'S. +C SSF: THE SCALING VALUES FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TT: THE SCALING VALUES FOR DELTA. +C TYP: THE CHARACTER*3 STRING "ODR" OR "OLS". +C WE: THE EPSILON WEIGHTS. +C WD: THE DELTA WEIGHTS. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODPCR + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + PNLTY = ABS(WE(1,1,1)) + + IF (HEAD) THEN + CALL DODPHD(HEAD,LUNRPT) + END IF + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + +C PRINT INITIAL SUMMARY + + IF (IFLAG.EQ.1) THEN + WRITE (LUNRPT,1200) TYP + CALL DODPC1 + + (IPR,LUNRPT, + + ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + + MSGB(1),MSGB(2),MSGD(1),MSGD(2), + + N,M,NP,NQ,NPP,NNZW, + + X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + + Y,LDY,WE,LDWE,LD2WE,PNLTY, + + BETA,IFIXB,SSF,STPB, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS(1),WSS(2),WSS(3)) + +C PRINT ITERATION REPORTS + + ELSE IF (IFLAG.EQ.2) THEN + + IF (FSTITR) THEN + WRITE (LUNRPT,1300) TYP + END IF + CALL DODPC2 + + (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + + PNLTY, + + NITER,NFEV,WSS(1),ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) + +C PRINT FINAL SUMMARY + + ELSE IF (IFLAG.EQ.3) THEN + + WRITE (LUNRPT,1400) TYP + CALL DODPC3 + + (IPR,LUNRPT, + + ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + + N,M,NP,NQ,NPP, + + INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + + WSS(1),WSS(2),WSS(3),PNLTY,RVAR,IDF, + + BETA,SDBETA,IFIXB,F,DELTA) + END IF + + RETURN + +C FORMAT STATEMENTS + + 1200 FORMAT + + (/' *** INITIAL SUMMARY FOR FIT BY METHOD OF ',A3, ' ***') + 1300 FORMAT + + (/' *** ITERATION REPORTS FOR FIT BY METHOD OF ',A3, ' ***') + 1400 FORMAT + + (/' *** FINAL SUMMARY FOR FIT BY METHOD OF ',A3, ' ***') + + END +*DODPE1 + SUBROUTINE DODPE1 + + (UNIT,D1,D2,D3,D4,D5, + + N,M,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN) +C***BEGIN PROLOGUE DODPE1 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ERROR REPORTS +C***END PROLOGUE DODPE1 + +C...SCALAR ARGUMENTS + INTEGER + + D1,D2,D3,D4,D5,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE, + + LIWKMN,LWKMN,M,N,NQ,UNIT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D1: THE 1ST DIGIT (FROM THE LEFT) OF INFO. +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C D4: THE 4TH DIGIT (FROM THE LEFT) OF INFO. +C D5: THE 5TH DIGIT (FROM THE LEFT) OF INFO. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. + + +C***FIRST EXECUTABLE STATEMENT DODPE1 + + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN PROBLEM SPECIFICATION +C PARAMETERS + + IF (D1.EQ.1) THEN + IF (D2.NE.0) THEN + WRITE(UNIT,1100) + END IF + IF (D3.NE.0) THEN + WRITE(UNIT,1200) + END IF + IF (D4.NE.0) THEN + WRITE(UNIT,1300) + END IF + IF (D5.NE.0) THEN + WRITE(UNIT,1400) + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DIMENSION SPECIFICATION +C PARAMETERS + + ELSE IF (D1.EQ.2) THEN + + IF (D2.NE.0) THEN + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + WRITE(UNIT,2110) + END IF + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + WRITE(UNIT,2120) + END IF + END IF + + IF (D3.NE.0) THEN + IF (D3.EQ.1 .OR. D3.EQ.3 .OR. D3.EQ.5 .OR. D3.EQ.7) THEN + WRITE(UNIT,2210) + END IF + IF (D3.EQ.2 .OR. D3.EQ.3 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2220) + END IF + IF (D3.EQ.4 .OR. D3.EQ.5 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2230) + END IF + END IF + + IF (D4.NE.0) THEN + IF (D4.EQ.1 .OR. D4.EQ.3) THEN + WRITE(UNIT,2310) + END IF + IF (D4.EQ.2 .OR. D4.EQ.3) THEN + WRITE(UNIT,2320) + END IF + END IF + + IF (D5.NE.0) THEN + IF (D5.EQ.1 .OR. D5.EQ.3) THEN + WRITE(UNIT,2410) LWKMN + END IF + IF (D5.EQ.2 .OR. D5.EQ.3) THEN + WRITE(UNIT,2420) LIWKMN + END IF + END IF + + ELSE IF (D1.EQ.3) THEN + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN SCALE VALUES + + IF (D2.NE.0) THEN + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + IF (LDSCLD.GE.N) THEN + WRITE(UNIT,3110) + ELSE + WRITE(UNIT,3120) + END IF + END IF + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + WRITE(UNIT,3130) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DERIVATIVE STEP VALUES + + IF (D3.NE.0) THEN + IF (D3.EQ.1 .OR. D3.EQ.3) THEN + IF (LDSTPD.GE.N) THEN + WRITE(UNIT,3210) + ELSE + WRITE(UNIT,3220) + END IF + END IF + IF (D3.EQ.2 .OR. D3.EQ.3) THEN + WRITE(UNIT,3230) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN OBSERVATIONAL ERROR WEIGHTS + + IF (D4.NE.0) THEN + IF (D4.EQ.1) THEN + IF (LDWE.GE.N) THEN + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3310) + ELSE + WRITE(UNIT,3320) + END IF + ELSE + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3410) + ELSE + WRITE(UNIT,3420) + END IF + END IF + END IF + IF (D4.EQ.2) THEN + WRITE(UNIT,3500) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DELTA WEIGHTS + + IF (D5.NE.0) THEN + IF (LDWD.GE.N) THEN + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4310) + ELSE + WRITE(UNIT,4320) + END IF + ELSE + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4410) + ELSE + WRITE(UNIT,4420) + END IF + END IF + END IF + + END IF + +C FORMAT STATEMENTS + + 1100 FORMAT + + (/' ERROR : N IS LESS THAN ONE.') + 1200 FORMAT + + (/' ERROR : M IS LESS THAN ONE.') + 1300 FORMAT + + (/' ERROR : NP IS LESS THAN ONE'/ + + ' OR NP IS GREATER THAN N.') + 1400 FORMAT + + (/' ERROR : NQ IS LESS THAN ONE.') + 2110 FORMAT + + (/' ERROR : LDX IS LESS THAN N.') + 2120 FORMAT + + (/' ERROR : LDY IS LESS THAN N.') + 2210 FORMAT + + (/' ERROR : LDIFX IS LESS THAN N'/ + + ' AND LDIFX IS NOT EQUAL TO ONE.') + 2220 FORMAT + + (/' ERROR : LDSCLD IS LESS THAN N'/ + + ' AND LDSCLD IS NOT EQUAL TO ONE.') + 2230 FORMAT + + (/' ERROR : LDSTPD IS LESS THAN N'/ + + ' AND LDSTPD IS NOT EQUAL TO ONE.') + 2310 FORMAT + + (/' ERROR : LDWE IS LESS THAN N'/ + + ' AND LDWE IS NOT EQUAL TO ONE OR'/ + + ' OR'/ + + ' LD2WE IS LESS THAN NQ'/ + + ' AND LD2WE IS NOT EQUAL TO ONE.') + 2320 FORMAT + + (/' ERROR : LDWD IS LESS THAN N'/ + + ' AND LDWD IS NOT EQUAL TO ONE.') + 2410 FORMAT + + (/' ERROR : LWORK IS LESS THAN ',I7, ','/ + + ' THE SMALLEST ACCEPTABLE DIMENSION OF ARRAY WORK.') + 2420 FORMAT + + (/' ERROR : LIWORK IS LESS THAN ',I7, ','/ + + ' THE SMALLEST ACCEPTABLE DIMENSION OF ARRAY', + + ' IWORK.') + 3110 FORMAT + + (/' ERROR : SCLD(I,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME I = 1, ..., N AND J = 1, ..., M.'// + + ' WHEN SCLD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSCLD IS GREATER THAN OR EQUAL TO N THEN'/ + + ' EACH OF THE N BY M ELEMENTS OF'/ + + ' SCLD MUST BE GREATER THAN ZERO.') + 3120 FORMAT + + (/' ERROR : SCLD(1,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME J = 1, ..., M.'// + + ' WHEN SCLD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSCLD IS EQUAL TO ONE THEN'/ + + ' EACH OF THE 1 BY M ELEMENTS OF'/ + + ' SCLD MUST BE GREATER THAN ZERO.') + 3130 FORMAT + + (/' ERROR : SCLB(K) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME K = 1, ..., NP.'// + + ' ALL NP ELEMENTS OF', + + ' SCLB MUST BE GREATER THAN ZERO.') + 3210 FORMAT + + (/' ERROR : STPD(I,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME I = 1, ..., N AND J = 1, ..., M.'// + + ' WHEN STPD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSTPD IS GREATER THAN OR EQUAL TO N THEN'/ + + ' EACH OF THE N BY M ELEMENTS OF'/ + + ' STPD MUST BE GREATER THAN ZERO.') + 3220 FORMAT + + (/' ERROR : STPD(1,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME J = 1, ..., M.'// + + ' WHEN STPD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSTPD IS EQUAL TO ONE THEN'/ + + ' EACH OF THE 1 BY M ELEMENTS OF'/ + + ' STPD MUST BE GREATER THAN ZERO.') + 3230 FORMAT + + (/' ERROR : STPB(K) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME K = 1, ..., NP.'// + + ' ALL NP ELEMENTS OF', + + ' STPB MUST BE GREATER THAN ZERO.') + 3310 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (NQ BY NQ) ARRAYS STARTING'/ + + ' IN WE(I,1,1), I = 1, ..., N, IS NOT POSITIVE'/ + + ' SEMIDEFINITE. WHEN WE(1,1,1) IS GREATER THAN'/ + + ' OR EQUAL TO ZERO, AND LDWE IS GREATER THAN OR'/ + + ' EQUAL TO N, AND LD2WE IS GREATER THAN OR EQUAL'/ + + ' TO NQ, THEN EACH OF THE (NQ BY NQ) ARRAYS IN WE'/ + + ' MUST BE POSITIVE SEMIDEFINITE.') + 3320 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (1 BY NQ) ARRAYS STARTING'/ + + ' IN WE(I,1,1), I = 1, ..., N, HAS A NEGATIVE'/ + + ' ELEMENT. WHEN WE(1,1,1) IS GREATER THAN OR'/ + + ' EQUAL TO ZERO, AND LDWE IS GREATER THAN OR EQUAL'/ + + ' TO N, AND LD2WE IS EQUAL TO 1, THEN EACH OF THE'/ + + ' (1 BY NQ) ARRAYS IN WE MUST HAVE ONLY NON-'/ + + ' NEGATIVE ELEMENTS.') + 3410 FORMAT + + (/' ERROR : THE (NQ BY NQ) ARRAY STARTING IN WE(1,1,1) IS'/ + + ' NOT POSITIVE SEMIDEFINITE. WHEN WE(1,1,1) IS'/ + + ' GREATER THAN OR EQUAL TO ZERO, AND LDWE IS EQUAL'/ + + ' TO 1, AND LD2WE IS GREATER THAN OR EQUAL TO NQ,'/ + + ' THEN THE (NQ BY NQ) ARRAY IN WE MUST BE POSITIVE'/ + + ' SEMIDEFINITE.') + 3420 FORMAT + + (/' ERROR : THE (1 BY NQ) ARRAY STARTING IN WE(1,1,1) HAS'/ + + ' A NEGATIVE ELEMENT. WHEN WE(1,1,1) IS GREATER'/ + + ' THAN OR EQUAL TO ZERO, AND LDWE IS EQUAL TO 1,'/ + + ' AND LD2WE IS EQUAL TO 1, THEN THE (1 BY NQ)'/ + + ' ARRAY IN WE MUST HAVE ONLY NONNEGATIVE ELEMENTS.') + 3500 FORMAT + + (/' ERROR : THE NUMBER OF NONZERO ARRAYS IN ARRAY WE IS'/ + + ' LESS THAN NP.') + 4310 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (M BY M) ARRAYS STARTING'/ + + ' IN WD(I,1,1), I = 1, ..., N, IS NOT POSITIVE'/ + + ' DEFINITE. WHEN WD(1,1,1) IS GREATER THAN ZERO,'/ + + ' AND LDWD IS GREATER THAN OR EQUAL TO N, AND'/ + + ' LD2WD IS GREATER THAN OR EQUAL TO M, THEN EACH'/ + + ' OF THE (M BY M) ARRAYS IN WD MUST BE POSITIVE'/ + + ' DEFINITE.') + 4320 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (1 BY M) ARRAYS STARTING'/ + + ' IN WD(I,1,1), I = 1, ..., N, HAS A NONPOSITIVE'/ + + ' ELEMENT. WHEN WD(1,1,1) IS GREATER THAN ZERO,'/ + + ' AND LDWD IS GREATER THAN OR EQUAL TO N, AND'/ + + ' LD2WD IS EQUAL TO 1, THEN EACH OF THE (1 BY M)'/ + + ' ARRAYS IN WD MUST HAVE ONLY POSITIVE ELEMENTS.') + 4410 FORMAT + + (/' ERROR : THE (M BY M) ARRAY STARTING IN WD(1,1,1) IS'/ + + ' NOT POSITIVE DEFINITE. WHEN WD(1,1,1) IS'/ + + ' GREATER THAN ZERO, AND LDWD IS EQUAL TO 1, AND'/ + + ' LD2WD IS GREATER THAN OR EQUAL TO M, THEN THE'/ + + ' (M BY M) ARRAY IN WD MUST BE POSITIVE DEFINITE.') + 4420 FORMAT + + (/' ERROR : THE (1 BY M) ARRAY STARTING IN WD(1,1,1) HAS A'/ + + ' NONPOSITIVE ELEMENT. WHEN WD(1,1,1) IS GREATER'/ + + ' THAN ZERO, AND LDWD IS EQUAL TO 1, AND LD2WD IS'/ + + ' EQUAL TO 1, THEN THE (1 BY M) ARRAY IN WD MUST'/ + + ' HAVE ONLY POSITIVE ELEMENTS.') + END +*DODPE2 + SUBROUTINE DODPE2 + + (UNIT, + + N,M,NP,NQ, + + FJACB,FJACD, + + DIFF,MSGB1,MSGB,ISODR,MSGD1,MSGD, + + XPLUSD,NROW,NETA,NTOL) +C***BEGIN PROLOGUE DODPE2 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE THE DERIVATIVE CHECKING REPORT +C***END PROLOGUE DODPE2 + +C...SCALAR ARGUMENTS + INTEGER + + M,MSGB1,MSGD1,N,NETA,NP,NQ,NROW,NTOL,UNIT + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + + MSGB(NQ,NP),MSGD(NQ,M) + +C...LOCAL SCALARS + INTEGER + + I,J,K,L + CHARACTER FLAG*1,TYP*3 + +C...LOCAL ARRAYS + LOGICAL + + FTNOTE(0:7) + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FLAG: THE CHARACTER STRING INDICATING HIGHLY QUESTIONABLE RESULTS. +C FTNOTE: THE ARRAY CONTROLING FOOTNOTES. +C I: AN INDEX VARIABLE. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C J: AN INDEX VARIABLE. +C K: AN INDEX VARIABLE. +C L: AN INDEX VARIABLE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C FINITE DIFFERENCE AND THE USER SUPPLIED DERIVATIVES. +C TYP: THE CHARACTER STRING INDICATING SOLUTION TYPE, ODR OR OLS. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODPE2 + + +C SET UP FOR FOOTNOTES + + DO 10 I=0,7 + FTNOTE(I) = .FALSE. + 10 CONTINUE + + DO 40 L=1,NQ + IF (MSGB1.GE.1) THEN + DO 20 I=1,NP + IF (MSGB(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGB(L,I)) = .TRUE. + END IF + 20 CONTINUE + END IF + + IF (MSGD1.GE.1) THEN + DO 30 I=1,M + IF (MSGD(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGD(L,I)) = .TRUE. + END IF + 30 CONTINUE + END IF + 40 CONTINUE + +C PRINT REPORT + + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + WRITE (UNIT,1000) TYP + + DO 70 L=1,NQ + + WRITE (UNIT,2100) L,NROW + WRITE (UNIT,2200) + + DO 50 I=1,NP + K = MSGB(L,I) + IF (K.GE.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,3100) I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,3200) I,FJACB(NROW,I,L),DIFF(L,I),FLAG + ELSE IF (K.GE.1) THEN + WRITE (UNIT,3300) I,FJACB(NROW,I,L),DIFF(L,I),FLAG,K + END IF + 50 CONTINUE + IF (ISODR) THEN + DO 60 I=1,M + K = MSGD(L,I) + IF (K.GE.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,4100) NROW,I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,4200) NROW,I, + + FJACD(NROW,I,L),DIFF(L,NP+I),FLAG + ELSE IF (K.GE.1) THEN + WRITE (UNIT,4300) NROW,I, + + FJACD(NROW,I,L),DIFF(L,NP+I),FLAG,K + END IF + 60 CONTINUE + END IF + 70 CONTINUE + +C PRINT FOOTNOTES + + IF (FTNOTE(0)) THEN + + WRITE (UNIT,5000) + IF (FTNOTE(1)) WRITE (UNIT,5100) + IF (FTNOTE(2)) WRITE (UNIT,5200) + IF (FTNOTE(3)) WRITE (UNIT,5300) + IF (FTNOTE(4)) WRITE (UNIT,5400) + IF (FTNOTE(5)) WRITE (UNIT,5500) + IF (FTNOTE(6)) WRITE (UNIT,5600) + IF (FTNOTE(7)) WRITE (UNIT,5700) + END IF + + IF (NETA.LT.0) THEN + WRITE (UNIT,6000) -NETA + ELSE + WRITE (UNIT,6100) NETA + END IF + WRITE (UNIT,7000) NTOL + +C PRINT OUT ROW OF EXPLANATORY VARIABLE WHICH WAS CHECKED. + + WRITE (UNIT,8100) NROW + + DO 80 J=1,M + WRITE (UNIT,8110) NROW,J,XPLUSD(NROW,J) + 80 CONTINUE + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (//' *** DERIVATIVE CHECKING REPORT FOR FIT BY METHOD OF ',A3, + + ' ***'/) + 2100 FORMAT (/' FOR RESPONSE ',I2,' OF OBSERVATION ', I5/) + 2200 FORMAT (' ',' USER', + + ' ',' '/ + + ' ',' SUPPLIED', + + ' RELATIVE',' DERIVATIVE '/ + + ' DERIVATIVE WRT',' VALUE', + + ' DIFFERENCE',' ASSESSMENT '/) + 3100 FORMAT (' BETA(',I3,')', ' --- ', + + ' --- ',' UNCHECKED') + 3200 FORMAT (' BETA(',I3,')', 1P,2D13.2,3X,A1, + + 'VERIFIED') + 3300 FORMAT (' BETA(',I3,')', 1P,2D13.2,3X,A1, + + 'QUESTIONABLE (SEE NOTE ',I1,')') + 4100 FORMAT (' DELTA(',I2,',',I2,')', ' --- ', + + ' --- ',' UNCHECKED') + 4200 FORMAT (' DELTA(',I2,',',I2,')', 1P,2D13.2,3X,A1, + + 'VERIFIED') + 4300 FORMAT (' DELTA(',I2,',',I2,')', 1P,2D13.2,3X,A1, + + 'QUESTIONABLE (SEE NOTE ',I1,')') + 5000 FORMAT + + (/' NOTES:') + 5100 FORMAT + + (/' (1) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' AGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE BOTH ARE ZERO.') + 5200 FORMAT + + (/' (2) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' AGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE ONE IS', + + ' IDENTICALLY ZERO'/ + + ' AND THE OTHER IS ONLY APPROXIMATELY ZERO.') + 5300 FORMAT + + (/' (3) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE ONE IS', + + ' IDENTICALLY ZERO'/ + + ' AND THE OTHER IS NOT.') + 5400 FORMAT + + (/' (4) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' FINITE DIFFERENCE DERIVATIVE IS QUESTIONABLE', + + ' BECAUSE EITHER'/ + + ' THE RATIO OF RELATIVE CURVATURE TO RELATIVE', + + ' SLOPE IS TOO HIGH'/ + + ' OR THE SCALE IS WRONG.') + 5500 FORMAT + + (/' (5) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' FINITE DIFFERENCE DERIVATIVE IS QUESTIONABLE', + + ' BECAUSE THE'/ + + ' RATIO OF RELATIVE CURVATURE TO RELATIVE SLOPE IS', + + ' TOO HIGH.') + 5600 FORMAT + + (/' (6) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' HAVE AT LEAST 2 DIGITS IN COMMON.') + 5700 FORMAT + + (/' (7) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, AND'/ + + ' HAVE FEWER THAN 2 DIGITS IN COMMON. DERIVATIVE', + + ' CHECKING MUST'/ + + ' BE TURNED OFF IN ORDER TO PROCEED.') + 6000 FORMAT + + (/' NUMBER OF RELIABLE DIGITS IN FUNCTION RESULTS ', + + I5/ + + ' (ESTIMATED BY ODRPACK)') + 6100 FORMAT + + (/' NUMBER OF RELIABLE DIGITS IN FUNCTION RESULTS ', + + I5/ + + ' (SUPPLIED BY USER)') + 7000 FORMAT + + (/' NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN '/ + + ' USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVE FOR '/ + + ' USER SUPPLIED DERIVATIVE TO BE CONSIDERED VERIFIED ', + + I5) + 8100 FORMAT + + (/' ROW NUMBER AT WHICH DERIVATIVES WERE CHECKED ', + + I5// + + ' -VALUES OF THE EXPLANATORY VARIABLES AT THIS ROW'/) + 8110 FORMAT + + (10X,'X(',I2,',',I2,')',1X,1P,3D16.8) + END +*DODPE3 + SUBROUTINE DODPE3 + + (UNIT,D2,D3) +C***BEGIN PROLOGUE DODPE3 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ERROR REPORTS INDICATING THAT COMPUTATIONS WERE +C STOPPED IN USER SUPPLIED SUBROUTINES FCN +C***END PROLOGUE DODPE3 + +C...SCALAR ARGUMENTS + INTEGER + + D2,D3,UNIT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. + + +C***FIRST EXECUTABLE STATEMENT DODPE3 + + +C PRINT APPROPRIATE MESSAGES TO INDICATE WHERE COMPUTATIONS WERE +C STOPPED + + IF (D2.EQ.2) THEN + WRITE(UNIT,1100) + ELSE IF (D2.EQ.3) THEN + WRITE(UNIT,1200) + ELSE IF (D2.EQ.4) THEN + WRITE(UNIT,1300) + END IF + IF (D3.EQ.2) THEN + WRITE(UNIT,1400) + END IF + +C FORMAT STATEMENTS + + 1100 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN WHEN INVOKED USING THE'/ + + ' INITIAL ESTIMATES OF BETA AND DELTA SUPPLIED BY THE '/ + + ' USER. THE INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW '/ + + ' PROPER EVALUATION OF SUBROUTINE FCN BEFORE THE '/ + + ' REGRESSION PROCEDURE CAN CONTINUE.') + 1200 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN. THIS OCCURRED DURING'/ + + ' THE COMPUTATION OF THE NUMBER OF RELIABLE DIGITS IN THE '/ + + ' PREDICTED VALUES (F) RETURNED FROM SUBROUTINE FCN, INDI-'/ + + ' CATING THAT CHANGES IN THE INITIAL ESTIMATES OF BETA(K),'/ + + ' K=1,NP, AS SMALL AS 2*BETA(K)*SQRT(MACHINE PRECISION), '/ + + ' WHERE MACHINE PRECISION IS DEFINED AS THE SMALLEST VALUE'/ + + ' E SUCH THAT 1+E>1 ON THE COMPUTER BEING USED, PREVENT '/ + + ' SUBROUTINE FCN FROM BEING PROPERLY EVALUATED. THE '/ + + ' INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER '/ + + ' EVALUATION OF SUBROUTINE FCN DURING THESE COMPUTATIONS '/ + + ' BEFORE THE REGRESSION PROCEDURE CAN CONTINUE.') + 1300 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN. THIS OCCURRED DURING'/ + + ' THE DERIVATIVE CHECKING PROCEDURE, INDICATING THAT '/ + + ' CHANGES IN THE INITIAL ESTIMATES OF BETA(K), K=1,NP, AS '/ + + ' SMALL AS MAX[BETA(K),1/SCLB(K)]*10**(-NETA/2), AND/OR '/ + + ' OF DELTA(I,J), I=1,N AND J=1,M, AS SMALL AS '/ + + ' MAX[DELTA(I,J),1/SCLD(I,J)]*10**(-NETA/2), WHERE NETA '/ + + ' IS DEFINED TO BE THE NUMBER OF RELIABLE DIGITS IN '/ + + ' PREDICTED VALUES (F) RETURNED FROM SUBROUTINE FCN, '/ + + ' PREVENT SUBROUTINE FCN FROM BEING PROPERLY EVALUATED. '/ + + ' THE INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER '/ + + ' EVALUATION OF SUBROUTINE FCN DURING THESE COMPUTATIONS '/ + + ' BEFORE THE REGRESSION PROCEDURE CAN CONTINUE.') + 1400 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN WHEN INVOKED FOR '/ + + ' DERIVATIVE EVALUATIONS USING THE INITIAL ESTIMATES OF '/ + + ' BETA AND DELTA SUPPLIED BY THE USER. THE INITIAL '/ + + ' ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER EVALUATION '/ + + ' OF SUBROUTINE FCN BEFORE THE REGRESSION PROCEDURE CAN '/ + + ' CONTINUE.') + END +*DODPER + SUBROUTINE DODPER + + (INFO,LUNERR,SHORT, + + N,M,NP,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN, + + FJACB,FJACD, + + DIFF,MSGB,ISODR,MSGD, + + XPLUSD,NROW,NETA,NTOL) +C***BEGIN PROLOGUE DODPER +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DODPE1,DODPE2,DODPE3,DODPHD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CONTROLLING ROUTINE FOR PRINTING ERROR REPORTS +C***END PROLOGUE DODPER + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE,LIWKMN,LUNERR,LWKMN, + + M,N,NETA,NP,NQ,NROW,NTOL + LOGICAL + + ISODR,SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + + MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...LOCAL SCALARS + INTEGER + + D1,D2,D3,D4,D5,UNIT + LOGICAL + + HEAD + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODPE1,DODPE2,DODPE3,DODPHD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D1: THE 1ST DIGIT (FROM THE LEFT) OF INFO. +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C D4: THE 4TH DIGIT (FROM THE LEFT) OF INFO. +C D5: THE 5TH DIGIT (FROM THE LEFT) OF INFO. +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=.TRUE.) OR NOT (HEAD=.FALSE.). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C FINITE DIFFERENCE AND THE USER SUPPLIED DERIVATIVES. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C UNIT: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C XPLUSD: THE VALUES X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODPER + + +C SET LOGICAL UNIT NUMBER FOR ERROR REPORT + + IF (LUNERR.EQ.0) THEN + RETURN + ELSE IF (LUNERR.LT.0) THEN + UNIT = 6 + ELSE + UNIT = LUNERR + END IF + +C PRINT HEADING + + HEAD = .TRUE. + CALL DODPHD(HEAD,UNIT) + +C EXTRACT INDIVIDUAL DIGITS FROM VARIABLE INFO + + D1 = MOD(INFO,100000)/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C PRINT APPROPRIATE ERROR MESSAGES FOR ODRPACK INVOKED STOP + + IF (D1.GE.1 .AND. D1.LE.3) THEN + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN +C PROBLEM SPECIFICATION PARAMETERS +C DIMENSION SPECIFICATION PARAMETERS +C NUMBER OF GOOD DIGITS IN X +C WEIGHTS + + CALL DODPE1(UNIT,D1,D2,D3,D4,D5, + + N,M,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN) + + ELSE IF ((D1.EQ.4) .OR. (MSGB(1).GE.0)) THEN + +C PRINT APPROPRIATE MESSAGES FOR DERIVATIVE CHECKING + + CALL DODPE2(UNIT, + + N,M,NP,NQ, + + FJACB,FJACD, + + DIFF,MSGB(1),MSGB(2),ISODR,MSGD(1),MSGD(2), + + XPLUSD,NROW,NETA,NTOL) + + ELSE IF (D1.EQ.5) THEN + +C PRINT APPROPRIATE ERROR MESSAGE FOR USER INVOKED STOP FROM FCN + + CALL DODPE3(UNIT,D2,D3) + + END IF + +C PRINT CORRECT FORM OF CALL STATEMENT + + IF ((D1.GE.1 .AND. D1.LE.3) .OR. + + (D1.EQ.4 .AND. (D2.EQ.2 .OR. D3.EQ.2)) .OR. + + (D1.EQ.5)) THEN + IF (SHORT) THEN + WRITE (UNIT,1100) + ELSE + WRITE (UNIT,1200) + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1100 FORMAT + + (//' THE CORRECT FORM OF THE CALL STATEMENT IS '// + + ' CALL DODR'/ + + ' + (FCN,'/ + + ' + N,M,NP,NQ,'/ + + ' + BETA,'/ + + ' + Y,LDY,X,LDX,'/ + + ' + WE,LDWE,LD2WE,WD,LDWD,LD2WD,'/ + + ' + JOB,'/ + + ' + IPRINT,LUNERR,LUNRPT,'/ + + ' + WORK,LWORK,IWORK,LIWORK,'/ + + ' + INFO)') + 1200 FORMAT + + (//' THE CORRECT FORM OF THE CALL STATEMENT IS '// + + ' CALL DODRC'/ + + ' + (FCN,'/ + + ' + N,M,NP,NQ,'/ + + ' + BETA,'/ + + ' + Y,LDY,X,LDX,'/ + + ' + WE,LDWE,LD2WE,WD,LDWD,LD2WD,'/ + + ' + IFIXB,IFIXX,LDIFX,'/ + + ' + JOB,NDIGIT,TAUFAC,'/ + + ' + SSTOL,PARTOL,MAXIT,'/ + + ' + IPRINT,LUNERR,LUNRPT,'/ + + ' + STPB,STPD,LDSTPD,'/ + + ' + SCLB,SCLD,LDSCLD,'/ + + ' + WORK,LWORK,IWORK,LIWORK,'/ + + ' + INFO)') + + END +*DODPHD + SUBROUTINE DODPHD + + (HEAD,UNIT) +C***BEGIN PROLOGUE DODPHD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ODRPACK HEADING +C***END PROLOGUE DODPHD + +C...SCALAR ARGUMENTS + INTEGER + + UNIT + LOGICAL + + HEAD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=.TRUE.) OR NOT (HEAD=.FALSE.). +C UNIT: THE LOGICAL UNIT NUMBER TO WHICH THE HEADING IS WRITTEN. + + +C***FIRST EXECUTABLE STATEMENT DODPHD + + + IF (HEAD) THEN + WRITE(UNIT,1000) + HEAD = .FALSE. + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT ( + + ' ******************************************************* '/ + + ' * ODRPACK VERSION 2.01 OF 06-19-92 (DOUBLE PRECISION) * '/ + + ' ******************************************************* '/) + END +*DODSTP + SUBROUTINE DODSTP + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,KPVT, + + S,T,PHI,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODSTP +C***REFER TO DODR,DODRC +C***ROUTINES CALLED IDAMAX,DCHEX,DESUBI,DFCTR,DNRM2,DQRDC,DQRSL,DROT, +C DROTG,DSOLVE,DTRCO,DTRSL,DVEVTR,DWGHT,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE LOCALLY CONSTRAINED STEPS S AND T, AND PHI(ALPHA) +C***END PROLOGUE DODSTP + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA,EPSFCN,PHI,RCOND + INTEGER + + IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + + T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + + WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M),WRK(LWRK) + INTEGER + + KPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + CO,ONE,SI,TEMP,ZERO + INTEGER + + I,IMAX,INF,IPVT,J,K,K1,K2,KP,L + LOGICAL + + ELIM,FORVCV + +C...LOCAL ARRAYS + DOUBLE PRECISION + + DUM(2) + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DNRM2 + INTEGER + + IDAMAX + EXTERNAL + + DNRM2,IDAMAX + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCHEX,DESUBI,DFCTR,DQRDC,DQRSL,DROT,DROTG, + + DSOLVE,DTRCO,DTRSL,DVEVTR,DWGHT,DZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C CO: THE COSINE FROM THE PLANE ROTATION. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DUM: A DUMMY ARRAY. +C ELIM: THE VARIABLE DESIGNATING WHETHER COLUMNS OF THE JACOBIAN +C WRT BETA HAVE BEEN ELIMINATED (ELIM=TRUE) OR NOT +C (ELIM=FALSE). +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER THIS SUBROUTINE WAS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IMAX: THE INDEX OF THE ELEMENT OF U HAVING THE LARGEST ABSOLUTE +C VALUE. +C INF: THE RETURN CODE FROM LINPACK ROUTINES. +C IPVT: THE VARIABLE DESIGNATING WHETHER PIVOTING IS TO BE DONE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO A NUMERICAL ERROR WITHIN SUBROUTINE DODSTP. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C K1: AN INDEXING VARIABLE. +C K2: AN INDEXING VARIABLE. +C KP: THE RANK OF THE JACOBIAN WRT BETA. +C KPVT: THE PIVOT VECTOR. +C L: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C OMEGA: THE ARRAY DEFINED S.T. +C OMEGA*TRANS(OMEGA) = INV(I+FJACD*INV(E)*TRANS(FJACD)) +C = (I-FJACD*INV(P)*TRANS(FJACD)) +C WHERE E = D**2 + ALPHA*TT**2 +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C ONE: THE VALUE 1.0D0. +C PHI: THE DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION NUMBER OF TFJACB. +C S: THE STEP FOR BETA. +C SI: THE SINE FROM THE PLANE ROTATION. +C SS: THE SCALING VALUES FOR THE UNFIXED BETAS. +C T: THE STEP FOR DELTA. +C TEMP: A TEMPORARY STORAGE LOCATION. +C TFJACB: THE ARRAY OMEGA*FJACB. +C TT: THE SCALING VALUES FOR DELTA. +C U: THE APPROXIMATE NULL VECTOR FOR TFJACB. +C WD: THE (SQUARED) DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODSTP + + +C COMPUTE LOOP PARAMETERS WHICH DEPEND ON WEIGHT STRUCTURE + +C SET UP KPVT IF ALPHA = 0 + + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + DO 10 K=1,NP + KPVT(K) = K + 10 CONTINUE + ELSE + IF (NPP.GE.1) THEN + KP = NPP-IRANK + ELSE + KP = NPP + END IF + END IF + + IF (ISODR) THEN + +C T = WD * DELTA = D*G2 + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,T,N) + + DO 300 I=1,N + +C COMPUTE WRK4, SUCH THAT +C TRANS(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE OMEGA, SUCH THAT +C TRANS(OMEGA)*OMEGA = I+FJACD*INV(E)*TRANS(FJACD) +C INV(TRANS(OMEGA)*OMEGA) = I-FJACD*INV(P)*TRANS(FJACD) + CALL DVEVTR(M,NQ,I, + + FJACD,N,M, WRK4,M, WRK1,N,NQ, OMEGA,NQ, WRK5) + DO 110 L=1,NQ + OMEGA(L,L) = ONE + OMEGA(L,L) + 110 CONTINUE + CALL DFCTR(.FALSE.,OMEGA,NQ,NQ,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE WRK1 = TRANS(FJACD)*(I-FJACD*INV(P)*TRANS(JFACD)) +C = TRANS(FJACD)*INV(TRANS(OMEGA)*OMEGA) + DO 130 J=1,M + DO 120 L=1,NQ + WRK1(I,L,J) = FJACD(I,J,L) + 120 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1,J),N,4) + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1,J),N,2) + 130 CONTINUE + +C COMPUTE WRK5 = INV(E)*D*G2 + DO 140 J=1,M + WRK5(J) = T(I,J) + 140 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,1,4) + CALL DSOLVE(M,WRK4,M,WRK5,1,2) + +C COMPUTE TFJACB = INV(TRANS(OMEGA))*FJACB + DO 170 K=1,KP + DO 150 L=1,NQ + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + 150 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,TFJACB(I,1,K),N,4) + DO 160 L=1,NQ + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 160 CONTINUE + 170 CONTINUE + +C COMPUTE WRK2 = (V*INV(E)*D**2*G2 - G1) + DO 190 L=1,NQ + WRK2(I,L) = ZERO + DO 180 J=1,M + WRK2(I,L) = WRK2(I,L) + FJACD(I,J,L)*WRK5(J) + 180 CONTINUE + WRK2(I,L) = WRK2(I,L) - F(I,L) + 190 CONTINUE + +C COMPUTE WRK2 = INV(TRANS(OMEGA))*(V*INV(E)*D**2*G2 - G1) + CALL DSOLVE(NQ,OMEGA,NQ,WRK2(I,1),N,4) + 300 CONTINUE + + ELSE + DO 360 I=1,N + DO 350 L=1,NQ + DO 340 K=1,KP + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 340 CONTINUE + WRK2(I,L) = -F(I,L) + 350 CONTINUE + 360 CONTINUE + END IF + +C COMPUTE S + +C DO QR FACTORIZATION (WITH COLUMN PIVOTING OF TRJACB IF ALPHA = 0) + + IF (ALPHA.EQ.ZERO) THEN + IPVT = 1 + DO 410 K=1,NP + KPVT(K) = 0 + 410 CONTINUE + ELSE + IPVT = 0 + END IF + + CALL DQRDC(TFJACB,N*NQ,N*NQ,KP,QRAUX,KPVT,WRK3,IPVT) + CALL DQRSL(TFJACB,N*NQ,N*NQ,KP, + + QRAUX,WRK2,DUM,WRK2,DUM,DUM,DUM,1000,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C ELIMINATE ALPHA PART USING GIVENS ROTATIONS + + IF (ALPHA.NE.ZERO) THEN + CALL DZERO(NPP,1,S,NPP) + DO 430 K1=1,KP + CALL DZERO(KP,1,WRK3,KP) + WRK3(K1) = SQRT(ALPHA) + DO 420 K2=K1,KP + CALL DROTG(TFJACB(K2,1,K2),WRK3(K2),CO,SI) + IF (KP-K2.GE.1) THEN + CALL DROT(KP-K2,TFJACB(K2,1,K2+1),N*NQ, + + WRK3(K2+1),1,CO,SI) + END IF + TEMP = CO*WRK2(K2,1) + SI*S(KPVT(K1)) + S(KPVT(K1)) = -SI*WRK2(K2,1) + CO*S(KPVT(K1)) + WRK2(K2,1) = TEMP + 420 CONTINUE + 430 CONTINUE + END IF + +C COMPUTE SOLUTION - ELIMINATE VARIABLES IF NECESSARY + + IF (NPP.GE.1) THEN + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + +C ESTIMATE RCOND - U WILL CONTAIN APPROX NULL VECTOR + + 440 CALL DTRCO(TFJACB,N*NQ,KP,RCOND,U,1) + IF (RCOND.LE.EPSFCN) THEN + ELIM = .TRUE. + IMAX = IDAMAX(KP,U,1) + +C IMAX IS THE COLUMN TO REMOVE - USE DCHEX AND FIX KPVT + + IF (IMAX.NE.KP) THEN + CALL DCHEX(TFJACB,N*NQ,KP,IMAX,KP,WRK2,N*NQ,1, + + QRAUX,WRK3,2) + K = KPVT(IMAX) + DO 450 I=IMAX,KP-1 + KPVT(I) = KPVT(I+1) + 450 CONTINUE + KPVT(KP) = K + END IF + KP = KP-1 + ELSE + ELIM = .FALSE. + END IF + IF (ELIM .AND. KP.GE.1) THEN + GO TO 440 + ELSE + IRANK = NPP-KP + END IF + END IF + END IF + + IF (FORVCV) RETURN + +C BACKSOLVE AND UNSCRAMBLE + + IF (NPP.GE.1) THEN + DO 510 I=KP+1,NPP + WRK2(I,1) = ZERO + 510 CONTINUE + IF (KP.GE.1) THEN + CALL DTRSL(TFJACB,N*NQ,KP,WRK2,01,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + END IF + DO 520 I=1,NPP + IF (SS(1).GT.ZERO) THEN + S(KPVT(I)) = WRK2(I,1)/SS(KPVT(I)) + ELSE + S(KPVT(I)) = WRK2(I,1)/ABS(SS(1)) + END IF + 520 CONTINUE + END IF + + IF (ISODR) THEN + +C NOTE: T AND WRK1 HAVE BEEN INITIALIZED ABOVE, +C WHERE T = WD * DELTA = D*G2 +C WRK1 = TRANS(FJACD)*(I-FJACD*INV(P)*TRANS(JFACD)) + + DO 670 I=1,N + +C COMPUTE WRK4, SUCH THAT +C TRANS(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE WRK5 = INV(E)*D*G2 + DO 610 J=1,M + WRK5(J) = T(I,J) + 610 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,1,4) + CALL DSOLVE(M,WRK4,M,WRK5,1,2) + + DO 640 L=1,NQ + WRK2(I,L) = F(I,L) + DO 620 K=1,NPP + WRK2(I,L) = WRK2(I,L) + FJACB(I,K,L)*S(K) + 620 CONTINUE + DO 630 J=1,M + WRK2(I,L) = WRK2(I,L) - FJACD(I,J,L)*WRK5(J) + 630 CONTINUE + 640 CONTINUE + + DO 660 J=1,M + WRK5(J) = ZERO + DO 650 L=1,NQ + WRK5(J) = WRK5(J) + WRK1(I,L,J)*WRK2(I,L) + 650 CONTINUE + T(I,J) = -(WRK5(J) + T(I,J)) + 660 CONTINUE + CALL DSOLVE(M,WRK4,M,T(I,1),N,4) + CALL DSOLVE(M,WRK4,M,T(I,1),N,2) + 670 CONTINUE + + END IF + +C COMPUTE PHI(ALPHA) FROM SCALED S AND T + + CALL DWGHT(NPP,1,SS,NPP,1,S,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,T,N,WRK(NPP+1),N) + PHI = DNRM2(NPP+N*M,WRK,1) + ELSE + PHI = DNRM2(NPP,WRK,1) + END IF + + RETURN + END +*DODVCV + SUBROUTINE DODVCV + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + + EPSFCN,ISODR, + + VCV,SD, + + WRK6,OMEGA,U,QRAUX,JPVT, + + S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODVCV +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPODI,DODSTP +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE COVARIANCE MATRIX OF ESTIMATED PARAMETERS +C***END PROLOGUE DODVCV + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSFCN,RCOND,RSS,RVAR + INTEGER + + IDF,IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ), + + FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SD(NP),SS(NP),SSF(NP), + + T(N,M),TT(LDTT,M),U(NP),VCV(NP,NP),WD(LDWD,LD2WD,M), + + WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M), + + WRK6(N*NQ,NP),WRK(LWRK) + INTEGER + + IFIXB(NP),JPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + I,IUNFIX,J,JUNFIX,KP,L + LOGICAL + + FORVCV + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPODI,DODSTP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SQRT + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER SUBROUTINE DODSTP IS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMAX: THE INDEX OF THE ELEMENT OF U HAVING THE LARGEST ABSOLUTE +C VALUE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO A NUMERICAL ERROR WITHIN SUBROUTINE DODSTP. +C IUNFIX: THE INDEX OF THE NEXT UNFIXED PARAMETER. +C J: AN INDEXING VARIABLE. +C JPVT: THE PIVOT VECTOR. +C JUNFIX: THE INDEX OF THE NEXT UNFIXED PARAMETER. +C KP: THE RANK OF THE JACOBIAN WRT BETA. +C L: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OMEGA: THE ARRAY DEFINED S.T. +C OMEGA*TRANS(OMEGA) = INV(I+FJACD*INV(E)*TRANS(FJACD)) +C = (I-FJACD*INV(P)*TRANS(FJACD)) +C WHERE E = D**2 + ALPHA*TT**2 +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C RSS: THE RESIDUAL SUM OF SQUARES. +C RVAR: THE RESIDUAL VARIANCE. +C S: THE STEP FOR BETA. +C SD: THE STANDARD DEVIATIONS OF THE ESTIMATED BETAS. +C SS: THE SCALING VALUES FOR THE UNFIXED BETAS. +C SSF: THE SCALING VALUES USED FOR BETA. +C T: THE STEP FOR DELTA. +C TEMP: A TEMPORARY STORAGE LOCATION +C TT: THE SCALING VALUES FOR DELTA. +C U: THE APPROXIMATE NULL VECTOR FOR FJACB. +C VCV: THE COVARIANCE MATRIX OF THE ESTIMATED BETAS. +C WD: THE DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C WRK6: A WORK ARRAY OF (N*NQ BY P) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODVCV + + + FORVCV = .TRUE. + ISTOPC = 0 + + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ZERO,EPSFCN,ISODR, + + WRK6,OMEGA,U,QRAUX,JPVT, + + S,T,TEMP,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + KP = NPP - IRANK + CALL DPODI (WRK6,N*NQ,KP,WRK3,1) + + IDF = 0 + DO 150 I=1,N + DO 120 J=1,NPP + DO 110 L=1,NQ + IF (FJACB(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 110 CONTINUE + 120 CONTINUE + IF (ISODR) THEN + DO 140 J=1,M + DO 130 L=1,NQ + IF (FJACD(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 130 CONTINUE + 140 CONTINUE + END IF + 150 CONTINUE + + IF (IDF.GT.KP) THEN + IDF = IDF - KP + RVAR = RSS/IDF + ELSE + IDF = 0 + RVAR = RSS + END IF + +C STORE VARIANCES IN SD, RESTORING ORIGINAL ORDER + + DO 200 I=1,NP + SD(I) = ZERO + 200 CONTINUE + DO 210 I=1,KP + SD(JPVT(I)) = WRK6(I,I) + 210 CONTINUE + IF (NP.GT.NPP) THEN + JUNFIX = NPP + DO 220 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + SD(J) = ZERO + ELSE + SD(J) = SD(JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 220 CONTINUE + END IF + +C STORE COVARIANCE MATRIX IN VCV, RESTORING ORIGINAL ORDER + + DO 310 I=1,NP + DO 300 J=1,I + VCV(I,J) = ZERO + 300 CONTINUE + 310 CONTINUE + DO 330 I=1,KP + DO 320 J=I+1,KP + IF (JPVT(I).GT.JPVT(J)) THEN + VCV(JPVT(I),JPVT(J))=WRK6(I,J) + ELSE + VCV(JPVT(J),JPVT(I))=WRK6(I,J) + END IF + 320 CONTINUE + 330 CONTINUE + IF (NP.GT.NPP) THEN + IUNFIX = NPP + DO 360 I=NP,1,-1 + IF (IFIXB(I).EQ.0) THEN + DO 340 J=I,1,-1 + VCV(I,J) = ZERO + 340 CONTINUE + ELSE + JUNFIX = NPP + DO 350 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + VCV(I,J) = ZERO + ELSE + VCV(I,J) = VCV(IUNFIX,JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 350 CONTINUE + IUNFIX = IUNFIX - 1 + END IF + 360 CONTINUE + END IF + + DO 380 I=1,NP + VCV(I,I) = SD(I) + SD(I) = SQRT(RVAR*SD(I)) + DO 370 J=1,I + VCV(J,I) = VCV(I,J) + 370 CONTINUE + 380 CONTINUE + +C UNSCALE STANDARD ERRORS AND COVARIANCE MATRIX + DO 410 I=1,NP + IF (SSF(1).GT.ZERO) THEN + SD(I) = SD(I)/SSF(I) + ELSE + SD(I) = SD(I)/ABS(SSF(1)) + END IF + DO 400 J=1,NP + IF (SSF(1).GT.ZERO) THEN + VCV(I,J) = VCV(I,J)/(SSF(I)*SSF(J)) + ELSE + VCV(I,J) = VCV(I,J)/(SSF(1)*SSF(1)) + END IF + 400 CONTINUE + 410 CONTINUE + + RETURN + END +*DPACK + SUBROUTINE DPACK + + (N2,N1,V1,V2,IFIX) +C***BEGIN PROLOGUE DPACK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DCOPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT THE UNFIXED ELEMENTS OF V2 AND RETURN THEM IN V1 +C***END PROLOGUE DPACK + +C...SCALAR ARGUMENTS + INTEGER + + N1,N2 + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + V1(N2),V2(N2) + INTEGER + + IFIX(N2) + +C...LOCAL SCALARS + INTEGER + + I + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF V2 ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C N1: THE NUMBER OF ITEMS IN V1. +C N2: THE NUMBER OF ITEMS IN V2. +C V1: THE VECTOR OF THE UNFIXED ITEMS FROM V2. +C V2: THE VECTOR OF THE FIXED AND UNFIXED ITEMS FROM WHICH THE +C UNFIXED ELEMENTS ARE TO BE EXTRACTED. + + +C***FIRST EXECUTABLE STATEMENT DPACK + + + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I=1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1+1 + V1(N1) = V2(I) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY(N2,V2,1,V1,1) + END IF + + RETURN + END +*DPPNML + DOUBLE PRECISION FUNCTION DPPNML + + (P) +C***BEGIN PROLOGUE DPPNML +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***AUTHOR FILLIBEN, JAMES J., +C STATISTICAL ENGINEERING DIVISION +C NATIONAL BUREAU OF STANDARDS +C WASHINGTON, D. C. 20234 +C (ORIGINAL VERSION--JUNE 1972. +C (UPDATED --SEPTEMBER 1975, +C NOVEMBER 1975, AND +C OCTOBER 1976. +C***PURPOSE COMPUTE THE PERCENT POINT FUNCTION VALUE FOR THE +C NORMAL (GAUSSIAN) DISTRIBUTION WITH MEAN 0 AND STANDARD +C DEVIATION 1, AND WITH PROBABILITY DENSITY FUNCTION +C F(X) = (1/SQRT(2*PI))*EXP(-X*X/2). +C (ADAPTED FROM DATAPAC SUBROUTINE TPPF, WITH MODIFICATIONS +C TO FACILITATE CONVERSION TO DOUBLE PRECISION AUTOMATICALLY) +C***DESCRIPTION +C --THE CODING AS PRESENTED BELOW IS ESSENTIALLY +C IDENTICAL TO THAT PRESENTED BY ODEH AND EVANS +C AS ALGORTIHM 70 OF APPLIED STATISTICS. +C --AS POINTED OUT BY ODEH AND EVANS IN APPLIED +C STATISTICS, THEIR ALGORITHM REPRESENTES A +C SUBSTANTIAL IMPROVEMENT OVER THE PREVIOUSLY EMPLOYED +C HASTINGS APPROXIMATION FOR THE NORMAL PERCENT POINT +C FUNCTION, WITH ACCURACY IMPROVING FROM 4.5*(10**-4) +C TO 1.5*(10**-8). +C***REFERENCES ODEH AND EVANS, THE PERCENTAGE POINTS OF THE NORMAL +C DISTRIBUTION, ALGORTIHM 70, APPLIED STATISTICS, 1974, +C PAGES 96-97. +C EVANS, ALGORITHMS FOR MINIMAL DEGREE POLYNOMIAL AND +C RATIONAL APPROXIMATION, M. SC. THESIS, 1972, +C UNIVERSITY OF VICTORIA, B. C., CANADA. +C HASTINGS, APPROXIMATIONS FOR DIGITAL COMPUTERS, 1955, +C PAGES 113, 191, 192. +C NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS +C SERIES 55, 1964, PAGE 933, FORMULA 26.2.23. +C FILLIBEN, SIMPLE AND ROBUST LINEAR ESTIMATION OF THE +C LOCATION PARAMETER OF A SYMMETRIC DISTRIBUTION +C (UNPUBLISHED PH.D. DISSERTATION, PRINCETON +C UNIVERSITY), 1969, PAGES 21-44, 229-231. +C FILLIBEN, "THE PERCENT POINT FUNCTION", +C (UNPUBLISHED MANUSCRIPT), 1970, PAGES 28-31. +C JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE DISTRIBUTIONS, +C VOLUME 1, 1970, PAGES 40-111. +C KELLEY STATISTICAL TABLES, 1948. +C OWEN, HANDBOOK OF STATISTICAL TABLES, 1962, PAGES 3-16. +C PEARSON AND HARTLEY, BIOMETRIKA TABLES FOR +C STATISTICIANS, VOLUME 1, 1954, PAGES 104-113. +C***END PROLOGUE DPPNML + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + P + +C...LOCAL SCALARS + DOUBLE PRECISION + + ADEN,ANUM,HALF,ONE,P0,P1,P2,P3,P4,Q0,Q1,Q2,Q3,Q4,R,T,TWO,ZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + LOG,SQRT + +C...DATA STATEMENTS + DATA + + P0,P1,P2,P3,P4 + + /-0.322232431088D0,-1.0D0,-0.342242088547D0, + + -0.204231210245D-1,-0.453642210148D-4/ + DATA + + Q0,Q1,Q2,Q3,Q4 + + /0.993484626060D-1,0.588581570495D0, + + 0.531103462366D0,0.103537752850D0,0.38560700634D-2/ + DATA + + ZERO,HALF,ONE,TWO + + /0.0D0,0.5D0,1.0D0,2.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ADEN: A VALUE USED IN THE APPROXIMATION. +C ANUM: A VALUE USED IN THE APPROXIMATION. +C HALF: THE VALUE 0.5D0. +C ONE: THE VALUE 1.0D0. +C P: THE PROBABILITY AT WHICH THE PERCENT POINT IS TO BE +C EVALUATED. P MUST BE BETWEEN 0.0D0 AND 1.0D0, EXCLUSIVE. +C P0: A PARAMETER USED IN THE APPROXIMATION. +C P1: A PARAMETER USED IN THE APPROXIMATION. +C P2: A PARAMETER USED IN THE APPROXIMATION. +C P3: A PARAMETER USED IN THE APPROXIMATION. +C P4: A PARAMETER USED IN THE APPROXIMATION. +C Q0: A PARAMETER USED IN THE APPROXIMATION. +C Q1: A PARAMETER USED IN THE APPROXIMATION. +C Q2: A PARAMETER USED IN THE APPROXIMATION. +C Q3: A PARAMETER USED IN THE APPROXIMATION. +C Q4: A PARAMETER USED IN THE APPROXIMATION. +C R: THE PROBABILITY AT WHICH THE PERCENT POINT IS EVALUATED. +C T: A VALUE USED IN THE APPROXIMATION. +C TWO: THE VALUE 2.0D0. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DPPT + + + IF (P.EQ.HALF) THEN + DPPNML = ZERO + + ELSE + R = P + IF (P.GT.HALF) R = ONE - R + T = SQRT(-TWO*LOG(R)) + ANUM = ((((T*P4+P3)*T+P2)*T+P1)*T+P0) + ADEN = ((((T*Q4+Q3)*T+Q2)*T+Q1)*T+Q0) + DPPNML = T + (ANUM/ADEN) + + IF (P.LT.HALF) DPPNML = -DPPNML + END IF + + RETURN + + END +*DPPT + DOUBLE PRECISION FUNCTION DPPT + + (P, IDF) +C***BEGIN PROLOGUE DPPT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPPNML +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***AUTHOR FILLIBEN, JAMES J., +C STATISTICAL ENGINEERING DIVISION +C NATIONAL BUREAU OF STANDARDS +C WASHINGTON, D. C. 20234 +C (ORIGINAL VERSION--OCTOBER 1975.) +C (UPDATED --NOVEMBER 1975.) +C***PURPOSE COMPUTE THE PERCENT POINT FUNCTION VALUE FOR THE +C STUDENT'S T DISTRIBUTION WITH IDF DEGREES OF FREEDOM. +C (ADAPTED FROM DATAPAC SUBROUTINE TPPF, WITH MODIFICATIONS +C TO FACILITATE CONVERSION TO DOUBLE PRECISION AUTOMATICALLY) +C***DESCRIPTION +C --FOR IDF = 1 AND IDF = 2, THE PERCENT POINT FUNCTION +C FOR THE T DISTRIBUTION EXISTS IN SIMPLE CLOSED FORM +C AND SO THE COMPUTED PERCENT POINTS ARE EXACT. +C --FOR IDF BETWEEN 3 AND 6, INCLUSIVELY, THE APPROXIMATION +C IS AUGMENTED BY 3 ITERATIONS OF NEWTON'S METHOD TO +C IMPROVE THE ACCURACY, ESPECIALLY FOR P NEAR 0 OR 1. +C***REFERENCES NATIONAL BUREAU OF STANDARDS APPLIED MATHMATICS +C SERIES 55, 1964, PAGE 949, FORMULA 26.7.5. +C JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE DISTRIBUTIONS, +C VOLUME 2, 1970, PAGE 102, FORMULA 11. +C FEDERIGHI, "EXTENDED TABLES OF THE PERCENTAGE POINTS +C OF STUDENT"S T DISTRIBUTION, JOURNAL OF THE AMERICAN +C STATISTICAL ASSOCIATION, 1969, PAGES 683-688. +C HASTINGS AND PEACOCK, STATISTICAL DISTRIBUTIONS, A +C HANDBOOK FOR STUDENTS AND PRACTITIONERS, 1975, +C PAGES 120-123. +C***END PROLOGUE DPPT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + P + INTEGER + + IDF + +C...LOCAL SCALARS + DOUBLE PRECISION + + ARG,B21,B31,B32,B33,B34,B41,B42,B43,B44,B45, + + B51,B52,B53,B54,B55,B56,C,CON,D1,D3,D5,D7,D9,DF,EIGHT,FIFTN, + + HALF,ONE,PI,PPFN,S,TERM1,TERM2,TERM3,TERM4,TERM5,THREE,TWO, + + Z,ZERO + INTEGER + + IPASS,MAXIT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DPPNML + EXTERNAL + + DPPNML + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ATAN,COS,SIN,SQRT + +C...DATA STATEMENTS + DATA + + B21 + + /4.0D0/ + DATA + + B31, B32, B33, B34 + + /96.0D0,5.0D0,16.0D0,3.0D0/ + DATA + + B41, B42, B43, B44, B45 + + /384.0D0,3.0D0,19.0D0,17.0D0,-15.0D0/ + DATA + + B51,B52,B53,B54,B55,B56 + + /9216.0D0,79.0D0,776.0D0,1482.0D0,-1920.0D0,-945.0D0/ + DATA + + ZERO,HALF,ONE,TWO,THREE,EIGHT,FIFTN + + /0.0D0,0.5D0,1.0D0,2.0D0,3.0D0,8.0D0,15.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ARG: A VALUE USED IN THE APPROXIMATION. +C B21: A PARAMETER USED IN THE APPROXIMATION. +C B31: A PARAMETER USED IN THE APPROXIMATION. +C B32: A PARAMETER USED IN THE APPROXIMATION. +C B33: A PARAMETER USED IN THE APPROXIMATION. +C B34: A PARAMETER USED IN THE APPROXIMATION. +C B41: A PARAMETER USED IN THE APPROXIMATION. +C B42: A PARAMETER USED IN THE APPROXIMATION. +C B43: A PARAMETER USED IN THE APPROXIMATION. +C B44: A PARAMETER USED IN THE APPROXIMATION. +C B45: A PARAMETER USED IN THE APPROXIMATION. +C B51: A PARAMETER USED IN THE APPROXIMATION. +C B52: A PARAMETER USED IN THE APPROXIMATION. +C B53: A PARAMETER USED IN THE APPROXIMATION. +C B54: A PARAMETER USED IN THE APPROXIMATION. +C B55: A PARAMETER USED IN THE APPROXIMATION. +C B56: A PARAMETER USED IN THE APPROXIMATION. +C C: A VALUE USED IN THE APPROXIMATION. +C CON: A VALUE USED IN THE APPROXIMATION. +C DF: THE DEGREES OF FREEDOM. +C D1: A VALUE USED IN THE APPROXIMATION. +C D3: A VALUE USED IN THE APPROXIMATION. +C D5: A VALUE USED IN THE APPROXIMATION. +C D7: A VALUE USED IN THE APPROXIMATION. +C D9: A VALUE USED IN THE APPROXIMATION. +C EIGHT: THE VALUE 8.0D0. +C FIFTN: THE VALUE 15.0D0. +C HALF: THE VALUE 0.5D0. +C IDF: THE (POSITIVE INTEGER) DEGREES OF FREEDOM. +C IPASS: A VALUE USED IN THE APPROXIMATION. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE APPROX. +C ONE: THE VALUE 1.0D0. +C P: THE PROBABILITY AT WHICH THE PERCENT POINT IS TO BE +C EVALUATED. P MUST LIE BETWEEN 0.0DO AND 1.0D0, EXCLUSIVE. +C PI: THE VALUE OF PI. +C PPFN: THE NORMAL PERCENT POINT VALUE. +C S: A VALUE USED IN THE APPROXIMATION. +C TERM1: A VALUE USED IN THE APPROXIMATION. +C TERM2: A VALUE USED IN THE APPROXIMATION. +C TERM3: A VALUE USED IN THE APPROXIMATION. +C TERM4: A VALUE USED IN THE APPROXIMATION. +C TERM5: A VALUE USED IN THE APPROXIMATION. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C Z: A VALUE USED IN THE APPROXIMATION. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DPPT + + + PI = 3.141592653589793238462643383279D0 + DF = IDF + MAXIT = 5 + + IF (IDF.LE.0) THEN + +C TREAT THE IDF < 1 CASE + DPPT = ZERO + + ELSE IF (IDF.EQ.1) THEN + +C TREAT THE IDF = 1 (CAUCHY) CASE + ARG = PI*P + DPPT = -COS(ARG)/SIN(ARG) + + ELSE IF (IDF.EQ.2) THEN + +C TREAT THE IDF = 2 CASE + TERM1 = SQRT(TWO)/TWO + TERM2 = TWO*P - ONE + TERM3 = SQRT(P*(ONE-P)) + DPPT = TERM1*TERM2/TERM3 + + ELSE IF (IDF.GE.3) THEN + +C TREAT THE IDF GREATER THAN OR EQUAL TO 3 CASE + PPFN = DPPNML(P) + D1 = PPFN + D3 = PPFN**3 + D5 = PPFN**5 + D7 = PPFN**7 + D9 = PPFN**9 + TERM1 = D1 + TERM2 = (ONE/B21)*(D3+D1)/DF + TERM3 = (ONE/B31)*(B32*D5+B33*D3+B34*D1)/(DF**2) + TERM4 = (ONE/B41)*(B42*D7+B43*D5+B44*D3+B45*D1)/(DF**3) + TERM5 = (ONE/B51)*(B52*D9+B53*D7+B54*D5+B55*D3+B56*D1)/(DF**4) + DPPT = TERM1 + TERM2 + TERM3 + TERM4 + TERM5 + + IF (IDF.EQ.3) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 3 CASE + CON = PI*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 70 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+S*C-CON)/(TWO*C**2) + 70 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.4) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 4 CASE + CON = TWO*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 90 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2)*S-CON)/((ONE+HALF)*C**3) + 90 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.5) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 5 CASE + + CON = PI*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 110 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+(C+(TWO/THREE)*C**3)*S-CON)/ + + ((EIGHT/THREE)*C**4) + 110 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.6) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 6 CASE + CON = TWO*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 130 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2 + (THREE/EIGHT)*C**4)*S-CON)/ + + ((FIFTN/EIGHT)*C**5) + 130 CONTINUE + DPPT = SQRT(DF)*S/C + END IF + END IF + + RETURN + + END +*DPVB + SUBROUTINE DPVB + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVB, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DPVB +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE THE NROW-TH FUNCTION VALUE USING BETA(J) + STP +C***END PROLOGUE DPVB + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PVB,STP + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAJ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAJ: THE CURRENT ESTIMATE OF THE JTH PARAMETER. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE INDEPENDENT VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C PVB: THE FUNCTION VALUE FOR THE SELECTED OBSERVATION & RESPONSE. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DPVB + + +C COMPUTE PREDICTED VALUES + + BETAJ = BETA(J) + BETA(J) = BETA(J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + BETA(J) = BETAJ + + PVB = WRK2(NROW,LQ) + + RETURN + END +*DPVD + SUBROUTINE DPVD + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVD, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DPVD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE NROW-TH FUNCTION VALUE USING +C X(NROW,J) + DELTA(NROW,J) + STP +C***END PROLOGUE DPVD + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PVD,STP + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + XPDJ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE INDEPENDENT VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C PVD: THE FUNCTION VALUE FOR THE SELECTED OBSERVATION & RESPONSE. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C XPDJ: THE (NROW,J)TH ELEMENT OF XPLUSD. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DPVD + + +C COMPUTE PREDICTED VALUES + + XPDJ = XPLUSD(NROW,J) + XPLUSD(NROW,J) = XPLUSD(NROW,J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + XPLUSD(NROW,J) = XPDJ + + PVD = WRK2(NROW,LQ) + + RETURN + END +*DSCALE + SUBROUTINE DSCALE + + (N,M,SCL,LDSCL,T,LDT,SCLT,LDSCLT) +C***BEGIN PROLOGUE DSCALE +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SCALE T BY THE INVERSE OF SCL, I.E., COMPUTE T/SCL +C***END PROLOGUE DSCALE + +C...SCALAR ARGUMENTS + INTEGER + + LDT,LDSCL,LDSCLT,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),SCL(LDSCL,M),SCLT(LDSCLT,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,TEMP,ZERO + INTEGER + + I,J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ONE,ZERO + + /1.0D0,0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDSCL: THE LEADING DIMENSION OF ARRAY SCL. +C LDSCLT: THE LEADING DIMENSION OF ARRAY SCLT. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C M: THE NUMBER OF COLUMNS OF DATA IN T. +C N: THE NUMBER OF ROWS OF DATA IN T. +C ONE: THE VALUE 1.0D0. +C SCL: THE SCALE VALUES. +C SCLT: THE INVERSELY SCALED MATRIX. +C T: THE ARRAY TO BE INVERSELY SCALED BY SCL. +C TEMP: A TEMPORARY SCALAR. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCALE + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (SCL(1,1).GE.ZERO) THEN + IF (LDSCL.GE.N) THEN + DO 80 J=1,M + DO 70 I=1,N + SCLT(I,J) = T(I,J)/SCL(I,J) + 70 CONTINUE + 80 CONTINUE + ELSE + DO 100 J=1,M + TEMP = ONE/SCL(1,J) + DO 90 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 90 CONTINUE + 100 CONTINUE + END IF + ELSE + TEMP = ONE/ABS(SCL(1,1)) + DO 120 J=1,M + DO 110 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 110 CONTINUE + 120 CONTINUE + END IF + + RETURN + END +*DSCLB + SUBROUTINE DSCLB + + (NP,BETA,SSF) +C***BEGIN PROLOGUE DSCLB +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT SCALING VALUES FOR BETA ACCORDING TO THE +C ALGORITHM GIVEN IN THE ODRPACK REFERENCE GUIDE +C***END PROLOGUE DSCLB + +C...SCALAR ARGUMENTS + INTEGER + + NP + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SSF(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + BMAX,BMIN,ONE,TEN,ZERO + INTEGER + + K + LOGICAL + + BIGDIF + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,LOG10,MAX,MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TEN + + /0.0D0,1.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BIGDIF: THE VARIABLE DESIGNATING WHETHER THERE IS A SIGNIFICANT +C DIFFERENCE IN THE MAGNITUDES OF THE NONZERO ELEMENTS OF +C BETA (BIGDIF=.TRUE.) OR NOT (BIGDIF=.FALSE.). +C BMAX: THE LARGEST NONZERO MAGNITUDE. +C BMIN: THE SMALLEST NONZERO MAGNITUDE. +C K: AN INDEXING VARIABLE. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SSF: THE SCALING VALUES FOR BETA. +C TEN: THE VALUE 10.0D0. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCLB + + + BMAX = ABS(BETA(1)) + DO 10 K=2,NP + BMAX = MAX(BMAX,ABS(BETA(K))) + 10 CONTINUE + + IF (BMAX.EQ.ZERO) THEN + +C ALL INPUT VALUES OF BETA ARE ZERO + + DO 20 K=1,NP + SSF(K) = ONE + 20 CONTINUE + + ELSE + +C SOME OF THE INPUT VALUES ARE NONZERO + + BMIN = BMAX + DO 30 K=1,NP + IF (BETA(K).NE.ZERO) THEN + BMIN = MIN(BMIN,ABS(BETA(K))) + END IF + 30 CONTINUE + BIGDIF = LOG10(BMAX)-LOG10(BMIN).GE.ONE + DO 40 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + SSF(K) = TEN/BMIN + ELSE + IF (BIGDIF) THEN + SSF(K) = ONE/ABS(BETA(K)) + ELSE + SSF(K) = ONE/BMAX + END IF + END IF + 40 CONTINUE + + END IF + + RETURN + END +*DSCLD + SUBROUTINE DSCLD + + (N,M,X,LDX,TT,LDTT) +C***BEGIN PROLOGUE DSCLD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT SCALING VALUES FOR DELTA ACCORDING TO THE +C ALGORITHM GIVEN IN THE ODRPACK REFERENCE GUIDE +C***END PROLOGUE DSCLD + +C...SCALAR ARGUMENTS + INTEGER + + LDTT,LDX,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + TT(LDTT,M),X(LDX,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,TEN,XMAX,XMIN,ZERO + INTEGER + + I,J + LOGICAL + + BIGDIF + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,LOG10,MAX,MIN + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TEN + + /0.0D0,1.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BIGDIF: THE VARIABLE DESIGNATING WHETHER THERE IS A SIGNIFICANT +C DIFFERENCE IN THE MAGNITUDES OF THE NONZERO ELEMENTS OF +C X (BIGDIF=.TRUE.) OR NOT (BIGDIF=.FALSE.). +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C ONE: THE VALUE 1.0D0. +C TT: THE SCALING VALUES FOR DELTA. +C X: THE INDEPENDENT VARIABLE. +C XMAX: THE LARGEST NONZERO MAGNITUDE. +C XMIN: THE SMALLEST NONZERO MAGNITUDE. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCLD + + + DO 50 J=1,M + XMAX = ABS(X(1,J)) + DO 10 I=2,N + XMAX = MAX(XMAX,ABS(X(I,J))) + 10 CONTINUE + + IF (XMAX.EQ.ZERO) THEN + +C ALL INPUT VALUES OF X(I,J), I=1,...,N, ARE ZERO + + DO 20 I=1,N + TT(I,J) = ONE + 20 CONTINUE + + ELSE + +C SOME OF THE INPUT VALUES ARE NONZERO + + XMIN = XMAX + DO 30 I=1,N + IF (X(I,J).NE.ZERO) THEN + XMIN = MIN(XMIN,ABS(X(I,J))) + END IF + 30 CONTINUE + BIGDIF = LOG10(XMAX)-LOG10(XMIN).GE.ONE + DO 40 I=1,N + IF (X(I,J).NE.ZERO) THEN + IF (BIGDIF) THEN + TT(I,J) = ONE/ABS(X(I,J)) + ELSE + TT(I,J) = ONE/XMAX + END IF + ELSE + TT(I,J) = TEN/XMIN + END IF + 40 CONTINUE + END IF + 50 CONTINUE + + RETURN + END +*DSETN + SUBROUTINE DSETN + + (N,M,X,LDX,NROW) +C***BEGIN PROLOGUE DSETN +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT THE ROW AT WHICH THE DERIVATIVE WILL BE CHECKED +C***END PROLOGUE DSETN + +C...SCALAR ARGUMENTS + INTEGER + + LDX,M,N,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEX VARIABLE. +C J: AN INDEX VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NROW: THE SELECTED ROW NUMBER OF THE INDEPENDENT VARIABLE. +C X: THE INDEPENDENT VARIABLE. + + +C***FIRST EXECUTABLE STATEMENT DSETN + + + IF ((NROW.GE.1) .AND. (NROW.LE.N)) RETURN + +C SELECT FIRST ROW OF INDEPENDENT VARIABLES WHICH CONTAINS NO ZEROS +C IF THERE IS ONE, OTHERWISE FIRST ROW IS USED. + + DO 20 I = 1, N + DO 10 J = 1, M + IF (X(I,J).EQ.0.0) GO TO 20 + 10 CONTINUE + NROW = I + RETURN + 20 CONTINUE + + NROW = 1 + + RETURN + END +*DSOLVE + SUBROUTINE DSOLVE(N,T,LDT,B,LDB,JOB) +C***BEGIN PROLOGUE DSOLVE +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DAXPY,DDOT +C***DATE WRITTEN 920220 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE SOLVE SYSTEMS OF THE FORM +C T * X = B OR TRANS(T) * X = B +C WHERE T IS AN UPPER OR LOWER TRIANGULAR MATRIX OF ORDER N, +C AND THE SOLUTION X OVERWRITES THE RHS B. +C (ADAPTED FROM LINPACK SUBROUTINE DTRSL) +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***END PROLOGUE DSOLVE + +C...SCALAR ARGUMENTS + INTEGER + + JOB,LDB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(LDB,N),T(LDT,N) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + J1,J,JN + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT + EXTERNAL + + DDOT + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C B: ON INPUT: THE RIGHT HAND SIDE; ON EXIT: THE SOLUTION +C J1: THE FIRST NONZERO ENTRY IN T. +C J: AN INDEXING VARIABLE. +C JN: THE LAST NONZERO ENTRY IN T. +C JOB: WHAT KIND OF SYSTEM IS TO BE SOLVED, WHERE IF JOB IS +C 1 SOLVE T*X=B, T LOWER TRIANGULAR, +C 2 SOLVE T*X=B, T UPPER TRIANGULAR, +C 3 SOLVE TRANS(T)*X=B, T LOWER TRIANGULAR, +C 4 SOLVE TRANS(T)*X=B, T UPPER TRIANGULAR. +C LDB: THE LEADING DIMENSION OF ARRAY B. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C N: THE NUMBER OF ROWS AND COLUMNS OF DATA IN ARRAY T. +C T: THE UPPER OR LOWER TRIDIAGONAL SYSTEM. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSOLVE + + +C FIND FIRST NONZERO DIAGONAL ENTRY IN T + J1 = 0 + DO 10 J=1,N + IF (J1.EQ.0 .AND. T(J,J).NE.ZERO) THEN + J1 = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(1,J) = ZERO + END IF + 10 CONTINUE + IF (J1.EQ.0) RETURN + +C FIND LAST NONZERO DIAGONAL ENTRY IN T + JN = 0 + DO 20 J=N,J1,-1 + IF (JN.EQ.0 .AND. T(J,J).NE.ZERO) THEN + JN = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(1,J) = ZERO + END IF + 20 CONTINUE + + IF (JOB.EQ.1) THEN + +C SOLVE T*X=B FOR T LOWER TRIANGULAR + B(1,J1) = B(1,J1)/T(J1,J1) + DO 30 J = J1+1, JN + TEMP = -B(1,J-1) + CALL DAXPY(JN-J+1,TEMP,T(J,J-1),1,B(1,J),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 30 CONTINUE + + ELSE IF (JOB.EQ.2) THEN + +C SOLVE T*X=B FOR T UPPER TRIANGULAR. + B(1,JN) = B(1,JN)/T(JN,JN) + DO 40 J = JN-1,J1,-1 + TEMP = -B(1,J+1) + CALL DAXPY(J,TEMP,T(1,J+1),1,B(1,1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 40 CONTINUE + + ELSE IF (JOB.EQ.3) THEN + +C SOLVE TRANS(T)*X=B FOR T LOWER TRIANGULAR. + B(1,JN) = B(1,JN)/T(JN,JN) + DO 50 J = JN-1,J1,-1 + B(1,J) = B(1,J) - DDOT(JN-J+1,T(J+1,J),1,B(1,J+1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 50 CONTINUE + + ELSE IF (JOB.EQ.4) THEN + +C SOLVE TRANS(T)*X=B FOR T UPPER TRIANGULAR. + B(1,J1) = B(1,J1)/T(J1,J1) + DO 60 J = J1+1,JN + B(1,J) = B(1,J) - DDOT(J-1,T(1,J),1,B(1,1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 60 CONTINUE + END IF + + RETURN + END +*DUNPAC + SUBROUTINE DUNPAC + + (N2,V1,V2,IFIX) +C***BEGIN PROLOGUE DUNPAC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DCOPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COPY THE ELEMENTS OF V1 INTO THE LOCATIONS OF V2 WHICH ARE +C UNFIXED +C***END PROLOGUE DUNPAC + +C...SCALAR ARGUMENTS + INTEGER + + N2 + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + V1(N2),V2(N2) + INTEGER + + IFIX(N2) + +C...LOCAL SCALARS + INTEGER + + I,N1 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF V2 ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ODRPACK REFERENCE GUIDE.) +C N1: THE NUMBER OF ITEMS IN V1. +C N2: THE NUMBER OF ITEMS IN V2. +C V1: THE VECTOR OF THE UNFIXED ITEMS. +C V2: THE VECTOR OF THE FIXED AND UNFIXED ITEMS INTO WHICH THE +C ELEMENTS OF V1 ARE TO BE INSERTED. + + +C***FIRST EXECUTABLE STATEMENT DUNPAC + + + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I = 1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1 + 1 + V2(I) = V1(N1) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY(N2,V1,1,V2,1) + END IF + + RETURN + END +*DVEVTR + SUBROUTINE DVEVTR + + (M,NQ,INDX, + + V,LDV,LD2V, E,LDE, VE,LDVE,LD2VE, VEV,LDVEV, + + WRK5) +C***BEGIN PROLOGUE DVEVTR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DSOLVE +C***DATE WRITTEN 910613 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE V*E*TRANS(V) FOR THE (INDX)TH M BY NQ ARRAY IN V +C***END PROLOGUE DVEVTR + +C...SCALAR ARGUMENTS + INTEGER + + INDX,LDE,LDV,LDVE,LDVEV,LD2V,LD2VE,M,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + E(LDE,M),V(LDV,LD2V,NQ),VE(LDVE,LD2VE,M),VEV(LDVEV,NQ),WRK5(M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + J,L1,L2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DSOLVE + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C INDX: THE ROW IN V IN WHICH THE M BY NQ ARRAY IS STORED. +C J: AN INDEXING VARIABLE. +C LDE: THE LEADING DIMENSION OF ARRAY E. +C LDV: THE LEADING DIMENSION OF ARRAY V. +C LDVE: THE LEADING DIMENSION OF ARRAY VE. +C LDVEV: THE LEADING DIMENSION OF ARRAY VEV. +C LD2V: THE SECOND DIMENSION OF ARRAY V. +C L1: AN INDEXING VARIABLE. +C L2: AN INDEXING VARIABLE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C E: THE M BY M MATRIX OF THE FACTORS SO ETE = (D**2 + ALPHA*T**2). +C V: AN ARRAY OF NQ BY M MATRICES. +C VE: THE NQ BY M ARRAY VE = V * INV(E) +C VEV: THE NQ BY NQ ARRAY VEV = V * INV(ETE) * TRANS(V). +C WRK5: AN M WORK VECTOR. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DVEVTR + + + IF (NQ.EQ.0 .OR. M.EQ.0) RETURN + + DO 140 L1 = 1,NQ + DO 110 J = 1,M + WRK5(J) = V(INDX,J,L1) + 110 CONTINUE + CALL DSOLVE(M,E,LDE,WRK5,1,4) + DO 120 J = 1,M + VE(INDX,L1,J) = WRK5(J) + 120 CONTINUE + 140 CONTINUE + + DO 230 L1 = 1,NQ + DO 220 L2 = 1,L1 + VEV(L1,L2) = ZERO + DO 210 J = 1,M + VEV(L1,L2) = VEV(L1,L2) + VE(INDX,L1,J)*VE(INDX,L2,J) + 210 CONTINUE + VEV(L2,L1) = VEV(L1,L2) + 220 CONTINUE + 230 CONTINUE + + RETURN + END +*DWGHT + SUBROUTINE DWGHT + + (N,M,WT,LDWT,LD2WT,T,LDT,WTT,LDWTT) +C***BEGIN PROLOGUE DWGHT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SCALE MATRIX T USING WT, I.E., COMPUTE WTT = WT*T +C***END PROLOGUE DWGHT + +C...SCALAR ARGUMENTS + INTEGER + + LDT,LDWT,LDWTT,LD2WT,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),WT(LDWT,LD2WT,M),WTT(LDWTT,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + I,J,K + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C LDWT: THE LEADING DIMENSION OF ARRAY WT. +C LDWTT: THE LEADING DIMENSION OF ARRAY WTT. +C LD2WT: THE SECOND DIMENSION OF ARRAY WT. +C M: THE NUMBER OF COLUMNS OF DATA IN T. +C N: THE NUMBER OF ROWS OF DATA IN T. +C T: THE ARRAY BEING SCALED BY WT. +C TEMP: A TEMPORARY SCALAR. +C WT: THE WEIGHTS. +C WTT: THE RESULTS OF WEIGHTING ARRAY T BY WT. +C ARRAY WTT CAN BE THE SAME AS T ONLY IF THE ARRAYS IN WT +C ARE UPPER TRIANGULAR WITH ZEROS BELOW THE DIAGONAL. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DWGHT + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WT(1,1,1).GE.ZERO) THEN + IF (LDWT.GE.N) THEN + IF (LD2WT.GE.M) THEN +C WT IS AN N-ARRAY OF M BY M MATRICES + DO 130 I=1,N + DO 120 J=1,M + TEMP = ZERO + DO 110 K=1,M + TEMP = TEMP + WT(I,J,K)*T(I,K) + 110 CONTINUE + WTT(I,J) = TEMP + 120 CONTINUE + 130 CONTINUE + ELSE +C WT IS AN N-ARRAY OF DIAGONAL MATRICES + DO 230 I=1,N + DO 220 J=1,M + WTT(I,J) = WT(I,1,J)*T(I,J) + 220 CONTINUE + 230 CONTINUE + END IF + ELSE + IF (LD2WT.GE.M) THEN +C WT IS AN M BY M MATRIX + DO 330 I=1,N + DO 320 J=1,M + TEMP = ZERO + DO 310 K=1,M + TEMP = TEMP + WT(1,J,K)*T(I,K) + 310 CONTINUE + WTT(I,J) = TEMP + 320 CONTINUE + 330 CONTINUE + ELSE +C WT IS A DIAGONAL MATRICE + DO 430 I=1,N + DO 420 J=1,M + WTT(I,J) = WT(1,1,J)*T(I,J) + 420 CONTINUE + 430 CONTINUE + END IF + END IF + ELSE +C WT IS A SCALAR + DO 520 J=1,M + DO 510 I=1,N + WTT(I,J) = ABS(WT(1,1,1))*T(I,J) + 510 CONTINUE + 520 CONTINUE + END IF + + RETURN + END +*DWINF + SUBROUTINE DWINF + + (N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) +C***BEGIN PROLOGUE DWINF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE SET STORAGE LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE +C***END PROLOGUE DWINF + +C...SCALAR ARGUMENTS + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,DELTAI,DELTNI,DELTSI, + + DIFFI,EPSI,EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,LDWE,LD2WE,LWKMN, + + M,N,NP,NQ,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI,VCVI, + + WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + + ISODR + +C...LOCAL SCALARS + INTEGER + + NEXT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C EPSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY EPS. +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NEXT: THE NEXT AVAILABLE LOCATION WITH WORK. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCONDI. +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSSI: THE LOCATION IN ARRAY WORK OF VARIABLE WSS. +C WSSDEI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSDEL. +C WSSEPI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSEPS. +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. + + +C***FIRST EXECUTABLE STATEMENT DWINF + + + IF (N.GE.1 .AND. M.GE.1 .AND. NP.GE.1 .AND. NQ.GE.1 .AND. + + LDWE.GE.1 .AND. LD2WE.GE.1) THEN + + DELTAI = 1 + EPSI = DELTAI + N*M + XPLUSI = EPSI + N*NQ + FNI = XPLUSI + N*M + SDI = FNI + N*NQ + VCVI = SDI + NP + RVARI = VCVI + NP*NP + + WSSI = RVARI + 1 + WSSDEI = WSSI + 1 + WSSEPI = WSSDEI + 1 + RCONDI = WSSEPI + 1 + ETAI = RCONDI + 1 + OLMAVI = ETAI + 1 + + TAUI = OLMAVI + 1 + ALPHAI = TAUI + 1 + ACTRSI = ALPHAI + 1 + PNORMI = ACTRSI + 1 + RNORSI = PNORMI + 1 + PRERSI = RNORSI + 1 + PARTLI = PRERSI + 1 + SSTOLI = PARTLI + 1 + TAUFCI = SSTOLI + 1 + EPSMAI = TAUFCI + 1 + BETA0I = EPSMAI + 1 + + BETACI = BETA0I + NP + BETASI = BETACI + NP + BETANI = BETASI + NP + SI = BETANI + NP + SSI = SI + NP + SSFI = SSI + NP + QRAUXI = SSFI + NP + UI = QRAUXI + NP + FSI = UI + NP + + FJACBI = FSI + N*NQ + + WE1I = FJACBI + N*NP*NQ + + DIFFI = WE1I + LDWE*LD2WE*NQ + + NEXT = DIFFI + NQ*(NP+M) + + IF (ISODR) THEN + DELTSI = NEXT + DELTNI = DELTSI + N*M + TI = DELTNI + N*M + TTI = TI + N*M + OMEGAI = TTI + N*M + FJACDI = OMEGAI + NQ*NQ + WRK1I = FJACDI + N*M*NQ + NEXT = WRK1I + N*M*NQ + ELSE + DELTSI = DELTAI + DELTNI = DELTAI + TI = DELTAI + TTI = DELTAI + OMEGAI = DELTAI + FJACDI = DELTAI + WRK1I = DELTAI + END IF + + WRK2I = NEXT + WRK3I = WRK2I + N*NQ + WRK4I = WRK3I + NP + WRK5I = WRK4I + M*M + WRK6I = WRK5I + M + WRK7I = WRK6I + N*NQ*NP + NEXT = WRK7I + 5*NQ + + LWKMN = NEXT + ELSE + DELTAI = 1 + EPSI = 1 + XPLUSI = 1 + FNI = 1 + SDI = 1 + VCVI = 1 + RVARI = 1 + WSSI = 1 + WSSDEI = 1 + WSSEPI = 1 + RCONDI = 1 + ETAI = 1 + OLMAVI = 1 + TAUI = 1 + ALPHAI = 1 + ACTRSI = 1 + PNORMI = 1 + RNORSI = 1 + PRERSI = 1 + PARTLI = 1 + SSTOLI = 1 + TAUFCI = 1 + EPSMAI = 1 + BETA0I = 1 + BETACI = 1 + BETASI = 1 + BETANI = 1 + SI = 1 + SSI = 1 + SSFI = 1 + QRAUXI = 1 + FSI = 1 + UI = 1 + FJACBI = 1 + WE1I = 1 + DIFFI = 1 + DELTSI = 1 + DELTNI = 1 + TI = 1 + TTI = 1 + FJACDI = 1 + OMEGAI = 1 + WRK1I = 1 + WRK2I = 1 + WRK3I = 1 + WRK4I = 1 + WRK5I = 1 + WRK6I = 1 + WRK7I = 1 + LWKMN = 1 + END IF + + RETURN + END +*DXMY + SUBROUTINE DXMY + + (N,M,X,LDX,Y,LDY,XMY,LDXMY) +C***BEGIN PROLOGUE DXMY +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE XMY = X - Y +C***END PROLOGUE DXMY + +C...SCALAR ARGUMENTS + INTEGER + + LDX,LDXMY,LDY,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M),XMY(LDXMY,M),Y(LDY,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDXMY: THE LEADING DIMENSION OF ARRAY XMY. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C M: THE NUMBER OF COLUMNS OF DATA IN ARRAYS X AND Y. +C N: THE NUMBER OF ROWS OF DATA IN ARRAYS X AND Y. +C X: THE FIRST OF THE TWO ARRAYS. +C XMY: THE VALUES OF X-Y. +C Y: THE SECOND OF THE TWO ARRAYS. + + +C***FIRST EXECUTABLE STATEMENT DXMY + + + DO 20 J=1,M + DO 10 I=1,N + XMY(I,J) = X(I,J) - Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END +*DXPY + SUBROUTINE DXPY + + (N,M,X,LDX,Y,LDY,XPY,LDXPY) +C***BEGIN PROLOGUE DXPY +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE XPY = X + Y +C***END PROLOGUE DXPY + +C...SCALAR ARGUMENTS + INTEGER + + LDX,LDXPY,LDY,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M),XPY(LDXPY,M),Y(LDY,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDXPY: THE LEADING DIMENSION OF ARRAY XPY. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C M: THE NUMBER OF COLUMNS OF DATA IN ARRAYS X AND Y. +C N: THE NUMBER OF ROWS OF DATA IN ARRAYS X AND Y. +C X: THE FIRST OF THE TWO ARRAYS TO BE ADDED TOGETHER. +C XPY: THE VALUES OF X+Y. +C Y: THE SECOND OF THE TWO ARRAYS TO BE ADDED TOGETHER. + + +C***FIRST EXECUTABLE STATEMENT DXPY + + + DO 20 J=1,M + DO 10 I=1,N + XPY(I,J) = X(I,J) + Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END +*DZERO + SUBROUTINE DZERO + + (N,M,A,LDA) +C***BEGIN PROLOGUE DZERO +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET A = ZERO +C***END PROLOGUE DZERO + +C...SCALAR ARGUMENTS + INTEGER + + LDA,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + A(LDA,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: THE ARRAY TO BE SET TO ZERO. +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDA: THE LEADING DIMENSION OF ARRAY A. +C M: THE NUMBER OF COLUMNS TO BE SET TO ZERO. +C N: THE NUMBER OF ROWS TO BE SET TO ZERO. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DZERO + + + DO 20 J=1,M + DO 10 I=1,N + A(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/data1.dat b/dataassim/math/optimization/odrpack95/data1.dat new file mode 100644 index 0000000..25b8f35 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/data1.dat @@ -0,0 +1,14 @@ + 12 1 3 1 +1500.0 -50.0 -0.1 + 0.0 1265.0 + 0.0 1263.6 + 5.0 1258.0 + 7.0 1254.0 + 7.5 1253.0 + 10.0 1249.8 + 16.0 1237.0 + 26.0 1218.0 + 30.0 1220.6 + 34.0 1213.8 + 34.5 1215.5 + 100.0 1212.0 diff --git a/dataassim/math/optimization/odrpack95/data2.dat b/dataassim/math/optimization/odrpack95/data2.dat new file mode 100644 index 0000000..b47dde3 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/data2.dat @@ -0,0 +1,22 @@ + 20 2 5 1 + -1.0 -3.0 0.09 0.02 0.08 + 0.50 -0.12 + 1.20 -0.60 + 1.60 -1.00 + 1.86 -1.40 + 2.12 -2.54 + 2.36 -3.36 + 2.44 -4.00 + 2.36 -4.75 + 2.06 -5.25 + 1.74 -5.64 + 1.34 -5.97 + 0.90 -6.32 + -0.28 -6.44 + -0.78 -6.44 + -1.36 -6.41 + -1.90 -6.25 + -2.50 -5.88 + -2.88 -5.50 + -3.18 -5.24 + -3.44 -4.86 diff --git a/dataassim/math/optimization/odrpack95/data3.dat b/dataassim/math/optimization/odrpack95/data3.dat new file mode 100644 index 0000000..70c4040 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/data3.dat @@ -0,0 +1,25 @@ + 23 1 5 2 + 4.0 2.0 7.0 0.40 0.50 + 30.0 4.220 0.136 + 50.0 4.167 0.167 + 70.0 4.132 0.188 + 100.0 4.038 0.212 + 150.0 4.019 0.236 + 200.0 3.956 0.257 + 300.0 3.884 0.276 + 500.0 3.784 0.297 + 700.0 3.713 0.309 + 1000.0 3.633 0.311 + 1500.0 3.540 0.314 + 2000.0 3.433 0.311 + 3000.0 3.358 0.305 + 5000.0 3.258 0.289 + 7000.0 3.193 0.277 + 10000.0 3.128 0.255 + 15000.0 3.059 0.240 + 20000.0 2.984 0.218 + 30000.0 2.934 0.202 + 50000.0 2.876 0.182 + 70000.0 2.838 0.168 + 100000.0 2.798 0.153 + 150000.0 2.759 0.139 diff --git a/dataassim/math/optimization/odrpack95/drive1.f b/dataassim/math/optimization/odrpack95/drive1.f new file mode 100644 index 0000000..ed834a1 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/drive1.f @@ -0,0 +1,236 @@ + + PROGRAM SAMPLE + USE ODRPACK95 + USE REAL_PRECISION + +C ODRPACK95 Argument Definitions +C ==> FCN Name of the user supplied function subroutine +C ==> N Number of observations +C ==> M Columns of data in the explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C <==> BETA Function parameters +C ==> Y Response variable +C ==> X Explanatory variable +C ==> WE "Epsilon" weights +C ==> WD "Delta" weights +C ==> IFIXB Indicators for "fixing" parameters (BETA) +C ==> IFIXX Indicators for "fixing" explanatory variable (X) +C ==> JOB Task to be performed +C ==> NDIGIT Good digits in subroutine function results +C ==> TAUFAC Trust region initialization factor +C ==> SSTOL Sum of squares convergence criterion +C ==> PARTOL Parameter convergence criterion +C ==> MAXIT Maximum number of iterations +C ==> IPRINT Print control +c ==> LUNERR Logical unit for error reports +C ==> LUNRPT Logical unit for computation reports +C ==> STPB Step sizes for finite difference derivatives wrt BETA +C ==> STPD Step sizes for finite difference derivatives wrt DELTA +C ==> SCLB Scale values for parameters BETA +C ==> SCLD Scale values for errors delta in explanatory variable +C <==> WORK REAL (KIND=R8) work vector +C <== IWORK Integer work vector +C <== INFO Stopping condition + +C Parameters specifying maximum problem sizes handled by this driver +C MAXN Maximum number of observations +C MAXM Maximum number of columns in explanatory variable +C MAXNP Maximum number of function parameters +C MAXNQ Maximum number of responses per observation + +C Parameter Declarations and Specifications + INTEGER LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=25,MAXNP=5,MAXNQ=1, + & LDY=MAXN,LDX=MAXN, + & LDWE=1,LD2WE=1,LDWD=1,LD2WD=1, + & LDIFX=MAXN,LDSTPD=1,LDSCLD=1, + & LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + & LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C Variable Declarations + INTEGER I,INFO,IPRINT,J,JOB,L,LUNERR,LUNRPT,M,MAXIT,N, + & NDIGIT,NP,NQ + INTEGER IFIXB(MAXNP),IFIXX(LDIFX,MAXM),IWORK(:) + REAL (KIND=R8) PARTOL,SSTOL,TAUFAC + REAL (KIND=R8) BETA(MAXNP),SCLB(MAXNP),SCLD(LDSCLD,MAXM), + & STPB(MAXNP),STPD(LDSTPD,MAXM), + & WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + & WORK(:),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + POINTER IWORK,WORK + + +C Allocate work arrays + ALLOCATE(IWORK(LIWORK),WORK(LWORK)) + +C Specify default values for ODR arguments + WE(1,1,1) = -1.0E0_R8 + WD(1,1,1) = -1.0E0_R8 + IFIXB(1) = -1 + IFIXX(1,1) = -1 + JOB = -1 + NDIGIT = -1 + TAUFAC = -1.0E0_R8 + SSTOL = -1.0E0_R8 + PARTOL = -1.0E0_R8 + MAXIT = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + STPB(1) = -1.0E0_R8 + STPD(1,1) = -1.0E0_R8 + SCLB(1) = -1.0E0_R8 + SCLD(1,1) = -1.0E0_R8 + +C Set up ODRPACK95 report files + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT1') + +C Read problem data, and set nondefault value for argument IFIXX + OPEN (UNIT=5,FILE='DATA1') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M),(Y(I,L),L=1,NQ) + IF (X(I,1).EQ.0.0E0_R8 .OR. X(I,1).EQ.100.0E0_R8) THEN + IFIXX(I,1) = 0 + ELSE + IFIXX(I,1) = 1 + END IF + 10 CONTINUE + +C Specify task: Explicit orthogonal distance regression +C With user supplied derivatives (checked) +C Covariance matrix constructed with recomputed derivatives +C Delta initialized to zero +C Not a restart +C And indicate short initial report +C Short iteration reports every iteration, and +C Long final report + JOB = 00020 + IPRINT = 1112 + +C Compute solution + CALL ODR(FCN=FCN, + & N=N,M=M,NP=NP,NQ=NQ, + & BETA=BETA, + & Y=Y,X=X, + & WE=WE,WD=WD, + & IFIXB=IFIXB,IFIXX=IFIXX, + & JOB=JOB,NDIGIT=NDIGIT,TAUFAC=TAUFAC, + & SSTOL=SSTOL,PARTOL=PARTOL,MAXIT=MAXIT, + & IPRINT=IPRINT,LUNERR=LUNERR,LUNRPT=LUNRPT, + & STPB=STPB,STPD=STPD, + & SCLB=SCLB,SCLD=SCLD, + & WORK=WORK,IWORK=IWORK, + & INFO=INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + & LDN,LDM,LDNP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,F,FJACB,FJACD, + & ISTOP) + +C Subroutine arguments +C ==> N Number of observations +C ==> M Number of columns in explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C ==> LDN Leading dimension declarator equal or exceeding N +C ==> LDM Leading dimension declarator equal or exceeding M +C ==> LDNP Leading dimension declarator equal or exceeding NP +C ==> BETA Current values of parameters +C ==> XPLUSD Current value of explanatory variable, i.e., X + DELTA +C ==> IFIXB Indicators for "fixing" parameters (BETA) +C ==> IFIXX Indicators for "fixing" explanatory variable (X) +C ==> LDIFX Leading dimension of array IFIXX +C ==> IDEVAL Indicator for selecting computation to be performed +C <== F Predicted function values +C <== FJACB Jacobian with respect to BETA +C <== FJACD Jacobian with respect to errors DELTA +C <== ISTOP Stopping condition, where +C 0 means current BETA and X+DELTA were +C acceptable and values were computed successfully +C 1 means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should select values +C closer to most recently used values if possible +C -1 means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should stop + +C Used modules + USE REAL_PRECISION + +C Input arguments, not to be changed by this routine: + INTEGER I,IDEVAL,ISTOP,L,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + REAL (KIND=R8) BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C Output arguments: + REAL (KIND=R8) F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) +C Local variables + INTRINSIC EXP + + +C Do something with IFIXB and IFIXX to avoid warnings that they are not being +C used. This is simply not to worry users that the example program is failing. + IF (IFIXB(1) .GT. 0 .AND. IFIXX(1,1) .GT. 0 ) THEN +C Do nothing. + END IF + + +C Check for unacceptable values for this problem + IF (BETA(1) .LT. 0.0E0_R8) THEN + ISTOP = 1 + RETURN + ELSE + ISTOP = 0 + END IF + +C Compute predicted values + IF (MOD(IDEVAL,10).GE.1) THEN + DO 110 L = 1,NQ + DO 100 I = 1,N + F(I,L) = BETA(1) + + & BETA(2)*(EXP(BETA(3)*XPLUSD(I,1)) - 1.0E0_R8)**2 + 100 CONTINUE + 110 CONTINUE + END IF + +C Compute derivatives with respect to BETA + IF (MOD(IDEVAL/10,10).GE.1) THEN + DO 210 L = 1,NQ + DO 200 I = 1,N + FJACB(I,1,L) = 1.0E0_R8 + FJACB(I,2,L) = (EXP(BETA(3)*XPLUSD(I,1)) - 1.0E0_R8)**2 + FJACB(I,3,L) = BETA(2)*2* + & (EXP(BETA(3)*XPLUSD(I,1)) - 1.0E0_R8)* + & EXP(BETA(3)*XPLUSD(I,1))*XPLUSD(I,1) + 200 CONTINUE + 210 CONTINUE + END IF + +C Compute derivatives with respect to DELTA + IF (MOD(IDEVAL/100,10).GE.1) THEN + DO 310 L = 1,NQ + DO 300 I = 1,N + FJACD(I,1,L) = BETA(2)*2* + & (EXP(BETA(3)*XPLUSD(I,1)) - 1.0E0_R8)* + & EXP(BETA(3)*XPLUSD(I,1))*BETA(3) + 300 CONTINUE + 310 CONTINUE + END IF + + RETURN + END + + + + diff --git a/dataassim/math/optimization/odrpack95/drive2.f b/dataassim/math/optimization/odrpack95/drive2.f new file mode 100644 index 0000000..08e448b --- /dev/null +++ b/dataassim/math/optimization/odrpack95/drive2.f @@ -0,0 +1,170 @@ + PROGRAM SAMPLE + USE ODRPACK95 + USE REAL_PRECISION + +C ODRPACK95 Argument Definitions +C ==> FCN Name of the user supplied function subroutine +C ==> N Number of observations +C ==> M Columns of data in the explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C <==> BETA Function parameters +C ==> Y Response variable (unused when model is implicit) +C ==> X Explanatory variable +C ==> WE Initial penalty parameter for implicit model +C ==> WD "Delta" weights +C ==> JOB Task to be performed +C ==> IPRINT Print control +C ==> LUNERR Logical unit for error reports +C ==> LUNRPT Logical unit for computation reports +C <==> WORK REAL (KIND=R8) work vector +C <== IWORK Integer work vector +C <== INFO Stopping condition + +C Parameters specifying maximum problem sizes handled by this driver +C MAXN Maximum number of observations +C MAXM Maximum number of columns in explanatory variable +C MAXNP Maximum number of function parameters +C MAXNQ Maximum number of responses per observation + +C Parameter declarations and specifications + INTEGER LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=25,MAXNP=5,MAXNQ=2, + & LDY=MAXN,LDX=MAXN, + & LDWE=1,LD2WE=1,LDWD=1,LD2WD=1, + & LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + & LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C Variable declarations + INTEGER I,INFO,IPRINT,J,JOB,LUNERR,LUNRPT,M,N,NP,NQ + INTEGER IWORK(:) + REAL (KIND=R8) BETA(MAXNP), + & WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + & WORK(:),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + POINTER IWORK,WORK + + +C Allocate work arrays + ALLOCATE(IWORK(LIWORK),WORK(LWORK)) + +C Specify default values for DODR arguments + WE(1,1,1) = -1.0E0_R8 + WD(1,1,1) = -1.0E0_R8 + JOB = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + +C Set up ODRPACK95 report files + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT2') + +C Read problem data + OPEN (UNIT=5,FILE='DATA2') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M) + 10 CONTINUE + +C Specify task: Implicit orthogonal distance regression +C With forward finite difference derivatives +C Covariance matrix constructed with recomputed derivatives +C DELTA initialized to zero +C Not a restart + JOB = 00001 + +C Compute solution + CALL ODR(FCN=FCN, + & N=N,M=M,NP=NP,NQ=NQ, + & BETA=BETA, + & Y=Y,X=X, + & WE=WE,WD=WD, + & JOB=JOB, + & IPRINT=IPRINT,LUNERR=LUNERR,LUNRPT=LUNRPT, + & WORK=WORK,IWORK=IWORK, + & INFO=INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + & LDN,LDM,LDNP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,F,FJACB,FJACD, + & ISTOP) + +C Subroutine Arguments +C ==> N Number of observations +C ==> M Number of columns in explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C ==> LDN Leading dimension declarator equal or exceeding N +C ==> LDM Leading dimension declarator equal or exceeding M +C ==> LDNP Leading dimension declarator equal or exceeding NP +C ==> BETA Current values of parameters +C ==> XPLUSD Current value of explanatory variable, i.e., X + DELTA +C ==> IFIXB Indicators for "fixing" parameters (BETA) +C ==> IFIXX Indicators for "fixing" explanatory variable (X) +C ==> LDIFX Leading dimension of array IFIXX +C ==> IDEVAL Indicator for selecting computation to be performed +C <== F Predicted function values +C <== FJACB Jacobian with respect to BETA +C <== FJACD Jacobian with respect to errors DELTA +C <== ISTOP Stopping condition, where +C 0 Means current BETA and X+DELTA were +C acceptable and values were computed successfully +C 1 Means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should select values +C closer to most recently used values if possible +C -1 Means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should stop + +C Used Modules + USE REAL_PRECISION + +C Input arguments, not to be changed by this routine: + INTEGER I,IDEVAL,ISTOP,L,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + REAL (KIND=R8) BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C Output arguments: + REAL (KIND=R8) F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) + + +C Do something with FJACD, FJACB, IFIXB and IFIXX to avoid warnings that they +C are not being used. This is simply not to worry users that the example +C program is failing. + IF (IFIXB(1) .GT. 0 .AND. IFIXX(1,1) .GT. 0 + & .AND. FJACB(1,1,1) .GT. 0 .AND. FJACD(1,1,1) .GT. 0 ) THEN +C Do nothing. + END IF + + +C Check for unacceptable values for this problem + IF (BETA(1) .GT. 0.0E0_R8) THEN + ISTOP = 1 + RETURN + ELSE + ISTOP = 0 + END IF + +C Compute predicted values + IF (MOD(IDEVAL,10).GE.1) THEN + DO 110 L = 1,NQ + DO 100 I = 1,N + F(I,L) = BETA(3)*(XPLUSD(I,1)-BETA(1))**2 + + & 2*BETA(4)*(XPLUSD(I,1)-BETA(1))* + & (XPLUSD(I,2)-BETA(2)) + + & BETA(5)*(XPLUSD(I,2)-BETA(2))**2 - 1.0E0_R8 + 100 CONTINUE + 110 CONTINUE + END IF + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/drive3.f b/dataassim/math/optimization/odrpack95/drive3.f new file mode 100644 index 0000000..62f89d0 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/drive3.f @@ -0,0 +1,301 @@ + PROGRAM SAMPLE + USE ODRPACK95 + USE REAL_PRECISION + +C ODRPACK95 Argument Definitions +C ==> FCN Name of the user supplied function subroutine +C ==> N Number of observations +C ==> M Columns of data in the explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C <==> BETA Function parameters +C ==> Y Response variable +C ==> X Explanatory variable +C ==> WE "Epsilon" weights +C ==> WD "Delta" weights +C ==> IFIXB Indicators for "fixing" parameters (BETA) +C ==> IFIXX Indicators for "fixing" explanatory variable (X) +C ==> JOB Task to be performed +C ==> NDIGIT Good digits in subroutine fcn results +C ==> TAUFAC Trust region initialization factor +C ==> SSTOL Sum of squares convergence criterion +C ==> PARTOL Parameter convergence criterion +C ==> MAXIT Maximum number of iterations +C ==> IPRINT Print control +C ==> LUNERR Logical unit for error reports +C ==> LUNRPT Logical unit for computation reports +C ==> STPB Step sizes for finite difference derivatives wrt BETA +C ==> STPD Step sizes for finite difference derivatives wrt DELTA +C ==> SCLB Scale values for parameters BETA +C ==> SCLD Scale values for errors DELTA in explanatory variable +C <==> WORK REAL (KIND=R8) work vector +C <== IWORK Integer work vector +C <== INFO Stopping condition + +C Parameters specifying maximum problem sizes handled by this driver +C MAXN Maximum number of observations +C MAXM Maximum number of columns in explanatory variable +C MAXNP Maximum number of function parameters +C MAXNQ Maximum number of responses per observation + +C Parameter declarations and specifications + INTEGER LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LIWORK,LWORK,MAXM,MAXN,MAXNP,MAXNQ + PARAMETER (MAXM=5,MAXN=100,MAXNP=25,MAXNQ=5, + & LDY=MAXN,LDX=MAXN, + & LDWE=MAXN,LD2WE=MAXNQ,LDWD=MAXN,LD2WD=1, + & LDIFX=MAXN,LDSCLD=1,LDSTPD=1, + & LWORK=18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + & LIWORK=20+MAXNP+MAXNQ*(MAXNP+MAXM)) + +C Variable declarations + INTEGER I,INFO,IPRINT,J,JOB,L,LUNERR,LUNRPT,M,MAXIT,N, + & NDIGIT,NP,NQ + INTEGER IFIXB(MAXNP),IFIXX(LDIFX,MAXM),IWORK(:) + REAL (KIND=R8) PARTOL,SSTOL,TAUFAC + REAL (KIND=R8) BETA(MAXNP),DELTA(:,:), + & SCLB(MAXNP),SCLD(LDSCLD,MAXM), + & STPB(MAXNP),STPD(LDSTPD,MAXM), + & WD(LDWD,LD2WD,MAXM),WE(LDWE,LD2WE,MAXNQ), + & WORK(:),X(LDX,MAXM),Y(LDY,MAXNQ) + EXTERNAL FCN + POINTER DELTA,IWORK,WORK + + +C Specify default values for DODRC arguments + WE(1,1,1) = -1.0E0_R8 + WD(1,1,1) = -1.0E0_R8 + IFIXB(1) = -1 + IFIXX(1,1) = -1 + JOB = -1 + NDIGIT = -1 + TAUFAC = -1.0E0_R8 + SSTOL = -1.0E0_R8 + PARTOL = -1.0E0_R8 + MAXIT = -1 + IPRINT = -1 + LUNERR = -1 + LUNRPT = -1 + STPB(1) = -1.0E0_R8 + STPD(1,1) = -1.0E0_R8 + SCLB(1) = -1.0E0_R8 + SCLD(1,1) = -1.0E0_R8 + +C Set up ODRPACK95 report files + LUNERR = 9 + LUNRPT = 9 + OPEN (UNIT=9,FILE='REPORT3') + +C Read problem data + OPEN (UNIT=5,FILE='DATA3') + READ (5,FMT=*) N,M,NP,NQ + READ (5,FMT=*) (BETA(I),I=1,NP) + DO 10 I=1,N + READ (5,FMT=*) (X(I,J),J=1,M),(Y(I,L),L=1,NQ) + 10 CONTINUE + +C Allocate work arrays + ALLOCATE(DELTA(N,M),IWORK(LIWORK),WORK(LWORK)) + +C Specify task as explicit orthogonal distance regression +C With central difference derivatives +C Covariance matrix constructed with recomputed derivatives +C DELTA initialized by user +C Not a restart +C And indicate long initial report +C No iteration reports +C Long final report + JOB = 01010 + IPRINT = 2002 + +C Initialize DELTA, and specify first decade of frequencies as fixed + DO 20 I=1,N + IF (X(I,1).LT.100.0E0_R8) THEN + DELTA(I,1) = 0.0E0_R8 + IFIXX(I,1) = 0 + ELSE IF (X(I,1).LE.150.0E0_R8) THEN + DELTA(I,1) = 0.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.1000.0E0_R8) THEN + DELTA(I,1) = 25.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.10000.0E0_R8) THEN + DELTA(I,1) = 560.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.100000.0E0_R8) THEN + DELTA(I,1) = 9500.0E0_R8 + IFIXX(I,1) = 1 + ELSE + DELTA(I,1) = 144000.0E0_R8 + IFIXX(I,1) = 1 + END IF + 20 CONTINUE + +C Set weights + DO 30 I=1,N + IF (X(I,1).EQ.100.0E0_R8 .OR. X(I,1).EQ.150.0E0_R8) THEN + WE(I,1,1) = 0.0E0_R8 + WE(I,1,2) = 0.0E0_R8 + WE(I,2,1) = 0.0E0_R8 + WE(I,2,2) = 0.0E0_R8 + ELSE + WE(I,1,1) = 559.6E0_R8 + WE(I,1,2) = -1634.0E0_R8 + WE(I,2,1) = -1634.0E0_R8 + WE(I,2,2) = 8397.0E0_R8 + END IF + WD(I,1,1) = (1.0E-4_R8)/(X(I,1)**2) + 30 CONTINUE + +C Compute solution + CALL ODR(FCN=FCN, + & N=N,M=M,NP=NP,NQ=NQ, + & BETA=BETA, + & Y=Y,X=X, + & DELTA=DELTA, + & WE=WE,WD=WD, + & IFIXB=IFIXB,IFIXX=IFIXX, + & JOB=JOB,NDIGIT=NDIGIT,TAUFAC=TAUFAC, + & SSTOL=SSTOL,PARTOL=PARTOL,MAXIT=MAXIT, + & IPRINT=IPRINT,LUNERR=LUNERR,LUNRPT=LUNRPT, + & STPB=STPB,STPD=STPD, + & SCLB=SCLB,SCLD=SCLD, + & WORK=WORK,IWORK=IWORK, + & INFO=INFO) + END + + + SUBROUTINE FCN(N,M,NP,NQ, + & LDN,LDM,LDNP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,F,FJACB,FJACD, + & ISTOP) + +C Subroutine arguments +C ==> N Number of observations +C ==> M Number of columns in explanatory variable +C ==> NP Number of parameters +C ==> NQ Number of responses per observation +C ==> LDN Leading dimension declarator equal or exceeding N +C ==> LDM Leading dimension declarator equal or exceeding M +C ==> LDNP Leading dimension declarator equal or exceeding NP +C ==> BETA Current values of parameters +C ==> XPLUSD Current value of explanatory variable, i.e., X + DELTA +C ==> IFIXB Indicators for "fixing" parameters (BETA) +C ==> IFIXX Indicators for "fixing" explanatory variable (X) +C ==> LDIFX Leading dimension of array IFIXX +C ==> IDEVAL Indicator for selecting computation to be performed +C <== F Predicted function values +C <== FJACB Jacobian with respect to BETA +C <== FJACD Jacobian with respect to errors DELTA +C <== ISTOP Stopping condition, where +C 0 Means current BETA and X+DELTA were +C acceptable and values were computed successfully +C 1 Means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should select values +C closer to most recently used values if possible +C -1 Means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should stop + +C Used modules + USE REAL_PRECISION + +C Input arguments, not to be changed by this routine: + INTEGER I,IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + REAL (KIND=R8) BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C Output arguments: + REAL (KIND=R8) F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) +C Local variables + REAL (KIND=R8) FREQ,PI,OMEGA,CTHETA,STHETA,THETA,PHI,R + INTRINSIC ATAN2,EXP,SQRT + + +C Do something with FJACD, FJACB, IFIXB and IFIXX to avoid warnings that they +C are not being used. This is simply not to worry users that the example +C program is failing. + IF (IFIXB(1) .GT. 0 .AND. IFIXX(1,1) .GT. 0 + & .AND. FJACB(1,1,1) .GT. 0 .AND. FJACD(1,1,1) .GT. 0 ) THEN +C Do nothing. + END IF + + +C Check for unacceptable values for this problem + DO 10 I=1,N + IF (XPLUSD(I,1).LT.0.0E0_R8) THEN + ISTOP = 1 + RETURN + END IF + 10 CONTINUE + ISTOP = 0 + + PI = 3.141592653589793238462643383279E0_R8 + + THETA = PI*BETA(4)*0.5E0_R8 + CTHETA = COS(THETA) + STHETA = SIN(THETA) + +C Compute predicted values + IF (MOD(IDEVAL,10).GE.1) THEN + DO 100 I = 1,N + FREQ = XPLUSD(I,1) + OMEGA = (2.0E0_R8*PI*FREQ*EXP(-BETA(3)))**BETA(4) + PHI = ATAN2((OMEGA*STHETA),(1+OMEGA*CTHETA)) + R = (BETA(1)-BETA(2)) * + & SQRT((1+OMEGA*CTHETA)**2+ + & (OMEGA*STHETA)**2)**(-BETA(5)) + F(I,1) = BETA(2) + R*COS(BETA(5)*PHI) + F(I,2) = R*SIN(BETA(5)*PHI) + 100 CONTINUE + END IF + + RETURN + END + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dataassim/math/optimization/odrpack95/drive4.f b/dataassim/math/optimization/odrpack95/drive4.f new file mode 100644 index 0000000..6f87365 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/drive4.f @@ -0,0 +1,151 @@ +C This sample problem comes from Zwolak et al. 2001 (High Performance Computing +C Symposium, "Estimating rate constants in cell cycle models"). The call to +C ODRPACK95 is modified from the call the authors make to ODRPACK. This is +C done to illustrate the need for bounds. The authors could just have easily +C used the call statement here to solve their problem. +C +C Curious users are encouraged to remove the bounds in the call statement, +C run the code, and compare the results to the current call statement. + PROGRAM SAMPLE + USE REAL_PRECISION + USE ODRPACK95 + IMPLICIT NONE +C INTEGER :: I +C REAL (KIND=R8) :: C, M, TOUT + INTERFACE + SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB, + + IFIXX,LDIFX,IDEVAL,F,FJACB,FJACD,ISTOP) + USE REAL_PRECISION + INTEGER, INTENT(IN) :: IDEVAL,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + INTEGER, INTENT(IN) :: IFIXB(NP),IFIXX(LDIFX,M) + REAL(KIND=R8), INTENT(IN) :: BETA(NP),XPLUSD(LDN,M) + INTEGER, INTENT(OUT) :: ISTOP + REAL(KIND=R8), INTENT(OUT) :: F(LDN,NQ),FJACB(LDN,LDNP,NQ), + + FJACD(LDN,LDM,NQ) + END SUBROUTINE FCN + END INTERFACE + REAL(KIND=R8) :: BETA(3) = (/ 1.1E-0_R8, 3.3E+0_R8, 8.7_R8 /) + OPEN(9,FILE="REPORT4") + CALL ODR( + + FCN, + + N = 5, M = 1, NP = 3, NQ = 1, + + BETA = BETA, + + Y = RESHAPE((/ 55.0_R8, 45.0_R8, 40.0_R8, 30.0_R8, 20.0_R8 /), + + (/5,1/)), + + X = RESHAPE((/ 0.15_R8, 0.20_R8, 0.25_R8, 0.30_R8, 0.50_R8 /), + + (/5,1/)), + + LOWER = (/ 0.0_R8, 0.0_R8, 0.0_R8 /), + + UPPER = (/ 1000.0_R8, 1000.0_R8, 1000.0_R8 /), + + IPRINT = 2122, + + LUNRPT = 9, + + MAXIT = 20 + +) + CLOSE(9) +C The following code will reproduce the plot in Figure 2 of Zwolak et +C al. 2001. +C DO I = 0, 100 +C C = 0.05+(0.7-0.05)*I/100 +C TOUT = 1440.0D0 +C !CALL MPF(M,C,1.1D-10,3.3D-3,8.7D0,0.0D0,TOUT,C/2) +C CALL MPF(M,C,1.15395968E-02_R8, 2.61676386E-03_R8, +C + 9.23138811E+00_R8,0.0D0,TOUT,C/2) +C WRITE(*,*) C, TOUT +C END DO + END PROGRAM + + SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB, + + IFIXX,LDIFX,IDEVAL,F,FJACB,FJACD,ISTOP) + USE REAL_PRECISION + IMPLICIT NONE + INTEGER, INTENT(IN) :: IDEVAL,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + INTEGER, INTENT(IN) :: IFIXB(NP),IFIXX(LDIFX,M) + REAL(KIND=R8), INTENT(IN) :: BETA(NP),XPLUSD(LDN,M) + INTEGER, INTENT(OUT) :: ISTOP + REAL(KIND=R8), INTENT(OUT) :: F(LDN,NQ),FJACB(LDN,LDNP,NQ), + + FJACD(LDN,LDM,NQ) + ! Local variables + REAL(KIND=R8) :: MOUT + INTEGER :: I + ISTOP = 0 + FJACB(:,:,:) = 0.0E0_R8 + FJACD(:,:,:) = 0.0E0_R8 + IF ( MOD(IDEVAL,10).GE.1 ) THEN + DO I = 1, N + F(I,1) = 1440.0_R8 + CALL MPF(MOUT,XPLUSD(I,1),BETA(1),BETA(2),BETA(3),0.0_R8, + + F(I,1),XPLUSD(I,1)/2) + END DO + END IF + END SUBROUTINE FCN + +C------------------------------------------------------------------------------- +C +C MPF +C +C If ROOT is not zero then returns value of time when M==ROOT in TOUT. Else, +C runs until TOUT and returns value in M. If PRINT_EVERY is non-zero then +C the solution is printed every PRINT_EVERY time units or every H (which ever +C is greater). +C +C This routine is not meant to be precise, it is only intended to be good +C enough for providing a working example of ODRPACK95 with bounds. 4th order +C Runge Kutta and linear interpolation are used for numerical integration and +C root finding, respectively. +C +C M - MPF +C C - Total Cyclin +C KWEE, K25, K25P - Model parameters (BETA(1:3)) +C + SUBROUTINE MPF(M,C,KWEE,K25,K25P,PRINT_EVERY,TOUT,ROOT) + USE REAL_PRECISION + REAL (KIND=R8), INTENT(OUT) :: M + REAL (KIND=R8), INTENT(IN) :: C, KWEE, K25, K25P, + + PRINT_EVERY, ROOT + REAL (KIND=R8), INTENT(INOUT) :: TOUT + ! Local variables + REAL (KIND=R8), PARAMETER :: H = 1.0D-1 + REAL (KIND=R8) :: LAST_PRINT, LAST_M, LAST_T, T + REAL (KIND=R8) :: K1, K2, K3, K4 + INTERFACE + FUNCTION DMDT(M,C,KWEE,K25,K25P) RESULT(RES) + USE REAL_PRECISION + REAL (KIND=R8) :: M, C, KWEE, K25, K25P, RES + END FUNCTION + END INTERFACE + M = 0.0D0 + T = 0.0D0 + LAST_PRINT = 0.0D0 + IF ( PRINT_EVERY .GT. 0.0D0 ) THEN + WRITE(*,*) T, M + END IF + DO WHILE ( T .LT. TOUT ) + LAST_T = T + LAST_M = M + K1 = H*DMDT(M,C,KWEE,K25,K25P) + K2 = H*DMDT(M+K1/2,C,KWEE,K25,K25P) + K3 = H*DMDT(M+K2/2,C,KWEE,K25,K25P) + K4 = H*DMDT(M+K3,C,KWEE,K25,K25P) + M = M+(K1+2*K2+2*K3+K4)/6 + T = T + H + IF ( T .GE. PRINT_EVERY+LAST_PRINT .AND. + + PRINT_EVERY .GT. 0.0D0 ) + + THEN + WRITE(*,*) T, M + LAST_PRINT = T + END IF + IF ( ROOT .GT. 0.0D0 ) THEN + IF ( LAST_M .LE. ROOT .AND. ROOT .LT. M ) THEN + TOUT = (T-LAST_T)/(M-LAST_M)*(ROOT-LAST_M)+LAST_T + RETURN + END IF + END IF + END DO + END SUBROUTINE MPF + + +C Equation from Zwolak et al. 2001. + FUNCTION DMDT(M,C,KWEE,K25,K25P) RESULT(RES) + USE REAL_PRECISION + REAL (KIND=R8) :: M, C, KWEE, K25, K25P, RES + RES = KWEE*M+(K25+K25P*M**2)*(C-M) + END FUNCTION DMDT diff --git a/dataassim/math/optimization/odrpack95/lpkbls.f b/dataassim/math/optimization/odrpack95/lpkbls.f new file mode 100644 index 0000000..f35cb5e --- /dev/null +++ b/dataassim/math/optimization/odrpack95/lpkbls.f @@ -0,0 +1,2355 @@ +*DASUM + FUNCTION DASUM(N,DX,INCX) RESULT(DASUMR) +C***Begin Prologue DASUM +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A3A +C***Keywords Add,BLAS,REAL (KIND=R8),Linear Algebra,Magnitude,Sum, +C Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. OF TEXAS) +C Krogh, F. T., (JPL) +C***Purpose Sum of Magnitudes of D.P. Vector Components +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C --Output-- +C DASUM REAL (KIND=R8) result (Zero IF N .LE. 0) +C Returns sum of magnitudes of Real (Kind=R8) DX. +C DASUM = Sum from 0 to N-1 of DABS(DX(1+I*INCX)) +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms For FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines called (none) +C***End Prologue DASUM + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,N + +C...Array arguments + REAL (KIND=R8) + & DX(*) + +C...Result + REAL (KIND=R8) + & DASUMR + +C...Local scalars + INTEGER + & I,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & DABS,MOD + + +C***First executable statement DASUM + + + DASUMR = 0.E0_R8 + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C Code for increments not equal to 1. + + NS = N*INCX + DO 10 I=1,NS,INCX + DASUMR = DASUMR + DABS(DX(I)) + 10 CONTINUE + RETURN + +C Code for increments equal to 1. + +C Clean-up loop so remaining vector length is a multiple of 6. + + 20 M = MOD(N,6) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DASUMR = DASUMR + DABS(DX(I)) + 30 CONTINUE + IF( N .LT. 6 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,6 + DASUMR = DASUMR + DABS(DX(I)) + DABS(DX(I+1)) + DABS(DX(I+2)) + 1 + DABS(DX(I+3)) + DABS(DX(I+4)) + DABS(DX(I+5)) + 50 CONTINUE + RETURN + END +*DAXPY + SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) +C***Begin Prologue DAXPY +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A7 +C***Keywords BLAS,REAL (KIND=R8),Linear Algebra,Triad,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose D.P Computation Y = A*X + Y +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DA REAL (KIND=R8) scalar multiplier +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C DY REAL (KIND=R8) vector with N elements +C INCY Storage spacing between elements of DY +C --Output-- +C DY REAL (KIND=R8) result (unchanged IF N .LE. 0) +C Overwrite REAL (KIND=R8) DY with REAL (KIND=R8) DA*DX + DY. +C For I = 0 to N-1, replace DY(LY+I*INCY) with DA*DX(LX+I*INCX) + +C DY(LY+I*INCY), where LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N +C and LY is defined in a similar way using INCY. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines called (none) +C***End Prologue DAXPY + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & DA + INTEGER + & INCX,INCY,N + +C...Array arguments + REAL (KIND=R8) + & DX(*),DY(*) + +C...Local scalars + INTEGER + & I,IX,IY,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DAXPY + + + IF(N.LE.0.OR.DA.EQ.0.E0_R8) RETURN + IF(INCX.EQ.INCY) THEN + IF(INCX-1.LT.0) THEN + GOTO 5 + ELSE IF (INCX-1.EQ.0) THEN + GOTO 20 + ELSE IF (INCX-1.GT.0) THEN + GOTO 60 + END IF + END IF + 5 CONTINUE + +C Code for nonequal or nonpositive increments. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C Code for both increments equal to 1 + + +C Clean-up loop so remaining vector length is a multiple of 4. + + 20 M = MOD(N,4) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DY(I) + DA*DX(I) + 30 CONTINUE + IF( N .LT. 4 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I + 1) = DY(I + 1) + DA*DX(I + 1) + DY(I + 2) = DY(I + 2) + DA*DX(I + 2) + DY(I + 3) = DY(I + 3) + DA*DX(I + 3) + 50 CONTINUE + RETURN + +C Code for equal, positive, nonunit increments. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DY(I) = DA*DX(I) + DY(I) + 70 CONTINUE + RETURN + END +*DCHEX + SUBROUTINE DCHEX(R,LDR,P,K,L,Z,LDZ,NZ,C,S,JOB) +C***Begin Prologue DCHEX +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D7B +C***Keywords Cholesky Decomposition,REAL (KIND=R8),Exchange, +C Linear Algebra,LINPACK,Matrix,Positive Definite +C***Author Stewart, G. W., (U. of Maryland) +C***Purpose Updates the Cholesky Factorization A=TRANS(R)*R of a +C positive definite matrix A of order P under diagonal +C permutations of the form TRANS(E)*A*E where E is a +C permutation matrix. +C***Description +C DCHEX updates the Cholesky Factorization +C A = TRANS(R)*R +C of a positive definite matrix A of order P under diagonal +C permutations of the form +C TRANS(E)*A*E +C where E is a permutation matrix. Specifically, given +C an upper triangular matrix R and a permutation matrix +C E (which is specified by K, L, and JOB), DCHEX determines +C an orthogonal matrix U such that +C U*R*E = RR, +C where RR is upper triangular. At the users option, the +C transformation U will be multiplied into the array Z. +C If A = TRANS(X)*X, so that R is the triangular part of the +C QR factorization of X, then RR is the triangular part of the +C QR factorization of X*E, i.e. X with its columns permuted. +C For a less terse description of what DCHEX does and how +C it may be applied, see the LINPACK guide. +C The matrix Q is determined as the product U(L-K)*...*U(1) +C of plane rotations of the form +C ( C(I) S(I) ) +C ( ) , +C ( -S(I) C(I) ) +C where C(I) is REAL (KIND=R8). The rows these rotations operate +C on are described below. +C There are two types of permutations, which are determined +C By the value of JOB. +C 1. Right circular shift (JOB = 1). +C The columns are rearranged in the following order. +C 1,...,K-1,L,K,K+1,...,L-1,L+1,...,P. +C U is the product of L-K rotations U(I), where U(I) +C acts in the (L-I,L-I+1)-plane. +C 2. Left circular shift (JOB = 2). +C The columns are rearranged in the following order +C 1,...,K-1,K+1,K+2,...,L,K,L+1,...,P. +C U is the product of L-K rotations U(I), where U(I) +C Acts in the (K+I-1,K+I)-plane. +C On entry +C R REAL (KIND=R8)(LDR,P), where LDR .GE. P. +C R contains the upper triangular factor +C that is to be updated. Elements of R +C below the diagonal are not referenced. +C LDR INTEGER. +C LDR is the leading dimension of the array R. +C P INTEGER. +C P is the order of the matrix R. +C K INTEGER. +C K is the first column to be permuted. +C L INTEGER. +C L is the last column to be permuted. +C L must be strictly greater than K. +C Z REAL (KIND=R8)(LDZ,N)Z), where LDZ .GE. P. +C Z is an array of NZ P-vectors into which the +C transformation U is multiplied. Z is +C not referenced if NZ = 0. +C LDZ INTEGER. +C LDZ is the leading dimension of the array Z. +C NZ INTEGER. +C NZ is the number of columns of the matrix Z. +C JOB INTEGER. +C JOB determines the type of permutation. +C JOB = 1 Right circular shift. +C JOB = 2 Left circular shift. +C On return +C R Contains the updated factor. +C Z Contains the updated matrix Z. +C C REAL (KIND=R8)(P). +C C contains the cosines of the transforming rotations. +C S REAL (KIND=R8)(P). +C S contains the sines of the transforming rotations. +C LINPACK. This version dated 08/14/78 . +C G. W. Stewart, University of Maryland, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines called DROTG +C***End Prologue DCHEX + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & JOB,K,L,LDR,LDZ,NZ,P + +C...Array arguments + REAL (KIND=R8) + & C(*),R(LDR,*),S(*),Z(LDZ,*) + +C...Local scalars + REAL (KIND=R8) + & T,T1 + INTEGER + & I,II,IL,IU,J,JJ,KM1,KP1,LM1,LMK + +C...External subroutines + EXTERNAL + & DROTG + +C...Intrinsic functions + INTRINSIC + & MAX0,MIN0 + + +C***First executable statement DCHEX + + + KM1 = K - 1 + KP1 = K + 1 + LMK = L - K + LM1 = L - 1 + +C Perform the appropriate task. + + IF (JOB.EQ.1) THEN + GOTO 10 + ELSE IF (JOB.EQ.2) THEN + GOTO 130 + END IF + +C Right circular shift. + + 10 CONTINUE + +C Reorder the columns. + + DO 20 I = 1, L + II = L - I + 1 + S(I) = R(II,L) + 20 CONTINUE + DO 40 JJ = K, LM1 + J = LM1 - JJ + K + DO 30 I = 1, J + R(I,J+1) = R(I,J) + 30 CONTINUE + R(J+1,J+1) = 0.0E0_R8 + 40 CONTINUE + IF (K .EQ. 1) GO TO 60 + DO 50 I = 1, KM1 + II = L - I + 1 + R(I,K) = S(II) + 50 CONTINUE + 60 CONTINUE + +C Calculate the rotations. + + T = S(1) + DO 70 I = 1, LMK + T1 = S(I) + CALL DROTG(S(I+1),T,C(I),T1) + S(I) = T1 + T = S(I+1) + 70 CONTINUE + R(K,K) = T + DO 90 J = KP1, P + IL = MAX0(1,L-J+1) + DO 80 II = IL, LMK + I = L - II + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 80 CONTINUE + 90 CONTINUE + +C If required, apply the transformations to Z. + + IF (NZ .LT. 1) GO TO 120 + DO 110 J = 1, NZ + DO 100 II = 1, LMK + I = L - II + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE + GO TO 260 + +C Left circular shift + + 130 CONTINUE + +C Reorder the columns + + DO 140 I = 1, K + II = LMK + I + S(II) = R(I,K) + 140 CONTINUE + DO 160 J = K, LM1 + DO 150 I = 1, J + R(I,J) = R(I,J+1) + 150 CONTINUE + JJ = J - KM1 + S(JJ) = R(J+1,J+1) + 160 CONTINUE + DO 170 I = 1, K + II = LMK + I + R(I,L) = S(II) + 170 CONTINUE + DO 180 I = KP1, L + R(I,L) = 0.0E0_R8 + 180 CONTINUE + +C Reduction loop. + + DO 220 J = K, P + IF (J .EQ. K) GO TO 200 + +C Apply the rotations. + + IU = MIN0(J-1,L-1) + DO 190 I = K, IU + II = I - K + 1 + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 190 CONTINUE + 200 CONTINUE + IF (J .GE. L) GO TO 210 + JJ = J - K + 1 + T = S(JJ) + CALL DROTG(R(J,J),T,C(JJ),S(JJ)) + 210 CONTINUE + 220 CONTINUE + +C Apply the rotations to Z. + + IF (NZ .LT. 1) GO TO 250 + DO 240 J = 1, NZ + DO 230 I = K, LM1 + II = I - KM1 + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + 260 CONTINUE + RETURN + END +*DCOPY + SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) +C***Begin Prologue DCOPY +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A5 +C***Keywords BLAS,Copy,REAL (KIND=R8),Linear Algebra,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose D.P. Vector Copy Y = X +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C DY REAL (KIND=R8) vector with N elements +C INCY Storage spacing between elements of DY +C --Output-- +C DY Copy of vector DX (unchanged if N .LE. 0) +C Copy REAL (KIND=R8) DX to REAL (KIND=R8) DY. +C For I = 0 to N-1, copy DX(LX+I*INCX) to DY(LY+I*INCY), +C where LX = 1 if INCX .GE. 0, else LX = (-INCX)*N, and LY is +C defined in a similar way using INCY. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines called (none) +C***End Prologue DCOPY + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,INCY,N + +C...Array arguments + REAL (KIND=R8) + & DX(*),DY(*) + +C...Local scalars + INTEGER + & I,IX,IY,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DCOPY + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) THEN + IF(INCX-1.LT.0) THEN + GOTO 5 + ELSE IF(INCX-1.EQ.0) THEN + GOTO 20 + ELSE IF(INCX-1.GT.0) THEN + GOTO 60 + END IF + END IF + 5 CONTINUE + +C Code for unequal or nonpositive increments. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C Code for both increments equal to 1 + + +C Clean-up loop so remaining vector length is a multiple of 7. + + 20 M = MOD(N,7) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DX(I) + 30 CONTINUE + IF( N .LT. 7 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,7 + DY(I) = DX(I) + DY(I + 1) = DX(I + 1) + DY(I + 2) = DX(I + 2) + DY(I + 3) = DX(I + 3) + DY(I + 4) = DX(I + 4) + DY(I + 5) = DX(I + 5) + DY(I + 6) = DX(I + 6) + 50 CONTINUE + RETURN + +C Code for equal, positive, nonunit increments. + + 60 CONTINUE + NS=N*INCX + DO 70 I=1,NS,INCX + DY(I) = DX(I) + 70 CONTINUE + RETURN + END +*DDOT + FUNCTION DDOT(N,DX,INCX,DY,INCY) RESULT(DDOTR) +C***Begin Prologue DDOT +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A4 +C***Keywords BLAS,REAL (KIND=R8),Inner Product,Linear Algebra,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose D.P. Inner Product of D.P. Vectors +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C DY REAL (KIND=R8) vector with N elements +C INCY Storage spacing between elements of DY +C --Output-- +C DDOT REAL (KIND=R8) dot product (zero if N .LE. 0) +C returns the dot product of REAL (KIND=R8) DX and DY. +C DDOT = SUM for I = 0 to N-1 of DX(LX+I*INCX) * DY(LY+I*INCY) +C where LX = 1 if INCX .GE. 0, else LX = (-INCX)*N, and LY is +C defined in a similar way using INCY. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines called (none) +C***End Prologue DDOT + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,INCY,N + +C...Array arguments + REAL (KIND=R8) + & DX(*),DY(*) + +C...Result + REAL (KIND=R8) + & DDOTR + +C...Local scalars + INTEGER + & I,IX,IY,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DDOT + + + DDOTR = 0.E0_R8 + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) THEN + IF(INCX-1.LT.0) THEN + GOTO 5 + ELSE IF(INCX-1.EQ.0) THEN + GOTO 20 + ELSE IF(INCX-1.GT.0) THEN + GOTO 60 + END IF + END IF + 5 CONTINUE + +C Code for unequal or nonpositive increments. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DDOTR = DDOTR + DX(IX)*DY(IY) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C Code for both increments equal to 1. + + +C Clean-up loop so remaining vector length is a multiple of 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DDOTR = DDOTR + DX(I)*DY(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DDOTR = DDOTR + DX(I)*DY(I) + DX(I+1)*DY(I+1) + + 1 DX(I + 2)*DY(I + 2) + DX(I + 3)*DY(I + 3) + DX(I + 4)*DY(I + 4) + 50 CONTINUE + RETURN + +C Code for positive equal increments .NE.1. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DDOTR = DDOTR + DX(I)*DY(I) + 70 CONTINUE + RETURN + END +*DNRM2 + FUNCTION DNRM2(N,DX,INCX) RESULT(DNRM2R) +C***Begin Prologue DNRM2 +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A3B +C***Keywords BLAS,REAL (KIND=R8),Euclidean,L2,Length,Linear Algebra, +C Norm,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C KROGH, F. T., (JPL) +C***Purpose Euclidean Length (L2 Norm) of D.P. Vector +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C --Output-- +C DNRM2 REAL (KIND=R8) result (zero if N .LE. 0) +C Euclidean norm of the N-vector stored in DX() with storage +C increment INCX . +C If N .LE. 0 return with result = 0. +C If N .GE. 1 then INCX must be .GE. 1 +C C.L. Lawson, 1978 Jan 08 +C Four Phase Method Using two built-in constants that are +C hopefully applicable to all machines. +C CUTLO = Maximum of DSQRT(U/EPS) over all known machines. +C CUTHI = Minimum of DSQRT(V) over all known machines. +C where +C EPS = smallest no. such that EPS + 1. .GT. 1. +C U = smallest positive no. (underflow limit) +C V = largest no. (overflow limit) +C Brief outline of algorithm.. +C Phase 1 Scans zero components. +C Move to Phase 2 when a component is nonzero and .LE. CUTLO +C Move to Phase 3 when a component is .GT. CUTLO +C Move to Phase 4 when a component is .GE. CUTHI/M +C where M = N for X() REAL and M = 2*N for COMPLEX. + +C Values for CUTLO and CUTHI.. +C From the environmental parameters listed in the IMSL converter +C document the limiting values are as follows.. +C CUTLO, S.P. U/EPS = 2**(-102) for Honeywell. Close seconds are +C UNIVAC and DEC at 2**(-103) +C thus CUTLO = 2**(-51) = 4.44089E-16_R8 +C CUTHI, S.P. V = 2**127 for UNIVAC, Honeywell, and DEC. +C thus CUTHI = 2**(63.5) = 1.30438E19_R8 +C CUTLO, D.P. U/EPS = 2**(-67) for Honeywell and DEC. +C thus CUTLO = 2**(-33.5) = 8.23181E-11_R8 +C CUTHI, D.P. Same as S.P. CUTHI = 1.30438E19_R8 +C DATA CUTLO, CUTHI / 8.232E-11_R8, 1.304E19_R8 / +C DATA CUTLO, CUTHI / 4.441E-16_R8, 1.304E19_R8 / +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines called (none) +C***End Prologue DNRM2 + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,N + +C...Array arguments + REAL (KIND=R8) + & DX(*) + +C...Result + REAL (KIND=R8) + & DNRM2R + +C...Local scalars + REAL (KIND=R8) + & CUTHI,CUTLO,HITEST,ONE,SUM,XMAX,ZERO + INTEGER + & I,J,NEXT,NN + +C...Intrinsic functions + INTRINSIC + & DABS,DSQRT,FLOAT + +C...Data statements + DATA + & ZERO,ONE/0.0E0_R8,1.0E0_R8/ + DATA + & CUTLO,CUTHI/8.232E-11_R8,1.304E19_R8/ + + +C***First executable statement DNRM2 + + + XMAX = ZERO + IF(N .GT. 0) GO TO 10 + DNRM2R = ZERO + GO TO 300 + + 10 NEXT=30 + SUM = ZERO + NN = N * INCX +C Begin main loop + I = 1 + 20 IF (NEXT.EQ.30) THEN; GOTO 30; END IF + IF (NEXT.EQ.50) THEN; GOTO 50; END IF + IF (NEXT.EQ.70) THEN; GOTO 70; END IF + IF (NEXT.EQ.110) THEN; GOTO 110; END IF + 30 IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 + NEXT=50 + XMAX = ZERO + +C Phase 1. Sum is zero + + 50 IF( DX(I) .EQ. ZERO) GO TO 200 + IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 + +C Prepare for Phase 2. + NEXT=70 + GO TO 105 + +C Prepare for Phase 4. + + 100 I = J + NEXT=110 + SUM = (SUM / DX(I)) / DX(I) + 105 XMAX = DABS(DX(I)) + GO TO 115 + +C Phase 2. Sum is small. +C Scale to avoid destructive underflow. + + 70 IF( DABS(DX(I)) .GT. CUTLO ) GO TO 75 + +C Common code for Phases 2 and 4. +C In Phase 4 sum is large. Scale to avoid overflow. + + 110 IF( DABS(DX(I)) .LE. XMAX ) GO TO 115 + SUM = ONE + SUM * (XMAX / DX(I))**2 + XMAX = DABS(DX(I)) + GO TO 200 + + 115 SUM = SUM + (DX(I)/XMAX)**2 + GO TO 200 + + +C Prepare for Phase 3. + + 75 SUM = (SUM * XMAX) * XMAX + + +C For REAL OR D.P. set HITEST = CUTHI/N +C For COMPLEX set HITEST = CUTHI/(2*N) + + 85 HITEST = CUTHI/FLOAT( N ) + +C Phase 3. Sum is mid-range. No scaling. + + DO 95 J =I,NN,INCX + IF(DABS(DX(J)) .GE. HITEST) GO TO 100 + SUM = SUM + DX(J)**2 + 95 CONTINUE + DNRM2R = DSQRT( SUM ) + GO TO 300 + + 200 CONTINUE + I = I + INCX + IF ( I .LE. NN ) GO TO 20 + +C End of main loop. + +C Compute square root and adjust for scaling. + + DNRM2R = XMAX * DSQRT(SUM) + 300 CONTINUE + RETURN + END +*DPODI + SUBROUTINE DPODI(A,LDA,N,DET,JOB) +C***Begin Prologue DPODI +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D2B1B,D3B1B +C***Keywords Determinant,REAL (KIND=R8),Factor,Inverse, +C Linear Algebra,LINPACK,Matrix,Positive Definite +C***AUTHOR Moler, C. B., (U. of New Mexico) +C***PURPOSE Computes the determinant and inverse of a certain double +C precision symmetric positive definite matrix (see abstract) +C using the factors computed by DPOCO, DPOFA or DQRDC. +C***Description +C DPODI computes the determinant and inverse of a certain +C REAL (KIND=R8) symmetric positive definite matrix (see below) +C using the factors computed by DPOCO, DPOFA or DQRDC. +C On entry +C A REAL (KIND=R8)(LDA, N) +C The output A from DPOCO or DPOFA +C or the output X from DQRDC. +C LDA INTEGER +C The leading dimension of the array A . +C N INTEGER +C The order of the matrix A . +C JOB INTEGER +C = 11 Both determinant and inverse. +C = 01 Inverse only. +C = 10 Determinant only. +C On return +C A If DPOCO or DPOFA was used to factor A , then +C DPODI produces the upper half of inverse(A) . +C If DQRDC was used to decompose X , then +C DPODI produces the upper half of inverse(trans(X)*X) +C where trans(x) is the transpose. +C Elements of A below the diagonal are unchanged. +C If the units digit of JOB is zero, A is unchanged. +C DET REAL (KIND=R8)(2) +C Determinant of A or of trans(X)*X if requested. +C Otherwise not referenced. +C Determinant = DET(1) * 10.0**DET(2) +C with 1.0 .LE. DET(1) .LT. 10.0 +C or DET(1) .EQ. 0.0 . +C Error condition +C A division by zero will occur if the input factor contains +C a zero on the diagonal and the inverse is requested. +C It will not occur if the subroutines are called correctly +C and if DPOCO or DPOFA has set info .EQ. 0 . +C LINPACK. This version dated 08/14/78 . +C Cleve Moler, University Of New Mexico, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines called DAXPY,DSCAL +C***End Prologue DPODI + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER JOB,LDA,N + +C...Array arguments + REAL (KIND=R8) A(LDA,*),DET(*) + +C...Local scalars + REAL (KIND=R8) S,T + INTEGER I,J,JM1,K,KP1 + +C...External subroutines + EXTERNAL DAXPY,DSCAL + +C...Intrinsic functions + INTRINSIC MOD + + +C***First executable statement DPODI + + + IF (JOB/10 .EQ. 0) GO TO 70 + DET(1) = 1.0E0_R8 + DET(2) = 0.0E0_R8 + S = 10.0E0_R8 + DO 50 I = 1, N + DET(1) = A(I,I)**2*DET(1) +C ...Exit + IF (DET(1) .EQ. 0.0E0_R8) GO TO 60 + 10 IF (DET(1) .GE. 1.0E0_R8) GO TO 20 + DET(1) = S*DET(1) + DET(2) = DET(2) - 1.0E0_R8 + GO TO 10 + 20 CONTINUE + 30 IF (DET(1) .LT. S) GO TO 40 + DET(1) = DET(1)/S + DET(2) = DET(2) + 1.0E0_R8 + GO TO 30 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + +C Compute inverse(R) + + IF (MOD(JOB,10) .EQ. 0) GO TO 140 + DO 100 K = 1, N + A(K,K) = 1.0E0_R8/A(K,K) + T = -A(K,K) + CALL DSCAL(K-1,T,A(1,K),1) + KP1 = K + 1 + IF (N .LT. KP1) GO TO 90 + DO 80 J = KP1, N + T = A(K,J) + A(K,J) = 0.0E0_R8 + CALL DAXPY(K,T,A(1,K),1,A(1,J),1) + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C Form inverse(R) * trans(inverse(R)) + + DO 130 J = 1, N + JM1 = J - 1 + IF (JM1 .LT. 1) GO TO 120 + DO 110 K = 1, JM1 + T = A(K,J) + CALL DAXPY(K,T,A(1,J),1,A(1,K),1) + 110 CONTINUE + 120 CONTINUE + T = A(J,J) + CALL DSCAL(J,T,A(1,J),1) + 130 CONTINUE + 140 CONTINUE + RETURN + END +*DQRDC + SUBROUTINE DQRDC(X,LDX,N,P,QRAUX,JPVT,WORK,JOB) +C***Begin Prologue DQRDC +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D5 +C***Keywords Decomposition,REAL (KIND=R8),Linear Algebra,LINPACK, +C Matrix,Orthogonal Triangular +C***Author Stewart, G. W., (U. of Maryland) +C***Purpose Uses Householder Transformations to Compute the QR Factori- +C zation of N by P matrix X. Column pivoting is optional. +C***Description +C DQRDC uses householder transformations to compute the QR +C factorization of an N by P matrix X. Column pivoting +C based on the 2-norms of the reduced columns may be +C performed at the user's option. +C On Entry +C X REAL (KIND=R8)(LDX,P), where LDX .GE. N. +C X contains the matrix whose decomposition is to be +C computed. +C LDX INTEGER. +C LDX is the leading dimension of the array X. +C N INTEGER. +C N is the number of rows of the matrix X. +C P INTEGER. +C P is the number of columns of the matrix X. +C JPVT INTEGER(P). +C JPVT contains integers that control the selection +C of the pivot columns. The K-th column X(K) of X +C is placed in one of three classes according to the +C value of JPVT(K). +C If JPVT(K) .GT. 0, then X(K) is an initial +C column. +C If JPVT(K) .EQ. 0, then X(K) is a free column. +C If JPVT(K) .LT. 0, then X(K) is a final column. +C Before the decomposition is computed, initial columns +C are moved to the beginning of the array X and final +C columns to the end. Both initial and final columns +C are frozen in place during the computation and only +C free columns are moved. At the K-th stage of the +C reduction, if X(K) is occupied by a free column +C it is interchanged with the free column of largest +C reduced norm. JPVT is not referenced if +C JOB .EQ. 0. +C WORK REAL (KIND=R8)(P). +C WORK is a work array. WORK is not referenced if +C JOB .EQ. 0. +C JOB INTEGER. +C JOB is an integer that initiates column pivoting. +C If JOB .EQ. 0, no pivoting is done. +C If JOB .NE. 0, pivoting is done. +C On Return +C X X contains in its upper triangle the upper +C triangular matrix R of the QR factorization. +C Below its diagonal X contains information from +C which the orthogonal part of the decomposition +C can be recovered. Note that if pivoting has +C been requested, the decomposition is not that +C of the original matrix X but that of X +C with its columns permuted as described by JPVT. +C QRAUX REAL (KIND=R8)(P). +C QRAUX contains further information required to recover +C the orthogonal part of the decomposition. +C JPVT JPVT(K) contains the index of the column of the +C original matrix that has been interchanged into +C the K-th column, if pivoting was requested. +C LINPACK. This version dated 08/14/78 . +C G. W. Stewart, University of Maryland, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines Called DAXPY,DDOT,DNRM2,DSCAL,DSWAP +C***End Prologue DQRDC + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & JOB,LDX,N,P + +C...Array arguments + REAL (KIND=R8) + & QRAUX(*),WORK(*),X(LDX,*) + INTEGER + & JPVT(*) + +C...Local scalars + REAL (KIND=R8) + & MAXNRM,NRMXL,T,TT + INTEGER + & J,JJ,JP,L,LP1,LUP,MAXJ,PL,PU + LOGICAL + & NEGJ,SWAPJ + +C...External functions + REAL (KIND=R8) + & DDOT,DNRM2 + EXTERNAL + & DDOT,DNRM2 + +C...External subroutines + EXTERNAL + & DAXPY,DSCAL,DSWAP + +C...Intrinsic functions + INTRINSIC + & DABS,DMAX1,DSIGN,DSQRT,MIN0 + + +C***First executable statement DQRDC + + + PL = 1 + PU = 0 + IF (JOB .EQ. 0) GO TO 60 + +C Pivoting has been requested. Rearrange the columns +C according to JPVT. + + DO 20 J = 1, P + SWAPJ = JPVT(J) .GT. 0 + NEGJ = JPVT(J) .LT. 0 + JPVT(J) = J + IF (NEGJ) JPVT(J) = -J + IF (.NOT.SWAPJ) GO TO 10 + IF (J .NE. PL) CALL DSWAP(N,X(1,PL),1,X(1,J),1) + JPVT(J) = JPVT(PL) + JPVT(PL) = J + PL = PL + 1 + 10 CONTINUE + 20 CONTINUE + PU = P + DO 50 JJ = 1, P + J = P - JJ + 1 + IF (JPVT(J) .GE. 0) GO TO 40 + JPVT(J) = -JPVT(J) + IF (J .EQ. PU) GO TO 30 + CALL DSWAP(N,X(1,PU),1,X(1,J),1) + JP = JPVT(PU) + JPVT(PU) = JPVT(J) + JPVT(J) = JP + 30 CONTINUE + PU = PU - 1 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + +C Compute the norms of the free columns. + + IF (PU .LT. PL) GO TO 80 + DO 70 J = PL, PU + QRAUX(J) = DNRM2(N,X(1,J),1) + WORK(J) = QRAUX(J) + 70 CONTINUE + 80 CONTINUE + +C Perform the Householder Reduction of X. + + LUP = MIN0(N,P) + DO 200 L = 1, LUP + IF (L .LT. PL .OR. L .GE. PU) GO TO 120 + +C LOCATE THE COLUMN OF LARGEST NORM AND BRING IT +C INTO THE PIVOT POSITION. + + MAXNRM = 0.0E0_R8 + MAXJ = L + DO 100 J = L, PU + IF (QRAUX(J) .LE. MAXNRM) GO TO 90 + MAXNRM = QRAUX(J) + MAXJ = J + 90 CONTINUE + 100 CONTINUE + IF (MAXJ .EQ. L) GO TO 110 + CALL DSWAP(N,X(1,L),1,X(1,MAXJ),1) + QRAUX(MAXJ) = QRAUX(L) + WORK(MAXJ) = WORK(L) + JP = JPVT(MAXJ) + JPVT(MAXJ) = JPVT(L) + JPVT(L) = JP + 110 CONTINUE + 120 CONTINUE + QRAUX(L) = 0.0E0_R8 + IF (L .EQ. N) GO TO 190 + +C Compute the Householder Transformation for column L. + + NRMXL = DNRM2(N-L+1,X(L,L),1) + IF (NRMXL .EQ. 0.0E0_R8) GO TO 180 + IF (X(L,L) .NE. 0.0E0_R8) NRMXL = DSIGN(NRMXL,X(L,L)) + CALL DSCAL(N-L+1,1.0E0_R8/NRMXL,X(L,L),1) + X(L,L) = 1.0E0_R8 + X(L,L) + +C Apply the transformation to the remaining columns, +C updating the norms. + + LP1 = L + 1 + IF (P .LT. LP1) GO TO 170 + DO 160 J = LP1, P + T = -DDOT(N-L+1,X(L,L),1,X(L,J),1)/X(L,L) + CALL DAXPY(N-L+1,T,X(L,L),1,X(L,J),1) + IF (J .LT. PL .OR. J .GT. PU) GO TO 150 + IF (QRAUX(J) .EQ. 0.0E0_R8) GO TO 150 + TT = 1.0E0_R8 - (DABS(X(L,J))/QRAUX(J))**2 + TT = DMAX1(TT,0.0E0_R8) + T = TT + TT = 1.0E0_R8 + 0.05E0_R8*TT*(QRAUX(J)/WORK(J))**2 + IF (TT .EQ. 1.0E0_R8) GO TO 130 + QRAUX(J) = QRAUX(J)*DSQRT(T) + GO TO 140 + 130 CONTINUE + QRAUX(J) = DNRM2(N-L,X(L+1,J),1) + WORK(J) = QRAUX(J) + 140 CONTINUE + 150 CONTINUE + 160 CONTINUE + 170 CONTINUE + +C Save the transformation. + + QRAUX(L) = X(L,L) + X(L,L) = -NRMXL + 180 CONTINUE + 190 CONTINUE + 200 CONTINUE + RETURN + END +*DQRSL + SUBROUTINE DQRSL(X,LDX,N,K,QRAUX,Y,QY,QTY,B,RSD,XB,JOB,INFO) +C***Begin Prologue DQRSL +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D9,D2A1 +C***Keywords REAL (KIND=R8),Linear Algebra,LINPACK,Matrix, +C Orthogonal Triangular,Solve +C***Author Stewart, G. W., (U. Of Maryland) +C***Purpose Applies the output of DQRDC to compute coordinate +C transformations, projections, and least squares solutions. +C***Description +C DQRSL applies the output of DQRDC to compute coordinate +C transformations, projections, and least squares solutions. +C for K .LE. MIN(N,P), let XK be the matrix +C XK = (X(JPVT(1)),X(JPVT(2)), ... ,X(JPVT(K))) +C formed from columnns JPVT(1), ... ,JPVT(K) of the original +C N x P matrix X that was input to DQRDC (if no pivoting was +C done, XK consists of the first K columns of X in their +C original order). DQRDC produces a factored orthogonal matrix Q +C and an upper triangular matrix R such that +C XK = Q * (R) +C (0) +C This information is contained in coded form in the arrays +C X and QRAUX. +C On Entry +C X REAL (KIND=R8)(LDX,P). +C X contains the output of DQRDC. +C LDX INTEGER. +C LDX is the leading dimension of the array X. +C N INTEGER. +C N is the number of rows of the matrix XK. It must +C have the same value as N in DQRDC. +C K INTEGER. +C K is the number of columns of the matrix XK. K +C must not be greater than min(N,P), where P is the +C same as in the calling sequence to DQRDC. +C QRAUX REAL (KIND=R8)(P). +C QRAUX contains the auxiliary output from DQRDC. +C Y REAL (KIND=R8)(N) +C Y contains an N-vector that is to be manipulated +C by DQRSL. +C JOB INTEGER. +C JOB specifies what is to be computed. JOB has +C the decimal expansion ABCDE, with the following +C meaning. +C If A .NE. 0, compute QY. +C If B,C,D, OR E .NE. 0, compute QTY. +C If C .NE. 0, compute B. +C If D .NE. 0, compute RSD. +C If E .NE. 0, compute XB. +C Note that a request to compute B, RSD, or XB +C automatically triggers the computation of QTY, for +C which an array must be provided in the calling +C sequence. +C On Return +C QY REAL (KIND=R8)(N). +C QY contains Q*Y, if its computation has been +C requested. +C QTY REAL (KIND=R8)(N). +C QTY contains trans(Q)*Y, if its computation has +C been requested. Here trans(Q) is the +C transpose of the matrix Q. +C B REAL (KIND=R8)(K) +C B contains the solution of the least squares problem +C Minimize NORM2(Y - XK*B), +C if its computation has been requested. (Note that +C if pivoting was requested in DQRDC, the J-th +C component of B will be associated with column JPVT(J) +C of the original matrix X that was input into DQRDC.) +C RSD REAL (KIND=R8)(N). +C RSD contains the least squares residual Y - XK*B, +C if its computation has been requested. RSD is +C also the orthogonal projection of Y onto the +C orthogonal complement of the column space of XK. +C XB REAL (KIND=R8)(N). +C XB contains the least squares approximation XK*B, +C if its computation has been requested. XB is also +C the orthogonal projection of Y onto the column space +C of X. +C INFO INTEGER. +C INFO is zero unless the computation of B has +C been requested and R is exactly singular. In +C this case, INFO is the index of the first zero +C diagonal element of R and B is left unaltered. +C The parameters QY, QTY, B, RSD, and XB are not referenced +C if their computation is not requested and in this case +C can be replaced by dummy variables in the calling program. +C To save storage, the user may in some cases use the same +C array for different parameters in the calling sequence. A +C frequently occuring example is when one wishes to compute +C any of B, RSD, or XB and does not need Y or QTY. In this +C case one may identify Y, QTY, and one of B, RSD, or XB, while +C providing separate arrays for anything else that is to be +C computed. Thus the calling sequence +c CALL DQRSL(X,LDX,N,K,QRAUX,Y,DUM,Y,B,Y,DUM,110,INFO) +C will result in the computation of B and RSD, with RSD +C overwriting Y. More generally, each item in the following +C list contains groups of permissible identifications for +C a single calling sequence. +C 1. (Y,QTY,B) (RSD) (XB) (QY) +C 2. (Y,QTY,RSD) (B) (XB) (QY) +C 3. (Y,QTY,XB) (B) (RSD) (QY) +C 4. (Y,QY) (QTY,B) (RSD) (XB) +C 5. (Y,QY) (QTY,RSD) (B) (XB) +C 6. (Y,QY) (QTY,XB) (B) (RSD) +C In any group the value returned in the array allocated to +C the group corresponds to the last member of the group. +C LINPACK. This version dated 08/14/78 . +C G. W. Stewart, University of Maryland, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines Called DAXPY,DCOPY,DDOT +C***End Prologue DQRSL + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,JOB,K,LDX,N + +C...Array arguments + REAL (KIND=R8) + & B(*),QRAUX(*),QTY(*),QY(*),RSD(*),X(LDX,*),XB(*), + & Y(*) + +C...Local scalars + REAL (KIND=R8) + & T,TEMP + INTEGER + & I,J,JJ,JU,KP1 + LOGICAL + & CB,CQTY,CQY,CR,CXB + +C...External functions + REAL (KIND=R8) + & DDOT + EXTERNAL + & DDOT + +C...External subroutines + EXTERNAL + & DAXPY,DCOPY + +C...Intrinsic functions + INTRINSIC + & MIN0,MOD + + +C***First executable statement DQRSL + + + INFO = 0 + +C Determine what is to be computed. + + CQY = JOB/10000 .NE. 0 + CQTY = MOD(JOB,10000) .NE. 0 + CB = MOD(JOB,1000)/100 .NE. 0 + CR = MOD(JOB,100)/10 .NE. 0 + CXB = MOD(JOB,10) .NE. 0 + JU = MIN0(K,N-1) + +C Special action when N=1. + + IF (JU .NE. 0) GO TO 40 + IF (CQY) QY(1) = Y(1) + IF (CQTY) QTY(1) = Y(1) + IF (CXB) XB(1) = Y(1) + IF (.NOT.CB) GO TO 30 + IF (X(1,1) .NE. 0.0E0_R8) GO TO 10 + INFO = 1 + GO TO 20 + 10 CONTINUE + B(1) = Y(1)/X(1,1) + 20 CONTINUE + 30 CONTINUE + IF (CR) RSD(1) = 0.0E0_R8 + GO TO 250 + 40 CONTINUE + +C Set up to compute QY or QTY. + + IF (CQY) CALL DCOPY(N,Y,1,QY,1) + IF (CQTY) CALL DCOPY(N,Y,1,QTY,1) + IF (.NOT.CQY) GO TO 70 + +C Compute QY. + + DO 60 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0E0_R8) GO TO 50 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT(N-J+1,X(J,J),1,QY(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,QY(J),1) + X(J,J) = TEMP + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + IF (.NOT.CQTY) GO TO 100 + +C Compute trans(Q)*Y. + + DO 90 J = 1, JU + IF (QRAUX(J) .EQ. 0.0E0_R8) GO TO 80 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT(N-J+1,X(J,J),1,QTY(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,QTY(J),1) + X(J,J) = TEMP + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C Set up to compute B, RSD, or XB. + + IF (CB) CALL DCOPY(K,QTY,1,B,1) + KP1 = K + 1 + IF (CXB) CALL DCOPY(K,QTY,1,XB,1) + IF (CR .AND. K .LT. N) CALL DCOPY(N-K,QTY(KP1),1,RSD(KP1),1) + IF (.NOT.CXB .OR. KP1 .GT. N) GO TO 120 + DO 110 I = KP1, N + XB(I) = 0.0E0_R8 + 110 CONTINUE + 120 CONTINUE + IF (.NOT.CR) GO TO 140 + DO 130 I = 1, K + RSD(I) = 0.0E0_R8 + 130 CONTINUE + 140 CONTINUE + IF (.NOT.CB) GO TO 190 + +C Compute B. + + DO 170 JJ = 1, K + J = K - JJ + 1 + IF (X(J,J) .NE. 0.0E0_R8) GO TO 150 + INFO = J +C ......EXIT + GO TO 180 + 150 CONTINUE + B(J) = B(J)/X(J,J) + IF (J .EQ. 1) GO TO 160 + T = -B(J) + CALL DAXPY(J-1,T,X(1,J),1,B,1) + 160 CONTINUE + 170 CONTINUE + 180 CONTINUE + 190 CONTINUE + IF (.NOT.CR .AND. .NOT.CXB) GO TO 240 + +C Compute RSD or XB as required. + + DO 230 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0E0_R8) GO TO 220 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + IF (.NOT.CR) GO TO 200 + T = -DDOT(N-J+1,X(J,J),1,RSD(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,RSD(J),1) + 200 CONTINUE + IF (.NOT.CXB) GO TO 210 + T = -DDOT(N-J+1,X(J,J),1,XB(J),1)/X(J,J) + CALL DAXPY(N-J+1,T,X(J,J),1,XB(J),1) + 210 CONTINUE + X(J,J) = TEMP + 220 CONTINUE + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + RETURN + END +*DROT + SUBROUTINE DROT(N,DX,INCX,DY,INCY,DC,DS) +C***Begin Prologue DROT +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A8 +C***Keywords BLAS,Givens Rotation,Linear Algebra,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose Apply D.P. Givens Rotation +C***Description +C B L A S Subprogram +C Description of Parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C DY REAL (KIND=R8) vector with N elements +C INCY Storage spacing between elements of DY +C DC D.P. element of rotation matrix +C DS D.P. element of rotation matrix +C --Output-- +C DX Rotated vector (unchanged if N .LE. 0) +C DY Rotated vector (unchanged if N .LE. 0) +C Multiply the 2 x 2 matrix ( DC DS) times the 2 x N matrix (DX**T) +C (-DS DC) (DY**T) +C where **T indicates transpose. The elements of DX are in +C DX(LX+I*INCX), I = 0 to N-1, where LX = 1 if INCX .GE. 0, else +C LX = (-INCX)*N, and similarly for DY using LY and INCY. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines Called (NONE) +C***End Prologue DROT + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & DC,DS + INTEGER + & INCX,INCY,N + +C...Array arguments + REAL (KIND=R8) + & DX(*),DY(*) + +C...Local scalars + REAL (KIND=R8) + & ONE,W,Z,ZERO + INTEGER + & I,KX,KY,NSTEPS + +C...Data statements + DATA + & ZERO,ONE/0.E0_R8,1.E0_R8/ + + +C***First executable statement DROT + + + IF(N .LE. 0 .OR. (DS .EQ. ZERO .AND. DC .EQ. ONE)) GO TO 40 + IF(.NOT. (INCX .EQ. INCY .AND. INCX .GT. 0)) GO TO 20 + + NSTEPS=INCX*N + DO 10 I=1,NSTEPS,INCX + W=DX(I) + Z=DY(I) + DX(I)=DC*W+DS*Z + DY(I)=-DS*W+DC*Z + 10 CONTINUE + GO TO 40 + + 20 CONTINUE + KX=1 + KY=1 + + IF(INCX .LT. 0) KX=1-(N-1)*INCX + IF(INCY .LT. 0) KY=1-(N-1)*INCY + + DO 30 I=1,N + W=DX(KX) + Z=DY(KY) + DX(KX)=DC*W+DS*Z + DY(KY)=-DS*W+DC*Z + KX=KX+INCX + KY=KY+INCY + 30 CONTINUE + 40 CONTINUE + + RETURN + END +*DROTG + SUBROUTINE DROTG(DA,DB,DC,DS) +C***Begin Prologue DROTG +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1B10 +C***Keywords BLAS,Givens Rotation,Linear Algebra,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose Construct D.P. Plane Givens Rotation +C***Description +C B L A S Subprogram +C Description of Parameters +C --Input-- +C DA REAL (KIND=R8) scalar +C DB REAL (KIND=R8) scalar +C --Output-- +C DA REAL (KIND=R8) result R +C DB REAL (KIND=R8) result Z +C DC REAL (KIND=R8) result +C DS REAL (KIND=R8) result +C Designed By C. L. Lawson, JPL, 1977 Sept 08 +C Construct the Givens Transformation +C ( DC DS ) +C G = ( ) , DC**2 + DS**2 = 1 , +C (-DS DC ) +C which zeros the second entry of the 2-vector (DA,DB)**T . +C the quantity R = (+/-)DSQRT(DA**2 + DB**2) overwrites DA in +C storage. The value of DB is overwritten by a value Z which +C allows DC and DS to be recovered by the following algorithm. +C If Z=1 set DC=0.E0_R8 and DS=1.E0_R8 +C If DABS(Z) .LT. 1 set DC=DSQRT(1-Z**2) and DS=Z +C If DABS(Z) .GT. 1 set DC=1/Z and DS=DSQRT(1-DC**2) +C Normally, the subprogram DROT(N,DX,INCX,DY,INCY,DC,DS) will +C next be called to apply the transformation to a 2 by N matrix. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines Called (None) +C***End Prologue DROTG + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & DA,DB,DC,DS + +C...Local scalars + REAL (KIND=R8) + & R,U,V + +C...Intrinsic functions + INTRINSIC + & DABS,DSQRT + + +C***First executable statement DROTG + + + IF (DABS(DA) .LE. DABS(DB)) GO TO 10 + +C *** Here DABS(DA) .GT. DABS(DB) *** + + U = DA + DA + V = DB / U + +C Note that U and R have the sign of DA + + R = DSQRT(.25E0_R8 + V**2) * U + +C Note that DC is positive + + DC = DA / R + DS = V * (DC + DC) + DB = DS + DA = R + RETURN + +C *** Here DABS(DA) .LE. DABS(DB) *** + + 10 IF (DB .EQ. 0.E0_R8) GO TO 20 + U = DB + DB + V = DA / U + +C Note that U and R have the sign of DB +C (R is immediately stored in DA) + + DA = DSQRT(.25E0_R8 + V**2) * U + +C Note that DS is positive + + DS = DB / DA + DC = V * (DS + DS) + IF (DC .EQ. 0.E0_R8) GO TO 15 + DB = 1.E0_R8 / DC + RETURN + 15 DB = 1.E0_R8 + RETURN + +C *** Here DA = DB = 0.E0_R8 *** + + 20 DC = 1.E0_R8 + DS = 0.E0_R8 + RETURN + + END +*DSCAL + SUBROUTINE DSCAL(N,DA,DX,INCX) +C***Begin Prologue DSCAL +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A6 +C***Keywords BLAS,Linear Algebra,Scale,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose D.P. Vector Scale X = A*X +C***Description +C B L A S Subprogram +C Description of Parameters +C --Input-- +C N Number of elements in input vector(s) +C DA REAL (KIND=R8) scale factor +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C --Output-- +C DX REAL (KIND=R8) result (unchanged if N.LE.0) +C Replace REAL (KIND=R8) DX by REAL (KIND=R8) DA*DX. +C For I = 0 to N-1, replace DX(1+I*INCX) with DA * DX(1+I*INCX) +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines Called (None) +C***End Prologue DSCAL + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & DA + INTEGER + & INCX,N + +C...Array arguments + REAL (KIND=R8) + & DX(*) + +C...Local scalars + INTEGER + & I,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DSCAL + + + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C Code for increments not equal to 1. + + NS = N*INCX + DO 10 I = 1,NS,INCX + DX(I) = DA*DX(I) + 10 CONTINUE + RETURN + +C Code for increments equal to 1. + + +C Clean-up loop so remaining vector length is a multiple of 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DX(I) = DA*DX(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I + 1) = DA*DX(I + 1) + DX(I + 2) = DA*DX(I + 2) + DX(I + 3) = DA*DX(I + 3) + DX(I + 4) = DA*DX(I + 4) + 50 CONTINUE + RETURN + END +*DSWAP + SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) +C***Begin Prologue DSWAP +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A5 +C***Keywords BLAS,REAL (KIND=R8),Interchange,Linear Algebra,Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose Interchange D.P. vectors +C***Description +C B L A S Subprogram +C Description of Parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C DY REAL (KIND=R8) vector with N elements +C INCY Storage spacing between elements of DY +C --Output-- +C DX Input vector DY (unchanged if N .LE. 0) +C DY Input vector DX (unchanged if N .LE. 0) +C Interchange REAL (KIND=R8) DX and REAL (KIND=R8) DY. +C For I = 0 TO N-1, interchange DX(LX+I*INCX) and DY(LY+I*INCY), +C where LX = 1 if INCX .GE. 0, else LX = (-INCX)*N, and LY is +C defined in a similar way using INCY. +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines Called (None) +C***End Prologue DSWAP + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,INCY,N + +C...Array arguments + REAL (KIND=R8) + & DX(*),DY(*) + +C...Local scalars + REAL (KIND=R8) + & DTEMP1,DTEMP2,DTEMP3 + INTEGER + & I,IX,IY,M,MP1,NS + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DSWAP + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) THEN + IF(INCX-1.LT.0) THEN + GOTO 5 + ELSE IF(INCX-1.EQ.0) THEN + GOTO 20 + ELSE IF(INCX-1.GT.0) THEN + GOTO 60 + END IF + END IF + 5 CONTINUE + +C Code for unequal or nonpositive increments. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DTEMP1 = DX(IX) + DX(IX) = DY(IY) + DY(IY) = DTEMP1 + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C Code for both increments equal to 1 + + +C Clean-up loop so remaining vector length is a multiple of 3. + + 20 M = MOD(N,3) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 30 CONTINUE + IF( N .LT. 3 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,3 + DTEMP1 = DX(I) + DTEMP2 = DX(I+1) + DTEMP3 = DX(I+2) + DX(I) = DY(I) + DX(I+1) = DY(I+1) + DX(I+2) = DY(I+2) + DY(I) = DTEMP1 + DY(I+1) = DTEMP2 + DY(I+2) = DTEMP3 + 50 CONTINUE + RETURN + 60 CONTINUE + +C Code for equal, positive, nonunit increments. + + NS = N*INCX + DO 70 I=1,NS,INCX + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 70 CONTINUE + RETURN + END +*DTRCO + SUBROUTINE DTRCO(T,LDT,N,RCOND,Z,JOB) +C***Begin Prologue DTRCO +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D2A3 +C***Keywords Condition,REAL (KIND=R8),Factor,Linear Algebra,LINPACK, +C Matrix,Triangular +C***Author Moler, C. B., (U. of New Mexico) +C***Purpose Estimates the condition of a REAL (KIND=R8) triangular +C matrix. +C***Description +C DTRCO estimates the condition of a REAL (KIND=R8) triangular +C matrix. +C On Entry +C T REAL (KIND=R8)(LDT,N) +C T contains the triangular matrix. The zero +C elements of the matrix are not referenced, and +C the corresponding elements of the array can be +C used to store other information. +C LDT INTEGER +C LDT is the leading dimension of the array T. +C N INTEGER +C N is the order of the system. +C JOB INTEGER +C = 0 T is lower triangular. +C = NONZERO T is upper triangular. +C On Return +C RCOND REAL (KIND=R8) +C An estimate of the reciprocal condition of T . +C for the system T*X = B , relative perturbations +C in T and B of size EPSILON may cause +C relative perturbations in X of size EPSILON/RCOND . +C If RCOND is so small that the logical expression +C 1.0 + RCOND .EQ. 1.0 +C is true, then T may be singular to working +C precision. In particular, RCOND is zero if +C exact singularity is detected or the estimate +C underflows. +C Z REAL (KIND=R8)(N) +C A work vector whose contents are usually unimportant. +C If T is close to a singular matrix, then Z is +C an approximate null vector in the sense that +C norm(A*Z) = RCOND*norm(A)*norm(Z) . +C LINPACK. This version dated 08/14/78 . +C Cleve Moler, University of New Mexico, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines Called DASUM,DAXPY,DSCAL +C***End Prologue DTRCO + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & RCOND + INTEGER + & JOB,LDT,N + +C...Array arguments + REAL (KIND=R8) + & T(LDT,*),Z(*) + +C...Local scalars + REAL (KIND=R8) + & EK,S,SM,TNORM,W,WK,WKM,YNORM + INTEGER + & I1,J,J1,J2,K,KK,L + LOGICAL + & LOWER + +C...External functions + REAL (KIND=R8) + & DASUM + EXTERNAL + & DASUM + +C...External subroutines + EXTERNAL + & DAXPY,DSCAL + +C...Intrinsic functions + INTRINSIC + & DABS,DMAX1,DSIGN + + +C***First executable statement DTRCO + + + LOWER = JOB .EQ. 0 + +C Compute 1-norm of T + + TNORM = 0.0E0_R8 + DO 10 J = 1, N + L = J + IF (LOWER) L = N + 1 - J + I1 = 1 + IF (LOWER) I1 = J + TNORM = DMAX1(TNORM,DASUM(L,T(I1,J),1)) + 10 CONTINUE + +C RCOND = 1/(norm(T)*(estimate of norm(inverse(T)))) . +C Estimate = norm(Z)/norm(Y) where T*Z = Y and trans(T)*Y = E . +C Trans(T) is the transpose of T . +C The components of E are chosen to cause maximum local +C growth in the elements of Y . +C The vectors are frequently rescaled to avoid overflow. + +C Solve trans(T)*Y = E + + EK = 1.0E0_R8 + DO 20 J = 1, N + Z(J) = 0.0E0_R8 + 20 CONTINUE + DO 100 KK = 1, N + K = KK + IF (LOWER) K = N + 1 - KK + IF (Z(K) .NE. 0.0E0_R8) EK = DSIGN(EK,-Z(K)) + IF (DABS(EK-Z(K)) .LE. DABS(T(K,K))) GO TO 30 + S = DABS(T(K,K))/DABS(EK-Z(K)) + CALL DSCAL(N,S,Z,1) + EK = S*EK + 30 CONTINUE + WK = EK - Z(K) + WKM = -EK - Z(K) + S = DABS(WK) + SM = DABS(WKM) + IF (T(K,K) .EQ. 0.0E0_R8) GO TO 40 + WK = WK/T(K,K) + WKM = WKM/T(K,K) + GO TO 50 + 40 CONTINUE + WK = 1.0E0_R8 + WKM = 1.0E0_R8 + 50 CONTINUE + IF (KK .EQ. N) GO TO 90 + J1 = K + 1 + IF (LOWER) J1 = 1 + J2 = N + IF (LOWER) J2 = K - 1 + DO 60 J = J1, J2 + SM = SM + DABS(Z(J)+WKM*T(K,J)) + Z(J) = Z(J) + WK*T(K,J) + S = S + DABS(Z(J)) + 60 CONTINUE + IF (S .GE. SM) GO TO 80 + W = WKM - WK + WK = WKM + DO 70 J = J1, J2 + Z(J) = Z(J) + W*T(K,J) + 70 CONTINUE + 80 CONTINUE + 90 CONTINUE + Z(K) = WK + 100 CONTINUE + S = 1.0E0_R8/DASUM(N,Z,1) + CALL DSCAL(N,S,Z,1) + + YNORM = 1.0E0_R8 + +C Solve T*Z = Y + + DO 130 KK = 1, N + K = N + 1 - KK + IF (LOWER) K = KK + IF (DABS(Z(K)) .LE. DABS(T(K,K))) GO TO 110 + S = DABS(T(K,K))/DABS(Z(K)) + CALL DSCAL(N,S,Z,1) + YNORM = S*YNORM + 110 CONTINUE + IF (T(K,K) .NE. 0.0E0_R8) Z(K) = Z(K)/T(K,K) + IF (T(K,K) .EQ. 0.0E0_R8) Z(K) = 1.0E0_R8 + I1 = 1 + IF (LOWER) I1 = K + 1 + IF (KK .GE. N) GO TO 120 + W = -Z(K) + CALL DAXPY(N-KK,W,T(I1,K),1,Z(I1),1) + 120 CONTINUE + 130 CONTINUE +C Make ZNORM = 1.0 + S = 1.0E0_R8/DASUM(N,Z,1) + CALL DSCAL(N,S,Z,1) + YNORM = S*YNORM + + IF (TNORM .NE. 0.0E0_R8) RCOND = YNORM/TNORM + IF (TNORM .EQ. 0.0E0_R8) RCOND = 0.0E0_R8 + RETURN + END +*DTRSL + SUBROUTINE DTRSL(T,LDT,N,B,JOB,INFO) +C***Begin Prologue DTRSL +C***Date Written 780814 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D2A3 +C***Keywords REAL (KIND=R8),Linear Algebra,LINPACK,Matrix,Solve, +C Triangular +C***Author Stewart, G. W., (U. of Maryland) +C***Purpose Solves systems of the form T*X=B or trans(T)*X=B where T +C is a triangular matrix of order N. +C***Description +C DTRSL solves systems of the form +C T * X = B +C or +C trans(T) * X = B +C where T is a triangular matrix of order N. Here trans(T) +C denotes the transpose of the matrix T. +C On Entry +C T REAL (KIND=R8)(LDT,N) +C T contains the matrix of the system. The zero +C elements of the matrix are not referenced, and +C the corresponding elements of the array can be +C used to store other information. +C LDT INTEGER +C LDT is the leading dimension of the array T. +C N INTEGER +C N is the order of the system. +C B REAL (KIND=R8)(N). +C B contains the right hand side of the system. +C JOB INTEGER +C JOB specifies what kind of system is to be solved. +C If JOB is +C 00 solve T*X=B, T lower triangular, +C 01 solve T*X=B, T upper triangular, +C 10 solve trans(T)*X=B, T lower triangular, +C 11 solve trans(T)*X=B, T upper triangular. +C On Return +C B B contains the solution, if INFO .EQ. 0. +C otherwise B is unaltered. +C INFO INTEGER +C INFO contains zero if the system is nonsingular. +C otherwise INFO contains the index of +C the first zero diagonal element of T. +C LINPACK. This version dated 08/14/78 . +C G. W. Stewart, University of Maryland, Argonne National Lab. +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***Routines Called DAXPY,DDOT +C***End Prologue DTRSL + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,JOB,LDT,N + +C...Array arguments + REAL (KIND=R8) + & B(*),T(LDT,*) + +C...Local scalars + REAL (KIND=R8) + & TEMP + INTEGER + & CASE,J,JJ + +C...External functions + REAL (KIND=R8) + & DDOT + EXTERNAL + & DDOT + +C...External subroutines + EXTERNAL + & DAXPY + +C...Intrinsic functions + INTRINSIC + & MOD + + +C***First executable statement DTRSL + + +C Begin block permitting ...exits to 150 + +C Check for zero diagonal elements. + + DO 10 INFO = 1, N +C ......Exit + IF (T(INFO,INFO) .EQ. 0.0E0_R8) GO TO 150 + 10 CONTINUE + INFO = 0 + +C Determine the task and go to it. + + CASE = 1 + IF (MOD(JOB,10) .NE. 0) CASE = 2 + IF (MOD(JOB,100)/10 .NE. 0) CASE = CASE + 2 + IF (CASE.EQ.1) THEN; GOTO 20; END IF + IF (CASE.EQ.2) THEN; GOTO 50; END IF + IF (CASE.EQ.3) THEN; GOTO 80; END IF + IF (CASE.EQ.4) THEN; GOTO 110; END IF + +C Solve T*X=B for T lower triangular + + 20 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 40 + DO 30 J = 2, N + TEMP = -B(J-1) + CALL DAXPY(N-J+1,TEMP,T(J,J-1),1,B(J),1) + B(J) = B(J)/T(J,J) + 30 CONTINUE + 40 CONTINUE + GO TO 140 + +C Solve T*X=B for T upper triangular. + + 50 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 70 + DO 60 JJ = 2, N + J = N - JJ + 1 + TEMP = -B(J+1) + CALL DAXPY(J,TEMP,T(1,J+1),1,B(1),1) + B(J) = B(J)/T(J,J) + 60 CONTINUE + 70 CONTINUE + GO TO 140 + +C Solve trans(T)*X=B for T lower triangular. + + 80 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 100 + DO 90 JJ = 2, N + J = N - JJ + 1 + B(J) = B(J) - DDOT(JJ-1,T(J+1,J),1,B(J+1),1) + B(J) = B(J)/T(J,J) + 90 CONTINUE + 100 CONTINUE + GO TO 140 + +C Solve trans(T)*X=B for T upper triangular. + + 110 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 130 + DO 120 J = 2, N + B(J) = B(J) - DDOT(J-1,T(1,J),1,B(1),1) + B(J) = B(J)/T(J,J) + 120 CONTINUE + 130 CONTINUE + 140 CONTINUE + 150 CONTINUE + RETURN + END +*IDAMAX + FUNCTION IDAMAX(N,DX,INCX) RESULT(IDAMAXR) +C***Begin Prologue IDAMAX +C***Date Written 791001 (YYMMDD) +C***Revision Date 820801 (YYMMDD) +C***Category No. D1A2 +C***Keywords BLAS,REAL (KIND=R8),Linear Algebra,Maximum Component, +C Vector +C***Author Lawson, C. L., (JPL) +C Hanson, R. J., (SNLA) +C Kincaid, D. R., (U. of Texas) +C Krogh, F. T., (JPL) +C***Purpose Find largest component of D.P. vector +C***Description +C B L A S Subprogram +C Description of parameters +C --Input-- +C N Number of elements in input vector(s) +C DX REAL (KIND=R8) vector with N elements +C INCX Storage spacing between elements of DX +C --Output-- +C IDAMAX Smallest index (zero if N .LE. 0) +C Find smallest index of maximum magnitude of REAL (KIND=R8) DX. +C IDAMAX = first I, I = 1 to N, to minimize ABS(DX(1-INCX+I*INCX) +C***References Lawson C.L., Hanson R.J., Kincaid D.R., Krogh F.T., +C *Basic Linear Algebra Subprograms for FORTRAN Usage*, +C Algorithm No. 539, Transactions on Mathematical +C Software, Volume 5, Number 3, September 1979, 308-323 +C***Routines Called (None) +C***End Prologue IDAMAX + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INCX,N + +C...Array arguments + REAL (KIND=R8) + & DX(*) + +C...Result + INTEGER + & IDAMAXR + +C...Local scalars + REAL (KIND=R8) + & DMAX,XMAG + INTEGER + & I,II,NS + +C...Intrinsic functions + INTRINSIC + & DABS + + +C***First executable statement IDAMAX + + + IDAMAXR = 0 + IF(N.LE.0) RETURN + IDAMAXR = 1 + IF(N.LE.1)RETURN + IF(INCX.EQ.1)GOTO 20 + +C Code for increments not equal to 1. + + DMAX = DABS(DX(1)) + NS = N*INCX + II = 1 + DO 10 I = 1,NS,INCX + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 5 + IDAMAXR = II + DMAX = XMAG + 5 II = II + 1 + 10 CONTINUE + RETURN + +C Code for increments equal to 1. + + 20 DMAX = DABS(DX(1)) + DO 30 I = 2,N + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 30 + IDAMAXR = I + DMAX = XMAG + 30 CONTINUE + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/makefile.txt b/dataassim/math/optimization/odrpack95/makefile.txt new file mode 100644 index 0000000..a5fe584 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/makefile.txt @@ -0,0 +1,108 @@ +# This makefile creates a library >> odrpack.a << comprised of both the single +# and double precision versions of ODRPACK. It also runs each of the test +# problems for both versions. Change S_SOURCE (D_SOURCE) and S_TESTS (D_TESTS) +# as approprite if only the double precision (single precision) version is to +# be installed. + +# NB: This makefile creates a temporary subdirectory, >> ZodrpackZ <<, for +# splitting and compiling the individual subprograms in each of the +# release files. The makefile will fail if such a subdirectory already +# exists. The subdirectory is automatically removed upon completion. + +# Note also that some systems need to invoke ranlib, while others do not: +# if your system lacks ranlib, simply comment out the ranlib invocation +# below. Also, compiler names and options, and/or names of data files may +# have to be modified for some systems. + + +.SUFFIXES: .f .o .a .out +F77 = f77 # specify compiler name as appropriate +F77OPT = -u -O # specify desired compiler options here +LIB = odrpack.a # specify ODRPACK library name +DIR = ZodrpackZ # specify temporary subdirectory name +L = # specify directory for library files + +# Specify what files are to be installed, where +# D_SOURCE = double-precision non-test source files +# = d_odr.f d_lpkbls.f d_mprec.f +# S_SOURCE = single-precision non-test source files +# = s_odr.f s_lpkbls.f s_mprec.f +D_SOURCE = d_odr.f d_lpkbls.f d_mprec.f +S_SOURCE = s_odr.f s_lpkbls.f s_mprec.f + + + +# Test installation... + +tests: D_TESTS S_TESTS +D_TESTS: d_drive1.out d_drive2.out d_drive3.out d_test.out +S_TESTS: s_drive1.out s_drive2.out s_drive3.out s_test.out + + +# Create ODRPACK library... + +$(LIB): $(D_SOURCE) $(S_SOURCE) + mkdir $(DIR) + cd $(DIR) ;\ + for i in $? ;\ + do fsplit ../$$i ;\ + $(F77) -c $(F77OPT) *.f ;\ + ar ruv ../$@ *.o ;\ + rm *.f *.o ;\ + done ;\ + cd .. + rm -rf $(DIR) + ranlib $(LIB) + +d_mprec.f: d_mprec0.f + true # Obtain d_mprec.f from d_mprec0.f by activating the statements + false # appropriate to your machine + +s_mprec.f: s_mprec0.f + true # Obtain s_mprec.f from s_mprec0.f by activating the statements + false # appropriate to your machine + + +# Run double-precision test problems... + +d_drive1.out: d_drive1.f $(LIB) data1.dat + cp data1.dat DATA1 + $(F77) d_drive1.f $(LIB) $L; a.out + mv REPORT1 $@; rm -f DATA1 d_drive1.o a.out + +d_drive2.out: d_drive2.f $(LIB) data2.dat + cp data2.dat DATA2 + $(F77) d_drive2.f $(LIB) $L; a.out + mv REPORT2 $@; rm -f DATA2 d_drive2.o a.out + +d_drive3.out: d_drive3.f $(LIB) data3.dat + cp data3.dat DATA3 + $(F77) d_drive3.f $(LIB) $L; a.out + mv REPORT3 $@; rm -f DATA3 d_drive3.o a.out + +d_test.out: d_test.f $(LIB) + $(F77) d_test.f $(LIB) $L; a.out + mv REPORT $@; cat SUMMARY >> $@; rm -f d_test.o a.out SUMMARY + + +# Run single-precision test problems... + +s_drive1.out: s_drive1.f $(LIB) data1.dat + cp data1.dat DATA1 + $(F77) s_drive1.f $(LIB) $L; a.out + mv REPORT1 $@; rm -f DATA1 s_drive1.o a.out + +s_drive2.out: s_drive2.f $(LIB) data2.dat + cp data2.dat DATA2 + $(F77) s_drive2.f $(LIB) $L; a.out + mv REPORT2 $@; rm -f DATA2 s_drive2.o a.out + +s_drive3.out: s_drive3.f $(LIB) data3.dat + cp data3.dat DATA3 + $(F77) s_drive3.f $(LIB) $L; a.out + mv REPORT3 $@; rm -f DATA3 s_drive3.o a.out + +s_test.out: s_test.f $(LIB) + $(F77) s_test.f $(LIB) $L; a.out + mv REPORT $@; cat SUMMARY >> $@; rm -f s_test.o a.out SUMMARY + diff --git a/dataassim/math/optimization/odrpack95/odr.f b/dataassim/math/optimization/odrpack95/odr.f new file mode 100644 index 0000000..3996337 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/odr.f @@ -0,0 +1,12136 @@ +*ODRPACK95 + MODULE ODRPACK95 +C***Begin Prologue ODRPACK95 +C***Refer to ODR +C***Date Written 20040524 (YYYYMMDD) +C***Revision Date N/A +C***Purpose: Define the interface to the ODR subroutine +C***End Prologue ODRPACK95 + + USE REAL_PRECISION + +C A temporary work array for holding return values before copying to a lower +C rank array. + REAL (KIND=R8), ALLOCATABLE :: TEMPRET(:,:) + + CONTAINS +*ODR + SUBROUTINE ODR + & (FCN, + & N,M,NP,NQ, + & BETA, + & Y,X, + & DELTA, + & WE,WD, + & IFIXB,IFIXX, + & JOB,NDIGIT,TAUFAC, + & SSTOL,PARTOL,MAXIT, + & IPRINT,LUNERR,LUNRPT, + & STPB,STPD, + & SCLB,SCLD, + & WORK,IWORK, + & INFO, + & LOWER,UPPER) +C***Begin Prologue ODR +C***Date Written 860529 (YYMMDD) +C***Revision Date 20040301 (YYYYMMDD) +C***Category No. G2E,I1B1 +C***Keywords Orthogonal distance regression, +C Nonlinear least squares, +C Measurement error models, +C Errors in variables +C***Author Boggs, Paul T. +C Applied and Computational Mathematics Division +C National Institute of Standards and Technology +C Gaithersburg, MD 20899 +C Byrd, Richard H. +C Department of Computer Science +C University of Colorado, Boulder, CO 80309 +C Rogers, Janet E. +C Applied and Computational Mathematics Division +C National Institute of Standards and Technology +C Boulder, CO 80303-3328 +C Schnabel, Robert B. +C Department of Computer Science +C University of Colorado, Boulder, CO 80309 +C and +C Applied and Computational Mathematics Division +C National Institute of Standards and Technology +C Boulder, CO 80303-3328 +C***Purpose REAL (KIND=R8) driver routine for finding +C the weighted explicit or implicit orthogonal distance +C regression (ODR) or ordinary linear or nonlinear least +C squares (OLS) solution (long call statement) +C***Description +C For details, see ODRPACK95 User's Reference Guide. +C***References Boggs, P. T., R. H. Byrd, J. R. Donaldson, and +C R. B. Schnabel (1989), +C "Algorithm 676 --- ODRPACK: Software for Weighted +C Orthogonal Distance Regression," +C ACM Trans. Math. Software., 15(4):348-364. +C Boggs, P. T., R. H. Byrd, J. E. Rogers, and +C R. B. Schnabel (1992), +C "User's Reference Guide for ODRPACK Version 2.01, +C Software for Weighted Orthogonal Distance Regression," +C National Institute of Standards and Technology +C Internal Report Number 92-4834. +C Boggs, P. T., R. H. Byrd, and R. B. Schnabel (1987), +C "A Stable and Efficient Algorithm for Nonlinear +C Orthogonal Distance Regression," +C SIAM J. Sci. Stat. Comput., 8(6):1052-1078. +C***Routines Called DODCNT +C***End Prologue ODR + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PARTOL,SSTOL,TAUFAC + INTEGER + & INFO,IPRINT,JOB,LUNERR,LUNRPT,M,MAXIT,N,NDIGIT,NP,NQ + +C...Array arguments + REAL (KIND=R8) + & BETA(:),DELTA(:,:),LOWER(:),SCLB(:),SCLD(:,:), + & STPB(:),STPD(:,:),UPPER(:),WD(:,:,:),WE(:,:,:), + & WORK(:),X(:,:),Y(:,:) + INTEGER + & IFIXB(:),IFIXX(:,:),IWORK(:) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Optional arguments + OPTIONAL + & DELTA,IFIXB,IFIXX,INFO,IPRINT,IWORK,JOB,LOWER,LUNERR, + & LUNRPT,MAXIT,NDIGIT,PARTOL,SCLB,SCLD,SSTOL,STPB, + & STPD,TAUFAC,UPPER,WE,WD,WORK + +C...Pointers + POINTER + & DELTA,IWORK,WORK + +C...Local scalars + REAL (KIND=R8) + & NEGONE,ZERO,LTAUFAC,LSSTOL,LPARTOL + INTEGER + & LDWE,LD2WE,LDWD,LD2WD,LDIFX,LDSCLD,LDSTPD, + & LJOB,LNDIGIT,LMAXIT,LIPRINT,LLUNERR,LLUNRPT,LINFO, + & LENWORK,LENIWORK,LINFO1,LINFO2,LINFO3,LINFO4,LINFO5 + LOGICAL + & HEAD + +C...Local arrays + REAL (KIND=R8) + & LDELTA(:,:),LLOWER(NP),LWE(N,NQ,NQ),LWD(N,M,M), + & LSTPB(NP),LSTPD(N,M),LSCLB(NP), + & LSCLD(N,M),LUPPER(NP),LWORK(:),WD1(1,1,1) + INTEGER + & LIFIXB(NP),LIWORK(:),LIFIXX(N,M) + +C...Pointer + POINTER + & LDELTA,LIWORK,LWORK + +C...Saved variables + SAVE + & LDELTA,LIWORK,LWORK + +C...External subroutines + EXTERNAL + & DODCNT + +C...Data statements + DATA + & NEGONE,ZERO + & /-1.0E0_R8,0.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user-supplied subroutine for evaluating the model. + +C...Variable definitions (alphabetically) +C BETA: The function parameters. +C DELTA: The initial error in the X data +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C INFO: The variable designating why the computations were stopped. +C IPRINT: The print control variable. +C IWORK: The integer work space. +C JOB: The variable controlling problem initialization and +C computational method. +C LOWER: The lower bound on BETA. +C LUNERR: The logical unit number for error messages. +C LUNRPT: The logical unit number for computation reports. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C N: The number of observations. +C NDIGIT: The number of accurate digits in the function results, as +C supplied by the user. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C PARTOL: The parameter convergence stopping tolerance. +C SCLB: The scaling values for BETA. +C SCLD: The scaling values for DELTA. +C STPB: The relative step for computing finite difference +C derivatives with respect to BETA. +C STPD: The relative step for computing finite difference +C derivatives with respect to DELTA. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C UPPER: The upper bound on BETA. +C WD: The DELTA weights. +C WD1: A dummy array used when WD(1,1,1)=0.0E0_R8. +C WE: The EPSILON weights. +C WORK: The REAL (KIND=R8) work space. +C X: The explanatory variable. +C Y: The dependent variable. Unused when the model is implicit. + + +C***First executable statement ODR + + +C Set LINFO to zero indicating no errors have been found thus far + + LINFO = 0 + LINFO1 = 0 + LINFO2 = 0 + LINFO3 = 0 + LINFO4 = 0 + LINFO5 = 0 + +C Set all scalar variable defaults except JOB + + LDWE = 1 + LD2WE = 1 + LDWD = 1 + LD2WD = 1 + LDIFX = 1 + LDSCLD = 1 + LDSTPD = 1 + LIPRINT = -1 + LLUNERR = -1 + LLUNRPT = -1 + LMAXIT = -1 + LNDIGIT = -1 + LPARTOL = NEGONE + LSSTOL = NEGONE + LTAUFAC = NEGONE + HEAD = .TRUE. + +C Check for the option arguments for printing (so error messages can be +C printed appropriately from here on out + + IF (PRESENT(IPRINT)) THEN + LIPRINT = IPRINT + END IF + + IF (PRESENT(LUNRPT)) THEN + LLUNRPT = LUNRPT + END IF + IF (LLUNRPT.LT.0) THEN + LLUNRPT = 6 + END IF + + IF (PRESENT(LUNERR)) THEN + LLUNERR = LUNERR + END IF + IF (LLUNERR.LT.0) THEN + LLUNERR = 6 + END IF + +C Ensure the problem size is valid + + IF (N.LE.0) THEN + LINFO5 = 1 + LINFO4 = 1 + END IF + + IF (M.LE.0) THEN + LINFO5 = 1 + LINFO3 = 1 + END IF + + IF (NP.LE.0) THEN + LINFO5 = 1 + LINFO2 = 1 + END IF + + IF (NQ.LE.0) THEN + LINFO5 = 1 + LINFO1 = 1 + END IF + + IF (LINFO5.NE.0) THEN + LINFO = 10000*LINFO5+1000*LINFO4+100*LINFO3+10*LINFO2+LINFO1 + IF (LLUNERR.GT.0.AND.LIPRINT.NE.0) THEN + CALL DODPHD(HEAD,LLUNRPT) + CALL DODPE1( + & LLUNERR,LINFO,LINFO5,LINFO4,LINFO3,LINFO2,LINFO1, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LENWORK,LENIWORK + & ) + END IF + IF (PRESENT(INFO)) THEN + INFO = LINFO + END IF + RETURN + END IF + +C Define LJOB and check that necessary arguments are passed for JOB + + IF (PRESENT(JOB)) THEN + LJOB = JOB + IF (MOD(JOB,10000)/1000.GE.1) THEN + IF (.NOT.PRESENT(DELTA)) THEN + LINFO5 = 7 + LINFO4 = 1 + ELSE IF (.NOT.ASSOCIATED(DELTA)) THEN + LINFO5 = 7 + LINFO4 = 1 + END IF + END IF + IF (JOB.GE.10000) THEN + IF (.NOT.PRESENT(IWORK)) THEN + LINFO5 = 7 + LINFO2 = 1 + ELSE IF (.NOT.ASSOCIATED(IWORK)) THEN + LINFO5 = 7 + LINFO2 = 1 + END IF + END IF + IF (JOB.GE.10000) THEN + IF (.NOT.PRESENT(WORK)) THEN + LINFO5 = 7 + LINFO3 = 1 + ELSE IF (.NOT.ASSOCIATED(WORK)) THEN + LINFO5 = 7 + LINFO3 = 1 + END IF + END IF + ELSE + LJOB = -1 + END IF + + IF (LINFO5.NE.0) THEN + LINFO = 10000*LINFO5+1000*LINFO4+100*LINFO3+10*LINFO2+LINFO1 + IF (LLUNERR.GT.0.AND.LIPRINT.NE.0) THEN + CALL DODPHD(HEAD,LLUNRPT) + CALL DODPE1( + & LLUNERR,LINFO,LINFO5,LINFO4,LINFO3,LINFO2,LINFO1, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LENWORK,LENIWORK + & ) + END IF + IF (PRESENT(INFO)) THEN + INFO = LINFO + END IF + RETURN + END IF + +C Determine the size of WORK + + IF (LJOB.LT.0.OR.MOD(LJOB,10).LE.1) THEN + LENWORK = 18+13*NP+NP**2+M+M**2+4*N*NQ+6*N*M+2*N*NQ*NP+ + & 2*N*NQ*M+NQ**2+5*NQ+NQ*(NP+M)+N*NQ*NQ + ELSE + LENWORK = 18+13*NP+NP**2+M+M**2+4*N*NQ+2*N*M+2*N*NQ*NP+ + & 5*NQ+NQ*(NP+M)+N*NQ*NQ + END IF + +C Determine the size of IWORK + + LENIWORK = 20+2*NP+NQ*(NP+M) + +C Allocate the work arrays + + ALLOCATE(LWORK(LENWORK),TEMPRET(MAX(N,NP),MAX(NQ,M)),STAT=LINFO3) + ALLOCATE(LIWORK(LENIWORK),STAT=LINFO2) + LWORK(:) = 0.0_R8 + LIWORK(:) = 0 + IF (PRESENT(DELTA)) THEN + IF (.NOT.ASSOCIATED(DELTA)) THEN + ALLOCATE(LDELTA(N,M),STAT=LINFO4) + END IF + END IF + IF (LINFO4.NE.0.OR.LINFO3.NE.0.OR.LINFO2.NE.0) THEN + LINFO5 = 8 + END IF + + IF (LINFO5.NE.0) THEN + LINFO = 10000*MOD(LINFO5,10)+1000*MOD(LINFO4,10)+ + & 100*MOD(LINFO3,10)+10*MOD(LINFO2,10)+MOD(LINFO1,10) + IF (LLUNERR.GT.0.AND.LIPRINT.NE.0) THEN + CALL DODPHD(HEAD,LLUNRPT) + CALL DODPE1( + & LLUNERR,LINFO,LINFO5,LINFO4,LINFO3,LINFO2,LINFO1, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LENWORK,LENIWORK + & ) + END IF + IF (PRESENT(INFO)) THEN + INFO = LINFO + END IF + RETURN + END IF + +C Set array variable defaults except IWORK + + LWORK(1:N*M) = ZERO + LIFIXB(1) = -1 + LIFIXX(1,1) = -1 + LLOWER(1:NP) = -HUGE(ZERO) + LSCLB(1) = NEGONE + LSCLD(1,1) = NEGONE + LSTPB(1) = NEGONE + LSTPD(1,1) = NEGONE + LUPPER(1:NP) = HUGE(ZERO) + LWE(1,1,1) = NEGONE + LWD(1,1,1) = NEGONE + +C Check the size of required arguments and return errors if they are too small + + IF (SIZE(BETA).LT.NP) THEN + LINFO1 = LINFO1 + 1 + END IF + + IF (ANY(SIZE(Y).LT.(/N,NQ/))) THEN + LINFO1 = LINFO1 + 2 + END IF + + IF (ANY(SIZE(X).LT.(/N,M/))) THEN + LINFO1 = LINFO1 + 4 + END IF + +C Check the presence of optional arguments and copy their values internally or +C report errors as necessary + + IF (PRESENT(IFIXB)) THEN + IF (SIZE(IFIXB).LT.NP) THEN + LINFO1 = LINFO1 + 64 + END IF + IF (IFIXB(1).LT.0.0_R8) THEN + LIFIXB(1) = IFIXB(1) + ELSE + LIFIXB(1:NP) = IFIXB(1:NP) + END IF + END IF + + IF (PRESENT(IFIXX)) THEN + LDIFX = SIZE(IFIXX,1) + IF (ANY(SIZE(IFIXX).LE.(/0,0/))) THEN + LINFO1 = LINFO1 + 128 + END IF + IF (.NOT.(IFIXX(1,1).LT.ZERO.OR.LDIFX.EQ.1.OR.LDIFX.GE.N).OR. + & SIZE(IFIXX,2).LT.M) THEN + LINFO1 = LINFO1 + 128 + END IF + IF (LDIFX.GT.N) THEN + LDIFX = N + END IF + IF (IFIXX(1,1).LT.0.0_R8) THEN + LIFIXX(1,1) = IFIXX(1,1) + ELSE + LIFIXX(1:LDIFX,1:M) = IFIXX(1:LDIFX,1:M) + END IF + END IF + + IF (PRESENT(IWORK)) THEN + IF (ASSOCIATED(IWORK)) THEN + IF (SIZE(IWORK).LT.LENIWORK) THEN + LINFO1 = LINFO1 + 8192 + END IF + ! This is a restart, copy IWORK. + IF (MOD(LJOB/10000,10).GE.1) THEN + LIWORK(1:LENIWORK) = IWORK(1:LENIWORK) + END IF + END IF + END IF + + IF (PRESENT(MAXIT)) THEN + LMAXIT = MAXIT + END IF + + IF (PRESENT(NDIGIT)) THEN + LNDIGIT = NDIGIT + END IF + + IF (PRESENT(PARTOL)) THEN + LPARTOL = PARTOL + END IF + + IF (PRESENT(SCLB)) THEN + IF (SIZE(SCLB).LT.NP) THEN + LINFO1 = LINFO1 + 1024 + END IF + IF (SCLB(1).LE.0.0_R8) THEN + LSCLB(1) = SCLB(1) + ELSE + LSCLB(1:NP) = SCLB(1:NP) + END IF + END IF + + IF (PRESENT(SCLD)) THEN + LDSCLD = SIZE(SCLD,1) + IF (ANY(SIZE(SCLD).LE.(/0,0/))) THEN + LINFO1 = LINFO1 + 2048 + END IF + IF (.NOT.(SCLD(1,1).LE.ZERO.OR.LDSCLD.EQ.1.OR.LDSCLD.GE.N).OR. + & SIZE(SCLD,2).LT.M) THEN + LINFO1 = LINFO1 + 2048 + END IF + IF (LDSCLD.GT.N) THEN + LDSCLD = N + END IF + IF (SCLD(1,1).LE.0.0_R8) THEN + LSCLD(1,1) = SCLD(1,1) + ELSE + LSCLD(1:LDSCLD,1:M) = SCLD(1:LDSCLD,1:M) + END IF + END IF + + IF (PRESENT(SSTOL)) THEN + LSSTOL = SSTOL + END IF + + IF (PRESENT(STPB)) THEN + IF (SIZE(STPB).LT.NP) THEN + LINFO1 = LINFO1 + 256 + END IF + IF (STPB(1).LE.0.0_R8) THEN + LSTPB(1) = STPB(1) + ELSE + LSTPB(1:NP) = STPB(1:NP) + END IF + END IF + + IF (PRESENT(STPD)) THEN + LDSTPD = SIZE(STPD,1) + IF (ANY(SIZE(STPD).LE.(/0,0/))) THEN + LINFO1 = LINFO1 + 512 + END IF + IF (.NOT.(STPD(1,1).LE.ZERO.OR.LDSTPD.EQ.1.OR.LDSTPD.GE.N).OR. + & SIZE(STPD,2).LT.M) THEN + LINFO1 = LINFO1 + 512 + END IF + IF (LDSTPD.GT.N) THEN + LDSTPD = N + END IF + IF (STPD(1,1).LE.0.0_R8) THEN + LSTPD(1,1) = STPD(1,1) + ELSE + LSTPD(1:LDSTPD,1:M) = STPD(1:LDSTPD,1:M) + END IF + END IF + + IF (PRESENT(TAUFAC)) THEN + LTAUFAC = TAUFAC + END IF + + IF (PRESENT(WE)) THEN + LDWE = SIZE(WE,1) + LD2WE = SIZE(WE,2) + IF (ANY(SIZE(WE).LE.(/0,0,0/))) THEN + LINFO1 = LINFO1 + 16 + END IF + IF (.NOT.(WE(1,1,1).LT.ZERO.OR.((LDWE.EQ.1.OR.LDWE.GE.N) + & .AND.(LD2WE.EQ.1.OR.LD2WE.GE.NQ))).OR.SIZE(WE,3).LT.NQ) THEN + LINFO1 = LINFO1 + 16 + END IF + IF (LDWE.GT.N) THEN + LDWE = N + END IF + IF (LD2WE.GT.NQ) THEN + LD2WE = NQ + END IF + IF (WE(1,1,1).LT.0.0_R8) THEN + LWE(1,1,1) = WE(1,1,1) + ELSE + LWE(1:LDWE,1:LD2WE,1:NQ) = WE(1:LDWE,1:LD2WE,1:NQ) + END IF + END IF + + IF (PRESENT(WD)) THEN + LDWD = SIZE(WD,1) + LD2WD = SIZE(WD,2) + IF (ANY(SIZE(WD).LE.(/0,0,0/))) THEN + LINFO1 = LINFO1 + 32 + END IF + IF (.NOT.(WD(1,1,1).LT.ZERO.OR.((LDWD.EQ.1.OR.LDWD.GE.N) + & .AND.(LD2WD.EQ.1.OR.LD2WD.GE.M))).OR.SIZE(WD,3).LT.M) THEN + LINFO1 = LINFO1 + 32 + END IF + IF (LDWD.GT.N) THEN + LDWD = N + END IF + IF (LD2WD.GT.M) THEN + LD2WD = M + END IF + IF (WD(1,1,1).LE.0.0_R8) THEN + LWD(1,1,1) = WD(1,1,1) + ELSE + LWD(1:LDWD,1:LD2WD,1:M) = WD(1:LDWD,1:LD2WD,1:M) + END IF + END IF + + IF (PRESENT(WORK)) THEN + IF (ASSOCIATED(WORK)) THEN + IF (SIZE(WORK).LT.LENWORK) THEN + LINFO1 = LINFO1 + 4096 + END IF + ! Deltas are in WORK, copy them. + IF (MOD(LJOB/1000,10).GE.1.AND..NOT.PRESENT(DELTA)) THEN + LWORK(1:N*M) = WORK(1:N*M) + END IF + ! This is a restart, copy WORK. + IF (MOD(LJOB/10000,10).GE.1) THEN + LWORK(1:LENWORK) = WORK(1:LENWORK) + END IF + END IF + END IF + + IF (PRESENT(DELTA)) THEN + IF (ASSOCIATED(DELTA)) THEN + IF (ANY(SHAPE(DELTA).LT.(/N,M/))) THEN + LINFO1 = LINFO1 + 8 + END IF + LWORK(1:N*M) = RESHAPE(DELTA(1:N,1:M),(/N*M/)) + END IF + END IF + + IF (PRESENT(LOWER)) THEN + IF (SIZE(LOWER).LT.NP) THEN + LINFO1 = LINFO1 + 32768 + END IF + LLOWER(1:NP) = LOWER(1:NP) + END IF + + IF (PRESENT(UPPER)) THEN + IF (SIZE(UPPER).LT.NP) THEN + LINFO1 = LINFO1 + 16384 + END IF + LUPPER(1:NP) = UPPER(1:NP) + END IF + +C Report an error if any of the array sizes didn't match. + + IF (LINFO1.NE.0) THEN + LINFO = 100000 + LINFO1 + LINFO1 = 0 + IF (LLUNERR.GT.0.AND.LIPRINT.NE.0) THEN + CALL DODPHD(HEAD,LLUNRPT) + CALL DODPE1( + & LLUNERR,LINFO,LINFO5,LINFO4,LINFO3,LINFO2,LINFO1, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LENWORK,LENIWORK + & ) + END IF + IF (PRESENT(INFO)) THEN + INFO = LINFO + END IF + RETURN + END IF + + + IF (LWD(1,1,1).NE.ZERO) THEN + CALL DODCNT + & (FCN, + & N,M,NP,NQ, + & BETA(1:NP), + & Y(1:N,1:NQ),N,X(1:N,1:M),N, + & LWE(1:LDWE,1:LD2WE,1:NQ),LDWE,LD2WE, + & LWD(1:LDWD,1:LD2WD,1:M),LDWD,LD2WD, + & LIFIXB,LIFIXX(1:LDIFX,1:M),LDIFX, + & LJOB,LNDIGIT,LTAUFAC, + & LSSTOL,LPARTOL,LMAXIT, + & LIPRINT,LLUNERR,LLUNRPT, + & LSTPB,LSTPD(1:LDSTPD,1:M),LDSTPD, + & LSCLB,LSCLD(1:LDSCLD,1:M),LDSCLD, + & LWORK,LENWORK,LIWORK,LENIWORK, + & LINFO, + & LLOWER,LUPPER) + ELSE + WD1(1,1,1) = NEGONE + CALL DODCNT + & (FCN, + & N,M,NP,NQ, + & BETA(1:NP), + & Y(1:N,1:NQ),N,X(1:N,1:M),N, + & LWE(1:LDWE,1:LD2WE,1:NQ),LDWE,LD2WE, + & WD1,1,1, + & LIFIXB,LIFIXX(1:LDIFX,1:M),LDIFX, + & LJOB,LNDIGIT,LTAUFAC, + & LSSTOL,LPARTOL,LMAXIT, + & LIPRINT,LLUNERR,LLUNRPT, + & LSTPB,LSTPD(1:LDSTPD,1:M),LDSTPD, + & LSCLB,LSCLD(1:LDSCLD,1:M),LDSCLD, + & LWORK,LENWORK,LIWORK,LENIWORK, + & LINFO, + & LLOWER,LUPPER) + END IF + + IF (PRESENT(DELTA)) THEN + IF (ASSOCIATED(DELTA)) THEN + DELTA(1:N,1:M) = RESHAPE(LWORK(1:N*M),(/N,M/)) + ELSE + LDELTA(1:N,1:M) = RESHAPE(LWORK(1:N*M),(/N,M/)) + DELTA => LDELTA + END IF + END IF + + IF (PRESENT(INFO)) THEN + INFO = LINFO + END IF + + IF (PRESENT(IWORK)) THEN + IF (.NOT.ASSOCIATED(IWORK)) THEN + IWORK => LIWORK + ELSE + IWORK(1:LENIWORK) = LIWORK(1:LENIWORK) + DEALLOCATE(LIWORK) + END IF + ELSE + DEALLOCATE(LIWORK) + END IF + + IF (PRESENT(WORK)) THEN + IF (.NOT.ASSOCIATED(WORK)) THEN + WORK => LWORK + ELSE + WORK(1:LENWORK) = LWORK(1:LENWORK) + DEALLOCATE(LWORK) + END IF + ELSE + DEALLOCATE(LWORK) + END IF + + DEALLOCATE(TEMPRET) + + RETURN + + END SUBROUTINE ODR + END MODULE ODRPACK95 +*DACCES + SUBROUTINE DACCES + & (N,M,NP,NQ,LDWE,LD2WE, + & WORK,LWORK,IWORK,LIWORK, + & ACCESS,ISODR, + & JPVT,OMEGA,U,QRAUX,SD,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + & NNZW,NPP, + & JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + & LUNRPT,IPR1,IPR2,IPR2F,IPR3, + & WSS,RVAR,IDF, + & TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + & RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) +C***Begin Prologue DACCES +C***Refer to ODR +C***Routines Called DIWINF,DWINF +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Access or store values in the work arrays +C***End Prologue DACESS + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & ACTRS,ALPHA,ETA,OLMAVG,PARTOL,PNORM,PRERS,RCOND, + & RNORMS,RVAR,SSTOL,TAU,TAUFAC + INTEGER + & IDF,INT2,IPR1,IPR2,IPR2F,IPR3,IRANK,ISTOP,ISTOPI,JOB,JPVT, + & LDWE,LD2WE,LIWORK,LUNRPT,LWORK,M,MAXIT,N,NETA,NFEV,NITER,NJEV, + & NNZW,NP,NPP,NQ,OMEGA,QRAUX,SD,U,VCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + & ACCESS,ISODR + +C...Array arguments + REAL (KIND=R8) + & WORK(LWORK),WSS(3) + INTEGER + & IWORK(LIWORK) + +C...Local scalars + INTEGER + & ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,BOUNDI, + & DELTAI,DELTNI,DELTSI,DIFFI,EPSI, + & EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,IDFI,INT2I,IPRINI,IPRINT, + & IRANKI,JOBI,JPVTI,LDTTI,LIWKMN,LOWERI,LUNERI,LUNRPI,LWKMN, + & MAXITI, + & MSGB,MSGD,NETAI,NFEVI,NITERI,NJEVI,NNZWI,NPPI,NROWI, + & NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + & RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + & UPPERI, + & VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + & WSSI,WSSDEI,WSSEPI,XPLUSI +C...External subroutines + EXTERNAL + & DIWINF,DWINF + +C...Variable Definitions (alphabetically) +C ACCESS: The variable designating whether information is to be +C accessed from the work arrays (ACCESS=TRUE) or stored in +C them (ACCESS=FALSE). +C ACTRS: The saved actual relative reduction in the sum-of-squares. +C ACTRSI: The location in array WORK of variable ACTRS. +C ALPHA: The Levenberg-Marquardt parameter. +C ALPHAI: The location in array WORK of variable ALPHA. +C BETACI: The starting location in array WORK of array BETAC. +C BETANI: The starting location in array WORK of array BETAN. +C BETASI: The starting location in array WORK of array BETAS. +C BETA0I: The starting location in array WORK of array BETA0. +C DELTAI: The starting location in array WORK of array DELTA. +C DELTNI: The starting location in array WORK of array DELTAN. +C DELTSI: The starting location in array WORK of array DELTAS. +C DIFFI: The starting location in array WORK of array DIFF. +C EPSI: The starting location in array WORK of array EPS. +C EPSMAI: The location in array WORK of variable EPSMAC. +C ETA: The relative noise in the function results. +C ETAI: The location in array WORK of variable ETA. +C FJACBI: The starting location in array WORK of array FJACB. +C FJACDI: The starting location in array WORK of array FJACD. +C FNI: The starting location in array WORK of array FN. +C FSI: The starting location in array WORK of array FS. +C IDF: The degrees of freedom of the fit, equal to the number of +C observations with nonzero weighted derivatives minus the +C number of parameters being estimated. +C IDFI: The starting location in array IWORK of variable IDF. +C INT2: The number of internal doubling steps. +C INT2I: The location in array IWORK of variable INT2. +C IPR1: The value of the fourth digit (from the right) of IPRINT, +C which controls the initial summary report. +C IPR2: The value of the third digit (from the right) of IPRINT, +C which controls the iteration reports. +C IPR2F: The value of the second digit (from the right) of IPRINT, +C which controls the frequency of the iteration reports. +C IPR3: The value of the first digit (from the right) of IPRINT, +C which controls the final summary report. +C IPRINI: The location in array IWORK of variable IPRINT. +C IPRINT: The print control variable. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C IRANKI: The location in array IWORK of variable IRANK. +C ISODR: The variable designating whether the solution is to be +C found by ODR (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISTOPI: The location in array IWORK of variable ISTOP. +C IWORK: The integer work space. +C JOB: The variable controling problem initialization and +C computational method. +C JOBI: The location in array IWORK of variable JOB. +C JPVT: The pivot vector. +C JPVTI: The starting location in array IWORK of variable JPVT. +C LDTTI: The starting location in array IWORK of variable LDTT. +C LDWE: The leading dimension of array WE. +C LD2WE: The second dimension of array WE. +C LIWORK: The length of vector IWORK. +C LUNERI: The location in array IWORK of variable LUNERR. +C LUNERR: The logical unit number used for error messages. +C LUNRPI: The location in array IWORK of variable LUNRPT. +C LUNRPT: The logical unit number used for computation reports. +C LWKMN: The minimum acceptable length of array WORK. +C LWORK: The length of vector WORK. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MAXITI: The location in array IWORK of variable MAXIT. +C MSGB: The starting location in array IWORK of array MSGB. +C MSGD: The starting location in array IWORK of array MSGD. +C N: The number of observations. +C NETA: The number of accurate digits in the function results. +C NETAI: The location in array IWORK of variable NETA. +C NFEV: The number of function evaluations. +C NFEVI: The location in array IWORK of variable NFEV. +C NITER: The number of iterations taken. +C NITERI: The location in array IWORK of variable NITER. +C NJEV: The number of Jacobian evaluations. +C NJEVI: The location in array IWORK of variable NJEV. +C NNZW: The number of nonzero weighted observations. +C NNZWI: The location in array IWORK of variable NNZW. +C NP: The number of function parameters. +C NPP: The number of function parameters actually estimated. +C NPPI: The location in array IWORK of variable NPP. +C NQ: The number of responses per observation. +C NROWI: The location in array IWORK of variable NROW. +C NTOLI: The location in array IWORK of variable NTOL. +C OLMAVG: The average number of Levenberg-Marquardt steps per +C iteration. +C OLMAVI: The location in array WORK of variable OLMAVG. +C OMEGA: The starting location in array WORK of array OMEGA. +C OMEGAI: The starting location in array WORK of array OMEGA. +C PARTLI: The location in array work of variable PARTOL. +C PARTOL: The parameter convergence stopping tolerance. +C PNORM: The norm of the scaled estimated parameters. +C PNORMI: The location in array WORK of variable PNORM. +C PRERS: The saved predicted relative reduction in the +C sum-of-squares. +C PRERSI: The location in array WORK of variable PRERS. +C QRAUX: The starting location in array WORK of array QRAUX. +C QRAUXI: The starting location in array WORK of array QRAUX. +C RCOND: The approximate reciprocal condition of FJACB. +C RCONDI: The location in array WORK of variable RCOND. +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). +C RNORMS: The norm of the saved weighted EPSILONS and DELTAS. +C RNORSI: The location in array WORK of variable RNORMS. +C RVAR: The residual variance, i.e. standard deviation squared. +C RVARI: The location in array WORK of variable RVAR. +C SCLB: The scaling values used for BETA. +C SCLD: The scaling values used for DELTA. +C SD: The starting location in array WORK of array SD. +C SDI: The starting location in array WORK of array SD. +C SI: The starting location in array WORK of array S. +C SSFI: The starting location in array WORK of array SSF. +C SSI: The starting location in array WORK of array SS. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C SSTOLI: The location in array WORK of variable SSTOL. +C TAU: The trust region diameter. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TAUFCI: The location in array WORK of variable TAUFAC. +C TAUI: the location in array WORK of variable TAU. +C TI: The starting location in array WORK of array T. +C TTI: The starting location in array WORK of array TT. +C U: The starting location in array WORK of array U. +C UI: The starting location in array WORK of array U. +C VCV: The starting location in array WORK of array VCV. +C VCVI: The starting location in array WORK of array VCV. +C WE1I: The starting location in array WORK of array WE1. +C WORK: The REAL (KIND=R8) work space. +C WRK1: The starting location in array WORK of array WRK1. +C WRK1I: The starting location in array WORK of array WRK1. +C WRK2: The starting location in array WORK of array WRK2. +C WRK2I: The starting location in array WORK of array WRK2. +C WRK3: The starting location in array WORK of array wrk3. +C WRK3I: The starting location in array WORK of array wrk3. +C WRK4: The starting location in array WORK of array wrk4. +C WRK4I: The starting location in array WORK of array wrk4. +C WRK5: The starting location in array WORK of array wrk5. +C WRK5I: The starting location in array WORK of array wrk5. +C WRK6: The starting location in array WORK of array wrk6. +C WRK6I: The starting location in array WORK of array wrk6. +C WRK7I: The starting location in array WORK of array wrk7. +C WSS: The sum of the squares of the weighted EPSILONS and DELTAS, +C the sum of the squares of the weighted DELTAS, and +C the sum of the squares of the weighted EPSILONS. +C WSSI: The starting location in array WORK of variable WSS(1). +C WSSDEI: The starting location in array WORK of variable WSS(2). +C WSSEPI: The starting location in array WORK of variable WSS(3). +C XPLUSI: The starting location in array WORK of array XPLUSD. + + +C***First executable statement DACCES + + +C Find starting locations within integer workspace + + CALL DIWINF(M,NP,NQ, + & MSGB,MSGD,JPVTI,ISTOPI, + & NNZWI,NPPI,IDFI, + & JOBI,IPRINI,LUNERI,LUNRPI, + & NROWI,NTOLI,NETAI, + & MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + & BOUNDI, + & LIWKMN) + +C Find starting locations within REAL (KIND=R8) work space + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + & DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + & RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + & OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + & PARTLI,SSTOLI,TAUFCI,EPSMAI, + & BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + & FSI,FJACBI,WE1I,DIFFI, + & DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + & WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + & LOWERI,UPPERI, + & LWKMN) + + IF (ACCESS) THEN + +C Set starting locations for work vectors + + JPVT = JPVTI + OMEGA = OMEGAI + QRAUX = QRAUXI + SD = SDI + VCV = VCVI + U = UI + WRK1 = WRK1I + WRK2 = WRK2I + WRK3 = WRK3I + WRK4 = WRK4I + WRK5 = WRK5I + WRK6 = WRK6I + +C Access values from the work vectors + + ACTRS = WORK(ACTRSI) + ALPHA = WORK(ALPHAI) + ETA = WORK(ETAI) + OLMAVG = WORK(OLMAVI) + PARTOL = WORK(PARTLI) + PNORM = WORK(PNORMI) + PRERS = WORK(PRERSI) + RCOND = WORK(RCONDI) + WSS(1) = WORK(WSSI) + WSS(2) = WORK(WSSDEI) + WSS(3) = WORK(WSSEPI) + RVAR = WORK(RVARI) + RNORMS = WORK(RNORSI) + SSTOL = WORK(SSTOLI) + TAU = WORK(TAUI) + TAUFAC = WORK(TAUFCI) + + NETA = IWORK(NETAI) + IRANK = IWORK(IRANKI) + JOB = IWORK(JOBI) + LUNRPT = IWORK(LUNRPI) + MAXIT = IWORK(MAXITI) + NFEV = IWORK(NFEVI) + NITER = IWORK(NITERI) + NJEV = IWORK(NJEVI) + NNZW = IWORK(NNZWI) + NPP = IWORK(NPPI) + IDF = IWORK(IDFI) + INT2 = IWORK(INT2I) + +C Set up print control variables + + IPRINT = IWORK(IPRINI) + + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + + ELSE + +C Store values into the work vectors + + WORK(ACTRSI) = ACTRS + WORK(ALPHAI) = ALPHA + WORK(OLMAVI) = OLMAVG + WORK(PARTLI) = PARTOL + WORK(PNORMI) = PNORM + WORK(PRERSI) = PRERS + WORK(RCONDI) = RCOND + WORK(WSSI) = WSS(1) + WORK(WSSDEI) = WSS(2) + WORK(WSSEPI) = WSS(3) + WORK(RVARI) = RVAR + WORK(RNORSI) = RNORMS + WORK(SSTOLI) = SSTOL + WORK(TAUI) = TAU + + IWORK(IRANKI) = IRANK + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NITERI) = NITER + IWORK(NJEVI) = NJEV + IWORK(IDFI) = IDF + IWORK(INT2I) = INT2 + END IF + + RETURN + END SUBROUTINE +*DESUBI + SUBROUTINE DESUBI + & (N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,E) +C***Begin Prologue DESUBI +C***Refer to ODR +C***Routines Called DZERO +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute E = WD + ALPHA*TT**2 +C***End Prologue DESUBI + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & ALPHA + INTEGER + & LDTT,LDWD,LD2WD,M,N + +C...Array arguments + REAL (KIND=R8) + & E(M,M),TT(LDTT,M),WD(LDWD,LD2WD,M) + +C...Local scalars + REAL (KIND=R8) + & ZERO + INTEGER + & I,J,J1,J2 + +C...External subroutines + EXTERNAL + & DZERO + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C ALPHA: The Levenberg-Marquardt parameter. +C E: The value of the array E = WD + ALPHA*TT**2 +C I: An indexing variable. +C J: An indexing variable. +C J1: An indexing variable. +C J2: An indexing variable. +C LDWD: The leading dimension of array WD. +C LD2WD: The second dimension of array WD. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C NP: The number of responses per observation. +C TT: The scaling values used for DELTA. +C WD: The squared DELTA weights, D**2. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DESUBI + + +C N.B. the locations of WD and TT accessed depend on the value +C of the first element of each array and the leading dimensions +C of the multiply subscripted arrays. + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WD(1,1,1).GE.ZERO) THEN + IF (LDWD.GE.N) THEN +C The elements of WD have been individually specified + + IF (LD2WD.EQ.1) THEN +C The arrays stored in WD are diagonal + CALL DZERO(M,M,E,M) + DO 10 J=1,M + E(J,J) = WD(I,1,J) + 10 CONTINUE + ELSE +C The arrays stored in WD are full positive semidefinite matrices + DO 30 J1=1,M + DO 20 J2=1,M + E(J1,J2) = WD(I,J1,J2) + 20 CONTINUE + 30 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 110 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 110 CONTINUE + ELSE + DO 120 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 120 CONTINUE + END IF + ELSE + DO 130 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 130 CONTINUE + END IF + ELSE +C WD is an M by M matrix + + IF (LD2WD.EQ.1) THEN +C The array stored in WD is diagonal + CALL DZERO(M,M,E,M) + DO 140 J=1,M + E(J,J) = WD(1,1,J) + 140 CONTINUE + ELSE +C The array stored in WD is a full positive semidefinite matrices + DO 160 J1=1,M + DO 150 J2=1,M + E(J1,J2) = WD(1,J1,J2) + 150 CONTINUE + 160 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 210 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 210 CONTINUE + ELSE + DO 220 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 220 CONTINUE + END IF + ELSE + DO 230 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 230 CONTINUE + END IF + END IF + ELSE +C WD is a diagonal matrix with elements ABS(WD(1,1,1)) + CALL DZERO(M,M,E,M) + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 310 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(I,J)**2 + 310 CONTINUE + ELSE + DO 320 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,J)**2 + 320 CONTINUE + END IF + ELSE + DO 330 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,1)**2 + 330 CONTINUE + END IF + END IF + + RETURN + END SUBROUTINE +*DETAF + SUBROUTINE DETAF + & (FCN, + & N,M,NP,NQ, + & XPLUSD,BETA,EPSMAC,NROW, + & PARTMP,PV0, + & IFIXB,IFIXX,LDIFX, + & ISTOP,NFEV,ETA,NETA, + & WRK1,WRK2,WRK6,WRK7, + & INFO, + & LOWER,UPPER) +C***Begin Prologue DETAF +C***Refer to ODR +C***Routines Called FCN +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute noise and number of good digits in function results +C (Adapted from STARPAC subroutine ETAFUN) +C***End Prologue DETAF + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & EPSMAC,ETA + INTEGER + & INFO,ISTOP,LDIFX,M,N,NETA,NFEV,NP,NQ,NROW + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),LOWER(NP),PARTMP(NP),PV0(N,NQ),UPPER(NP), + & WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),WRK7(-2:2,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & A,B,FAC,HUNDRD,ONE,P1,P2,P5,SHIFT,STP,TWO,ZERO + INTEGER + & J,K,L,SBK + +C...Local arrays + REAL (KIND=R8) + & PARPTS(-2:2,NP) + +C...Data statements + DATA + & ZERO,P1,P2,P5,ONE,TWO,HUNDRD + & /0.0E0_R8,0.1E0_R8,0.2E0_R8,0.5E0_R8,1.0E0_R8,2.0E0_R8, + & 1.0E2_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (ALPHABETICALLY) +C A: Parameters of the local fit. +C B: Parameters of the local fit. +C BETA: The function parameters. +C EPSMAC: The value of machine precision. +C ETA: The noise in the model results. +C FAC: A factor used in the computations. +C HUNDRD: The value 1.0E2_R8. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +C Computing the function at the current BETA and DELTA. +C J: An index variable. +C K: An index variable. +C L: AN INDEX VARIABLE. +C LDIFX: The leading dimension of array IFIXX. +C LOWER: The lower bound of BETA. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NETA: The number of accurate digits in the model results. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number at which the derivative is to be checked. +C ONE: The value 1.0E0_R8. +C P1: The value 0.1E0_R8. +C P2: The value 0.2E0_R8. +C P5: The value 0.5E0_R8. +C PARPTS: The points that PARTMP will take on during FCN evaluations. +C PARTMP: The model parameters. +C PV0: The original predicted values. +C SHIFT: When PARPTS cross the parameter bounds they are shifted by SHIFT. +C SBK: The sign of BETA(K). +C STP: A small value used to perturb the parameters. +C UPPER: The upper bound of BETA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C WRK7: A work array of (5 BY NQ) elements. +C XPLUSD: The values of X + DELTA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DETAF + + + STP = HUNDRD*EPSMAC + ETA = EPSMAC + +C Create points to use in calculating FCN for ETA and NETA. + DO J=-2,2 + IF (J.EQ.0) THEN + PARPTS(0,:) = BETA(:) + ELSE + DO K=1,NP + IF (IFIXB(1).LT.0) THEN + PARPTS(J,K) = BETA(K) + J*STP*BETA(K) + ELSE IF (IFIXB(K).NE.0) THEN + PARPTS(J,K) = BETA(K) + J*STP*BETA(K) + ELSE + PARPTS(J,K) = BETA(K) + END IF + END DO + END IF + END DO + +C Adjust the points used in calculating FCN to uphold the boundary +C constraints. + DO K=1,NP + SBK = SIGN(ONE,PARPTS(2,K)-PARPTS(-2,K)) + IF (PARPTS(SBK*2,K).GT.UPPER(K)) THEN + SHIFT = UPPER(K) - PARPTS(SBK*2,K) + PARPTS(SBK*2,K) = UPPER(K) + DO J=-SBK*2,SBK*1,SBK + PARPTS(J,K) = PARPTS(J,K) + SHIFT + END DO + IF (PARPTS(-SBK*2,K).LT.LOWER(K)) THEN + INFO = 90010 + RETURN + END IF + END IF + IF (PARPTS(-SBK*2,K).LT.LOWER(K)) THEN + SHIFT = LOWER(K) - PARPTS(-SBK*2,K) + PARPTS(-SBK*2,K) = LOWER(K) + DO J=-SBK*1,SBK*2,SBK + PARPTS(J,K) = PARPTS(J,K) + SHIFT + END DO + IF (PARPTS(SBK*2,K).GT.UPPER(K)) THEN + INFO = 90010 + RETURN + END IF + END IF + END DO + +C Evaluate FCN for all points in PARPTS. + DO J=-2,2 + IF (ALL(PARPTS(J,:).EQ.BETA(:))) THEN + DO L=1,NQ + WRK7(J,L) = PV0(NROW,L) + END DO + ELSE + PARTMP(:) = PARPTS(J,:) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & PARTMP(:),XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 003,WRK2,WRK6,WRK1,ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO L=1,NQ + WRK7(J,L) = WRK2(NROW,L) + END DO + END IF + END DO + +C Calculate ETA and NETA. + DO 100 L=1,NQ + A = ZERO + B = ZERO + DO 50 J=-2,2 + A = A + WRK7(J,L) + B = B + J*WRK7(J,L) + 50 CONTINUE + A = P2*A + B = P1*B + IF ((WRK7(0,L).NE.ZERO) .AND. + & (ABS(WRK7(1,L)+WRK7(-1,L)).GT.HUNDRD*EPSMAC)) THEN + FAC = ONE/ABS(WRK7(0,L)) + ELSE + FAC = ONE + END IF + DO 60 J=-2,2 + WRK7(J,L) = ABS((WRK7(J,L)-(A+J*B))*FAC) + ETA = MAX(WRK7(J,L),ETA) + 60 CONTINUE + 100 CONTINUE + NETA = MAX(TWO,P5-LOG10(ETA)) + + RETURN + END SUBROUTINE +*DEVJAC + SUBROUTINE DEVJAC + & (FCN, + & ANAJAC,CDJAC, + & N,M,NP,NQ, + & BETAC,BETA,STPB, + & IFIXB,IFIXX,LDIFX, + & X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FN, + & STP,WRK1,WRK2,WRK3,WRK6, + & FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + & NJEV,NFEV,ISTOP,INFO, + & LOWER,UPPER) +C***Begin Prologue DEVJAC +C***Refer to ODR +C***Routines Called FCN,DDOT,DIFIX,DJACCD,DJACFD,DWGHT,DUNPAC,DXPY +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute the weighted Jacobians wrt BETA and DELTA +C***End Prologue DEVJAC + +C...Used modules + USE REAL_PRECISION + USE ODRPACK95, ONLY : TEMPRET + +C...Scalar arguments + INTEGER + & INFO,ISTOP,LDIFX,LDSTPD,LDTT,LDWE,LDX,LD2WE, + & M,N,NETA,NFEV,NJEV,NP,NQ + LOGICAL + & ANAJAC,CDJAC,ISODR + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),BETAC(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + & FN(N,NQ),LOWER(NP),SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M), + & TT(LDTT,M),UPPER(NP), + & WE1(LDWE,LD2WE,NQ),WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP), + & WRK6(N,NP,NQ),X(LDX,M),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + INTEGER + & IDEVAL,J,K,K1,L + REAL (KIND=R8) + & ZERO + LOGICAL + & ERROR + +C...External subroutines + EXTERNAL + & DIFIX,DJACCD,DJACFD,DUNPAC,DXPY + +C...External functions + REAL (KIND=R8) + & DDOT + EXTERNAL + & DDOT + +C...Data statements + DATA ZERO + & /0.0E0_R8/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Routine names used as subprogram arguments +C FCN: The user-supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the Jacobians are +C computed by finite differences (ANAJAC=FALSE) or not +C (ANAJAC=TRUE). +C BETA: The function parameters. +C BETAC: The current estimated values of the unfixed BETA's. +C CDJAC: The variable designating whether the Jacobians are +C computed by central differences (CDJAC=TRUE) or by forward +C differences (CDJAC=FALSE). +C DELTA: The estimated values of DELTA. +C ERROR: The variable designating whether ODRPACK95 detected nonzero +C values in array DELTA in the OLS case, and thus whether +C the user may have overwritten important information +C by computing FJACD in the OLS case. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FN: The predicted values of the function at the current point. +C IDEVAL: The variable designating what computations are to be +C performed by user-supplied subroutine FCN. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of DELTA are +C fixed at their input values or not. +C INFO: The variable designating why the computations were stopped. +C ISTOP: The variable designating that the user wishes the +C computations stopped. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or OLS (ISODR=FALSE). +C J: An indexing variable. +C K: An indexing variable. +C K1: An indexing variable. +C L: An indexing variable. +C LDIFX: The leading dimension of array IFIXX. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LDWE: The leading dimension of arrays WE and WE1. +C LDX: The leading dimension of array X. +C LD2WE: The second dimension of arrays WE and WE1. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C NETA: The number of accurate digits in the function results. +C NFEV: The number of function evaluations. +C NJEV: The number of Jacobian evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C SSF: The scale used for the BETA's. +C STP: The step used for computing finite difference +C derivatives with respect to DELTA. +C STPB: The relative step used for computing finite difference +C derivatives with respect to BETA. +C STPD: The relative step used for computing finite difference +C derivatives with respect to DELTA. +C TT: The scaling values used for DELTA. +C WE1: The square roots of the EPSILON weights in array WE. +C WRK1: A work array of (N by M by NQ) elements. +C WRK2: A work array of (N by NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C X: The independent variable. +C XPLUSD: The values of X + DELTA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DEVJAC + + +C Insert current unfixed BETA estimates into BETA + + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + +C Compute XPLUSD = X + DELTA + + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) + +C Compute the Jacobian wrt the estimated BETAS (FJACB) and +C the Jacobian wrt DELTA (FJACD) + + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + IF (ANAJAC) THEN + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,WRK2,FJACB,FJACD, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV+1 + END IF +C Make sure fixed elements of FJACD are zero + IF (ISODR) THEN + DO 10 L=1,NQ + CALL DIFIX(N,M,IFIXX,LDIFX,FJACD(1,1,L),N,FJACD(1,1,L),N) + 10 CONTINUE + END IF + ELSE IF (CDJAC) THEN + CALL DJACCD(FCN, + & N,M,NP,NQ, + & BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + & STPB,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + & FJACB,ISODR,FJACD,NFEV,ISTOP,INFO, + & LOWER,UPPER) + ELSE + CALL DJACFD(FCN, + & N,M,NP,NQ, + & BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + & STPB,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + & FJACB,ISODR,FJACD,NFEV,ISTOP,INFO, + & LOWER,UPPER) + END IF + IF (ISTOP.LT.0.OR.INFO.GE.10000) THEN + RETURN + ELSE IF (.NOT.ISODR) THEN +C Try to detect whether the user has computed JFACD +C Within FCN in the OLS case + ERROR = DDOT(N*M,DELTA,1,DELTA,1).NE.ZERO + IF (ERROR) THEN + INFO = 50300 + RETURN + END IF + END IF + +C Weight the Jacobian wrt the estimated BETAS + + IF (IFIXB(1).LT.0) THEN + DO 20 K=1,NP + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + & FJACB(1:N,K,1:NQ),TEMPRET(1:N,1:NQ)) + FJACB(1:N,K,1:NQ) = TEMPRET(1:N,1:NQ) + 20 CONTINUE + ELSE + K1 = 0 + DO 30 K=1,NP + IF (IFIXB(K).GE.1) THEN + K1 = K1 + 1 + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + & FJACB(1:N,K,1:NQ),TEMPRET(1:N,1:NQ)) + FJACB(1:N,K1,1:NQ) = TEMPRET(1:N,1:NQ) + END IF + 30 CONTINUE + END IF + +C Weight the Jacobian's wrt DELTA as appropriate + + IF (ISODR) THEN + DO 40 J=1,M + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + & FJACD(1:N,J,1:NQ),TEMPRET(1:N,1:NQ)) + FJACD(1:N,J,1:NQ) = TEMPRET(1:N,1:NQ) + 40 CONTINUE + END IF + + RETURN + END SUBROUTINE +*DFCTR + SUBROUTINE DFCTR(OKSEMI,A,LDA,N,INFO) +C***Begin Prologue DFCTR +C***Refer to ODR +C***Routines Called DDOT +C***Date Written 910706 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Factor the positive (semi)definite matrix A using a +C modified Cholesky factorization +C (adapted from LINPACK subroutine DPOFA) +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***End PROLOGUE DFCTR + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER INFO,LDA,N + LOGICAL OKSEMI + +C...Array arguments + REAL (KIND=R8) A(LDA,N) + +C...Local scalars + REAL (KIND=R8) XI,S,T,TEN,ZERO + INTEGER J,K + +C...External functions + EXTERNAL DDOT + REAL (KIND=R8) DDOT + + DATA + & ZERO,TEN + & /0.0E0_R8,10.0E0_R8/ + +C...Variable Definitions (alphabetically) +C A: The array to be factored. Upon return, A contains the +C upper triangular matrix R so that A = trans(R)*R +C where the strict lower triangle is set to zero +C if INFO .NE. 0 , the factorization is not complete. +C I: An indexing variable. +C INFO: An idicator variable, where if +C INFO = 0 then factorization was completed +C INFO = K signals an error condition. The leading minor +C of order K is not positive (semi)definite. +C J: An indexing variable. +C LDA: The leading dimension of array A. +C N: The number of rows and columns of data in array A. +C OKSEMI: The indicating whether the factored array can be positive +C semidefinite (OKSEMI=TRUE) or whether it must be found to +C be positive definite (OKSEMI=FALSE). +C TEN: The value 10.0E0_R8. +C XI: A value used to test for non positive semidefiniteness. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DFCTR + + +C Set relative tolerance for detecting non positive semidefiniteness. + XI = -TEN*EPSILON(ZERO) + +C Compute factorization, storing in upper triangular portion of A + DO 20 J=1,N + INFO = J + S = ZERO + DO 10 K=1,J-1 + IF (A(K,K).EQ.ZERO) THEN + T = ZERO + ELSE + T = A(K,J) - DDOT(K-1,A(1,K),1,A(1,J),1) + T = T/A(K,K) + END IF + A(K,J) = T + S = S + T*T + 10 CONTINUE + S = A(J,J) - S +C ......Exit + IF (A(J,J).LT.ZERO .OR. S.LT.XI*ABS(A(J,J))) THEN + RETURN + ELSE IF (.NOT.OKSEMI .AND. S.LE.ZERO) THEN + RETURN + ELSE IF (S.LE.ZERO) THEN + A(J,J) = ZERO + ELSE + A(J,J) = SQRT(S) + END IF + 20 CONTINUE + INFO = 0 + +C Zero out lower portion of A + DO 40 J=2,N + DO 30 K=1,J-1 + A(J,K) = ZERO + 30 CONTINUE + 40 CONTINUE + + RETURN + END SUBROUTINE +*DFCTRW + SUBROUTINE DFCTRW + & (N,M,NQ,NPP, + & ISODR, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & WRK0,WRK4, + & WE1,NNZW,INFO) +C***Begin Prologue DFCTRW +C***Refer to ODR +C***Routines Called DFCTR +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Check input parameters, indicating errors found using +C nonzero values of argument INFO as described in the +C ODRPACK95 reference guide +C***End Prologue DFCTRW + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,LDWD,LDWE,LD2WD,LD2WE, + & M,N,NNZW,NPP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ),WD(LDWD,LD2WD,M), + & WRK0(NQ,NQ),WRK4(M,M) + +C...Local scalars + REAL (KIND=R8) + & ZERO + INTEGER + & I,INF,J,J1,J2,L,L1,L2 + LOGICAL + & NOTZRO + +C...External subroutines + EXTERNAL + & DFCTR + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C INFO: The variable designating why the computations were stopped. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C J: An indexing variable. +C J1: An indexing variable. +C J2: An indexing variable. +C L: An indexing variable. +C L1: An indexing variable. +C L2: An indexing variable. +C LAST: The last row of the array to be accessed. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NNZW: The number of nonzero weighted observations. +C NOTZRO: The variable designating whether a given component of the +C weight array WE contains a nonzero element (NOTZRO=FALSE) +C or not (NOTZRO=TRUE). +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observations. +C WE: The (squared) EPSILON weights. +C WE1: The factored EPSILON weights, S.T. trans(WE1)*WE1 = WE. +C WD: The (squared) DELTA weights. +C WRK0: A work array of (NQ BY NQ) elements. +C WRK4: A work array of (M BY M) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DFCTRW + + +C Check EPSILON weights, and store factorization in WE1 + + IF (WE(1,1,1).LT.ZERO) THEN +C WE contains a scalar + WE1(1,1,1) = -SQRT(ABS(WE(1,1,1))) + NNZW = N + + ELSE + NNZW = 0 + + IF (LDWE.EQ.1) THEN + + IF (LD2WE.EQ.1) THEN +C WE contains a diagonal matrix + DO 110 L=1,NQ + IF (WE(1,1,L).GT.ZERO) THEN + NNZW = N + WE1(1,1,L) = SQRT(WE(1,1,L)) + ELSE IF (WE(1,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 110 CONTINUE + ELSE + +C WE contains a full NQ by NQ semidefinite matrix + DO 130 L1=1,NQ + DO 120 L2=L1,NQ + WRK0(L1,L2) = WE(1,L1,L2) + 120 CONTINUE + 130 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + DO 150 L1=1,NQ + DO 140 L2=1,NQ + WE1(1,L1,L2) = WRK0(L1,L2) + 140 CONTINUE + IF (WE1(1,L1,L1).NE.ZERO) THEN + NNZW = N + END IF + 150 CONTINUE + END IF + END IF + + ELSE + + IF (LD2WE.EQ.1) THEN +C WE contains an array of diagonal matrix + DO 220 I=1,N + NOTZRO = .FALSE. + DO 210 L=1,NQ + IF (WE(I,1,L).GT.ZERO) THEN + NOTZRO = .TRUE. + WE1(I,1,L) = SQRT(WE(I,1,L)) + ELSE IF (WE(I,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 210 CONTINUE + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 220 CONTINUE + ELSE + +C WE contains an array of full NQ by NQ semidefinite matrices + DO 270 I=1,N + DO 240 L1=1,NQ + DO 230 L2=L1,NQ + WRK0(L1,L2) = WE(I,L1,L2) + 230 CONTINUE + 240 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + NOTZRO = .FALSE. + DO 260 L1=1,NQ + DO 250 L2=1,NQ + WE1(I,L1,L2) = WRK0(L1,L2) + 250 CONTINUE + IF (WE1(I,L1,L1).NE.ZERO) THEN + NOTZRO = .TRUE. + END IF + 260 CONTINUE + END IF + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 270 CONTINUE + END IF + END IF + END IF + +C Check for a sufficient number of nonzero EPSILON weights + + IF (NNZW.LT.NPP) THEN + INFO = 30020 + END IF + + +C Check DELTA weights + + 300 CONTINUE + IF (.NOT.ISODR .OR. WD(1,1,1).LT.ZERO) THEN +C Problem is not ODR, or WD contains a scalar + RETURN + + ELSE + + IF (LDWD.EQ.1) THEN + + IF (LD2WD.EQ.1) THEN +C WD contains a diagonal matrix + DO 310 J=1,M + IF (WD(1,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 310 CONTINUE + ELSE + +C WD contains a full M by M positive definite matrix + DO 330 J1=1,M + DO 320 J2=J1,M + WRK4(J1,J2) = WD(1,J1,J2) + 320 CONTINUE + 330 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + END IF + + ELSE + + IF (LD2WD.EQ.1) THEN +C WD contains an array of diagonal matrices + DO 420 I=1,N + DO 410 J=1,M + IF (WD(I,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 410 CONTINUE + 420 CONTINUE + ELSE + +C WD contains an array of full M by M positive definite matrices + DO 470 I=1,N + DO 440 J1=1,M + DO 430 J2=J1,M + WRK4(J1,J2) = WD(I,J1,J2) + 430 CONTINUE + 440 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 470 CONTINUE + END IF + END IF + END IF + + RETURN + END SUBROUTINE +*DFLAGS + SUBROUTINE DFLAGS + & (JOB,RESTRT,INITD,DOVCV,REDOJ,ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) +C***Begin Prologue DFLAGS +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Set flags indicating conditions specified by JOB +C***End Prologue DFLAGS + +C...Scalar arguments + INTEGER + & JOB + LOGICAL + & ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...Local scalars + INTEGER + & J + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the Jacobians are computed +C by finite differences (ANAJAC=FALSE) or not (ANAJAC=TRUE). +C CDJAC: The variable designating whether the Jacobians are computed +C by central differences (CDJAC=TRUE) or by forward +C differences (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user-supplied +c Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C DOVCV: The variable designating whether the covariance matrix is +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INITD: The variable designating whether DELTA is to be initialized +C to zero (INITD=TRUE) or to the first N by M elements of +C array WORK (INITD=FALSE). +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C J: The value of a specific digit of JOB. +C JOB: The variable controling problem initialization and +C computational method. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). + + +C***First executable statement DFLAGS + + + IF (JOB.GE.0) THEN + + RESTRT= JOB.GE.10000 + + INITD = MOD(JOB,10000)/1000.EQ.0 + + J = MOD(JOB,1000)/100 + IF (J.EQ.0) THEN + DOVCV = .TRUE. + REDOJ = .TRUE. + ELSE IF (J.EQ.1) THEN + DOVCV = .TRUE. + REDOJ = .FALSE. + ELSE + DOVCV = .FALSE. + REDOJ = .FALSE. + END IF + + J = MOD(JOB,100)/10 + IF (J.EQ.0) THEN + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.1) THEN + ANAJAC = .FALSE. + CDJAC = .TRUE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.2) THEN + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .TRUE. + ELSE + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + END IF + + J = MOD(JOB,10) + IF (J.EQ.0) THEN + ISODR = .TRUE. + IMPLCT = .FALSE. + ELSE IF (J.EQ.1) THEN + ISODR = .TRUE. + IMPLCT = .TRUE. + ELSE + ISODR = .FALSE. + IMPLCT = .FALSE. + END IF + + ELSE + + RESTRT = .FALSE. + INITD = .TRUE. + DOVCV = .TRUE. + REDOJ = .TRUE. + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ISODR = .TRUE. + IMPLCT = .FALSE. + + END IF + + RETURN + END SUBROUTINE +*DHSTEP + FUNCTION DHSTEP + & (ITYPE,NETA,I,J,STP,LDSTP) + & RESULT(DHSTEPR) +C***Begin Prologue DHSTEP +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Set relative step size for finite difference derivatives +C***End Prologue DHSTEP + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & I,ITYPE,J,LDSTP,NETA + +C...Array arguments + REAL (KIND=R8) + & STP(LDSTP,J) + +C...Result + REAL (KIND=R8) + & DHSTEPR + +C...Local scalars + REAL (KIND=R8) + & TEN,THREE,TWO,ZERO + +C...Data statements + DATA + & ZERO,TWO,THREE,TEN + & /0.0E0_R8,2.0E0_R8,3.0E0_R8,10.0E0_R8/ + +C...Variable Definitions (alphabetically) +C I: An identifier for selecting user supplied step sizes. +C ITYPE: The finite difference method being used, where +C ITYPE = 0 indicates forward finite differences, and +C ITYPE = 1 indicates central finite differences. +C J: An identifier for selecting user supplied step sizes. +C LDSTP: The leading dimension of array STP. +C NETA: The number of good digits in the function results. +C STP: The step size for the finite difference derivative. +C TEN: The value 10.0E0_R8. +C THREE: The value 3.0E0_R8. +C TWO: The value 2.0E0_R8. +C ZERO: The value 0.0E0_R8. + + + +C***First executable statement DHSTEP + + +C Set DHSTEP to relative finite difference step size + + IF (STP(1,1).LE.ZERO) THEN + + IF (ITYPE.EQ.0) THEN +C Use default forward finite difference step size + DHSTEPR = TEN**(-ABS(NETA)/TWO - TWO) + + ELSE +C Use default central finite difference step size + DHSTEPR = TEN**(-ABS(NETA)/THREE) + END IF + + ELSE IF (LDSTP.EQ.1) THEN + DHSTEPR = STP(1,J) + + ELSE + DHSTEPR = STP(I,J) + END IF + + RETURN + END FUNCTION +*DIFIX + SUBROUTINE DIFIX + & (N,M,IFIX,LDIFIX,T,LDT,TFIX,LDTFIX) +C***Begin Prologue DIFIX +C***Refer to ODR +C***Routines Called (None) +C***Date Written 910612 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Set elements of T to zero according to IFIX +C***End Prologue DIFIX + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDIFIX,LDT,LDTFIX,M,N + +C...Array arguments + REAL (KIND=R8) + & T(LDT,M),TFIX(LDTFIX,M) + INTEGER + & IFIX(LDIFIX,M) + +C...Local scalars + REAL (KIND=R8) + & ZERO + INTEGER + & I,J + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C IFIX: The array designating whether an element of T is to be +C set to zero. +C J: an indexing variable. +C LDT: The leading dimension of array T. +C LDIFIX: The leading dimension of array IFIX. +C LDTFIX: The leading dimension of array TFIX. +C M: The number of columns of data in the array. +C N: The number of rows of data in the array. +C T: The array being set to zero according to the elements +C of IFIX. +C TFIX: The resulting array. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DIFIX + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (IFIX(1,1).GE.ZERO) THEN + IF (LDIFIX.GE.N) THEN + DO 20 J=1,M + DO 10 I=1,N + IF (IFIX(I,J).EQ.0) THEN + TFIX(I,J) = ZERO + ELSE + TFIX(I,J) = T(I,J) + END IF + 10 CONTINUE + 20 CONTINUE + ELSE + DO 100 J=1,M + IF (IFIX(1,J).EQ.0) THEN + DO 30 I=1,N + TFIX(I,J) = ZERO + 30 CONTINUE + ELSE + DO 90 I=1,N + TFIX(I,J) = T(I,J) + 90 CONTINUE + END IF + 100 CONTINUE + END IF + END IF + + RETURN + END SUBROUTINE +*DINIWK + SUBROUTINE DINIWK + & (N,M,NP,WORK,LWORK,IWORK,LIWORK, + & X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + & BETA,SCLB, + & SSTOL,PARTOL,MAXIT,TAUFAC, + & JOB,IPRINT,LUNERR,LUNRPT, + & LOWER,UPPER, + & EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + & JOBI,IPRINI,LUNERI,LUNRPI, + & SSFI,TTI,LDTTI,DELTAI, + & LOWERI,UPPERI,BOUNDI) +C***Begin Prologue DINIWK +C***Refer to ODR +C***Routines Called DFLAGS,DSCLB,DSCLD,DZERO +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Initialize work vectors as necessary +C***End Prologue DINIWK + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PARTOL,SSTOL,TAUFAC + INTEGER + & BOUNDI,DELTAI,EPSMAI,IPRINI,IPRINT,JOB,JOBI,LDIFX, + & LDSCLD,LDTTI,LDX,LIWORK,LOWERI,LUNERI,LUNERR,LUNRPI,LUNRPT, + & LWORK,M,MAXIT,MAXITI,N,NP,PARTLI,SSFI,SSTOLI,TAUFCI,TTI, + & UPPERI + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),LOWER(NP),SCLB(NP),SCLD(LDSCLD,M),UPPER(NP), + & WORK(LWORK),X(LDX,M) + INTEGER + & IFIXX(LDIFX,M),IWORK(LIWORK) + +C...Local scalars + REAL (KIND=R8) + & ONE,THREE,TWO,ZERO + INTEGER + & I,J + LOGICAL + & ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...External functions + +C...External subroutines + EXTERNAL + & DCOPY,DFLAGS,DSCLB,DSCLD,DZERO + +C...Data statements + DATA + & ZERO,ONE,TWO,THREE + & /0.0E0_R8,1.0E0_R8,2.0E0_R8,3.0E0_R8/ + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the Jacobians are +C computed by finite differences (ANAJAC=FALSE) or not +C (ANAJAC=TRUE). +C BETA: The function parameters. +C CDJAC: The variable designating whether the Jacobians are +C computed by central differences (CDJAC=TRUE) or by forward +C differences (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user-supplied +C Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C DELTAI: The starting location in array WORK of array DELTA. +C DOVCV: The variable designating whether the covariance matrix is +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C EPSMAI: The location in array WORK of variable EPSMAC. +C I: An indexing variable. +C IFIXX: The values designating whether the elements of X are fixed +C at their input values or not. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INITD: The variable designating whether DELTA is to be initialized +C to zero (INITD=TRUE) or to the values in the first N by M +C elements of array WORK (INITD=FALSE). +C IPRINI: The location in array IWORK of variable IPRINT. +C IPRINT: The print control variable. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C IWORK: The integer work space. +C J: An indexing variable. +C JOB: The variable controling problem initialization and +C computational method. +C JOBI: The location in array IWORK of variable JOB. +C LDIFX: The leading dimension of array IFIXX. +C LDSCLD: The leading dimension of array SCLD. +C LDTTI: The leading dimension of array TT. +C LDX: The leading dimension of array X. +C LIWORK: The length of vector IWORK. +C LUNERI: The location in array IWORK of variable LUNERR. +C LUNERR: The logical unit number used for error messages. +C LUNRPI: The location in array iwork of variable LUNRPT. +C LUNRPT: The logical unit number used for computation reports. +C LWORK: The length of vector WORK. +C M: The number of columns of data in the independent variable. +C MAXIT: The maximum number of iterations allowed. +C MAXITI: The location in array IWORK of variable MAXIT. +C N: The number of observations. +C NP: The number of function parameters. +C ONE: The value 1.0E0_R8. +C PARTLI: The location in array work of variable partol. +C PARTOL: The parameter convergence stopping criteria. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). +C SCLB: The scaling values for BETA. +C SCLD: The scaling values for DELTA. +C SSFI: The starting location in array WORK of array SSF. +C SSTOL: The sum-of-squares convergence stopping criteria. +C SSTOLI: The location in array WORK of variable SSTOL. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TAUFCI: The location in array WORK of variable TAUFAC. +C THREE: The value 3.0E0_R8. +C TTI: The starting location in array WORK of the ARRAY TT. +C TWO: The value 2.0E0_R8. +C WORK: The REAL (KIND=R8) work space. +C X: The independent variable. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DINIWK + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + & ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C Store value of machine precision in work vector + + WORK(EPSMAI) = EPSILON(ZERO) + +C Set tolerance for stopping criteria based on the change in the +C parameters (see also subprogram DODCNT) + + IF (PARTOL.LT.ZERO) THEN + WORK(PARTLI) = WORK(EPSMAI)**(TWO/THREE) + ELSE + WORK(PARTLI) = MIN(PARTOL, ONE) + END IF + +C Set tolerance for stopping criteria based on the change in the +C sum of squares of the weighted observational errors + + IF (SSTOL.LT.ZERO) THEN + WORK(SSTOLI) = SQRT(WORK(EPSMAI)) + ELSE + WORK(SSTOLI) = MIN(SSTOL, ONE) + END IF + +C Set factor for computing trust region diameter at first iteration + + IF (TAUFAC.LE.ZERO) THEN + WORK(TAUFCI) = ONE + ELSE + WORK(TAUFCI) = MIN(TAUFAC, ONE) + END IF + +C Set maximum number of iterations + + IF (MAXIT.LT.0) THEN + IWORK(MAXITI) = 50 + ELSE + IWORK(MAXITI) = MAXIT + END IF + +C Store problem initialization and computational method control +C variable + + IF (JOB.LE.0) THEN + IWORK(JOBI) = 0 + ELSE + IWORK(JOBI) = JOB + END IF + +C Set print control + + IF (IPRINT.LT.0) THEN + IWORK(IPRINI) = 2001 + ELSE + IWORK(IPRINI) = IPRINT + END IF + +C Set logical unit number for error messages + + IF (LUNERR.LT.0) THEN + IWORK(LUNERI) = 6 + ELSE + IWORK(LUNERI) = LUNERR + END IF + +C Set logical unit number for computation reports + + IF (LUNRPT.LT.0) THEN + IWORK(LUNRPI) = 6 + ELSE + IWORK(LUNRPI) = LUNRPT + END IF + +C Compute scaling for BETA's and DELTA's + + IF (SCLB(1).LE.ZERO) THEN + CALL DSCLB(NP,BETA,WORK(SSFI)) + ELSE + CALL DCOPY(NP,SCLB,1,WORK(SSFI),1) + END IF + IF (ISODR) THEN + IF (SCLD(1,1).LE.ZERO) THEN + IWORK(LDTTI) = N + CALL DSCLD(N,M,X,LDX,WORK(TTI),IWORK(LDTTI)) + ELSE + IF (LDSCLD.EQ.1) THEN + IWORK(LDTTI) = 1 + CALL DCOPY(M,SCLD(1,1),1,WORK(TTI),1) + ELSE + IWORK(LDTTI) = N + DO 10 J=1,M + CALL DCOPY(N,SCLD(1,J),1, + & WORK(TTI+(J-1)*IWORK(LDTTI)),1) + 10 CONTINUE + END IF + END IF + END IF + +C Initialize DELTA's as necessary + + IF (ISODR) THEN + IF (INITD) THEN + CALL DZERO(N,M,WORK(DELTAI),N) + ELSE + IF (IFIXX(1,1).GE.0) THEN + IF (LDIFX.EQ.1) THEN + DO 20 J=1,M + IF (IFIXX(1,J).EQ.0) THEN + CALL DZERO(N,1,WORK(DELTAI+(J-1)*N),N) + END IF + 20 CONTINUE + ELSE + DO 40 J=1,M + DO 30 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + WORK(DELTAI-1+I+(J-1)*N) = ZERO + END IF + 30 CONTINUE + 40 CONTINUE + END IF + END IF + END IF + ELSE + CALL DZERO(N,M,WORK(DELTAI),N) + END IF + +C Copy bounds into WORK + + WORK(LOWERI:LOWERI+NP-1) = LOWER(1:NP) + WORK(UPPERI:UPPERI+NP-1) = UPPER(1:NP) + +C Initialize parameters on bounds in IWORK + + IWORK(BOUNDI:BOUNDI+NP-1) = 0 + + RETURN + END SUBROUTINE +*DIWINF + SUBROUTINE DIWINF + & (M,NP,NQ, + & MSGBI,MSGDI,IFIX2I,ISTOPI, + & NNZWI,NPPI,IDFI, + & JOBI,IPRINI,LUNERI,LUNRPI, + & NROWI,NTOLI,NETAI, + & MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + & BOUNDI, + & LIWKMN) +C***Begin Prologue DIWINF +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Set storage locations within integer work space +C***End Prologue DIWINF + +C...Scalar arguments + INTEGER + & BOUNDI,IDFI,INT2I,IPRINI,IRANKI,ISTOPI,JOBI,IFIX2I,LDTTI, + & LIWKMN,LUNERI,LUNRPI,M,MAXITI,MSGBI,MSGDI,NETAI,NFEVI,NITERI, + & NJEVI,NNZWI,NP,NPPI,NQ,NROWI,NTOLI + +C...Variable Definitions (alphabetically) +C IDFI: The location in array IWORK of variable IDF. +C IFIX2I: The starting location in array IWORK of array IFIX2. +C INT2I: The location in array IWORK of variable INT2. +C IPRINI: The location in array IWORK of variable IPRINT. +C IRANKI: The location in array IWORK of variable IRANK. +C ISTOPI: The location in array IWORK of variable ISTOP. +C JOBI: The location in array IWORK of variable JOB. +C LDTTI: The location in array IWORK of variable LDTT. +C LIWKMN: The minimum acceptable length of array IWORK. +C LUNERI: The location in array IWORK of variable LUNERR. +C LUNRPI: The location in array IWORK of variable LUNRPT. +C M: The number of columns of data in the independent variable. +C MAXITI: The location in array iwork of variable MAXIT. +C MSGBI: The starting location in array IWORK of array MSGB. +C MSGDI: The starting location in array IWORK of array MSGD. +C NETAI: The location in array IWORK of variable NETA. +C NFEVI: The location in array IWORK of variable NFEV. +C NITERI: The location in array IWORK of variabel NITER. +C NJEVI: The location in array IWORK of variable NJEV. +C NNZWI: The location in array IWORK of variable NNZW. +C NP: The number of function parameters. +C NPPI: The location in array IWORK of variable NPP. +C NQ: The number of responses per observation. +C NROWI: The location in array IWORK of variable NROW. +C NTOLI: The location in array IWORK of variable NTOL. + + +C***First executable statement DIWINF + + + IF (NP.GE.1 .AND. M.GE.1) THEN + MSGBI = 1 + MSGDI = MSGBI + NQ*NP+1 + IFIX2I = MSGDI + NQ*M+1 + ISTOPI = IFIX2I + NP + NNZWI = ISTOPI + 1 + NPPI = NNZWI + 1 + IDFI = NPPI + 1 + JOBI = IDFI + 1 + IPRINI = JOBI + 1 + LUNERI = IPRINI + 1 + LUNRPI = LUNERI + 1 + NROWI = LUNRPI + 1 + NTOLI = NROWI + 1 + NETAI = NTOLI + 1 + MAXITI = NETAI + 1 + NITERI = MAXITI + 1 + NFEVI = NITERI + 1 + NJEVI = NFEVI + 1 + INT2I = NJEVI + 1 + IRANKI = INT2I + 1 + LDTTI = IRANKI + 1 + BOUNDI = LDTTI + 1 + LIWKMN = BOUNDI + NP - 1 + ELSE + MSGBI = 1 + MSGDI = 1 + IFIX2I = 1 + ISTOPI = 1 + NNZWI = 1 + NPPI = 1 + IDFI = 1 + JOBI = 1 + IPRINI = 1 + LUNERI = 1 + LUNRPI = 1 + NROWI = 1 + NTOLI = 1 + NETAI = 1 + MAXITI = 1 + NITERI = 1 + NFEVI = 1 + NJEVI = 1 + INT2I = 1 + IRANKI = 1 + LDTTI = 1 + BOUNDI = 1 + LIWKMN = 1 + END IF + + RETURN + END SUBROUTINE +*DJACCD + SUBROUTINE DJACCD + & (FCN, + & N,M,NP,NQ, + & BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + & STPB,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + & FJACB,ISODR,FJACD,NFEV,ISTOP,INFO, + & LOWER,UPPER) +C***Begin Prologue DJACCD +C***Refer to ODR +C***Routines Called FCN,DHSTEP,DZERO +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute central difference approximations to the +C Jacobian wrt the estimated BETAS and wrt the DELTAS +C***End Prologue DJACCD + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ), + & LOWER(NP), + & SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + & UPPER(NP), + & WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + & X(LDX,M),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & BETAK,ONE,TYPJ,ZERO + INTEGER + & I,J,K,L + LOGICAL + & DOIT,SETZRO + +C...External subroutines + EXTERNAL + & DZERO + +C...External functions + REAL (KIND=R8) + & DHSTEP,DERSTEP + EXTERNAL + & DHSTEP,DERSTEP + +C...Data statements + DATA + & ZERO,ONE + & /0.0E0_R8,1.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BETAK: The K-th function parameter. +C DELTA: The estimated errors in the explanatory variables. +C DOIT: The variable designating whether the derivative wrt a given +C BETA or DELTA needs to be computed (DOIT=TRUE) or not +C (DOIT=FALSE). +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FN: The new predicted values from the function. Used when parameter is +C on a boundary. +C I: An indexing variable. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are fixed +C at their input values or not. +C INFO: The variable designating why the computations were stopped. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C J: An indexing variable. +C K: An indexing variable. +C L: An indexing variable. +C LDIFX: The leading dimension of array IFIXX. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LDX: The leading dimension of array X. +C LOWER: The lower bound on BETA. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NETA: The number of good digits in the function results. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C ONE: The value 1.0E0_R8. +C SETZRO: The variable designating whether the derivative wrt some +C DELTA needs to be set to zero (SETZRO=TRUE) or not +C (SETZRO=FALSE). +C SSF: The scaling values used for BETA. +C STP: The step used for computing finite difference +C derivatives with respect to each DELTA. +C STPB: the relative step used for computing finite difference +C derivatives with respect to each BETA. +C STPD: The relative step used for computing finite difference +C derivatives with respect to each DELTA. +C TT: The scaling values used for DELTA. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C UPPER: The upper bound on BETA. +C X: The explanatory variable. +C XPLUSD: The values of X + DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DJACCD + + +C Compute the Jacobian wrt the estimated BETAS + + DO 60 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + WRK3(K) = BETAK + & + DERSTEP(1,K,BETAK,SSF,STPB,NETA) + WRK3(K) = WRK3(K) - BETAK + + BETA(K) = BETAK + WRK3(K) + IF (BETA(K).GT.UPPER(K)) THEN + BETA(K) = UPPER(K) + ELSE IF (BETA(K).LT.LOWER(K)) THEN + BETA(K) = LOWER(K) + END IF + IF (BETA(K)-2*WRK3(K).LT.LOWER(K)) THEN + BETA(K) = LOWER(K) + 2*WRK3(K) + ELSE IF (BETA(K)-2*WRK3(K).GT.UPPER(K)) THEN + BETA(K) = UPPER(K) + 2*WRK3(K) + END IF + IF (BETA(K).GT.UPPER(K).OR.BETA(K).LT.LOWER(K)) THEN + INFO = 60001 + RETURN + END IF + ISTOP = 0 + IF (BETA(K).EQ.BETAK) THEN + WRK2(1:N,1:NQ) = FN(1:N,1:NQ) + ELSE + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + END IF + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = WRK2(I,L) + 20 CONTINUE + 30 CONTINUE + + BETA(K) = BETA(K) - 2*WRK3(K) + IF (BETA(K).GT.UPPER(K)) THEN + INFO = 60001 + RETURN + END IF + IF (BETA(K).LT.LOWER(K)) THEN + INFO = 60001 + RETURN + END IF + ISTOP = 0 + IF (BETA(K).EQ.BETAK) THEN + WRK2(1:N,1:NQ) = FN(1:N,1:NQ) + ELSE + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + END IF + + DO 50 L=1,NQ + DO 40 I=1,N + FJACB(I,K,L) = (FJACB(I,K,L)-WRK2(I,L))/(2*WRK3(K)) + 40 CONTINUE + 50 CONTINUE + BETA(K) = BETAK + END IF + 60 CONTINUE + +C Compute the Jacobian wrt the X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + STP(I) = XPLUSD(I,J) + & + SIGN(ONE,XPLUSD(I,J)) + & *TYPJ*DHSTEP(1,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + END IF + + DO 150 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) - STP(I) + 150 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + & (2*STP(I)) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + & (2*STP(I)) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END SUBROUTINE +*MBFB + SUBROUTINE MBFB + & (NP,BETA,LOWER,UPPER,SSF,STPB,NETA,ETA,INTERVAL) +C***BEGIN PROLOGUE MBFB +C***REFER TO ODR +C***ROUTINES CALLED DHSTEP +C***DATE WRITTEN 20040624 (YYYYMMDD) +C***REVISION DATE 20040624 (YYYYMMDD) +C***PURPOSE ENSURE RANGE OF BOUNDS IS LARGE ENOUGH FOR DERIVATIVE CHECKING. +C*** MOVE BETA AWAY FROM BOUNDS SO THAT DERIVATIVES CAN BE CALCULATED. +C***END PROLOGUE MBFB + +C...USED MODULES + USE REAL_PRECISION + +C...SCALAR ARGUMENTS + INTEGER + & NETA,NP + REAL (KIND=R8) + & ETA + +C...ARRAY ARGUMENTS + INTEGER + & INTERVAL(NP) + REAL (KIND=R8) + & BETA(NP),LOWER(NP),SSF(NP),STPB(NP),UPPER(NP) + +C...LOCAL SCALARS + INTEGER + & K + REAL (KIND=R8) + & H,H0,H1,HC,HC0,HC1,HUNDRED,ONE,STPR,STPL,TEN,THREE,TYPJ,ZERO + +C...EXTERNAL FUNCTIONS + REAL (KIND=R8) + & DHSTEP + EXTERNAL + & DHSTEP + +C...DATA STATEMENTS + DATA + & ZERO,ONE,TEN,HUNDRED,THREE + & /0.0E0_R8,1.0E0_R8,10.0E0_R8,100.0E0_R8,3.0E0_R8/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: BETA for the jacobian checker. BETA will be moved far enough from +C the bounds so that the derivative checker may proceed. +C H: Relative step size for forward differences. +C H0: Initial relative step size for forward differences. +C H1: Default relative step size for forward differences. +C HC: Relative step size for center differences. +C HC0: Initial relative step size for center differences. +C HC1: Default relative step size for center differences. +C HUNDRED: 100.0E0_R8 +C INTERVAL: Specifies which difference methods and step sizes are supported by +C the current intervale UPPER-LOWER. +C K: Index variable for BETA. +C NETA: Number of good digits in the function results. +C ONE: The value 1.0E0_R8. +C SSF: The scale used for the BETA'S. +C STPB: The relative step used for computing finite difference derivatives +C with respect to BETA. +C STPL: Maximum step to the left of BETA (-) the derivative checker will +C use. +C STPR: Maximum step to the right of BETA (+) the derivative checker will +C use. +C TEN: 10.0E0_R8 +C THREE: 3.0E0_R8 +C TYPJ: The typical size of the J-th unkonwn BETA. +C ZERO: The value 0.0E0_R8. + + INTERVAL(:) = 111 + DO K=1,NP + H0 = DHSTEP(0,NETA,1,K,STPB,1) + HC0 = H0 + H1 = SQRT(ETA) + HC1 = ETA**(ONE/THREE) + H = MAX(TEN*H1,MIN(HUNDRED*H0,ONE)) + HC = MAX(TEN*HC1,MIN(HUNDRED*HC0,ONE)) + IF (BETA(K).EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETA(K)) + END IF + STPR = (H*TYPJ*SIGN(ONE,BETA(K))+BETA(K))-BETA(K) + STPL = (HC*TYPJ*SIGN(ONE,BETA(K))+BETA(K))-BETA(K) +C Check outer interval. + IF (LOWER(K)+2*ABS(STPL).GT.UPPER(K)) THEN + IF (INTERVAL(K).GE.100) THEN + INTERVAL(K) = INTERVAL(K) - 100 + END IF + ELSE IF (BETA(K)+STPL.GT.UPPER(K).OR.BETA(K)-STPL.GT.UPPER(K)) + & THEN + BETA(K) = UPPER(K) - ABS(STPL) + ELSE IF (BETA(K)+STPL.LT.LOWER(K).OR.BETA(K)-STPL.LT.LOWER(K)) + & THEN + BETA(K) = LOWER(K) + ABS(STPL) + END IF +C Check middle interval. + IF (LOWER(K)+2*ABS(STPR).GT.UPPER(K)) THEN + IF (MOD(INTERVAL(K),100).GE.10) THEN + INTERVAL(K) = INTERVAL(K) - 10 + END IF + ELSE IF (BETA(K)+STPR.GT.UPPER(K).OR.BETA(K)-STPR.GT.UPPER(K)) + & THEN + BETA(K) = UPPER(K) - ABS(STPR) + ELSE IF (BETA(K)+STPR.LT.LOWER(K).OR.BETA(K)-STPR.LT.LOWER(K)) + & THEN + BETA(K) = LOWER(K) + ABS(STPR) + END IF +C Check inner interval + IF (LOWER(K)+ABS(STPR).GT.UPPER(K)) THEN + INTERVAL(K) = 0 + ELSE IF (BETA(K)+STPR.GT.UPPER(K)) THEN + BETA(K) = UPPER(K) - STPR + ELSE IF (BETA(K)+STPR.LT.LOWER(K)) THEN + BETA(K) = LOWER(K) - STPR + END IF + END DO + + END SUBROUTINE +*DERSTEP + FUNCTION DERSTEP + & (ITYPE,K,BETAK,SSF,STPB,NETA) + & RESULT(DERSTEPR) +C***Begin Prologue DERSTEP +C***Refer to ODR +C***Routines Called DHSTEP +C***Date Written 20040616 (YYYYMMDD) +C***Revision Date 20040616 (YYYYMMDD) +C***Purpose Compute step size for center and forward difference calculations +C***End Prologue DERSTEP + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & ITYPE,K,NETA + REAL (KIND=R8) + & BETAK + +C...Array arguments + REAL (KIND=R8) + & SSF(K),STPB(K) + +C...Result + REAL (KIND=R8) + & DERSTEPR + +C...Local scalars + REAL (KIND=R8) + & ONE,TYPJ,ZERO + +C...External functions + REAL (KIND=R8) + & DHSTEP + EXTERNAL + & DHSTEP + +C...Data statements + DATA + & ZERO,ONE + & /0.0E0_R8,1.0E0_R8/ + +C...Variable definitions (alphabetically) +C BETAK: The K-th function parameter. +C ITYPE: 0 - calc foward difference step, 1 - calc center difference step. +C K: Index into beta where BETAK resides. +C NETA: Number of good digits in the function results. +C ONE: The value 1.0E0_R8. +C SSF: The scale used for the BETA'S. +C STPB: The relative step used for computing finite difference derivatives +C with respect to BETA. +C TYPJ: The typical size of the J-th unkonwn BETA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DERSTEP + + + IF (BETAK.EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETAK) + END IF + DERSTEPR = SIGN(ONE,BETAK)*TYPJ*DHSTEP(ITYPE,NETA,1,K,STPB,1) + + RETURN + END FUNCTION +*DJACFD + SUBROUTINE DJACFD + & (FCN, + & N,M,NP,NQ, + & BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + & STPB,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + & FJACB,ISODR,FJACD,NFEV,ISTOP,INFO, + & LOWER,UPPER) +C***Begin Prologue DJACFD +C***Refer to ODR +C***Routines Called FCN,DHSTEP,DZERO,DERSTEP +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute forward difference approximations to the +C Jacobian wrt the estimated BETAS and wrt the DELTAS +C***End Prologue DJACFD + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ), + & LOWER(NP), + & SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + & UPPER(NP), + & WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + & X(LDX,M),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & BETAK,ONE,STEP,TYPJ,ZERO + INTEGER + & I,J,K,L + LOGICAL + & DOIT,SETZRO + +C...External subroutines + EXTERNAL + & DZERO + +C...External functions + REAL (KIND=R8) + & DHSTEP,DERSTEP + EXTERNAL + & DHSTEP,DERSTEP + +C...Data statements + DATA + & ZERO,ONE + & /0.0E0_R8,1.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BETAK: The K-th function parameter. +C DELTA: The estimated errors in the explanatory variables. +C DOIT: The variable designating whether the derivative wrt a +C given BETA or DELTA needs to be computed (DOIT=TRUE) +C or not (DOIT=FALSE). +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FN: The new predicted values from the function. +C I: An indexing variable. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C J: An indexing variable. +C K: An indexing variable. +C L: An indexing variable. +C LDIFX: The leading dimension of array IFIXX. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LDX: The leading dimension of array X. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NETA: The number of good digits in the function results. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C ONE: The value 1.0E0_R8. +C SETZRO: The variable designating whether the derivative wrt some +C DELTA needs to be set to zero (SETZRO=TRUE) or not +C (SETZRO=FALSE). +C SSF: The scale used for the BETA'S. +C STP: The step used for computing finite difference +C derivatives with respect to DELTA. +C STPB: The relative step used for computing finite difference +C derivatives with respect to BETA. +C STPD: The relative step used for computing finite difference +C derivatives with respect to DELTA. +C TT: The scaling values used for DELTA. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C X: The explanatory variable. +C XPLUSD: The values of X + DELTA. +C WRK1: A work array of (N by M by NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DJACFD + + +C Compute the Jacobian wrt the estimated BETAS + + DO 40 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + STEP = DERSTEP(0,K,BETAK,SSF,STPB,NETA) + WRK3(K) = BETAK + STEP + WRK3(K) = WRK3(K) - BETAK + BETA(K) = BETAK + WRK3(K) + IF (BETA(K).GT.UPPER(K)) THEN + STEP = -STEP + WRK3(K) = BETAK + STEP + WRK3(K) = WRK3(K) - BETAK + BETA(K) = BETAK + WRK3(K) + END IF + IF (BETA(K).LT.LOWER(K)) THEN + STEP = -STEP + WRK3(K) = BETAK + STEP + WRK3(K) = WRK3(K) - BETAK + BETA(K) = BETAK + WRK3(K) + IF (BETA(K).GT.UPPER(K)) THEN + INFO = 60001 + RETURN + END IF + END IF + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = (WRK2(I,L)-FN(I,L))/WRK3(K) + 20 CONTINUE + 30 CONTINUE + BETA(K) = BETAK + END IF + 40 CONTINUE + +C Compute the Jacobian wrt the X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + + STP(I) = XPLUSD(I,J) + & + SIGN(ONE,XPLUSD(I,J)) + & *TYPJ*DHSTEP(0,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 001,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END SUBROUTINE +*DJCK + SUBROUTINE DJCK + & (FCN, + & N,M,NP,NQ, + & BETA,BETAJ,XPLUSD, + & IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + & SSF,TT,LDTT, + & ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + & PV0I,FJACB,FJACD, + & MSGB,MSGD,DIFF,ISTOP,NFEV,NJEV, + & WRK1,WRK2,WRK6, + & INTERVAL) +C***Begin Prologue DJCK +C***Refer to ODR +C***Routines Called FCN,DHSTEP,DJCKM +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Driver routine for the derivative checking process +C (adapted from STARPAC subroutine DCKCNT) +C***End Prologue DJCK + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & EPSMAC,ETA + INTEGER + & ISTOP,LDIFX,LDSTPD,LDTT, + & M,N,NETA,NFEV,NJEV,NP,NQ,NROW,NTOL + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),BETAJ(NP),DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + & PV0I(N,NQ),SSF(NP),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + & WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),INTERVAL(NP),MSGB(1+NQ*NP), + & MSGD(1+NQ*M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & DIFFJ,H0,HC0,ONE,P5,PV,TOL,TYPJ,ZERO + INTEGER + & IDEVAL,J,LQ,MSGB1,MSGD1 + LOGICAL + & ISFIXD,ISWRTB + +C...Local arrays + REAL (KIND=R8) + & PV0(N,NQ) + +C...External subroutines + EXTERNAL + & DJCKM + +C...External functions + REAL (KIND=R8) + & DHSTEP + EXTERNAL + & DHSTEP + +C...Data statements + DATA + & ZERO,P5,ONE + & /0.0E0_R8,0.5E0_R8,1.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BETAJ: The function parameters offset such that steps don't cross +C bounds. +C DIFF: The relative differences between the user supplied and +C finite difference derivatives for each derivative checked. +C DIFFJ: The relative differences between the user supplied and +C finite difference derivatives for the derivative being +C checked. +C EPSMAC: The value of machine precision. +C ETA: The relative noise in the function results. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C H0: The initial relative step size for forward differences. +C HC0: The initial relative step size for central differences. +C IDEVAL: The variable designating what computations are to be +C performed by user supplied subroutine FCN. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C INTERVAL: Specifies which checks can be performed when checking derivatives +C based on the interval of the bound constraints. +C ISFIXD: The variable designating whether the parameter is fixed +C (ISFIXD=TRUE) or not (ISFIXD=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=.TRUE.) or by OLS (ISODR=.FALSE.). +C ISWRTB: The variable designating whether the derivatives wrt BETA +C (ISWRTB=TRUE) or DELTA (ISWRTB=FALSE) are being checked. +C J: An index variable. +C LDIFX: The leading dimension of array IFIXX. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LQ: The response currently being examined. +C M: The number of columns of data in the explanatory variable. +C MSGB: The error checking results for the Jacobian wrt BETA. +C MSGB1: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C MSGD1: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of reliable digits in the model results, either +C set by the user or computed by DETAF. +C NFEV: The number of function evaluations. +C NJEV: The number of Jacobian evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at which +C the derivative is checked. +C NTOL: The number of digits of agreement required between the +C numerical derivatives and the user supplied derivatives. +C ONE: The value 1.0E0_R8. +C P5: The value 0.5E0_R8. +C PV: The scalar in which the predicted value from the model for +C row NROW is stored. +C PV0: The predicted values using the current parameter estimates +C (possibly offset from the user supplied estimates to create +C distance between parameters and the bounds on the parameters). +C PV0I: The predicted values using the user supplied parameter estimates. +C SSF: The scaling values used for BETA. +C STPB: The step size for finite difference derivatives wrt BETA. +C STPD: The step size for finite difference derivatives wrt DELTA. +C TOL: The agreement tolerance. +C TT: The scaling values used for DELTA. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C XPLUSD: The values of X + DELTA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DJCK + + +C Set tolerance for checking derivatives + + TOL = ETA**(0.25E0_R8) + NTOL = MAX(ONE,P5-LOG10(TOL)) + + +C Compute, if necessary, PV0 + + PV0 = PV0I + IF ( ANY(BETA(:).NE.BETAJ(:)) ) THEN + ISTOP = 0 + IDEVAL = 001 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETAJ,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,PV0,FJACB,FJACD, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV + 1 + END IF + END IF + + +C Compute user supplied derivative values + + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETAJ,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,WRK2,FJACB,FJACD, + & ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV + 1 + END IF + +C Check derivatives wrt BETA for each response of observation NROW + + MSGB1 = 0 + MSGD1 = 0 + + DO 30 LQ=1,NQ + +C Set predicted value of model at current parameter estimates + PV = PV0(NROW,LQ) + + ISWRTB = .TRUE. + DO 10 J=1,NP + + IF (IFIXB(1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (IFIXB(J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGB(1+LQ+(J-1)*NQ) = -1 + ELSE + IF (BETA(J).EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(J) + END IF + ELSE + TYPJ = ABS(BETA(J)) + END IF + + H0 = DHSTEP(0,NETA,1,J,STPB,1) + HC0 = H0 + +C Check derivative wrt the J-th parameter at the NROW-th row + + IF (INTERVAL(J).GE.1) THEN + CALL DJCKM(FCN, + & N,M,NP,NQ, + & BETAJ,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + & ISWRTB,PV,FJACB(NROW,J,LQ), + & DIFFJ,MSGB1,MSGB(2),ISTOP,NFEV, + & WRK1,WRK2,WRK6,INTERVAL) + IF (ISTOP.NE.0) THEN + MSGB(1) = -1 + RETURN + ELSE + DIFF(LQ,J) = DIFFJ + END IF + ELSE + MSGB(1+J) = 9 + END IF + END IF + + 10 CONTINUE + +C Check derivatives wrt X for each response of observation NROW + + IF (ISODR) THEN + ISWRTB = .FALSE. + DO 20 J=1,M + + IF (IFIXX(1,1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGD(1+LQ+(J-1)*NQ) = -1 + ELSE + + IF (XPLUSD(NROW,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(NROW,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(NROW,J)) + END IF + + H0 = DHSTEP(0,NETA,NROW,J,STPD,LDSTPD) + HC0 = DHSTEP(1,NETA,NROW,J,STPD,LDSTPD) + +C Check derivative wrt the J-th column of DELTA at row NROW + + CALL DJCKM(FCN, + & N,M,NP,NQ, + & BETAJ,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + & ISWRTB,PV,FJACD(NROW,J,LQ), + & DIFFJ,MSGD1,MSGD(2),ISTOP,NFEV, + & WRK1,WRK2,WRK6,INTERVAL) + IF (ISTOP.NE.0) THEN + MSGD(1) = -1 + RETURN + ELSE + DIFF(LQ,NP+J) = DIFFJ + END IF + END IF + + 20 CONTINUE + END IF + 30 CONTINUE + MSGB(1) = MSGB1 + MSGD(1) = MSGD1 + + RETURN + END SUBROUTINE +*DJCKC + SUBROUTINE DJCKC + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + & FD,TYPJ,PVPSTP,STP0, + & PV,D, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) +C***Begin Prologue DJCKC +C***Refer to ODR +C***Routines Called DJCKF,DPVB,DPVD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Check whether high curvature could be the cause of the +C disagreement between the numerical and analytic derviatives +C (adapted from STARPAC subroutine DCKCRV) +C***End prologue DJCKC + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & D,DIFFJ,EPSMAC,ETA,FD,HC,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + & ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + & ISWRTB + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & CURVE,ONE,PVMCRV,PVPCRV,P01,STP,STPCRV,TEN,TWO + +C...External subroutines + EXTERNAL + & DJCKF,DPVB,DPVD + +C...Data statements + DATA + & P01,ONE,TWO,TEN + & /0.01E0_R8,1.0E0_R8,2.0E0_R8,10.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C CURVE: A measure of the curvature in the model. +C D: The derivative with respect to the Jth unknown parameter. +C DIFFJ: The relative differences between the user supplied and +C finite difference derivatives for the derivative being +C checked. +C EPSMAC: The value of machine precision. +C ETA: The relative noise in the model +C FD: The forward difference derivative wrt the Jth parameter. +C HC: The relative step size for central finite differences. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISWRTB: The variable designating whether the derivatives wrt BETA +C (ISWRTB=TRUE) or DELTA(ISWRTB=FALSE) are being checked. +C J: The index of the partial derivative being examined. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the explanatory variable. +C MSG: The error checking results. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at which +C the derivative is to be checked. +C ONE: The value 1.0E0_R8. +C PV: The predicted value of the model for row NROW . +C PVMCRV: The predicted value for row NROW of the model +C based on the current parameter estimates for all but the +C Jth parameter value, which is BETA(J)-STPCRV. +C PVPCRV: The predicted value for row NROW of the model +C based on the current parameter estimates for all but the +C Jth parameter value, which is BETA(J)+STPCRV. +C PVPSTP: The predicted value for row NROW of the model +C based on the current parameter estimates for all but the +C Jth parameter value, which is BETA(J) + STP0. +C P01: The value 0.01E0_R8. +C STP0: The initial step size for the finite difference derivative. +C STP: A step size for the finite difference derivative. +C STPCRV: The step size selected to check for curvature in the model. +C TEN: The value 10.0E0_R8. +C TOL: The agreement tolerance. +C TWO: The value 2.0E0_R8. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C XPLUSD: The values of X + DELTA. + + +C***First executable statement DJCKC + + + IF (ISWRTB) THEN + +C Perform central difference computations for derivatives wrt BETA + + STPCRV = (HC*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STPCRV, + & ISTOP,NFEV,PVPCRV, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,-STPCRV, + & ISTOP,NFEV,PVMCRV, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C Perform central difference computations for derivatives wrt DELTA + + STPCRV = (HC*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) - + & XPLUSD(NROW,J) + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STPCRV, + & ISTOP,NFEV,PVPCRV, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,-STPCRV, + & ISTOP,NFEV,PVMCRV, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C Estimate curvature by second derivative of model + + CURVE = ABS((PVPCRV-PV)+(PVMCRV-PV)) / (STPCRV*STPCRV) + CURVE = CURVE + + & ETA*(ABS(PVPCRV)+ABS(PVMCRV)+TWO*ABS(PV)) / (STPCRV**2) + + +C Check if finite precision arithmetic could be the culprit. + CALL DJCKF(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,J,LQ,ISWRTB, + & FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + IF (MSG(LQ,J).EQ.0) THEN + RETURN + END IF + +C Check if high curvature could be the problem. + + STP = TWO*MAX(TOL*ABS(D)/CURVE,EPSMAC) + IF (STP.LT.ABS(TEN*STP0)) THEN + STP = MIN(STP,P01*ABS(STP0)) + END IF + + + IF (ISWRTB) THEN + +C Perform computations for derivatives wrt BETA + STP = (STP*SIGN(ONE,BETA(J)) + BETA(J)) - BETA(J) + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C Perform computations for derivatives wrt DELTA + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + & XPLUSD(NROW,J) + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C Compute the new numerical derivative + + FD = (PVPSTP-PV)/STP + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C Check whether the new numerical derivative is ok + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN + MSG(LQ,J) = 0 + +C Check if finite precision may be the culprit (fudge factor = 2) + ELSE IF (ABS(STP*(FD-D)).LT.TWO*ETA*(ABS(PV)+ABS(PVPSTP)) + & + CURVE*(EPSMAC*TYPJ)**2) THEN + MSG(LQ,J) = 5 + END IF + + RETURN + END SUBROUTINE +*DJCKF + SUBROUTINE DJCKF + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,J,LQ,ISWRTB, + & FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) +C***Begin Prologue DJCKF +C***Refer to ODR +C***Routines Called DPVB,DPVD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Check whether finite precision arithmetic could be the +C cause of the disagreement between the derivatives +C (adapted from STARPAC subroutine DCKFPA) +C***End Prologue DJCKF + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & CURVE,D,DIFFJ,ETA,FD,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + & ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + & ISWRTB + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & HUNDRD,ONE,P1,STP,TWO + LOGICAL + & LARGE + +C...External subroutines + EXTERNAL + & DPVB,DPVD + +C...Data statements + DATA + & P1,ONE,TWO,HUNDRD + & /0.1E0_R8,1.0E0_R8,2.0E0_R8,100.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C CURVE: A measure of the curvature in the model. +C D: The derivative with respect to the Jth unknown parameter. +C DIFFJ: The relative differences between the user supplied and +C finite difference derivatives for the derivative being +C checked. +C ETA: The relative noise in the model +C FD: The forward difference derivative wrt the Jth parameter. +C HUNDRD: The value 100.0E0_R8. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +c computing the function at the current BETA and DELTA. +C ISWRTB: The variable designating whether the derivatives wrt BETA +C (ISWRTB=TRUE) or DELTA(ISWRTB=FALSE) are being checked. +C J: The index of the partial derivative being examined. +C LARGE: The value designating whether the recommended increase in +C the step size would be greater than TYPJ. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the explanatory variable. +C MSG: The error checking results. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at which +C the derivative is to be checked. +C ONE: The value 1.0E0_R8. +C PV: The predicted value for row NROW . +C PVPSTP: The predicted value for row NROW of the model +C based on the current parameter estimates for all but the +C Jth parameter value, which is BETA(J) + STP0. +C P1: The value 0.1E0_R8. +C STP0: The step size for the finite difference derivative. +C TOL: The agreement tolerance. +C TWO: The value 2.0E0_R8. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C XPLUSD: The values of X + DELTA. + + +C***First executable statement DJCKF + + +C Finite precision arithmetic could be the problem. +C Try a larger step size based on estimate of condition error + + STP = ETA*(ABS(PV)+ABS(PVPSTP))/(TOL*ABS(D)) + IF (STP.GT.ABS(P1*STP0)) THEN + STP = MAX(STP,HUNDRD*ABS(STP0)) + END IF + IF (STP.GT.TYPJ) THEN + STP = TYPJ + LARGE = .TRUE. + ELSE + LARGE = .FALSE. + END IF + + IF (ISWRTB) THEN + +C Perform computations for derivatives wrt BETA + STP = (STP*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + ELSE + +C Perform computations for derivatives wrt DELTA + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + & XPLUSD(NROW,J) + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C Check for agreement + + IF ((ABS(FD-D)).LE.TOL*ABS(D)) THEN +C Forward difference quotient and analytic derivatives agree. + MSG(LQ,J) = 0 + + ELSE IF ((ABS(FD-D).LE.ABS(TWO*CURVE*STP)) .OR. LARGE) THEN +C Curvature may be the culprit (fudge factor = 2) + IF (LARGE) THEN + MSG(LQ,J) = 4 + ELSE + MSG(LQ,J) = 5 + END IF + END IF + + RETURN + END SUBROUTINE +*DJCKM + SUBROUTINE DJCKM + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + & ISWRTB,PV,D, + & DIFFJ,MSG1,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6,INTERVAL) +C***Begin Prologue DJCKM +C***Refer to ODR +C***Routines Called DJCKC,DJCKZ,DPVB,DPVD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Check user supplied analytic derivatives against numerical +C derivatives +C (adapted from STARPAC subroutine DCKMN) +C***End prologue DJCKM + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & D,DIFFJ,EPSMAC,ETA,H0,HC0,PV,TOL,TYPJ + INTEGER + & ISTOP,J,LDIFX,LQ,M,MSG1,N,NFEV,NP,NQ,NROW + LOGICAL + & ISWRTB + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),INTERVAL(NP),MSG(NQ,J) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & BIG,FD,H,HC,H1,HC1,HUNDRD,ONE,PVPSTP,P01,P1,STP0, + & TEN,THREE,TOL2,TWO,ZERO + INTEGER + & I + +C...External subroutines + EXTERNAL + & DJCKC,DJCKZ,DPVB,DPVD + +C...Data statements + DATA + & ZERO,P01,P1,ONE,TWO,THREE,TEN,HUNDRD + & /0.0E0_R8,0.01E0_R8,0.1E0_R8,1.0E0_R8,2.0E0_R8,3.0E0_R8, + & 1.0E1_R8,1.0E2_R8/ + DATA + & BIG,TOL2 + & /1.0E19_R8,5.0E-2_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BIG: A big value, used to initialize DIFFJ. +C D: The derivative with respect to the Jth unknown parameter. +C DIFFJ: The relative differences between the user supplied and +C finite difference derivatives for the derivative being +C checked. +C EPSMAC: The value of machine precision. +C ETA: The relative noise in the function results. +C FD: The forward difference derivative wrt the Jth parameter. +C H: The relative step size for forward differences. +C H0: The initial relative step size for forward differences. +C H1: The default relative step size for forward differences. +C HC: The relative step size for central differences. +C HC0: The initial relative step size for central differences. +C HC1: The default relative step size for central differences. +C HUNDRD: The value 100.0E0_R8. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C INTERVAL: Specifies which checks can be performed when checking derivatives +C based on the interval of the bound constraints. +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISWRTB: The variable designating whether the derivatives wrt BETA +C (ISWRTB=TRUE) or DELTAS (ISWRTB=FALSE) are being checked. +C J: The index of the partial derivative being examined. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the explanatory variable. +C MSG: The error checking results. +C MSG1: The error checking results summary. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at which +C the derivative is to be checked. +C ONE: The value 1.0E0_R8. +C PV: The predicted value from the model for row NROW . +C PVPSTP: The predicted value for row NROW of the model +C Using the current parameter estimates for all but the Jth +C parameter value, which is BETA(J) + STP0. +C P01: The value 0.01E0_R8. +C P1: The value 0.1E0_R8. +C STP0: The initial step size for the finite difference derivative. +C TEN: The value 10.0E0_R8. +C THREE: The value 3.0E0_R8. +C TWO: The value 2.0E0_R8. +C TOL: The agreement tolerance. +C TOL2: A minimum agreement tolerance. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C XPLUSD: The values of X + DELTA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DJCKM + + +C Calculate the Jth partial derivative using forward difference +C quotients and decide if it agrees with user supplied values + + H1 = SQRT(ETA) + HC1 = ETA**(ONE/THREE) + + MSG(LQ,J) = 7 + DIFFJ = BIG + + DO 10 I=1,3 + + IF (I.EQ.1) THEN +C Try initial relative step size + H = H0 + HC = HC0 + + ELSE IF (I.EQ.2) THEN +C Try larger relative step size + H = MAX(TEN*H1, MIN(HUNDRD*H0, ONE)) + HC = MAX(TEN*HC1,MIN(HUNDRD*HC0,ONE)) + + ELSE IF (I.EQ.3) THEN +C Try smaller relative step size + H = MIN(P1*H1, MAX(P01*H,TWO*EPSMAC)) + HC = MIN(P1*HC1,MAX(P01*HC,TWO*EPSMAC)) + END IF + + IF (ISWRTB) THEN + +C Perform computations for derivatives wrt BETA + + STP0 = (H*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP0, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + ELSE + +C Perform computations for derivatives wrt DELTA + + STP0 = (H*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) + & - XPLUSD(NROW,J) + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP0, + & ISTOP,NFEV,PVPSTP, + & WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP0 + +C Check for agreement + + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN +C Numerical and analytic derivatives agree + +C Set relative difference for derivative checking report + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + DIFFJ = ABS(FD-D) + ELSE + DIFFJ = ABS(FD-D)/ABS(D) + END IF + +C Set MSG flag. + IF (D.EQ.ZERO) THEN + +C JTH analytic and numerical derivatives are both zero. + MSG(LQ,J) = 1 + + ELSE +C JTH analytic and numerical derivatives are both nonzero. + MSG(LQ,J) = 0 + END IF + + ELSE + +C Numerical and analytic derivatives disagree. Check why + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + IF (INTERVAL(J).GE.10.OR..NOT.ISWRTB) THEN + CALL DJCKZ(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,EPSMAC,J,LQ,ISWRTB, + & TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) + ELSE + MSG(LQ,J) = 8 + END IF + ELSE + IF (INTERVAL(J).GE.100.OR..NOT.ISWRTB) THEN + CALL DJCKC(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + & FD,TYPJ,PVPSTP,STP0,PV,D, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) + ELSE + MSG(LQ,J) = 8 + END IF + END IF + IF (MSG(LQ,J).LE.2) THEN + GO TO 20 + END IF + END IF + 10 CONTINUE + +C Set summary flag to indicate questionable results + 20 CONTINUE + IF ((MSG(LQ,J).GE.7) .AND. (DIFFJ.LE.TOL2)) MSG(LQ,J) = 6 + IF ((MSG(LQ,J).GE.1) .AND. (MSG(LQ,J).LE.6)) THEN + MSG1 = MAX(MSG1,1) + ELSE IF (MSG(LQ,J).GE.7) THEN + MSG1 = 2 + END IF + + RETURN + END SUBROUTINE +*DJCKZ + SUBROUTINE DJCKZ + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,EPSMAC,J,LQ,ISWRTB, + & TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + & DIFFJ,MSG,ISTOP,NFEV, + & WRK1,WRK2,WRK6) +C***Begin Prologue DJCKZ +C***Refer to ODR +C***Routines Called DPVB,DPVD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Recheck the derivatives in the case where the finite +C difference derivative disagrees with the analytic +C derivative and the analytic derivative is zero +C (adapted from STARPAC subroutine DCKZRO) +C***End Prologue DJCKZ + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & D,DIFFJ,EPSMAC,FD,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + & ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + & ISWRTB + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & CD,ONE,PVMSTP,THREE,TWO,ZERO + +C...External subroutines + EXTERNAL + & DPVB,DPVD + +C...Data statements + DATA + & ZERO,ONE,TWO,THREE + & /0.0E0_R8,1.0E0_R8,2.0E0_R8,3.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C CD: The central difference derivative wrt the Jth parameter. +C D: The derivative with respect to the Jth unknown parameter. +C DIFFJ: The relative differences between the user supplied and +C finite difference derivatives for the derivative being +C checked. +C EPSMAC: The value of machine precision. +C FD: The forward difference derivative wrt the Jth parameter. +C IFIXB: The values designating whether the elements of BETA are +C Fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISWRTB: The variable designating whether the derivatives wrt BETA +C (ISWRTB=TRUE) or X (ISWRTB=FALSE) are being checked. +C J: The index of the partial derivative being examined. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the explanatory variable. +C MSG: The error checking results. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at which +C The derivative is to be checked. +C ONE: The value 1.0E0_R8. +C PV: The predicted value from the model for row NROW . +C PVMSTP: The predicted value for row NROW of the model +C using the current parameter estimates for all but the +C Jth parameter value, which is BETA(J) - STP0. +C PVPSTP: The predicted value for row NROW of the model +C using the current parameter estimates for all but the +C JTH parameter value, which is BETA(J) + STP0. +C STP0: The initial step size for the finite difference derivative. +C THREE: The value 3.0E0_R8. +C TWO: The value 2.0E0_R8. +C TOL: The agreement tolerance. +C TYPJ: The typical size of the J-th unknown BETA or DELTA. +C WRK1: A work array of (N BY M BY NQ) elements. +C WRK2: A work array of (N BY NQ) elements. +C WRK6: A work array of (N BY NP BY NQ) elements. +C XPLUSD: The values of X + DELTA. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DJCKZ + + +C Recalculate numerical derivative using central difference and step +C size of 2*STP0 + + IF (ISWRTB) THEN + +C Perform computations for derivatives wrt BETA + + CALL DPVB(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,-STP0, + & ISTOP,NFEV,PVMSTP, + & WRK1,WRK2,WRK6) + ELSE + +C Perform computations for derivatives wrt DELTA + + CALL DPVD(FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,-STP0, + & ISTOP,NFEV,PVMSTP, + & WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + CD = (PVPSTP-PVMSTP)/(TWO*STP0) + DIFFJ = MIN(ABS(CD-D),ABS(FD-D)) + +C Check for agreement + + IF (DIFFJ.LE.TOL*ABS(D)) THEN + +C Finite difference and analytic derivatives now agree. + IF (D.EQ.ZERO) THEN + MSG(LQ,J) = 1 + ELSE + MSG(LQ,J) = 0 + END IF + + ELSE IF (DIFFJ*TYPJ.LE.ABS(PV*EPSMAC**(ONE/THREE))) THEN +C Derivatives are both close to zero + MSG(LQ,J) = 2 + + ELSE +C Derivatives are not both close to zero + MSG(LQ,J) = 3 + END IF + + RETURN + END SUBROUTINE +*DODCHK + SUBROUTINE DODCHK + & (N,M,NP,NQ, + & ISODR,ANAJAC,IMPLCT, + & BETA,IFIXB, + & LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LDY, + & LWORK,LWKMN,LIWORK,LIWKMN, + & SCLB,SCLD,STPB,STPD, + & INFO, + & LOWER,UPPER) +C***Begin Prologue DODCHK +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Check input parameters, indicating errors found using +C nonzero values of argument INFO +C***End Prologue DODCHK + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LIWKMN,LIWORK,LWKMN,LWORK,M,N,NP,NQ + LOGICAL + & ANAJAC,IMPLCT,ISODR + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),LOWER(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP), + & STPD(LDSTPD,M),UPPER(NP) + INTEGER + & IFIXB(NP) + +C...Local scalars + INTEGER + & I,J,K,LAST,NPP + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the Jacobians are +C computed by finite differences (ANAJAC=FALSE) or not +C (ANAJAC=TRUE). +C I: An indexing variable. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C J: An indexing variable. +C K: An indexing variable. +C LAST: The last row of the array to be accessed. +C LDIFX: The leading dimension of array IFIXX. +C LDSCLD: The leading dimension of array SCLD. +C LDSTPD: The leading dimension of array STPD. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array X. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LIWKMN: The minimum acceptable length of array IWORK. +C LIWORK: The length of vector IWORK. +C LWKMN: The minimum acceptable length of array WORK. +C LWORK: The length of vector WORK. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observations. +C SCLB: The scaling values for BETA. +C SCLD: The scaling value for DELTA. +C STPB: The step for the finite difference derivitive wrt BETA. +C STPD: The step for the finite difference derivitive wrt DELTA. + + +C***First executable statement DODCHK + + +C Find actual number of parameters being estimated + + IF (NP.LE.0 .OR. IFIXB(1).LT.0) THEN + NPP = NP + ELSE + NPP = 0 + DO 10 K=1,NP + IF (IFIXB(K).NE.0) THEN + NPP = NPP + 1 + END IF + 10 CONTINUE + END IF + +C Check problem specification parameters + + IF (N.LE.0 .OR. + & M.LE.0 .OR. + & (NPP.LE.0 .OR. NPP.GT.N) .OR. + & (NQ.LE.0)) THEN + + INFO = 10000 + IF (N.LE.0) THEN + INFO = INFO + 1000 + END IF + IF (M.LE.0) THEN + INFO = INFO + 100 + END IF + IF (NPP.LE.0 .OR. NPP.GT.N) THEN + INFO = INFO + 10 + END IF + IF (NQ.LE.0) THEN + INFO = INFO + 1 + END IF + + RETURN + + END IF + +C Check dimension specification parameters + + IF ((.NOT.IMPLCT .AND. LDY.LT.N) .OR. + & (LDX.LT.N) .OR. + & (LDWE.NE.1 .AND. LDWE.LT.N) .OR. + & (LD2WE.NE.1 .AND. LD2WE.LT.NQ) .OR. + & (ISODR .AND. (LDWD.NE.1 .AND. LDWD.LT.N)) .OR. + & (ISODR .AND. (LD2WD.NE.1 .AND. LD2WD.LT.M)) .OR. + & (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) .OR. + & (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) .OR. + & (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) .OR. + & (LWORK.LT.LWKMN) .OR. + & (LIWORK.LT.LIWKMN)) THEN + + INFO = 20000 + IF (.NOT.IMPLCT .AND. LDY.LT.N) THEN + INFO = INFO + 1000 + END IF + IF (LDX.LT.N) THEN + INFO = INFO + 2000 + END IF + + IF ((LDWE.NE.1 .AND. LDWE.LT.N) .OR. + & (LD2WE.NE.1 .AND. LD2WE.LT.NQ)) THEN + INFO = INFO + 100 + END IF + IF (ISODR .AND. ((LDWD.NE.1 .AND. LDWD.LT.N) .OR. + & (LD2WD.NE.1 .AND. LD2WD.LT.M))) THEN + INFO = INFO + 200 + END IF + + IF (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) THEN + INFO = INFO + 10 + END IF + IF (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) THEN + INFO = INFO + 20 + END IF + IF (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) THEN + INFO = INFO + 40 + END IF + + IF (LWORK.LT.LWKMN) THEN + INFO = INFO + 1 + END IF + IF (LIWORK.LT.LIWKMN) THEN + INFO = INFO + 2 + END IF + RETURN + + END IF + +C Check DELTA scaling + + IF (ISODR .AND. SCLD(1,1).GT.0) THEN + IF (LDSCLD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 120 J=1,M + DO 110 I=1,LAST + IF (SCLD(I,J).LE.0) THEN + INFO = 30200 + GO TO 130 + END IF + 110 CONTINUE + 120 CONTINUE + END IF + 130 CONTINUE + +C Check BETA scaling + + IF (SCLB(1).GT.0) THEN + DO 210 K=1,NP + IF (SCLB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 30100 + ELSE + INFO = INFO + 100 + END IF + GO TO 220 + END IF + 210 CONTINUE + END IF + 220 CONTINUE + +C Check DELTA finite difference step sizes + + IF (ANAJAC .AND. ISODR .AND. STPD(1,1).GT.0) THEN + IF (LDSTPD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 320 J=1,M + DO 310 I=1,LAST + IF (STPD(I,J).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 32000 + ELSE + INFO = INFO + 2000 + END IF + GO TO 330 + END IF + 310 CONTINUE + 320 CONTINUE + END IF + 330 CONTINUE + +C Check BETA finite difference step sizes + + IF (ANAJAC .AND. STPB(1).GT.0) THEN + DO 410 K=1,NP + IF (STPB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 31000 + ELSE + INFO = INFO + 1000 + END IF + GO TO 420 + END IF + 410 CONTINUE + END IF + 420 CONTINUE + +C Check bounds + + IF (ANY(UPPER(1:NP).LT.LOWER(1:NP))) THEN + IF (INFO.EQ.0) THEN + INFO = 91000 + END IF + END IF + + IF (ANY((UPPER(1:NP).LT.BETA(1:NP).OR.LOWER(1:NP).GT.BETA(1:NP)) + & .AND..NOT.UPPER(1:NP).LT.LOWER(1:NP))) THEN + IF (INFO.GE.90000) THEN + INFO = INFO + 100 + ELSE + INFO = 90100 + END IF + END IF + + RETURN + END SUBROUTINE +*DODCNT + SUBROUTINE DODCNT + & (FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + & JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, IPRINT,LUNERR,LUNRPT, + & STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + & WORK,LWORK,IWORK,LIWORK, + & INFO, + & LOWER,UPPER) +C***Begin Prologue DODCNT +C***Refer to ODR +C***Routines Called DODDRV +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose REAL (KIND=R8) driver routine for finding +C the weighted explicit or implicit orthogonal distance +C regression (ODR) or ordinary linear or nonlinear least +C squares (OLS) solution +C***End Prologue DODCNT + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PARTOL,SSTOL,TAUFAC + INTEGER + & INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + & LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,N,NDIGIT,NP,NQ + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),LOWER(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP), + & STPD(LDSTPD,M),UPPER(NP),WD(LDWD,LD2WD,M), + & WE(LDWE,LD2WE,NQ),WORK(LWORK),X(LDX,M),Y(LDY,NQ) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & CNVTOL,ONE,PCHECK,PFAC,PSTART,THREE,TSTIMP,ZERO + INTEGER + & IPRNTI,IPR1,IPR2,IPR2F,IPR3,JOBI,JOB1,JOB2,JOB3,JOB4,JOB5, + & MAXITI,MAXIT1 + LOGICAL + & DONE,FSTITR,HEAD,IMPLCT,PRTPEN + +C...Local arrays + REAL (KIND=R8) + & PNLTY(1,1,1) + +C...External subroutines + EXTERNAL + & DODDRV + +C...External functions + +C...Data statements + DATA + & PCHECK,PSTART,PFAC,ZERO,ONE,THREE + & /1.0E3_R8,1.0E1_R8,1.0E1_R8,0.0E0_R8,1.0E0_R8,3.0E0_R8/ + +C...Routine names used as subprogram arguments +C FCN: The user-supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C CNVTOL: The convergence tolerance for implicit models. +C DONE: The variable designating whether the inplicit solution has +C been found (DONE=TRUE) or not (DONE=FALSE). +C FSTITR: The variable designating whether this is the first +C iteration (FSTITR=TRUE) or not (FSTITR=FALSE). +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=TRUE) or not (HEAD=FALSE). +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C IPRINT: The print control variables. +C IPRNTI: The print control variables. +C IPR1: The 1st digit of the print control variable. +C IPR2: The 2nd digit of the print control variable. +C IPR3: The 3rd digit of the print control variable. +C IPR4: The 4th digit of the print control variable. +C IWORK: The integer work space. +C JOB: The variable controling problem initialization and +C computational method. +C JOBI: The variable controling problem initialization and +C computational method. +C JOB1: The 1st digit of the variable controling problem +C initialization and computational method. +C JOB2: The 2nd digit of the variable controling problem +C initialization and computational method. +C JOB3: The 3rd digit of the variable controling problem +C initialization and computational method. +C JOB4: The 4th digit of the variable controling problem +C initialization and computational method. +C JOB5: The 5th digit of the variable controling problem +C initialization and computational method. +C LDIFX: The leading dimension of array IFIXX. +C LDSCLD: The leading dimension of array SCLD. +C LDSTPD: The leading dimension of array STPD. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LIWORK: The length of vector IWORK. +C LOWER: The lower bound for BETA. +C LUNERR: The logical unit number used for error messages. +C LUNRPT: The logical unit number used for computation reports. +C LWORK: The length of vector work. +C M: The number of columns of data in the independent variable. +C MAXIT: The maximum number of iterations allowed. +C MAXITI: For implicit models, the number of iterations allowed for +C The current penalty parameter value. +C MAXIT1: For implicit models, the number of iterations allowed for +C the next penalty parameter value. +C N: The number of observations. +C NDIGIT: The number of accurate digits in the function results, as +C supplied by the user. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C ONE: The value 1.0E0_R8. +C PARTOL: The user supplied parameter convergence stopping tolerance. +C PCHECK: The value designating the minimum penalty parameter allowed +C before the implicit problem can be considered solved. +C PFAC: The factor for increasing the penalty parameter. +C PNLTY: The penalty parameter for an implicit model. +C PRTPEN: The value designating whether the penalty parameter is to be +C printed in the iteration report (PRTPEN=TRUE) or not +C (PRTPEN=FALSE). +C PSTART: The factor for increasing the penalty parameter. +C SCLB: The scaling values for BETA. +C SCLD: The scaling values for DELTA. +C STPB: The relative step for computing finite difference +C Derivatives with respect to BETA. +C STPD: The relative step for computing finite difference +C Derivatives with respect to DELTA. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C THREE: The value 3.0E0_R8. +C TSTIMP: The relative change in the parameters between the initial +C values and the solution. +C UPPER: The upper bound for BETA. +C WD: The DELTA weights. +C WE: The EPSILON weights. +C WORK: The REAL (KIND=R8) work space. +C X: The independent variable. +C Y: The dependent variable. Unused when the model is implicit. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODCNT + + + IMPLCT = MOD(JOB,10).EQ.1 + FSTITR = .TRUE. + HEAD = .TRUE. + PRTPEN = .FALSE. + + IF (IMPLCT) THEN + +C Set up for implicit problem + + IF (IPRINT.GE.0) THEN + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + ELSE + IPR1 = 2 + IPR2 = 0 + IPR2F = 0 + IPR3 = 1 + END IF + IPRNTI = IPR1*1000 + IPR2*100 + IPR2F*10 + + JOB5 = MOD(JOB,100000)/10000 + JOB4 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB2 = MOD(JOB,100)/10 + JOB1 = MOD(JOB,10) + JOBI = JOB5*10000 + JOB4*1000 + JOB3*100 + JOB2*10 + JOB1 + + IF (WE(1,1,1).LE.ZERO) THEN + PNLTY(1,1,1) = -PSTART + ELSE + PNLTY(1,1,1) = -WE(1,1,1) + END IF + + IF (PARTOL.LT.ZERO) THEN + CNVTOL = EPSILON(ZERO)**(ONE/THREE) + ELSE + CNVTOL = MIN(PARTOL,ONE) + END IF + + IF (MAXIT.GE.1) THEN + MAXITI = MAXIT + ELSE + MAXITI = 100 + END IF + + DONE = MAXITI.EQ.0 + PRTPEN = .TRUE. + + 10 CONTINUE + CALL DODDRV + & (HEAD,FSTITR,PRTPEN, + & FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + & PNLTY,1,1,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + & JOBI,NDIGIT,TAUFAC, SSTOL,CNVTOL,MAXITI, + & IPRNTI,LUNERR,LUNRPT, + & STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + & WORK,LWORK,IWORK,LIWORK, + & MAXIT1,TSTIMP, INFO, LOWER,UPPER) + + IF (DONE) THEN + RETURN + ELSE + DONE = MAXIT1.LE.0 .OR. + & (ABS(PNLTY(1,1,1)).GE.PCHECK .AND. + & TSTIMP.LE.CNVTOL) + END IF + + IF (DONE) THEN + IF (TSTIMP.LE.CNVTOL) THEN + INFO = (INFO/10)*10 + 2 + ELSE + INFO = (INFO/10)*10 + 4 + END IF + JOBI = 10000 + 1000 + JOB3*100 + JOB2*10 + JOB1 + MAXITI = 0 + IPRNTI = IPR3 + ELSE + PRTPEN = .TRUE. + PNLTY(1,1,1) = PFAC*PNLTY(1,1,1) + JOBI = 10000 + 1000 + 000 + JOB2*10 + JOB1 + MAXITI = MAXIT1 + IPRNTI = 0000 + IPR2*100 + IPR2F*10 + END IF + GO TO 10 + ELSE + CALL DODDRV + & (HEAD,FSTITR,PRTPEN, + & FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + & JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + & IPRINT,LUNERR,LUNRPT, + & STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + & WORK,LWORK,IWORK,LIWORK, + & MAXIT1,TSTIMP, INFO, LOWER,UPPER) + END IF + + RETURN + + END SUBROUTINE +*DODDRV + SUBROUTINE DODDRV + & (HEAD,FSTITR,PRTPEN, + & FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + & JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + & IPRINT,LUNERR,LUNRPT, + & STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + & WORK,LWORK,IWORK,LIWORK, + & MAXIT1,TSTIMP, INFO, LOWER,UPPER) +C***Begin Prologue DODDRV +C***Refer to ODR +C***Routines Called FCN,DCOPY,DDOT,DETAF,DFCTRW,DFLAGS, +C DINIWK,DIWINF,DJCK,DNRM2,DODCHK,DODMN, +C DODPER,DPACK,DSETN,DUNPAC,DWGHT,DWINF,DXMY,DXPY, +C DERSTEP +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Perform error checking and initialization, and begin +C procedure for performing orthogonal distance regression +C (ODR) or ordinary linear or nonlinear least squares (OLS) +C***End Prologue DODDRV + +C...Used modules + USE REAL_PRECISION + USE ODRPACK95, ONLY : TEMPRET + +C...Scalar arguments + REAL (KIND=R8) + & PARTOL,SSTOL,TAUFAC,TSTIMP + INTEGER + & INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + & LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,MAXIT1, + & N,NDIGIT,NP,NQ + LOGICAL + & FSTITR,HEAD,PRTPEN + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),LOWER(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP), + & STPD(LDSTPD,M),UPPER(NP),WE(LDWE,LD2WE,NQ), + & WD(LDWD,LD2WD,M),WORK(LWORK),X(LDX,M),Y(LDY,NQ) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & EPSMAC,ETA,P5,ONE,TEN,ZERO + INTEGER + & ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,BOUNDI,DELTAI,DELTNI, + & DELTSI, + & DIFFI,EPSMAI,ETAI,FI,FJACBI,FJACDI,FNI,FSI,I,IDFI,INT2I, + & IPRINI, + & IRANKI,ISTOP,ISTOPI,JOBI,JPVTI,K,LDTT,LDTTI,LIWKMN,LOWERI, + & LUNERI,LUNRPI,LWKMN,LWRK,MAXITI,MSGB,MSGD,NETA,NETAI, + & NFEV,NFEVI,NITERI,NJEV,NJEVI,NNZW,NNZWI,NPP,NPPI,NROW,NROWI, + & NTOL,NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + & RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + & UPPERI, + & VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I,WRK, + & WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + & ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...Local arrays + REAL (KIND=R8) + & BETAJ(NP) + INTEGER + & INTERVAL(NP) + +C...External functions + REAL (KIND=R8) + & DDOT,DNRM2,DERSTEP + EXTERNAL + & DDOT,DNRM2,DERSTEP + +C...External subroutines + EXTERNAL + & DCOPY,DETAF,DFCTRW,DFLAGS,DINIWK,DIWINF,DJCK,DODCHK, + & DODMN,DODPER,DPACK,DSETN,DUNPAC,DWINF,DXMY,DXPY + +C...Data statements + DATA + & ZERO,P5,ONE,TEN + & /0.0E0_R8,0.5E0_R8,1.0E0_R8,10.0E0_R8/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Routine names used as subprogram arguments +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...Variable Definitions (alphabetically) +C ACTRSI: The location in array work of variable ACTRS. +C ALPHAI: The location in array work of variable ALPHA. +C ANAJAC: The variable designating whether the Jacobians are +C computed by finite differences (ANAJAC=FALSE) or not +C (ANAJAC=TRUE). +C BETA: The function parameters. +C BETACI: The starting location in array WORK of array BETAC. +C BETAJ: The parameters to use in the derivative checking algorithm. +C BETANI: The starting location in array WORK of array BETAN. +C BETASI: The starting location in array WORK of array BETAS. +C BETA0I: The starting location in array WORK of array BETA0. +C CDJAC: The variable designating whether the Jacobians are +C Computed by central differences (CDJAC=TRUE) or forward +C differences (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user supplied +C Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C DELTAI: The starting location in array WORK of array DELTA. +C DELTNI: The starting location in array WORK of array DELTAN. +C DELTSI: The starting location in array WORK of array DELTAS. +C DIFFI: The starting location in array WORK of array DIFF. +C DOVCV: The variable designating whether the covariance matrix is +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C EPSMAI: The location in array WORK of variable EPSMAC. +C ETA: The relative noise in the function results. +C ETAI: The location in array WORK of variable ETA. +C FI: The starting location in array WORK of array F. +C FJACBI: The starting location in array WORK of array FJACB. +C FJACDI: The starting location in array WORK of array FJACD. +C FNI: The starting location in array WORK of array FN. +C FSI: The starting location in array WORK of array FS. +C FSTITR: The variable designating whether this is the first +C iteration (FSTITR=TRUE) or not (FSTITR=FALSE). +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=TRUE) or not (HEAD=FALSE). +C I: An index variable. +C IDFI: The location in array iwork of variable IDF. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C INITD: The variable designating whether DELTA is to be initialized +C to zero (INITD=TRUE) or to the values in the first N by M +C elements of array WORK (INITD=FALSE). +C INT2I: The location in array IWORK of variable INT2. +C INTERVAL: Specifies which checks can be performed when checking derivatives +C based on the interval of the bound constraints. +C IPRINI: The location in array iwork of variable IPRINT. +C IPRINT: The print control variable. +C IRANKI: The location in array IWORK of variable IRANK. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISTOPI: The location in array IWORK of variable ISTOP. +C IWORK: The integer work space. +C JOB: The variable controling problem initialization and +C computational method. +C JOBI: The location in array IWORK of variable JOB. +C JPVTI: The starting location in array IWORK of array JPVT. +C K: An index variable. +C LDIFX: The leading dimension of array IFIXX. +C LDSCLD: The leading dimension of array SCLD. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LDTTI: The location in array IWORK of variable LDTT. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LIWKMN: The minimum acceptable length of array IWORK. +C LIWORK: The length of vector IWORK. +C LOWER: The lower bound for BETA. +C LUNERI: The location in array IWORK of variable LUNERR. +C LUNERR: The logical unit number used for error messages. +C LUNRPI: The location in array IWORK of variable LUNRPT. +C LUNRPT: The logical unit number used for computation reports. +C LWKMN: The minimum acceptable length of array WORK. +C LWORK: The length of vector WORK. +C LWRK: The length of vector WRK. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MAXIT1: For implicit models, the iterations allowed for the next +C penalty parameter value. +C MAXITI: The location in array IWORK of variable MAXIT. +C MSGB: The starting location in array IWORK of array MSGB. +C MSGD: The starting location in ARRAY IWORK of array MSGD. +C N: The number of observations. +C NDIGIT: The number of accurate digits in the function results, as +C supplied by the user. +C NETA: The number of accurate digits in the function results. +C NETAI: The location in array IWORK of variable NETA. +C NFEV: The number of function evaluations. +C NFEVI: The location in array IWORK of variable NFEV. +C NITERI: The location in array IWORK of variable NITER. +C NJEV: The number of Jacobian evaluations. +C NJEVI: The location in array IWORK of variable NJEV. +C NNZW: The number of nonzero observational error weights. +C NNZWI: The location in array IWORK of variable NNZW. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NPPI: The location in array IWORK of variable NPP. +C NQ: The number of responses per observation. +C NROW: The row number at which the derivative is to be checked. +C NROWI: The location in array IWORK of variable NROW. +C NTOL: The number of digits of agreement required between the +C numerical derivatives and the user supplied derivatives, +C set by DJCK. +C NTOLI: The location in array IWORK of variable NTOL. +C OLMAVI: The location in array WORK of variable OLMAVG. +C OMEGAI: The starting location in array WORK of array OMEGA. +C ONE: The value 1.0E0_R8. +C PARTLI: The location in array WORK of variable PARTOL. +C PARTOL: The parameter convergence stopping tolerance. +C PNORM: The norm of the scaled estimated parameters. +C PNORMI: The location in array WORK of variable PNORM. +C PRERSI: The location in array WORK of variable PRERS. +C PRTPEN: The variable designating whether the penalty parameter is +C to be printed in the iteration report (PRTPEN=TRUE) or not +C (PRTPEN=FALSE). +C P5: The value 0.5E0_R8. +C QRAUXI: The starting location in array WORK of array QRAUX. +C RCONDI: The location in array WORK of variable RCOND. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). +C RNORSI: The location in array WORK of variable RNORMS. +C RVARI: The location in array WORK of variable RVAR. +C SCLB: The scaling values for BETA. +C SCLD: The scaling values for DELTA. +C SDI: The starting location in array WORK of array SD. +C SI: The starting location in array WORK of array S. +C SSFI: The starting location in array WORK of array SSF. +C SSI: The starting location in array WORK of array SS. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C SSTOLI: The location in array WORK of variable SSTOL. +C STPB: The step size for finite difference derivatives wrt BETA. +C STPD: The step size for finite difference derivatives wrt DELTA. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TAUFCI: The location in array WORK of variable TAUFAC. +C TAUI: The location in array WORK of variable TAU. +C TEN: The value 10.0E0_R8. +C TI: The starting location in array WORK of array T. +C TSTIMP: The relative change in the parameters between the initial +C values and the solution. +C TTI: The starting location in array WORK of array TT. +C UI: The starting location in array WORK of array U. +C UPPER: The upper bound for BETA. +C VCVI: The starting location in array WORK of array VCV. +C WD: The DELTA weights. +C WE: The EPSILON weights. +C WE1I: The starting location in array WORK of array WE1. +C WORK: The REAL (KIND=R8) work space. +C WRK: The starting location in array WORK of array WRK, +C equivalenced to WRK1 and WRK2. +C WRK1I: The starting location in array WORK of array WRK1. +C WRK2I: The starting location in array WORK of array WRK2. +C WRK3I: The starting location in array WORK of array WRK3. +C WRK4I: The starting location in array WORK of array WRK4. +C WRK5I: The starting location in array WORK of array WRK5. +C WRK6I: The starting location in array WORK of array WRK6. +C WRK7I: The starting location in array WORK of array WRK7. +C WSSI: The location in array WORK of variable wss. +C WSSDEI: The location in array WORK of variable WSSDEL. +C WSSEPI: The location in array WORK of variable WSSEPS. +C X: The explanatory variable. +C XPLUSI: The starting location in array WORK of array XPLUSD. +C Y: The dependent variable. Unused when the model is implicit. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODDRV + + +C Initialize necessary variables + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + & ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C Set starting locations within integer workspace +C (invalid values of M, NP and/or NQ are handled reasonably by DIWINF) + + CALL DIWINF(M,NP,NQ, + & MSGB,MSGD,JPVTI,ISTOPI, + & NNZWI,NPPI,IDFI, + & JOBI,IPRINI,LUNERI,LUNRPI, + & NROWI,NTOLI,NETAI, + & MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + & BOUNDI, + & LIWKMN) + +C Set starting locations within REAL (KIND=R8) work space +C (invalid values of N, M, NP, NQ, LDWE and/or LD2WE +C are handled reasonably by DWINF) + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + & DELTAI,FI,XPLUSI,FNI,SDI,VCVI, + & RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + & OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + & PARTLI,SSTOLI,TAUFCI,EPSMAI, + & BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + & FSI,FJACBI,WE1I,DIFFI, + & DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + & WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + & LOWERI,UPPERI, + & LWKMN) + IF (ISODR) THEN + WRK = WRK1I + LWRK = N*M*NQ + N*NQ + ELSE + WRK = WRK2I + LWRK = N*NQ + END IF + +C Update the penalty parameters +C (WE(1,1,1) is not a user supplied array in this case) + IF (RESTRT .AND. IMPLCT) THEN + WE(1,1,1) = MAX(WORK(WE1I)**2,ABS(WE(1,1,1))) + WORK(WE1I) = -SQRT(ABS(WE(1,1,1))) + END IF + + IF (RESTRT) THEN + +C Reset maximum number of iterations + + IF (MAXIT.GE.0) THEN + IWORK(MAXITI) = IWORK(NITERI) + MAXIT + ELSE + IWORK(MAXITI) = IWORK(NITERI) + 10 + END IF + + IF (IWORK(NITERI).LT.IWORK(MAXITI)) THEN + INFO = 0 + END IF + + IF (JOB.GE.0) IWORK(JOBI) = JOB + IF (IPRINT.GE.0) IWORK(IPRINI) = IPRINT + IF (PARTOL.GE.ZERO .AND. PARTOL.LT.ONE) WORK(PARTLI) = PARTOL + IF (SSTOL.GE.ZERO .AND. SSTOL.LT.ONE) WORK(SSTOLI) = SSTOL + + WORK(OLMAVI) = WORK(OLMAVI)*IWORK(NITERI) + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ, + & RESHAPE(WORK(WE1I:WE1I+LDWE*LD2WE*NQ-1),(/LDWE,LD2WE,NQ/)), + & LDWE,LD2WE, + & RESHAPE(WORK(FI:FI+N*NQ-1),(/N,NQ/)), + & TEMPRET(1:N,1:NQ)) + WORK(FI:FI+N*NQ-1) = RESHAPE(TEMPRET(1:N,1:NQ),(/N*NQ/)) + WORK(WSSEPI) = DDOT(N*NQ,WORK(FI),1,WORK(FI),1) + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + + ELSE + +C Perform error checking + + INFO = 0 + + CALL DODCHK(N,M,NP,NQ, + & ISODR,ANAJAC,IMPLCT, + & BETA,IFIXB, + & LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LDY, + & LWORK,LWKMN,LIWORK,LIWKMN, + & SCLB,SCLD,STPB,STPD, + & INFO, + & LOWER,UPPER) + IF (INFO.GT.0) THEN + GO TO 50 + END IF + +C Initialize work vectors as necessary + + DO 10 I=N*M+N*NQ+1,LWORK + WORK(I) = ZERO + 10 CONTINUE + DO 20 I=1,LIWORK + IWORK(I) = 0 + 20 CONTINUE + + CALL DINIWK(N,M,NP, + & WORK,LWORK,IWORK,LIWORK, + & X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + & BETA,SCLB, + & SSTOL,PARTOL,MAXIT,TAUFAC, + & JOB,IPRINT,LUNERR,LUNRPT, + & LOWER,UPPER, + & EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + & JOBI,IPRINI,LUNERI,LUNRPI, + & SSFI,TTI,LDTTI,DELTAI, + & LOWERI,UPPERI,BOUNDI) + + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + WORK(TAUI) = -WORK(TAUFCI) + +C Set up for parameter estimation - +C Pull BETA's to be estimated and corresponding scale values +C and store in WORK(BETACI) and WORK(SSI), respectively + + CALL DPACK(NP,IWORK(NPPI),WORK(BETACI),BETA,IFIXB) + CALL DPACK(NP,IWORK(NPPI),WORK(SSI),WORK(SSFI),IFIXB) + NPP = IWORK(NPPI) + +C Check that WD is positive definite and WE is positive semidefinite, +C saving factorization of WE, and counting number of nonzero weights + + CALL DFCTRW(N,M,NQ,NPP, + & ISODR, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & WORK(WRK2I),WORK(WRK4I), + & WORK(WE1I),NNZW,INFO) + IWORK(NNZWI) = NNZW + + IF (INFO.NE.0) THEN + GO TO 50 + END IF + +C Evaluate the predicted values and +C weighted EPSILONS at the starting point + + CALL DUNPAC(NP,WORK(BETACI),BETA,IFIXB) + CALL DXPY(N,M,X,LDX,WORK(DELTAI),N,WORK(XPLUSI),N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,WORK(XPLUSI), + & IFIXB,IFIXX,LDIFX, + & 002,WORK(FNI),WORK(WRK6I),WORK(WRK1I), + & ISTOP) + IWORK(ISTOPI) = ISTOP + IF (ISTOP.EQ.0) THEN + IWORK(NFEVI) = IWORK(NFEVI) + 1 + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ, + & RESHAPE(WORK(WE1I:WE1I+LDWE*LD2WE*NQ-1), + & (/LDWE,LD2WE,NQ/)),LDWE,LD2WE, + & RESHAPE(WORK(FI:FI+N*NQ-1),(/N,NQ/)), + & TEMPRET(1:N,1:NQ)) + WORK(FI:FI+N*NQ-1) = RESHAPE(TEMPRET(1:N,1:NQ),(/N*NQ/)) + ELSE + INFO = 52000 + GO TO 50 + END IF + +C Compute norm of the initial estimates + + CALL DWGHT(NPP,1,RESHAPE(WORK(SSI:SSI+NPP-1),(/NPP,1,1/)), + & NPP,1,RESHAPE(WORK(BETACI:BETACI+NPP-1),(/NPP,1/)), + & TEMPRET(1:NPP,1:1)) + WORK(WRK:WRK+NPP-1) = TEMPRET(1:NPP,1) + IF (ISODR) THEN + CALL DWGHT(N,M,RESHAPE(WORK(TTI:TTI+IWORK(LDTTI)*1*M-1), + & (/IWORK(LDTTI),1,M/)),IWORK(LDTTI),1, + & RESHAPE(WORK(DELTAI:DELTAI+N*M-1),(/N,M/)), + & TEMPRET(1:N,1:M)) + WORK(WRK+NPP:WRK+NPP+N*M-1) = + & RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + WORK(PNORMI) = DNRM2(NPP+N*M,WORK(WRK),1) + ELSE + WORK(PNORMI) = DNRM2(NPP,WORK(WRK),1) + END IF + +C Compute sum of squares of the weighted EPSILONS and weighted DELTAS + + WORK(WSSEPI) = DDOT(N*NQ,WORK(FI),1,WORK(FI),1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD, + & RESHAPE(WORK(DELTAI:DELTAI+N*M),(/N,M/)), + & TEMPRET(1:N,1:M)) + WORK(WRK:WRK+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + WORK(WSSDEI) = DDOT(N*M,WORK(DELTAI),1,WORK(WRK),1) + ELSE + WORK(WSSDEI) = ZERO + END IF + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + +C Select first row of X + DELTA that contains no zeros + + NROW = -1 + CALL DSETN(N,M,WORK(XPLUSI),N,NROW) + IWORK(NROWI) = NROW + +C Set number of good digits in function results + + EPSMAC = WORK(EPSMAI) + IF (NDIGIT.LT.2) THEN + IWORK(NETAI) = -1 + NFEV = IWORK(NFEVI) + CALL DETAF(FCN, + & N,M,NP,NQ, + & WORK(XPLUSI),BETA,EPSMAC,NROW, + & WORK(BETANI),WORK(FNI), + & IFIXB,IFIXX,LDIFX, + & ISTOP,NFEV,ETA,NETA, + & WORK(WRK1I),WORK(WRK2I),WORK(WRK6I),WORK(WRK7I), + & INFO, + & LOWER,UPPER) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IF (ISTOP.NE.0.OR.INFO.NE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 53000 + END IF + IWORK(NETAI) = 0 + WORK(ETAI) = ZERO + GO TO 50 + ELSE + IWORK(NETAI) = -NETA + WORK(ETAI) = ETA + END IF + ELSE + IWORK(NETAI) = MIN(NDIGIT,INT(P5-LOG10(EPSMAC))) + WORK(ETAI) = MAX(EPSMAC,TEN**(-NDIGIT)) + END IF + +C Check bounds are large enough for derivative calculations. + + IF (.NOT.ANAJAC .OR. CHKJAC) THEN + IF (CDJAC) THEN + DO K=1,NP + IF (UPPER(K)- + & ABS(2*DERSTEP(1,K,UPPER(K),WORK(SSFI),STPB,NETA)) + & .LT.LOWER(K) + & ) THEN + INFO = 90020 + GO TO 50 + END IF + END DO + ELSE + DO K=1,NP + IF (UPPER(K)- + & ABS(2*DERSTEP(0,K,UPPER(K),WORK(SSFI),STPB,NETA)) + & .LT.LOWER(K) + & ) THEN + INFO = 90020 + GO TO 50 + END IF + END DO + END IF + END IF + +C CHECK DERIVATIVES IF NECESSARY + + IF (CHKJAC .AND. ANAJAC) THEN + NTOL = -1 + NFEV = IWORK(NFEVI) + NJEV = IWORK(NJEVI) + NETA = IWORK(NETAI) + LDTT = IWORK(LDTTI) + ETA = WORK(ETAI) + EPSMAC = WORK(EPSMAI) +C ENSURE BETA IS NOT TOO CLOSE TO BOUNDS FOR THE DERIVATIVE CHECK. + BETAJ(:) = BETA(:) + CALL MBFB(NP,BETAJ,LOWER,UPPER,WORK(SSFI),STPB,NETA,ETA, + & INTERVAL) +C CHECK THE DERIVATIVES. + CALL DJCK(FCN, + & N,M,NP,NQ, + & BETA,BETAJ,WORK(XPLUSI), + & IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + & WORK(SSFI),WORK(TTI),LDTT, + & ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + & WORK(FNI),WORK(FJACBI),WORK(FJACDI), + & IWORK(MSGB),IWORK(MSGD),WORK(DIFFI), + & ISTOP,NFEV,NJEV, + & WORK(WRK1I),WORK(WRK2I),WORK(WRK6I), + & INTERVAL) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NJEVI) = NJEV + IWORK(NTOLI) = NTOL + IF (ISTOP.NE.0) THEN + INFO = 54000 + ELSE IF (IWORK(MSGB).NE.0 .OR. IWORK(MSGD).NE.0) THEN + INFO = 40000 + END IF + ELSE + +C Indicate user supplied derivatives were not checked + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + END IF + +C Print appropriate error messages + + 50 IF ((INFO.NE.0) .OR. (IWORK(MSGB).NE.-1)) THEN + IF (LUNERR.NE.0 .AND. IPRINT.NE.0) THEN + CALL DODPER + & (INFO,LUNERR, + & N,M,NP,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LWKMN,LIWKMN, + & WORK(FJACBI),WORK(FJACDI), + & WORK(DIFFI),IWORK(MSGB),ISODR,IWORK(MSGD), + & WORK(XPLUSI),IWORK(NROWI),IWORK(NETAI),IWORK(NTOLI)) + END IF + +C Set INFO to reflect errors in the user supplied Jacobians + + IF (INFO.EQ.40000) THEN + IF (IWORK(MSGB).EQ.2 .OR. IWORK(MSGD).EQ.2) THEN + IF (IWORK(MSGB).EQ.2) THEN + INFO = INFO + 1000 + END IF + IF (IWORK(MSGD).EQ.2) THEN + INFO = INFO + 100 + END IF + ELSE + INFO = 0 + END IF + END IF + IF (INFO.NE.0) THEN + RETURN + END IF + END IF + END IF + +C Save the initial values of BETA + CALL DCOPY(NP,BETA,1,WORK(BETA0I),1) + +C Find least squares solution + + CALL DCOPY(N*NQ,WORK(FNI),1,WORK(FSI),1) + LDTT = IWORK(LDTTI) + CALL DODMN(HEAD,FSTITR,PRTPEN, + & FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + & WE,WORK(WE1I),LDWE,LD2WE,WD,LDWD,LD2WD, + & IFIXB,IFIXX,LDIFX, + & WORK(BETACI),WORK(BETANI),WORK(BETASI),WORK(SI), + & WORK(DELTAI),WORK(DELTNI),WORK(DELTSI), + & WORK(LOWERI),WORK(UPPERI), + & WORK(TI),WORK(FI),WORK(FNI),WORK(FSI), + & WORK(FJACBI),IWORK(MSGB),WORK(FJACDI),IWORK(MSGD), + & WORK(SSFI),WORK(SSI),WORK(TTI),LDTT, + & STPB,STPD,LDSTPD, + & WORK(XPLUSI),WORK(WRK),LWRK, + & WORK,LWORK,IWORK,LIWORK,INFO, + & IWORK(BOUNDI)) + MAXIT1 = IWORK(MAXITI) - IWORK(NITERI) + TSTIMP = ZERO + DO 100 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + TSTIMP = MAX(TSTIMP, + & ABS(BETA(K)-WORK(BETA0I-1+K))/WORK(SSFI-1+K)) + ELSE + TSTIMP = MAX(TSTIMP, + & ABS(BETA(K)-WORK(BETA0I-1+K))/ABS(BETA(K))) + END IF + 100 CONTINUE + + RETURN + + END SUBROUTINE +*DODLM + SUBROUTINE DODLM + & (N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ALPHA2,TAU,EPSFCN,ISODR, + & TFJACB,OMEGA,U,QRAUX,JPVT, + & S,T,NLMS,RCOND,IRANK, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***Begin Prologue DODLM +C***Refer to ODR +C***Routines Called DDOT,DNRM2,DODSTP,DSCALE,DWGHT +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute Levenberg-Marquardt parameter and steps S AND T +C using analog of the trust-region Levenberg-Marquardt +C algorithm +C***End Prologue DODLM + +C...Used modules + USE REAL_PRECISION + USE ODRPACK95, ONLY : TEMPRET + +C...Scalar arguments + REAL (KIND=R8) + & ALPHA2,EPSFCN,RCOND,TAU + INTEGER + & IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NLMS,NP,NPP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + & OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + & T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + & WRK(LWRK),WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M) + INTEGER + & JPVT(NP) + +C...Local scalars + REAL (KIND=R8) + & ALPHA1,ALPHAN,BOT,P001,P1,PHI1,PHI2,SA,TOP,ZERO + INTEGER + & I,IWRK,J,K,L + LOGICAL + & FORVCV + +C...External functions + REAL (KIND=R8) + & DDOT,DNRM2 + EXTERNAL + & DDOT,DNRM2 + +C...External subroutines + EXTERNAL + & DODSTP,DSCALE + +C...Data statements + DATA + & ZERO,P001,P1 + & /0.0E0_R8,0.001E0_R8,0.1E0_R8/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Variable Definitions (alphabetically) +C ALPHAN: The new Levenberg-Marquardt parameter. +C ALPHA1: The previous Levenberg-Marquardt parameter. +C ALPHA2: The current Levenberg-Marquardt parameter. +C BOT: The lower limit for setting ALPHA. +C DELTA: The estimated errors in the explanatory variables. +C EPSFCN: The function's precision. +C F: The (weighted) estimated values of EPSILON. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FORVCV: The variable designating whether this subroutine was +C called to set up for the covariance matrix computations +C (FORVCV=TRUE) or not (FORVCV=FALSE). +C I: An indexing variable. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOPC: The variable designating whether the computations were +C stoped due to some numerical error detected within +C subroutine DODSTP. +C IWRK: An indexing variable. +C J: An indexing variable. +C K: An indexing variable. +C L: An indexing variable. +C JPVT: The pivot vector. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LD2WD: The second dimension of array WD. +C LWRK: The length of vector WRK. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NLMS: The number of Levenberg-Marquardt steps taken. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observation. +C OMEGA: The array (I-FJACD*INV(P)*trans(FJACD))**(-1/2) where +C P = trans(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C P001: The value 0.001E0_R8 +C P1: The value 0.1E0_R8 +C PHI1: The previous difference between the norm of the scaled step +C and the trust region diameter. +C PHI2: The current difference between the norm of the scaled step +C and the trust region diameter. +C QRAUX: The array required to recover the orthogonal part of the +C Q-R decomposition. +C RCOND: The approximate reciprocal condition of TFJACB. +C S: The step for BETA. +C SA: The scalar PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2). +C SS: The scaling values used for the unfixed BETAS. +C T: The step for DELTA. +C TAU: The trust region diameter. +C TFJACB: The array OMEGA*FJACB. +C TOP: The upper limit for setting ALPHA. +C TT: The scale used for the DELTA'S. +C U: The approximate null vector for TFJACB. +C WD: The DELTA weights. +C WRK: A work array of (LWRK) elements, +C equivalenced to WRK1 and WRK2. +C WRK1: A work array of (N by NQ by M) elements. +C WRK2: A work array of (N by NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK4: A work array of (M by M) elements. +C WRK5: A work array of (M) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODLM + + FORVCV = .FALSE. + ISTOPC = 0 + +C Compute full Gauss-Newton step (ALPHA=0) + + ALPHA1 = ZERO + CALL DODSTP(N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ALPHA1,EPSFCN,ISODR, + & TFJACB,OMEGA,U,QRAUX,JPVT, + & S,T,PHI1,IRANK,RCOND,FORVCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + +C Initialize TAU if necessary + + IF (TAU.LT.ZERO) THEN + TAU = ABS(TAU)*PHI1 + END IF + +C Check if full Gauss-Newton step is optimal + + IF ((PHI1-TAU).LE.P1*TAU) THEN + NLMS = 1 + ALPHA2 = ZERO + RETURN + END IF + +C Full Gauss-Newton step is outside trust region - +C find locally constrained optimal step + + PHI1 = PHI1 - TAU + +C Initialize upper and lower bounds for ALPHA + + BOT = ZERO + + DO 30 K=1,NPP + DO 20 L=1,NQ + DO 10 I=1,N + TFJACB(I,L,K) = FJACB(I,K,L) + 10 CONTINUE + 20 CONTINUE + WRK(K) = DDOT(N*NQ,TFJACB(1,1,K),1,F(1,1),1) + 30 CONTINUE + CALL DSCALE(NPP,1,SS,NPP,WRK,NPP,WRK,NPP) + + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,TEMPRET(1:N,1:M)) + WRK(NPP+1:NPP+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + IWRK = NPP + DO 50 J=1,M + DO 40 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = WRK(IWRK) + + & DDOT(NQ,FJACD(I,J,1),N*M,F(I,1),N) + 40 CONTINUE + 50 CONTINUE + CALL DSCALE(N,M,TT,LDTT,WRK(NPP+1),N,WRK(NPP+1),N) + TOP = DNRM2(NPP+N*M,WRK,1)/TAU + ELSE + TOP = DNRM2(NPP,WRK,1)/TAU + END IF + + IF (ALPHA2.GT.TOP .OR. ALPHA2.EQ.ZERO) THEN + ALPHA2 = P001*TOP + END IF + +C Main loop + + DO 60 I=1,10 + +C Compute locally constrained steps S and T and PHI(ALPHA) for +C current value of ALPHA + + CALL DODSTP(N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ALPHA2,EPSFCN,ISODR, + & TFJACB,OMEGA,U,QRAUX,JPVT, + & S,T,PHI2,IRANK,RCOND,FORVCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + PHI2 = PHI2-TAU + +C Check whether current step is optimal + + IF (ABS(PHI2).LE.P1*TAU .OR. + & (ALPHA2.EQ.BOT .AND. PHI2.LT.ZERO)) THEN + NLMS = I+1 + RETURN + END IF + +C Current step is not optimaL + +C Update bounds for ALPHA and compute new ALPHA + + IF (PHI1-PHI2.EQ.ZERO) THEN + NLMS = 12 + RETURN + END IF + SA = PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2) + IF (PHI2.LT.ZERO) THEN + TOP = MIN(TOP,ALPHA2) + ELSE + BOT = MAX(BOT,ALPHA2) + END IF + IF (PHI1*PHI2.GT.ZERO) THEN + BOT = MAX(BOT,ALPHA2-SA) + ELSE + TOP = MIN(TOP,ALPHA2-SA) + END IF + + ALPHAN = ALPHA2 - SA*(PHI1+TAU)/TAU + IF (ALPHAN.GE.TOP .OR. ALPHAN.LE.BOT) THEN + ALPHAN = MAX(P001*TOP,SQRT(TOP*BOT)) + END IF + +C Get ready for next iteration + + ALPHA1 = ALPHA2 + ALPHA2 = ALPHAN + PHI1 = PHI2 + 60 CONTINUE + +C Set NLMS to indicate an optimal step could not be found in 10 trys + + NLMS = 12 + + RETURN + END SUBROUTINE +*DODMN + SUBROUTINE DODMN + & (HEAD,FSTITR,PRTPEN, + & FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + & WE,WE1,LDWE,LD2WE,WD,LDWD,LD2WD, + & IFIXB,IFIXX,LDIFX, + & BETAC,BETAN,BETAS,S,DELTA,DELTAN,DELTAS, + & LOWER,UPPER, + & T,F,FN,FS,FJACB,MSGB,FJACD,MSGD, + & SSF,SS,TT,LDTT,STPB,STPD,LDSTPD, + & XPLUSD,WRK,LWRK,WORK,LWORK,IWORK,LIWORK,INFO, + & BOUND) +C***Begin Prologue DODMN +C***Refer to ODR +C***Routines Called FCN,DACCES,DCOPY,DDOT,DEVJAC,DFLAGS,DNRM2,DODLM, +C DODPCR,DODVCV,DUNPAC,DWGHT,DXMY,DXPY +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Iteratively compute least squares solution +C***End Prologue DODMN + +C...Used modules + USE REAL_PRECISION + USE ODRPACK95, ONLY : TEMPRET + +C...Scalar arguments + INTEGER + & INFO,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LIWORK,LWORK,LWRK,M,N,NP,NQ + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),BETAC(NP),BETAN(NP),BETAS(NP), + & DELTA(N,M),DELTAN(N,M),DELTAS(N,M), + & F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ),FS(N,NQ), + & LOWER(NP), + & S(NP),SS(NP),SSF(NP),STPB(NP),STPD(LDSTPD,M), + & T(N,M),TT(LDTT,M), + & UPPER(NP), + & WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ), + & WORK(LWORK),X(LDX,M),XPLUSD(N,M),WRK(LWRK),Y(LDY,NQ) + INTEGER + & BOUND(NP),IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK), + & MSGB(NQ*NP+1),MSGD(NQ*M+1) + LOGICAL + & FSTITR,HEAD,PRTPEN + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & ACTRED,ACTRS,ALPHA,DIRDER,ETA,OLMAVG,ONE, + & P0001,P1,P25,P5,P75,PARTOL,PNORM,PRERED,PRERS, + & RATIO,RCOND,RNORM,RNORMN,RNORMS,RSS,RVAR,SSTOL,TAU,TAUFAC, + & TEMP,TEMP1,TEMP2,TSNORM,ZERO + INTEGER + & I,IDF,IFLAG,INT2,IPR,IPR1,IPR2,IPR2F,IPR3,IRANK, + & ISTOP,ISTOPC,IWRK,J,JPVT,L,LOOPED,LUDFLT,LUNR,LUNRPT, + & MAXIT,NETA,NFEV,NITER,NJEV,NLMS,NNZW,NPP,NPR,NPU,OMEGA,QRAUX, + & SD,U,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + & ACCESS,ANAJAC,CDJAC,CHKJAC,CNVPAR,CNVSS,DIDVCV,DOVCV, + & IMPLCT,INITD,INTDBL,ISODR,LSTEP,REDOJ,RESTRT + +C...Local arrays + REAL (KIND=R8) + & LOWERU(NP),UPPERU(NP),WSS(3) + +C...External functions + REAL (KIND=R8) + & DDOT,DNRM2 + EXTERNAL + & DDOT,DNRM2 + +C...External subroutines + EXTERNAL + & DACCES,DCOPY,DEVJAC,DFLAGS, + & DODLM,DODPCR,DODVCV,DUNPAC,DXMY,DXPY + +C...Data statements + DATA + & ZERO,P0001,P1,P25,P5,P75,ONE + & /0.0E0_R8,0.00010E0_R8,0.10E0_R8,0.250E0_R8, + & 0.50E0_R8,0.750E0_R8,1.0E0_R8/ + DATA + & LUDFLT + & /6/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Routine names used as subprogram arguments +C FCN: The user supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C ACCESS: The variable designating whether information is to be +C accessed from the work arrays (ACCESS=TRUE) or stored in +C them (ACCESS=FALSE). +C ACTRED: The actual relative reduction in the sum-of-squares. +C ACTRS: The saved actual relative reduction in the sum-of-squares. +C ALPHA: The Levenberg-Marquardt parameter. +C ANAJAC: The variable designating whether the Jacobians are computed +C by finite differences (ANAJAC=FALSE) or not (ANAJAC=TRUE). +C BETA: The function parameters. +C BETAC: The current estimated values of the unfixed BETA'S. +C BETAN: The new estimated values of the unfixed BETA'S. +C BETAS: The saved estimated values of the unfixed BETA'S. +C CDJAC: The variable designating whether the Jacobians are computed +C by central differences (cdjac=true) or by forward +C differences (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user supplied +C Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C CNVPAR: The variable designating whether parameter convergence was +C attained (CNVPAR=TRUE) or not (CNVPAR=FALSE). +C CNVSS: The variable designating whether sum-of-squares convergence +C was attained (CNVSS=TRUE) or not (CNVSS=FALSE). +C DELTA: The estimated errors in the explanatory variables. +C DELTAN: The new estimated errors in the explanatory variables. +C DELTAS: The saved estimated errors in the explanatory variables. +C DIDVCV: The variable designating whether the covariance matrix was +C computed (DIDVCV=TRUE) or not (DIDVCV=FALSE). +C DIRDER: The directional derivative. +C DOVCV: The variable designating whether the covariance matrix +C should to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C ETA: The relative noise in the function results. +C F: The (weighted) estimated values of EPSILON. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FN: The new predicted values from the function. +C FS: The saved predicted values from the function. +C FSTITR: The variable designating whether this is the first +C iteration (FSTITR=TRUE) or not (FSTITR=FALSE). +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=TRUE) or not (HEAD=FALSE). +C I: An indexing variable. +C IDF: The degrees of freedom of the fit, equal to the number of +C observations with nonzero weighted derivatives minus the +C number of parameters being estimated. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C IFLAG: The variable designating which report is to be printed. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C INITD: The variable designating whether delta is initialized to +C zero (INITD=TRUE) or to the values in the first N by M +C elements of array work (INITD=FALSE). +C INT2: The number of internal doubling steps taken. +C INTDBL: The variable designating whether internal doubling is to be +C used (INTDBL=TRUE) or NOT (INTDBL=FALSE). +C IPR: The values designating the length of the printed report. +C IPR1: The value of the 4th digit (from the right) of iprint, +C which controls the initial summary report. +C IPR2: The value of the 3rd digit (from the right) of iprint, +C which controls the iteration report. +C IPR2F: The value of the 2nd digit (from the right) of iprint, +C which controls the frequency of the iteration reports. +C IPR3: The value of the 1st digit (from the right) of iprint, +C which controls the final summary report. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C ISTOPC: The variable designating whether the computations were +C stoped due to some numerical error within routine DODSTP. +C IWORK: The integer work space. +C IWRK: An index variable. +C J: An index variable. +C JOB: The variable controling problem initialization and +C computational method. +C JPVT: The starting location in IWORK of array JPVT. +C L: An index variable. +C LDIFX: The leading dimension of array IFIXX. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE and WE1. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE and WE1. +C LIWORK: The length of vector IWORK. +C LOOPED: A counter used to determine how many times the subloop +C has been executed, where if the count becomes large +C enough the computations will be stopped. +C LOWERU: The lower bound for unfixed BETAs. +C LSTEP: The variable designating whether a successful step has +C been found (LSTEP=TRUE) or not (LSTEP=FALSE). +C LUDFLT: The default logical unit number, used for computation +C reports to the screen. +C LUNR: The logical unit number used for computation reports. +C LUNRPT: The logical unit number used for computation reports. +C LWORK: The length of vector WORK. +C LWRK: The length of vector WRK. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MSGB: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of accurate digits in the function results. +C NFEV: The number of function evaluations. +C NITER: The number of iterations taken. +C NJEV: The number of Jacobian evaluations. +C NLMS: The number of Levenberg-Marquardt steps taken. +C NNZW: The number of nonzero weighted observations. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NPR: The number of times the report is to be written. +C NPU: The number of unfixed parameters. +C NQ: The number of responses per observation. +C OLMAVG: The average number of Levenberg-Marquardt steps per +C iteration. +C OMEGA: The starting location in WORK of array OMEGA. +C ONE: The value 1.0E0_R8. +C P0001: The value 0.0001E0_R8. +C P1: The value 0.1E0_R8. +C P25: The value 0.25E0_R8. +C P5: The value 0.5E0_R8. +C P75: The value 0.75E0_R8. +C PARTOL: The parameter convergence stopping tolerance. +C PNORM: The norm of the scaled estimated parameters. +C PRERED: The predicted relative reduction in the sum-of-squares. +C PRERS: The old predicted relative reduction in the sum-of-squares. +C PRTPEN: The value designating whether the penalty parameter is to +C be printed in the iteration report (PRTPEN=TRUE) or not +C (PRTPEN=FALSE). +C QRAUX: The starting location in array WORK of array QRAUX. +C RATIO: The ratio of the actual relative reduction to the predicted +C relative reduction in the sum-of-squares. +C RCOND: The approximate reciprocal condition of FJACB. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). +C RNORM: The norm of the weighted errors. +C RNORMN: The new norm of the weighted errors. +C RNORMS: The saved norm of the weighted errors. +C RSS: The residual sum of squares. +C RVAR: The residual variance. +C S: The step for BETA. +C SD: The starting location in array work of array SD. +C SS: The scaling values used for the unfixed BETAS. +C SSF: The scaling values used for BETA. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C STPB: The relative step used for computing finite difference +C derivatives with respect to each BETA. +C STPD: The relative step used for computing finite difference +C derivatives with respect to DELTA. +C T: The step for DELTA. +C TAU: The trust region diameter. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TEMP: A temporary storage location. +C TEMP1: A temporary storage location. +C TEMP2: A temporary storage location. +C TSNORM: The norm of the scaled step. +C TT: The scaling values used for DELTA. +C U: The starting location in array WORK of array U. +C UPPERU: The upper bound for unfixed BETAs. +C VCV: The starting location in array WORK of array VCV. +C WE: The EPSILON weights. +C WE1: The square root of the EPSILON weights. +C WD: The DELTA weights. +C WORK: The REAL (KIND=R8) work space. +C WSS: The sum-of-squares of the weighted EPSILONS and DELTAS, +C the sum-of-squares of the weighted DELTAS, and +C the sum-of-squares of the weighted EPSILONS. +C WRK: A work array, equivalenced to WRK1 and WRK2 +C WRK1: The starting location in array WORK of array WRK1. +C WRK2: The starting location in array WORK of array WRK2. +C WRK3: The starting location in array WORK of array WRK3. +C WRK4: The starting location in array WORK of array WRK4. +C WRK5: The starting location in array WORK of array WRK5. +C WRK6: The starting location in array WORK of array WRK6. +C X: The explanatory variable. +C XPLUSD: The values of X + DELTA. +C Y: The dependent variable. Unused when the model is implicit. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODMN + + +C Initialize necessary variables + + CALL DPACK(NP,NPU,LOWERU,LOWER,IFIXB) + CALL DPACK(NP,NPU,UPPERU,UPPER,IFIXB) + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + & ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + ACCESS = .TRUE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + & WORK,LWORK,IWORK,LIWORK, + & ACCESS,ISODR, + & JPVT,OMEGA,U,QRAUX,SD,VCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + & NNZW,NPP, + & JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + & LUNRPT,IPR1,IPR2,IPR2F,IPR3, + & WSS,RVAR,IDF, + & TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + & RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + RNORM = SQRT(WSS(1)) + + DIDVCV = .FALSE. + INTDBL = .FALSE. + LSTEP = .TRUE. + +C Print initial summary if desired + + IF (IPR1.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 1 + IF (IPR1.GE.3 .AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR1.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR1,2) + END IF + LUNR = LUNRPT + DO 10 I=1,NPR + CALL DODPCR(IPR,LUNR, + & HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + & N,M,NP,NQ,NPP,NNZW, + & MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & IFIXB,IFIXX,LDIFX, + & LOWER,UPPER, + & SSF,TT,LDTT,STPB,STPD,LDSTPD, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS,RVAR,IDF,WORK(SD), + & NITER,NFEV,NJEV,ACTRED,PRERED, + & TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR1.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 10 CONTINUE + + END IF + +C Stop if initial estimates are exact solution + + IF (RNORM.EQ.ZERO) THEN + INFO = 1 + OLMAVG = ZERO + ISTOP = 0 + GO TO 150 + END IF + +C Stop if number of iterations already equals maximum permitted + + IF (RESTRT .AND. (NITER.GE.MAXIT)) THEN + ISTOP = 0 + GO TO 150 + ELSE IF (NITER.GE.MAXIT) THEN + INFO = 4 + ISTOP = 0 + GO TO 150 + END IF + +C Main loop + + 100 CONTINUE + + NITER = NITER + 1 + RNORMS = RNORM + LOOPED = 0 + +C Evaluate jacobian using best estimate of function (FS) + + IF ((NITER.EQ.1) .AND. (ANAJAC.AND.CHKJAC)) THEN + ISTOP = 0 + ELSE + CALL DEVJAC(FCN, + & ANAJAC,CDJAC, + & N,M,NP,NQ, + & BETAC,BETA,STPB, + & IFIXB,IFIXX,LDIFX, + & X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FS, + & T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + & FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + & NJEV,NFEV,ISTOP,INFO, + & LOWER,UPPER) + END IF + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + +C Sub loop for +C internal doubling or +C computing new step when old failed + + 110 CONTINUE + +C Compute steps S and T + + IF (LOOPED.GT.100) THEN + INFO = 60000 + GO TO 200 + ELSE + LOOPED = LOOPED + 1 + CALL DODLM(N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ALPHA,TAU,ETA,ISODR, + & WORK(WRK6),WORK(OMEGA), + & WORK(U),WORK(QRAUX),IWORK(JPVT), + & S,T,NLMS,RCOND,IRANK, + & WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + & WORK(WRK5),WRK,LWRK,ISTOPC) + END IF + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + OLMAVG = OLMAVG+NLMS + +C Compute BETAN = BETAC + S +C DELTAN = DELTA + T + + CALL DXPY(NPP,1,BETAC,NPP,S,NPP,BETAN,NPP) + IF (ISODR) CALL DXPY(N,M,DELTA,N,T,N,DELTAN,N) + +C Project the step wrt the bounds + DO I = 1, NPU + IF (LOWERU(I).EQ.UPPERU(I)) THEN + BETAN(I) = UPPERU(I) + S(I) = UPPERU(I)-BETAC(I) + BOUND(I) = 3 + ELSE IF (BETAN(I).LE.LOWERU(I)) THEN + BETAN(I) = LOWERU(I) + S(I) = LOWERU(I)-BETAC(I) + BOUND(I) = 2 + ELSE IF (BETAN(I).GE.UPPERU(I)) THEN + BETAN(I) = UPPERU(I) + S(I) = UPPERU(I)-BETAC(I) + BOUND(I) = 1 + ELSE + BOUND(I) = 0 + END IF + END DO + +C Compute norm of scaled steps S and T (TSNORM) + + CALL DWGHT(NPP,1,RESHAPE(SS,(/NPP,1,1/)),NPP,1, + & RESHAPE(S,(/NPP,1/)),TEMPRET(1:NPP,1:1)) + WRK(1:NPP) = TEMPRET(1:NPP,1) + IF (ISODR) THEN + CALL DWGHT(N,M,RESHAPE(TT,(/LDTT,1,M/)),LDTT,1, + & T,TEMPRET(1:N,1:M)) + WRK(NPP+1:NPP+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + TSNORM = DNRM2(NPP+N*M,WRK,1) + ELSE + TSNORM = DNRM2(NPP,WRK,1) + END IF + +C Compute scaled predicted reduction + + IWRK = 0 + DO 130 L=1,NQ + DO 120 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = DDOT(NPP,FJACB(I,1,L),N,S,1) + IF (ISODR) WRK(IWRK) = WRK(IWRK) + + & DDOT(M,FJACD(I,1,L),N,T(I,1),N) + 120 CONTINUE + 130 CONTINUE + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,T,TEMPRET(1:N,1:M)) + WRK(N*NQ+1:N*NQ+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + TEMP1 = DDOT(N*NQ,WRK,1,WRK,1) + DDOT(N*M,T,1,WRK(N*NQ+1),1) + TEMP1 = SQRT(TEMP1)/RNORM + ELSE + TEMP1 = DNRM2(N*NQ,WRK,1)/RNORM + END IF + TEMP2 = SQRT(ALPHA)*TSNORM/RNORM + PRERED = TEMP1**2+TEMP2**2/P5 + + DIRDER = -(TEMP1**2+TEMP2**2) + +C Evaluate predicted values at new point + + CALL DUNPAC(NP,BETAN,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTAN,N,XPLUSD,N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 002,FN,WORK(WRK6),WORK(WRK1), + & ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + END IF + + IF (ISTOP.LT.0) THEN + +C Set INFO to indicate user has stopped the computations in FCN + + INFO = 51000 + GO TO 200 + ELSE IF (ISTOP.GT.0) THEN + +C Set norm to indicate step should be rejected + + RNORMN = RNORM/(P1*P75) + ELSE + +C Compute norm of new weighted EPSILONS and weighted DELTAS (RNORMN) + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FN,1,WRK,1) + ELSE + CALL DXMY(N,NQ,FN,N,Y,LDY,WRK,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,RESHAPE(WRK,(/N,NQ/)), + & TEMPRET(1:N,1:NQ)) + WRK(1:N*NQ) = RESHAPE(TEMPRET(1:N,1:NQ),(/N*NQ/)) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTAN,TEMPRET(1:N,1:M)) + WRK(N*NQ+1:N*NQ+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + RNORMN = SQRT(DDOT(N*NQ,WRK,1,WRK,1) + + & DDOT(N*M,DELTAN,1,WRK(N*NQ+1),1)) + ELSE + RNORMN = DNRM2(N*NQ,WRK,1) + END IF + END IF + +C Compute scaled actual reduction + + IF (P1*RNORMN.LT.RNORM) THEN + ACTRED = ONE - (RNORMN/RNORM)**2 + ELSE + ACTRED = -ONE + END IF + +C Compute ratio of actual reduction to predicted reduction + + IF(PRERED .EQ. ZERO) THEN + RATIO = ZERO + ELSE + RATIO = ACTRED/PRERED + END IF + +C Check on lack of reduction in internal doubling case + + IF (INTDBL .AND. (RATIO.LT.P0001 .OR. RNORMN.GT.RNORMS)) THEN + ISTOP = 0 + TAU = TAU*P5 + ALPHA = ALPHA/P5 + CALL DCOPY(NPP,BETAS,1,BETAN,1) + CALL DCOPY(N*M,DELTAS,1,DELTAN,1) + CALL DCOPY(N*NQ,FS,1,FN,1) + ACTRED = ACTRS + PRERED = PRERS + RNORMN = RNORMS + RATIO = P5 + END IF + +C Update step bound + + INTDBL = .FALSE. + IF (RATIO.LT.P25) THEN + IF (ACTRED.GE.ZERO) THEN + TEMP = P5 + ELSE + TEMP = P5*DIRDER/(DIRDER+P5*ACTRED) + END IF + IF (P1*RNORMN.GE.RNORM .OR. TEMP.LT.P1) THEN + TEMP = P1 + END IF + TAU = TEMP*MIN(TAU,TSNORM/P1) + ALPHA = ALPHA/TEMP + + ELSE IF (ALPHA.EQ.ZERO) THEN + TAU = TSNORM/P5 + + ELSE IF (RATIO.GE.P75 .AND. NLMS.LE.11) THEN + +C Step qualifies for internal doubling +C - Update TAU and ALPHA +C - Save information for current point + + INTDBL = .TRUE. + + TAU = TSNORM/P5 + ALPHA = ALPHA*P5 + + CALL DCOPY(NPP,BETAN,1,BETAS,1) + CALL DCOPY(N*M,DELTAN,1,DELTAS,1) + CALL DCOPY(N*NQ,FN,1,FS,1) + ACTRS = ACTRED + PRERS = PRERED + RNORMS = RNORMN + END IF + +C If internal doubling, skip convergence checks + + IF (INTDBL .AND. TAU.GT.ZERO) THEN + INT2 = INT2+1 + GO TO 110 + END IF + +C Check acceptance + + IF (RATIO.GE.P0001) THEN + CALL DCOPY(N*NQ,FN,1,FS,1) + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,TEMPRET(1:N,1:NQ)) + F(1:N,1:NQ) = TEMPRET(1:N,1:NQ) + CALL DCOPY(NPP,BETAN,1,BETAC,1) + CALL DCOPY(N*M,DELTAN,1,DELTA,1) + RNORM = RNORMN + CALL DWGHT(NPP,1,RESHAPE(SS,(/NPP,1,1/)),NPP,1, + & RESHAPE(BETAC,(/NPP,1/)),TEMPRET(1:NPP,1:1)) + WRK(1:NPP) = TEMPRET(1:NPP,1) + IF (ISODR) THEN + CALL DWGHT(N,M,RESHAPE(TT,(/LDTT,1,M/)),LDTT,1, + & DELTA,TEMPRET(1:N,1:M)) + WRK(NPP+1:NPP+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + PNORM = DNRM2(NPP+N*M,WRK,1) + ELSE + PNORM = DNRM2(NPP,WRK,1) + END IF + LSTEP = .TRUE. + ELSE + LSTEP = .FALSE. + END IF + +C TEST CONVERGENCE + + INFO = 0 + CNVSS = RNORM.EQ.ZERO + & .OR. + & (ABS(ACTRED).LE.SSTOL .AND. + & PRERED.LE.SSTOL .AND. + & P5*RATIO.LE.ONE) + CNVPAR = (TAU.LE.PARTOL*PNORM) .AND. (.NOT.IMPLCT) + IF (CNVSS) INFO = 1 + IF (CNVPAR) INFO = 2 + IF (CNVSS .AND. CNVPAR) INFO = 3 + +C Print iteration report + + IF (INFO.NE.0 .OR. LSTEP) THEN + IF (IPR2.NE.0 .AND. IPR2F.NE.0 .AND. LUNRPT.NE.0) THEN + IF (IPR2F.EQ.1 .OR. MOD(NITER,IPR2F).EQ.1) THEN + IFLAG = 2 + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + WSS(1) = RNORM*RNORM + IF (IPR2.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR2.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR2,2) + END IF + LUNR = LUNRPT + DO 140 I=1,NPR + CALL DODPCR(IPR,LUNR, + & HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + & N,M,NP,NQ,NPP,NNZW, + & MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & IFIXB,IFIXX,LDIFX, + & LOWER,UPPER, + & SSF,TT,LDTT,STPB,STPD,LDSTPD, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS,RVAR,IDF,WORK(SD), + & NITER,NFEV,NJEV,ACTRED,PRERED, + & TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR2.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 140 CONTINUE + FSTITR = .FALSE. + PRTPEN = .FALSE. + END IF + END IF + END IF + +C Check if finished + + IF (INFO.EQ.0) THEN + IF (LSTEP) THEN + +C Begin next interation unless a stopping criteria has been met + + IF (NITER.GE.MAXIT) THEN + INFO = 4 + ELSE + GO TO 100 + END IF + ELSE + +C Step failed - recompute unless a stopping criteria has been met + + GO TO 110 + END IF + END IF + + 150 CONTINUE + + IF (ISTOP.GT.0) INFO = INFO + 100 + +C Store unweighted EPSILONS and X+DELTA to return to user + + IF (IMPLCT) THEN + CALL DCOPY(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) + +C Compute covariance matrix of estimated parameters +C in upper NP by NP portion of WORK(VCV) if requested + + IF (DOVCV .AND. ISTOP.EQ.0) THEN + +C Re-evaluate Jacobian at final solution, if requested +C Otherwise, Jacobian from beginning of last iteration will be used +C to compute covariance matrix + + IF (REDOJ) THEN + CALL DEVJAC(FCN, + & ANAJAC,CDJAC, + & N,M,NP,NQ, + & BETAC,BETA,STPB, + & IFIXB,IFIXX,LDIFX, + & X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + & SSF,TT,LDTT,NETA,FS, + & T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + & FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + & NJEV,NFEV,ISTOP,INFO, + & LOWER,UPPER) + + + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + END IF + + IF (IMPLCT) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,TEMPRET(1:N,1:M)) + WRK(N*NQ+1:N*NQ+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + RSS = DDOT(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + RSS = RNORM*RNORM + END IF + IF (REDOJ .OR. NITER.GE.1) THEN + CALL DODVCV(N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + & ETA,ISODR, + & WORK(VCV),WORK(SD), + & WORK(WRK6),WORK(OMEGA), + & WORK(U),WORK(QRAUX),IWORK(JPVT), + & S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + & WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + & WORK(WRK5),WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + DIDVCV = .TRUE. + END IF + + END IF + +C Set JPVT to indicate dropped, fixed and estimated parameters + + 200 DO 210 I=0,NP-1 + WORK(WRK3+I) = IWORK(JPVT+I) + IWORK(JPVT+I) = -2 + 210 CONTINUE + IF (REDOJ .OR. NITER.GE.1) THEN + DO 220 I=0,NPP-1 + J = WORK(WRK3+I) - 1 + IF (I.LE.NPP-IRANK-1) THEN + IWORK(JPVT+J) = 1 + ELSE + IWORK(JPVT+J) = -1 + END IF + 220 CONTINUE + IF (NPP.LT.NP) THEN + J = NPP-1 + DO 230 I=NP-1,0,-1 + IF (IFIXB(I+1).EQ.0) THEN + IWORK(JPVT+I) = 0 + ELSE + IWORK(JPVT+I) = IWORK(JPVT+J) + J = J - 1 + END IF + 230 CONTINUE + END IF + END IF + +C Store various scalars in work arrays for return to user + + IF (NITER.GE.1) THEN + OLMAVG = OLMAVG/NITER + ELSE + OLMAVG = ZERO + END IF + +C Compute weighted sums of squares for return to user + + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,TEMPRET(1:N,1:NQ)) + WRK(1:N*NQ) = RESHAPE(TEMPRET(1:N,1:NQ),(/N*NQ/)) + WSS(3) = DDOT(N*NQ,WRK,1,WRK,1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,TEMPRET(1:N,1:M)) + WRK(N*NQ+1:N*NQ+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + WSS(2) = DDOT(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + WSS(2) = ZERO + END IF + WSS(1) = WSS(2) + WSS(3) + + ACCESS = .FALSE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + & WORK,LWORK,IWORK,LIWORK, + & ACCESS,ISODR, + & JPVT,OMEGA,U,QRAUX,SD,VCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + & NNZW,NPP, + & JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + & LUNRPT,IPR1,IPR2,IPR2F,IPR3, + & WSS,RVAR,IDF, + & TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + & RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + +C Encode existance of questionable results into info + + IF (INFO.LE.9 .OR. INFO.GE.60000) THEN + IF (MSGB(1).EQ.1 .OR. MSGD(1).EQ.1) THEN + INFO = INFO + 1000 + END IF + IF (ISTOP.NE.0) THEN + INFO = INFO + 100 + END IF + IF (IRANK.GE.1) THEN + IF (NPP.GT.IRANK) THEN + INFO = INFO + 10 + ELSE + INFO = INFO + 20 + END IF + END IF + END IF + +C Print final summary + + IF (IPR3.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 3 + + IF (IPR3.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR3.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR3,2) + END IF + LUNR = LUNRPT + DO 240 I=1,NPR + CALL DODPCR(IPR,LUNR, + & HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + & N,M,NP,NQ,NPP,NNZW, + & MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & IWORK(JPVT),IFIXX,LDIFX, + & LOWER,UPPER, + & SSF,TT,LDTT,STPB,STPD,LDSTPD, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS,RVAR,IDF,WORK(SD), + & NITER,NFEV,NJEV,ACTRED,PRERED, + & TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR3.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 240 CONTINUE + END IF + + RETURN + + END SUBROUTINE +*DODPC1 + SUBROUTINE DODPC1 + & (IPR,LUNRPT, + & ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + & MSGB1,MSGB,MSGD1,MSGD, + & N,M,NP,NQ,NPP,NNZW, + & X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + & Y,LDY,WE,LDWE,LD2WE,PNLTY, + & BETA,IFIXB,SSF,STPB,LOWER,UPPER, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS,WSSDEL,WSSEPS) +C***Begin Prologue DODPC1 +C***Refer to ODR +C***Routines Called DHSTEP +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Generate initial summary report +C***End Prologue DODPC1 + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PARTOL,PNLTY,SSTOL,TAUFAC,WSS,WSSDEL,WSSEPS + INTEGER + & IPR,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + & LUNRPT,M,MAXIT,MSGB1,MSGD1,N,NETA,NNZW,NP,NPP,NQ + LOGICAL + & ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),DELTA(N,M),LOWER(NP),SSF(NP),STPB(NP),STPD(LDSTPD,M), + & TT(LDTT,M),UPPER(NP),WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ), + & X(LDX,M),Y(LDY,NQ) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ,NP),MSGD(NQ,M) + +C...Local scalars + REAL (KIND=R8) + & TEMP1,TEMP2,TEMP3,ZERO + INTEGER + & I,ITEMP,J,JOB1,JOB2,JOB3,JOB4,JOB5,L + +C...Local arrays + CHARACTER TEMPC0*2,TEMPC1*5,TEMPC2*13 + +C...External functions + REAL (KIND=R8) + & DHSTEP + EXTERNAL + & DHSTEP + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the Jacobians are computed +C by finite differences (ANAJAC=FALSE) or not (ANAJAC=TRUE). +C BETA: The function parameters. +C CDJAC: The variable designating whether the Jacobians are computed +C by central differences (CDJAC=TRUE) or forward differences +C (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user supplied +C Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C DELTA: The estimated errors in the explanatory variables. +C DOVCV: The variable designating whether the covariance matrix is +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C I: An indexing variable. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INITD: The variable designating whether DELTA is initialized to +C zero (INITD=TRUE) or to the values in the first N by M +C elements of array WORK (INITD=FALSE). +C IPR: The value indicating the report to be printed. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ITEMP: A temporary integer value. +C J: An indexing variable. +C JOB: The variable controling problem initialization and +C computational method. +C JOB1: The 1st digit (from the left) of variable JOB. +C JOB2: The 2nd digit (from the left) of variable JOB. +C JOB3: The 3rd digit (from the left) of variable JOB. +C JOB4: The 4th digit (from the left) of variable JOB. +C JOB5: The 5th digit (from the left) of variable JOB. +C L: An indexing variable. +C LDIFX: The leading dimension of array IFIXX. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LUNRPT: The logical unit number for the computation reports. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MSGB: The error checking results for the Jacobian wrt beta. +C MSGB1: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C MSGD1: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of accurate digits in the function results. +C A negative value indicates that NETA was estimated by +C ODRPACK95. A positive value indictes the value was supplied +C by the user. +C NNZW: The number of nonzero observational error weights. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observation. +C PARTOL: The parameter convergence stopping tolerance. +C PNLTY: The penalty parameter for an implicit model. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) or not (RESTRT=FALSE). +C SSF: The scaling values for BETA. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C STPB: The relative step used for computing finite difference +C derivatives with respect to BETA. +C STPD: The relative step used for computing finite difference +C derivatives with respect to DELTA. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TEMPC0: A temporary CHARACTER*2 value. +C TEMPC1: A temporary CHARACTER*5 value. +C TEMPC2: A temporary CHARACTER*13 value. +C TEMP1: A temporary REAL (KIND=R8) value. +C TEMP2: A temporary REAL (KIND=R8) value. +C TEMP3: A temporary REAL (KIND=R8) value. +C TT: The scaling values for DELTA. +C WD: The DELTA weights. +C WE: The EPSILON weights. +C WSS: The sum-of-squares of the weighted EPSILONS and DELTAS. +C WSSDEL: The sum-of-squares of the weighted DELTAS. +C WSSEPS: The sum-of-squares of the weighted EPSILONS. +C X: The explanatory variable. +C Y: The response variable. Unused when the model is implicit. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODPC1 + + +C Print problem size specification + + WRITE (LUNRPT,1000) N,NNZW,NQ,M,NP,NPP + + +C Print control values + + JOB1 = JOB/10000 + JOB2 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB4 = MOD(JOB,100)/10 + JOB5 = MOD(JOB,10) + WRITE (LUNRPT,1100) JOB + IF (RESTRT) THEN + WRITE (LUNRPT,1110) JOB1 + ELSE + WRITE (LUNRPT,1111) JOB1 + END IF + IF (ISODR) THEN + IF (INITD) THEN + WRITE (LUNRPT,1120) JOB2 + ELSE + WRITE (LUNRPT,1121) JOB2 + END IF + ELSE + WRITE (LUNRPT,1122) JOB2,JOB5 + END IF + IF (DOVCV) THEN + WRITE (LUNRPT,1130) JOB3 + IF (REDOJ) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + ELSE + WRITE (LUNRPT,1133) JOB3 + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,1140) JOB4 + IF (CHKJAC) THEN + IF (MSGB1.GE.1 .OR. MSGD1.GE.1) THEN + WRITE (LUNRPT,1141) + ELSE + WRITE (LUNRPT,1142) + END IF + ELSE + WRITE (LUNRPT,1143) + END IF + ELSE IF (CDJAC) THEN + WRITE (LUNRPT,1144) JOB4 + ELSE + WRITE (LUNRPT,1145) JOB4 + END IF + IF (ISODR) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1150) JOB5 + ELSE + WRITE (LUNRPT,1151) JOB5 + END IF + ELSE + WRITE (LUNRPT,1152) JOB5 + END IF + IF (NETA.LT.0) THEN + WRITE (LUNRPT,1200) -NETA + ELSE + WRITE (LUNRPT,1210) NETA + END IF + WRITE (LUNRPT,1300) TAUFAC + + +C Print stopping criteria + + WRITE (LUNRPT,1400) SSTOL,PARTOL,MAXIT + + +C Print initial sum of squares + + IF (IMPLCT) THEN + WRITE (LUNRPT,1500) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,1510) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,1600) WSS + IF (ISODR) THEN + WRITE (LUNRPT,1610) WSSDEL,WSSEPS + END IF + END IF + + + IF (IPR.GE.2) THEN + + +C Print function parameter data + + WRITE (LUNRPT,4000) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,4110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,4120) + ELSE + WRITE (LUNRPT,4200) + END IF + DO 130 J=1,NP + IF (IFIXB(1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (IFIXB(J).NE.0) THEN + TEMPC1 = ' NO' + ELSE + TEMPC1 = ' YES' + END IF + END IF + IF (ANAJAC) THEN + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + ITEMP = -1 + DO 110 L=1,NQ + ITEMP = MAX(ITEMP,MSGB(L,J)) + 110 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (SSF(1).LT.ZERO) THEN + TEMP1 = ABS(SSF(1)) + ELSE + TEMP1 = SSF(J) + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,4310) J,BETA(J),TEMPC1,TEMP1,LOWER(J), + & UPPER(J),TEMPC2 + ELSE + IF (CDJAC) THEN + TEMP2 = DHSTEP(1,NETA,1,J,STPB,1) + ELSE + TEMP2 = DHSTEP(0,NETA,1,J,STPB,1) + END IF + WRITE (LUNRPT,4320) J,BETA(J),TEMPC1,TEMP1, + & LOWER(J),UPPER(J),TEMP2 + END IF + 130 CONTINUE + +C Print explanatory variable data + + IF (ISODR) THEN + WRITE (LUNRPT,2010) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,2110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,2120) + ELSE + WRITE (LUNRPT,2130) + END IF + ELSE + WRITE (LUNRPT,2020) + WRITE (LUNRPT,2140) + END IF + IF (ISODR) THEN + DO 240 J = 1,M + TEMPC0 = '1,' + DO 230 I=1,N,N-1 + + IF (IFIXX(1,1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + ELSE + IF (IFIXX(I,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + END IF + END IF + + IF (TT(1,1).LT.ZERO) THEN + TEMP1 = ABS(TT(1,1)) + ELSE + IF (LDTT.EQ.1) THEN + TEMP1 = TT(1,J) + ELSE + TEMP1 = TT(I,J) + END IF + END IF + + IF (WD(1,1,1).LT.ZERO) THEN + TEMP2 = ABS(WD(1,1,1)) + ELSE + IF (LDWD.EQ.1) THEN + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(1,1,J) + ELSE + TEMP2 = WD(1,J,J) + END IF + ELSE + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(I,1,J) + ELSE + TEMP2 = WD(I,J,J) + END IF + END IF + END IF + + IF (ANAJAC) THEN + IF (CHKJAC .AND. + & (((MSGB1.GE.1) .OR. (MSGD1.GE.1)) .AND. + & (I.EQ.1))) THEN + ITEMP = -1 + DO 210 L=1,NQ + ITEMP = MAX(ITEMP,MSGD(L,J)) + 210 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + & TEMPC0,J,X(I,J), + & DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + ELSE + WRITE (LUNRPT,5120) + & TEMPC0,J,X(I,J), + & DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + END IF + ELSE + TEMPC2 = ' ' + IF (CDJAC) THEN + TEMP3 = DHSTEP(1,NETA,I,J,STPD,LDSTPD) + ELSE + TEMP3 = DHSTEP(0,NETA,I,J,STPD,LDSTPD) + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5210) + & TEMPC0,J,X(I,J), + & DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + ELSE + WRITE (LUNRPT,5220) + & TEMPC0,J,X(I,J), + & DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + END IF + END IF + + TEMPC0 = 'N,' + + 230 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 240 CONTINUE + ELSE + + DO 260 J = 1,M + TEMPC0 = '1,' + DO 250 I=1,N,N-1 + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + & TEMPC0,J,X(I,J) + ELSE + WRITE (LUNRPT,5120) + & TEMPC0,J,X(I,J) + END IF + TEMPC0 = 'N,' + 250 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 260 CONTINUE + END IF + +C Print response variable data and observation error weights + + IF (.NOT.IMPLCT) THEN + WRITE (LUNRPT,3000) + WRITE (LUNRPT,3100) + DO 310 L=1,NQ + TEMPC0 = '1,' + DO 300 I=1,N,N-1 + IF (WE(1,1,1).LT.ZERO) THEN + TEMP1 = ABS(WE(1,1,1)) + ELSE IF (LDWE.EQ.1) THEN + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(1,1,L) + ELSE + TEMP1 = WE(1,L,L) + END IF + ELSE + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(I,1,L) + ELSE + TEMP1 = WE(I,L,L) + END IF + END IF + IF (NQ.LE.9) THEN + WRITE (LUNRPT,5110) + & TEMPC0,L,Y(I,L),TEMP1 + ELSE + WRITE (LUNRPT,5120) + & TEMPC0,L,Y(I,L),TEMP1 + END IF + TEMPC0 = 'N,' + 300 CONTINUE + IF (L.LT.NQ) WRITE (LUNRPT,6000) + 310 CONTINUE + END IF + END IF + + RETURN + +C Format statements + + 1000 FORMAT + & (/' --- Problem Size:'/ + & ' N = ',I5, + & ' (number with nonzero weight = ',I5,')'/ + & ' NQ = ',I5/ + & ' M = ',I5/ + & ' NP = ',I5, + & ' (number unfixed = ',I5,')') + 1100 FORMAT + & (/' --- Control Values:'/ + & ' JOB = ',I5.5/ + & ' = ABCDE, where') + 1110 FORMAT + & (' A=',I1,' ==> fit is a restart.') + 1111 FORMAT + & (' A=',I1,' ==> fit is not a restart.') + 1120 FORMAT + & (' B=',I1,' ==> deltas are initialized', + & ' to zero.') + 1121 FORMAT + & (' B=',I1,' ==> deltas are initialized', + & ' by user.') + 1122 FORMAT + & (' B=',I1,' ==> deltas are fixed at', + & ' zero since E=',I1,'.') + 1130 FORMAT + & (' C=',I1,' ==> covariance matrix will', + & ' be computed using') + 1131 FORMAT + & (' derivatives re-', + & 'evaluated at the solution.') + 1132 FORMAT + & (' derivatives from the', + & ' last iteration.') + 1133 FORMAT + & (' C=',I1,' ==> covariance matrix will', + & ' not be computed.') + 1140 FORMAT + & (' D=',I1,' ==> derivatives are', + & ' supplied by user.') + 1141 FORMAT + & (' derivatives were checked.'/ + & ' results appear questionable.') + 1142 FORMAT + & (' derivatives were checked.'/ + & ' results appear correct.') + 1143 FORMAT + & (' derivatives were not', + & ' checked.') + 1144 FORMAT + & (' D=',I1,' ==> derivatives are', + & ' estimated by central', + & ' differences.') + 1145 FORMAT + & (' D=',I1,' ==> derivatives are', + & ' estimated by forward', + & ' differences.') + 1150 FORMAT + & (' E=',I1,' ==> method is implicit ODR.') + 1151 FORMAT + & (' E=',I1,' ==> method is explicit ODR.') + 1152 FORMAT + & (' E=',I1,' ==> method is explicit OLS.') + 1200 FORMAT + & (' NDIGIT = ',I5,' (estimated by ODRPACK95)') + 1210 FORMAT + & (' NDIGIT = ',I5,' (supplied by user)') + 1300 FORMAT + & (' TAUFAC = ',1P,E12.2) + 1400 FORMAT + & (/' --- Stopping Criteria:'/ + & ' SSTOL = ',1P,E12.2, + & ' (sum of squares stopping tolerance)'/ + & ' PARTOL = ',1P,E12.2, + & ' (parameter stopping tolerance)'/ + & ' MAXIT = ',I5, + & ' (maximum number of iterations)') + 1500 FORMAT + & (/' --- Initial Sum of Squared Weighted Deltas =', + & 17X,1P,E17.8) + 1510 FORMAT + & ( ' Initial Penalty Function Value =',1P,E17.8/ + & ' Penalty Term =',1P,E17.8/ + & ' Penalty Parameter =',1P,E10.1) + 1600 FORMAT + & (/' --- Initial Weighted Sum of Squares =', + & 17X,1P,E17.8) + 1610 FORMAT + & ( ' Sum of Squared Weighted Deltas =',1P,E17.8/ + & ' Sum of Squared Weighted Epsilons =',1P,E17.8) + 2010 FORMAT + & (/' --- Explanatory Variable and Delta Weight Summary:') + 2020 FORMAT + & (/' --- Explanatory Variable Summary:') + 2110 FORMAT + & (/' Index X(I,J) DELTA(I,J) Fixed', + & ' Scale Weight Derivative'/ + & ' ', + & ' Assessment'/, + & ' (I,J) (IFIXX)', + & ' (SCLD) (WD) '/) + 2120 FORMAT + & (/' Index X(I,J) DELTA(I,J) Fixed', + & ' Scale Weight '/ + & ' ', + & ' '/, + & ' (I,J) (IFIXX)', + & ' (SCLD) (WD) '/) + 2130 FORMAT + & (/' Index X(I,J) DELTA(I,J) Fixed', + & ' Scale Weight Derivative'/ + & ' ', + & ' Step Size'/, + & ' (I,J) (IFIXX)', + & ' (SCLD) (WD) (STPD)'/) + 2140 FORMAT + & (/' Index X(I,J)'/ + & ' (I,J) '/) + 3000 FORMAT + & (/' --- Response Variable and Epsilon Error Weight', + & ' Summary:') + 3100 FORMAT + & (/' Index Y(I,L) Weight'/ + & ' (I,L) (WE)'/) + 4000 FORMAT + & (/' --- Function Parameter Summary:') + 4110 FORMAT + & (/' Index BETA(K) Fixed Scale LOWER(K)', + & ' UPPER(K) Derivative'/ + & ' ', + & ' Assessment'/, + & ' (K) (IFIXB) (SCLB) ', + & ' '/) + 4120 FORMAT + & (/' Index BETA(K) Fixed Scale LOWER(K)', + & ' UPPER(K) '/ + & ' ', + & ' '/, + & ' (K) (IFIXB) (SCLB) ', + & ' '/) + 4200 FORMAT + & (/' Index BETA(K) Fixed Scale LOWER(K)', + & ' UPPER(K) Derivative'/ + & ' ', + & ' Step Size'/, + & ' (K) (IFIXB) (SCLB) ', + & ' (STPB)'/) + 4310 FORMAT + & (7X,I5,1P,E10.2,4X,A5,E10.2,E11.2E3,E11.2E3,1X,A13) + 4320 FORMAT + & (7X,I5,1P,E10.2,4X,A5,E10.2,E11.2E3,E11.2E3,1X,E13.5) + 5110 FORMAT + & (9X,A2,I1,1P,2E12.3,4X,A5,2E10.2,1X,A13) + 5120 FORMAT + & (8X,A2,I2,1P,2E12.3,4X,A5,2E10.2,1X,A13) + 5210 FORMAT + & (9X,A2,I1,1P,2E12.3,4X,A5,2E10.2,1X,E13.5) + 5220 FORMAT + & (8X,A2,I2,1P,2E12.3,4X,A5,2E10.2,1X,E13.5) + 6000 FORMAT + & (' ') + END SUBROUTINE +*DODPC2 + SUBROUTINE DODPC2 + & (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + & PNLTY, + & NITER,NFEV,WSS,ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) +C***Begin Prologue DODPC2 +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Generate iteration reports +C***End Prologue DODPC2 + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & ACTRED,ALPHA,PNLTY,PNORM,PRERED,TAU,WSS + INTEGER + & IPR,LUNRPT,NFEV,NITER,NP + LOGICAL + & FSTITR,IMPLCT,PRTPEN + +C...Array arguments + REAL (KIND=R8) + & BETA(NP) + +C...Local scalars + REAL (KIND=R8) + & RATIO,ZERO + INTEGER + & J,K,L + CHARACTER GN*3 + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C ACTRED: The actual relative reduction in the sum-of-squares. +C ALPHA: The Levenberg-Marquardt parameter. +C BETA: The function parameters. +C FSTITR: The variable designating whether this is the first +C iteration (FSTITR=.TRUE.) or not (FSTITR=.FALSE.). +C GN: The CHARACTER*3 variable indicating whether a Gauss-Newton +C step was taken. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C IPR: The value indicating the report to be printed. +C J: An indexing variable. +C K: An indexing variable. +C L: An indexing variable. +C LUNRPT: The logical unit number used for computation reports. +C NFEV: The number of function evaluations. +C NITER: The number of iterations. +C NP: The number of function parameters. +C PNLTY: The penalty parameter for an implicit model. +C PNORM: The norm of the scaled estimated parameters. +C PRERED: The predicted relative reduction in the sum-of-squares. +C PRTPEN: The variable designating whether the penalty parameter is +C to be printed in the iteration report (PRTPEN=TRUE) or not +C (PRTPEN=FALSE). +C RATIO: The ratio of TAU to PNORM. +C TAU: The trust region diameter. +C WSS: The sum-of-squares of the weighted EPSILONS and DELTAS. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODPC2 + + + IF (FSTITR) THEN + IF (IPR.EQ.1) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1121) + ELSE + WRITE (LUNRPT,1122) + END IF + ELSE + IF (IMPLCT) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + END IF + END IF + IF (PRTPEN) THEN + WRITE (LUNRPT,1133) PNLTY + END IF + + IF (ALPHA.EQ.ZERO) THEN + GN = 'YES' + ELSE + GN = ' NO' + END IF + IF (PNORM.NE.ZERO) THEN + RATIO = TAU/PNORM + ELSE + RATIO = ZERO + END IF + IF (IPR.EQ.1) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + & RATIO,GN + ELSE + J = 1 + K = MIN(3,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + & RATIO,GN,J,BETA(J) + ELSE + WRITE (LUNRPT,1142) NITER,NFEV,WSS,ACTRED,PRERED, + & RATIO,GN,J,K,(BETA(L),L=J,K) + END IF + IF (NP.GT.3) THEN + DO 10 J=4,NP,3 + K = MIN(J+2,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1151) J,BETA(J) + ELSE + WRITE (LUNRPT,1152) J,K,(BETA(L),L=J,K) + END IF + 10 CONTINUE + END IF + END IF + + RETURN + +C Format statements + + 1121 FORMAT + & (// + & ' Cum. Penalty Act. Rel. Pred. Rel.'/ + & ' It. No. FN Function Sum-of-Sqs Sum-of-Sqs', + & ' G-N'/ + & ' Num. Evals Value Reduction Reduction', + & ' TAU/PNORM Step'/ + & ' ---- ------ ----------- ----------- -----------', + & ' --------- ----') + 1122 FORMAT + & (// + & ' Cum. Act. Rel. Pred. Rel.'/ + & ' It. No. FN Weighted Sum-of-Sqs Sum-of-Sqs', + & ' G-N'/ + & ' Num. Evals Sum-of-Sqs Reduction Reduction', + & ' TAU/PNORM Step'/ + & ' ---- ------ ----------- ----------- -----------', + & ' --------- ----'/) + 1131 FORMAT + & (// + & ' Cum. Penalty Act. Rel. Pred. Rel.'/ + & ' It. No. FN Function Sum-of-Sqs Sum-of-Sqs', + & ' G-N BETA -------------->'/ + & ' Num. Evals Value Reduction Reduction', + & ' TAU/PNORM Step Index Value'/ + & ' ---- ------ ----------- ----------- -----------', + & ' --------- ---- ----- -----') + 1132 FORMAT + & (// + & ' Cum. Act. Rel. Pred. Rel.'/ + & ' It. No. FN Weighted Sum-of-Sqs Sum-of-Sqs', + & ' G-N BETA -------------->'/ + & ' Num. Evals Sum-of-Sqs Reduction Reduction', + & ' TAU/PNORM Step Index Value'/ + & ' ---- ------ ----------- ----------- -----------', + & ' --------- ---- ----- -----'/) + 1133 FORMAT + & (/' Penalty Parameter Value = ', 1P,E10.1) + 1141 FORMAT + & (1X,I4,I8,1X,1P,E12.5,2E13.4,E11.3,3X,A3,7X,I3,3E16.8) + 1142 FORMAT + & (1X,I4,I8,1X,1P,E12.5,2E13.4,E11.3,3X,A3,1X,I3,' To',I3,3E16.8) + 1151 FORMAT + & (76X,I3,1P,E16.8) + 1152 FORMAT + & (70X,I3,' To',I3,1P,3E16.8) + END SUBROUTINE +*DODPC3 + SUBROUTINE DODPC3 + & (IPR,LUNRPT, + & ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + & N,M,NP,NQ,NPP, + & INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + & WSS,WSSDEL,WSSEPS,PNLTY,RVAR,IDF, + & BETA,SDBETA,IFIXB2,F,DELTA, + & LOWER,UPPER) +C***Begin Prologue DODPC3 +C***Refer to ODR +C***Routines Called DPPT +C***Date Written 860529 (YYMMDD) +C***REvision Date 920619 (YYMMDD) +C***Purpose Generate final summary report +C***End Prologue DODPC3 + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PNLTY,RCOND,RVAR,WSS,WSSDEL,WSSEPS + INTEGER + & IDF,INFO,IPR,IRANK,ISTOP,LUNRPT,M, + & N,NFEV,NITER,NJEV,NP,NPP,NQ + LOGICAL + & ANAJAC,DIDVCV,DOVCV,IMPLCT,ISODR,REDOJ + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),DELTA(N,M),F(N,NQ),LOWER(NP),UPPER(NP),SDBETA(NP) + INTEGER + & IFIXB2(NP) + +C...Local scalars + REAL (KIND=R8) + & TVAL + INTEGER + & D1,D2,D3,D4,D5,I,J,K,L,NPLM1 + CHARACTER FMT1*90 + +C...External functions + REAL (KIND=R8) + & DPPT + EXTERNAL + & DPPT + +C...Variable Definitions (alphabetically) +C ANAJAC: The variable designating whether the JACOBIANS are computed +c by finite differences (ANAJAC=FALSE) or not (ANAJAC=TRUE). +C BETA: The function parameters. +C D1: The first digit of INFO. +C D2: The second digit of INFO. +C D3: The third digit of INFO. +C D4: The fourth digit of INFO. +C D5: The fifth digit of INFO. +C DELTA: The estimated errors in the explanatory variables. +C DIDVCV: The variable designating whether the covariance matrix was +C computed (DIDVCV=TRUE) or not (DIDVCV=FALSE). +C DOVCV: The variable designating whether the covariance matrix was +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C F: The estimated values of EPSILON. +C FMT1: A CHARACTER*90 variable used for formats. +C I: An indexing variable. +C IDF: The degrees of freedom of the fit, equal to the number of +C observations with nonzero weighted derivatives minus the +C number of parameters being estimated. +C IFIXB2: The values designating whether the elements of BETA were +C estimated, fixed, or dropped because they caused rank +C deficiency, corresponding to values of IFIXB2 equaling 1, +C 0, and -1, respectively. If IFIXB2 is -2, then no attempt +C was made to estimate the parameters because MAXIT = 0. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C IPR: The variable indicating what is to be printed. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C J: An indexing variable. +C K: An indexing variable. +C L: An indexing variable. +C LOWER: Lower bound on BETA. +C LUNRPT: The logical unit number used for computation reports. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NITER: The number of iterations. +C NJEV: The number of Jacobian evaluations. +C NP: The number of function parameters. +C NPLM1: The number of items to be printed per line, minus one. +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observation. +C PNLTY: The penalty parameter for an implicit model. +C RCOND: The approximate reciprocal condition of TFJACB. +C REDOJ: The variable designating whether the Jacobian matrix is +C to be recomputed for the computation of the covariance +C matrix (REDOJ=TRUE) or not (REDOJ=FALSE). +C RVAR: The residual variance. +C SDBETA: The standard errors of the estimated parameters. +C TVAL: The value of the 97.5 percent point function for the +C T distribution. +C UPPER: Upper bound on BETA. +C WSS: The sum-of-squares of the weighted EPSILONS and DELTAS. +C WSSDEL: The sum-of-squares of the weighted DELTAS. +C WSSEPS: The sum-of-squares of the weighted EPSILONS. + + +C***First executable statement DODPC3 + + + D1 = INFO/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C Print stopping conditions + + WRITE (LUNRPT,1000) + IF (INFO.LE.9) THEN + IF (INFO.EQ.1) THEN + WRITE (LUNRPT,1011) INFO + ELSE IF (INFO.EQ.2) THEN + WRITE (LUNRPT,1012) INFO + ELSE IF (INFO.EQ.3) THEN + WRITE (LUNRPT,1013) INFO + ELSE IF (INFO.EQ.4) THEN + WRITE (LUNRPT,1014) INFO + ELSE IF (INFO.LE.9) THEN + WRITE (LUNRPT,1015) INFO + END IF + ELSE IF (INFO.LE.9999) THEN + +C Print warning diagnostics + + WRITE (LUNRPT,1020) INFO + IF (D2.EQ.1) WRITE (LUNRPT,1021) + IF (D3.EQ.1) WRITE (LUNRPT,1022) + IF (D4.EQ.1) WRITE (LUNRPT,1023) + IF (D4.EQ.2) WRITE (LUNRPT,1024) + IF (D5.EQ.1) THEN + WRITE (LUNRPT,1031) + ELSE IF (D5.EQ.2) THEN + WRITE (LUNRPT,1032) + ELSE IF (D5.EQ.3) THEN + WRITE (LUNRPT,1033) + ELSE IF (D5.EQ.4) THEN + WRITE (LUNRPT,1034) + ELSE IF (D5.LE.9) THEN + WRITE (LUNRPT,1035) D5 + END IF + ELSE + +C Print error messages + + WRITE (LUNRPT,1040) INFO + IF (D1.EQ.5) THEN + WRITE (LUNRPT,1042) + IF (D2.NE.0) WRITE (LUNRPT,1043) D2 + IF (D3.EQ.3) THEN + WRITE (LUNRPT,1044) D3 + ELSE IF (D3.NE.0) THEN + WRITE (LUNRPT,1045) D3 + END IF + ELSE IF (D1.EQ.6) THEN + WRITE (LUNRPT,1050) + ELSE + WRITE (LUNRPT,1060) D1 + END IF + END IF + +C Print misc. stopping info + + WRITE (LUNRPT,1300) NITER + WRITE (LUNRPT,1310) NFEV + IF (ANAJAC) WRITE (LUNRPT,1320) NJEV + WRITE (LUNRPT,1330) IRANK + WRITE (LUNRPT,1340) RCOND + WRITE (LUNRPT,1350) ISTOP + +C Print final sum of squares + + IF (IMPLCT) THEN + WRITE (LUNRPT,2000) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,2010) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,2100) WSS + IF (ISODR) THEN + WRITE (LUNRPT,2110) WSSDEL,WSSEPS + END IF + END IF + IF (DIDVCV) THEN + WRITE (LUNRPT,2200) SQRT(RVAR),IDF + END IF + + NPLM1 = 3 + +C Print estimated BETA's, and, +C if, full rank, their standard errors + + WRITE (LUNRPT,3000) + IF (DIDVCV) THEN + WRITE (LUNRPT,7300) + TVAL = DPPT(0.975E0_R8,IDF) + DO 10 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8400) J,BETA(J), + & LOWER(J),UPPER(J), + & SDBETA(J), + & BETA(J)-TVAL*SDBETA(J), + & BETA(J)+TVAL*SDBETA(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J),LOWER(J),UPPER(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J),LOWER(J),UPPER(J) + END IF + 10 CONTINUE + IF (.NOT.REDOJ) WRITE (LUNRPT,7310) + ELSE + IF (DOVCV) THEN + IF (D1.LE.5) THEN + WRITE (LUNRPT,7410) + ELSE + WRITE (LUNRPT,7420) + END IF + END IF + + IF ((IRANK.EQ.0 .AND. NPP.EQ.NP) .OR. NITER.EQ.0) THEN + IF (NP.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 20 J=1,NP,NPLM1+1 + K = MIN(J+NPLM1,NP) + IF (K.EQ.J) THEN + WRITE (LUNRPT,8100) J,BETA(J) + ELSE + WRITE (LUNRPT,8200) J,K,(BETA(L),L=J,K) + END IF + 20 CONTINUE + IF (NITER.GE.1) THEN + WRITE (LUNRPT,8800) + ELSE + WRITE (LUNRPT,8900) + END IF + ELSE + WRITE (LUNRPT,7500) + DO 30 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8500) J,BETA(J),LOWER(J),UPPER(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J),LOWER(J),UPPER(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J),LOWER(J),UPPER(J) + END IF + 30 CONTINUE + END IF + END IF + + IF (IPR.EQ.1) RETURN + + +C Print EPSILON's and DELTA's together in a column if the number of +C columns of data in EPSILON and DELTA is less than or equal to three. + + IF (IMPLCT .AND. (M.LE.4)) THEN + WRITE (LUNRPT,4100) + WRITE (FMT1,9110) M + WRITE (LUNRPT,FMT1) (J,J=1,M) + DO 40 I=1,N + WRITE (LUNRPT,4130) I,(DELTA(I,J),J=1,M) + 40 CONTINUE + + ELSE IF (ISODR .AND. (NQ+M.LE.4)) THEN + WRITE (LUNRPT,4110) + WRITE (FMT1,9120) NQ,M + WRITE (LUNRPT,FMT1) (L,L=1,NQ),(J,J=1,M) + DO 50 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ),(DELTA(I,J),J=1,M) + 50 CONTINUE + + ELSE IF (.NOT.ISODR .AND. ((NQ.GE.2) .AND. (NQ.LE.4))) THEN + WRITE (LUNRPT,4120) + WRITE (FMT1,9130) NQ + WRITE (LUNRPT,FMT1) (L,L=1,NQ) + DO 60 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ) + 60 CONTINUE + ELSE + +C Print EPSILON's and DELTA's separately + + IF (.NOT.IMPLCT) THEN + +C Print EPSILON'S + + DO 80 J=1,NQ + WRITE (LUNRPT,4200) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 70 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,F(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(F(L,J),L=I,K) + END IF + 70 CONTINUE + 80 CONTINUE + END IF + +C Print DELTA'S + + IF (ISODR) THEN + DO 100 J=1,M + WRITE (LUNRPT,4300) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 90 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,DELTA(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(DELTA(L,J),L=I,K) + END IF + 90 CONTINUE + 100 CONTINUE + END IF + END IF + + RETURN + +C Format statements + + 1000 FORMAT + & (/' --- Stopping Conditions:') + 1011 FORMAT + & (' INFO = ',I5,' ==> sum of squares convergence.') + 1012 FORMAT + & (' INFO = ',I5,' ==> parameter convergence.') + 1013 FORMAT + & (' INFO = ',I5,' ==> sum of squares convergence and', + & ' parameter convergence.') + 1014 FORMAT + & (' INFO = ',I5,' ==> iteration limit reached.') + 1015 FORMAT + & (' INFO = ',I5,' ==> unexpected value,', + & ' probably indicating'/ + & ' incorrectly specified', + & ' user input.') + 1020 FORMAT + & (' INFO = ',I5.4/ + & ' = ABCD, where a nonzero value for digit A,', + & ' B, or C indicates why'/ + & ' the results might be questionable,', + & ' and digit D indicates'/ + & ' the actual stopping condition.') + 1021 FORMAT + & (' A=1 ==> derivatives are', + & ' questionable.') + 1022 FORMAT + & (' B=1 ==> user set ISTOP to', + & ' nonzero value during last'/ + & ' call to subroutine FCN.') + 1023 FORMAT + & (' C=1 ==> derivatives are not', + & ' full rank at the solution.') + 1024 FORMAT + & (' C=2 ==> derivatives are zero', + & ' rank at the solution.') + 1031 FORMAT + & (' D=1 ==> sum of squares convergence.') + 1032 FORMAT + & (' D=2 ==> parameter convergence.') + 1033 FORMAT + & (' D=3 ==> sum of squares convergence', + & ' and parameter convergence.') + 1034 FORMAT + & (' D=4 ==> iteration limit reached.') + 1035 FORMAT + & (' D=',I1,' ==> unexpected value,', + & ' probably indicating'/ + & ' incorrectly specified', + & ' user input.') + 1040 FORMAT + & (' INFO = ',I5.5/ + & ' = ABCDE, where a nonzero value for a given', + & ' digit indicates an'/ + & ' abnormal stopping condition.') + 1042 FORMAT + & (' A=5 ==> user stopped computations', + & ' in subroutine FCN.') + 1043 FORMAT + & (' B=',I1,' ==> computations were', + & ' stopped during the'/ + & ' function evaluation.') + 1044 FORMAT + & (' C=',I1,' ==> computations were', + & ' stopped because'/ + & ' derivatives with', + & ' respect to delta were'/ + & ' computed by', + & ' subroutine FCN when'/ + & ' fit is OLS.') + 1045 FORMAT + & (' C=',I1,' ==> computations were', + & ' stopped during the'/ + & ' jacobian evaluation.') + 1050 FORMAT + & (' A=6 ==> numerical instabilities', + & ' have been detected,'/ + & ' possibly indicating', + & ' a discontinuity in the'/ + & ' derivatives or a poor', + & ' poor choice of problem'/ + & ' scale or weights.') + 1060 FORMAT + & (' A=',I1,' ==> unexpected value,', + & ' probably indicating'/ + & ' incorrectly specified', + & ' user input.') + 1300 FORMAT + & (' NITER = ',I5, + & ' (number of iterations)') + 1310 FORMAT + & (' NFEV = ',I5, + & ' (number of function evaluations)') + 1320 FORMAT + & (' NJEV = ',I5, + & ' (number of jacobian evaluations)') + 1330 FORMAT + & (' IRANK = ',I5, + & ' (rank deficiency)') + 1340 FORMAT + & (' RCOND = ',1P,E12.2, + & ' (inverse condition number)') +*1341 FORMAT +* + (' ==> POSSIBLY FEWER THAN 2 SIGNIFICANT', +* + ' DIGITS IN RESULTS;'/ +* + ' SEE ODRPACK95 REFERENCE', +* + ' GUIDE, SECTION 4.C.') + 1350 FORMAT + & (' ISTOP = ',I5, + & ' (returned by user from', + & ' subroutine FCN)') + 2000 FORMAT + & (/' --- Final Sum of Squared Weighted Deltas = ', + & 17X,1P,E17.8) + 2010 FORMAT + & ( ' Final Penalty Function Value = ',1P,E17.8/ + & ' Penalty Term = ',1P,E17.8/ + & ' Penalty Parameter = ',1P,E10.1) + 2100 FORMAT + & (/' --- Final Weighted Sums of Squares = ',17X,1P,E17.8) + 2110 FORMAT + & ( ' Sum of Squared Weighted Deltas = ',1P,E17.8/ + & ' Sum of Squared Weighted Epsilons = ',1P,E17.8) + 2200 FORMAT + & (/' --- Residual Standard Deviation = ', + & 17X,1P,E17.8/ + & ' Degrees of Freedom =',I5) + 3000 FORMAT + & (/' --- Estimated BETA(J), J = 1, ..., NP:') + 4100 FORMAT + & (/' --- Estimated DELTA(I,*), I = 1, ..., N:') + 4110 FORMAT + & (/' --- Estimated EPSILON(I) and DELTA(I,*), I = 1, ..., N:') + 4120 FORMAT + & (/' --- Estimated EPSILON(I), I = 1, ..., N:') + 4130 FORMAT(5X,I5,1P,5E16.8) + 4200 FORMAT + & (/' --- Estimated EPSILON(I,',I3,'), I = 1, ..., N:') + 4300 FORMAT + & (/' --- Estimated DELTA(I,',I3,'), I = 1, ..., N:') + 7100 FORMAT + & (/' Index Value'/) + 7200 FORMAT + & (/' Index Value -------------->'/) + 7300 FORMAT + & (/' BETA LOWER UPPER S.D. ', + & ' ___ 95% Confidence ___'/ + & ' BETA ', + & ' Interval'/) + 7310 FORMAT + & (/' N.B. standard errors and confidence intervals are', + & ' computed using'/ + & ' derivatives calculated at the beginning', + & ' of the last iteration,'/ + & ' and not using derivatives re-evaluated at the', + & ' final solution.') + 7410 FORMAT + & (/' N.B. the standard errors of the estimated betas were', + & ' not computed because'/ + & ' the derivatives were not available. Either MAXIT', + & ' is 0 and the third'/ + & ' digit of JOB is greater than 1, or the most', + & ' recently tried values of'/ + & ' BETA and/or X+DELTA were identified as', + & ' unacceptable by user supplied'/ + & ' subroutine FCN.') + 7420 FORMAT + & (/' N.B. the standard errors of the estimated betas were', + & ' not computed.'/ + & ' (see info above.)') + 7500 FORMAT + & (/' BETA Status') + 8100 FORMAT + & (11X,I5,1P,E16.8) + 8200 FORMAT + & (3X,I5,' to',I5,1P,7E16.8) + 8400 FORMAT + & (3X,I5,1X,1P,E16.8,1X,E10.2,E10.2,E10.2,1X,E10.2,1X,'to',E10.2) + 8500 FORMAT + & (3X,I5,1X,1P,E16.8,1X,E10.2,E10.2,4X,'Estimated') + 8600 FORMAT + & (3X,I5,1X,1P,E16.8,1X,E10.2,E10.2,4X,' Fixed') + 8700 FORMAT + & (3X,I5,1X,1P,E16.8,1X,E10.2,E10.2,4X,' Dropped') + 8800 FORMAT + & (/' N.B. no parameters were fixed by the user or', + & ' dropped at the last'/ + & ' iteration because they caused the model to be', + & ' rank deficient.') + 8900 FORMAT + & (/' N.B. no change was made to the user supplied parameter', + & ' values because'/ + & ' MAXIT=0.') + 9110 FORMAT + & ('(/'' I'',', + & I2,'('' DELTA(I,'',I1,'')'')/)') + 9120 FORMAT + & ('(/'' I'',', + & I2,'('' EPSILON(I,'',I1,'')''),', + & I2,'('' DELTA(I,'',I1,'')'')/)') + 9130 FORMAT + & ('(/'' I'',', + & I2,'('' EPSILON(I,'',I1,'')'')/)') + + END SUBROUTINE +*DODPCR + SUBROUTINE DODPCR + & (IPR,LUNRPT, + & HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + & N,M,NP,NQ,NPP,NNZW, + & MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + & WE,LDWE,LD2WE,WD,LDWD,LD2WD, + & IFIXB,IFIXX,LDIFX, + & LOWER,UPPER, + & SSF,TT,LDTT,STPB,STPD,LDSTPD, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS,RVAR,IDF,SDBETA, + & NITER,NFEV,NJEV,ACTRED,PRERED, + & TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) +C***Begin Prologue DODPCR +C***Refer to ODR +C***Routines Called DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Generate computation reports +C***End Prologue DODPCR + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & ACTRED,ALPHA,PARTOL,PNORM,PRERED,RCOND,RVAR, + & SSTOL,TAU,TAUFAC + INTEGER + & IDF,IFLAG,INFO,IPR,IRANK,ISTOP,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE, + & LDX,LDY,LD2WD,LD2WE,LUNRPT,M,MAXIT,N,NETA,NFEV, + & NITER,NJEV,NNZW,NP,NPP,NQ + LOGICAL + & DIDVCV,FSTITR,HEAD,PRTPEN + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),DELTA(N,M),F(N,NQ),LOWER(NP),SDBETA(NP),SSF(NP), + & STPB(NP),STPD(LDSTPD,M),TT(LDTT,M),UPPER(NP), + & WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WSS(3),X(LDX,M),Y(LDY,NQ) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...Local scalars + REAL (KIND=R8) + & PNLTY + LOGICAL + & ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + CHARACTER TYP*3 + +C...External subroutines + EXTERNAL + & DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD + +C...Variable Definitions (alphabetically) +C ACTRED: The actual relative reduction in the sum-of-squares. +C ALPHA: The Levenberg-Marquardt parameter. +C ANAJAC: The variable designating whether the Jacobians are computed +C by finite differences (ANAJAC=FALSE) or not (ANAJAC=TRUE). +C BETA: The function parameters. +C CDJAC: The variable designating whether the jacobians are computed +C by central differences (CDJAC=TRUE) or by forward +C differences (CDJAC=FALSE). +C CHKJAC: The variable designating whether the user supplied +C Jacobians are to be checked (CHKJAC=TRUE) or not +C (CHKJAC=FALSE). +C DELTA: The estimated errors in the explanatory variables. +C DIDVCV: The variable designating whether the covariance matrix was +C computed (DIDVCV=TRUE) or not (DIDVCV=FALSE). +C DOVCV: The variable designating whether the covariance matrix is +C to be computed (DOVCV=TRUE) or not (DOVCV=FALSE). +C F: The (weighted) estimated values of EPSILON. +C FSTITR: The variable designating whether this is the first +C iteration (FSTITR=TRUE) or not (FSTITR=FALSE). +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=TRUE) or not (HEAD=FALSE). +C IDF: The degrees of freedom of the fit, equal to the number of +C observations with nonzero weighted derivatives minus the +C number of parameters being estimated. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C IFLAG: The variable designating what is to be printed. +C IMPLCT: The variable designating whether the solution is by +C implicit ODR (IMPLCT=TRUE) or explicit ODR (IMPLCT=FALSE). +C INFO: The variable designating why the computations were stopped. +C INITD: The variable designating whether DELTA is initialized to +C zero (INITD=TRUE) or to the values in the first N by M +C elements of array WORK (INITD=FALSE). +C IPR: The value indicating the report to be printed. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C JOB: The variable controling problem initialization and +C computational method. +C LDIFX: The leading dimension of array IFIXX. +C LDSTPD: The leading dimension of array STPD. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LOWER: Lower bound on BETA. +C LUNRPT: The logical unit number for computation reports. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MSGB: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of accurate digits in the function results. +C NFEV: The number of function evaluations. +C NITER: The number of iterations. +C NJEV: The number of Jacobian evaluations. +C NNZW: The number of nonzero weighted observations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NPP: The number of function parameters being estimated. +C PARTOL: The parameter convergence stopping tolerance. +C PNLTY: The penalty parameter for an implicit model. +C PNORM: The norm of the scaled estimated parameters. +C PRERED: The predicted relative reduction in the sum-of-squares. +C PRTPEN: The variable designating whether the penalty parameter is +C to be printed in the iteration report (PRTPEN=TRUE) or not +C (PRTPEN=FALSE). +C RCOND: The approximate reciprocal condition number of TFJACB. +C REDOJ: The variable designating whether the Jacobian matrix is to +C be recomputed for the computation of the covariance matrix +C (REDOJ=TRUE) or not (REDOJ=FALSE). +C RESTRT: The variable designating whether the call is a restart +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RVAR: The residual variance. +C SDBETA: The standard deviations of the estimated BETA'S. +C SSF: The scaling values for BETA. +C SSTOL: The sum-of-squares convergence stopping tolerance. +C STPB: The relative step for computing finite difference +C derivatives with respect to BETA. +C STPD: The relative step for computing finite difference +C derivatives with respect to DELTA. +C TAU: The trust region diameter. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C TT: The scaling values for DELTA. +C TYP: The CHARACTER*3 string "ODR" or "OLS". +C UPPER: Upper bound on BETA. +C WE: The EPSILON weights. +C WD: The DELTA weights. +C WSS: The sum-of-squares of the weighted EPSILONS and DELTAS, +C the sum-of-squares of the weighted DELTAS, and +C the sum-of-squares of the weighted EPSILONS. +C X: The explanatory variable. +C Y: The dependent variable. Unused when the model is implicit. + + +C***First executable statement DODPCR + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + & ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + PNLTY = ABS(WE(1,1,1)) + + IF (HEAD) THEN + CALL DODPHD(HEAD,LUNRPT) + END IF + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + +C Print initial summary + + IF (IFLAG.EQ.1) THEN + WRITE (LUNRPT,1200) TYP + CALL DODPC1 + & (IPR,LUNRPT, + & ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + & MSGB(1),MSGB(2),MSGD(1),MSGD(2), + & N,M,NP,NQ,NPP,NNZW, + & X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + & Y,LDY,WE,LDWE,LD2WE,PNLTY, + & BETA,IFIXB,SSF,STPB,LOWER,UPPER, + & JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + & WSS(1),WSS(2),WSS(3)) + +C Print iteration reports + + ELSE IF (IFLAG.EQ.2) THEN + + IF (FSTITR) THEN + WRITE (LUNRPT,1300) TYP + END IF + CALL DODPC2 + & (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + & PNLTY, + & NITER,NFEV,WSS(1),ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) + +C Print final summary + + ELSE IF (IFLAG.EQ.3) THEN + + WRITE (LUNRPT,1400) TYP + CALL DODPC3 + & (IPR,LUNRPT, + & ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + & N,M,NP,NQ,NPP, + & INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + & WSS(1),WSS(2),WSS(3),PNLTY,RVAR,IDF, + & BETA,SDBETA,IFIXB,F,DELTA,LOWER,UPPER) + END IF + + RETURN + +C Format statements + + 1200 FORMAT + & (/' *** Initial summary for fit by method of ',A3, ' ***') + 1300 FORMAT + & (/' *** Iteration reports for fit by method of ',A3, ' ***') + 1400 FORMAT + & (/' *** Final summary for fit by method of ',A3, ' ***') + + END SUBROUTINE +*DODPE1 + SUBROUTINE DODPE1 + & (UNIT,INFO,D1,D2,D3,D4,D5, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LWKMN,LIWKMN) +C***Begin Prologue DODPE1 +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Print error reports +C***End Prologue DODPE1 + +C...Scalar arguments + INTEGER + & D1,D2,D3,D4,D5,INFO,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE, + & LIWKMN,LWKMN,M,N,NQ,UNIT + +C...Variable Definitions (alphabetically) +C D1: The 1st digit (from the left) of INFO. +C D2: The 2nd digit (from the left) of INFO. +C D3: The 3rd digit (from the left) of INFO. +C D4: The 4th digit (from the left) of INFO. +C D5: The 5th digit (from the left) of INFO. +C INFO: The variable designating why the computations were stopped. +C LDSCLD: The leading dimension of array SCLD. +C LDSTPD: The leading dimension of array STPD. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LIWKMN: The minimum acceptable length of array IWORK. +C LWKMN: The minimum acceptable length of array WORK. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NQ: The number of responses per observation. +C UNIT: The logical unit number used for error messages. + + +C***First executable statement DODPE1 + + +C Print appropriate messages for errors in problem specification +C parameters + + IF (D1.EQ.1) THEN + IF (D2.NE.0) THEN + WRITE(UNIT,1100) + END IF + IF (D3.NE.0) THEN + WRITE(UNIT,1200) + END IF + IF (D4.NE.0) THEN + WRITE(UNIT,1300) + END IF + IF (D5.NE.0) THEN + WRITE(UNIT,1400) + END IF + +C Print appropriate messages for errors in dimension specification +C parameters + + ELSE IF (D1.EQ.2) THEN + + IF (D2.NE.0) THEN + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + WRITE(UNIT,2110) + END IF + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + WRITE(UNIT,2120) + END IF + END IF + + IF (D3.NE.0) THEN + IF (D3.EQ.1 .OR. D3.EQ.3 .OR. D3.EQ.5 .OR. D3.EQ.7) THEN + WRITE(UNIT,2210) + END IF + IF (D3.EQ.2 .OR. D3.EQ.3 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2220) + END IF + IF (D3.EQ.4 .OR. D3.EQ.5 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2230) + END IF + END IF + + IF (D4.NE.0) THEN + IF (D4.EQ.1 .OR. D4.EQ.3) THEN + WRITE(UNIT,2310) + END IF + IF (D4.EQ.2 .OR. D4.EQ.3) THEN + WRITE(UNIT,2320) + END IF + END IF + + IF (D5.NE.0) THEN + IF (D5.EQ.1 .OR. D5.EQ.3) THEN + WRITE(UNIT,2410) LWKMN + END IF + IF (D5.EQ.2 .OR. D5.EQ.3) THEN + WRITE(UNIT,2420) LIWKMN + END IF + END IF + + ELSE IF (D1.EQ.3) THEN + +C Print appropriate messages for errors in scale values + + IF (D3.NE.0) THEN + IF (D3.EQ.2 .OR. D3.EQ.3) THEN + IF (LDSCLD.GE.N) THEN + WRITE(UNIT,3110) + ELSE + WRITE(UNIT,3120) + END IF + END IF + IF (D3.EQ.1 .OR. D3.EQ.3) THEN + WRITE(UNIT,3130) + END IF + END IF + +C Print appropriate messages for errors in derivative step values + + IF (D2.NE.0) THEN + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + IF (LDSTPD.GE.N) THEN + WRITE(UNIT,3210) + ELSE + WRITE(UNIT,3220) + END IF + END IF + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + WRITE(UNIT,3230) + END IF + END IF + +C Print appropriate messages for errors in observational error weights + + IF (D4.NE.0) THEN + IF (D4.EQ.1) THEN + IF (LDWE.GE.N) THEN + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3310) + ELSE + WRITE(UNIT,3320) + END IF + ELSE + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3410) + ELSE + WRITE(UNIT,3420) + END IF + END IF + END IF + IF (D4.EQ.2) THEN + WRITE(UNIT,3500) + END IF + END IF + +C Print appropriate messages for errors in DELTA weights + + IF (D5.NE.0) THEN + IF (LDWD.GE.N) THEN + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4310) + ELSE + WRITE(UNIT,4320) + END IF + ELSE + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4410) + ELSE + WRITE(UNIT,4420) + END IF + END IF + END IF + + ELSE IF (D1.EQ.7) THEN + +C Print the appropriate messages for errors in JOB + + IF (D2.NE.0) THEN + WRITE(UNIT,5000) + END IF + + IF (D3.NE.0) THEN + WRITE(UNIT,5100) + END IF + + IF (D4.NE.0) THEN + WRITE(UNIT,5200) + END IF + + ELSE IF (D1.EQ.8) THEN + +C Print the appropriate messages for errors in array allocation + + IF (D2.NE.0) THEN + WRITE(UNIT,7200) + END IF + + IF (D3.NE.0) THEN + WRITE(UNIT,7300) + END IF + + IF (D4.NE.0) THEN + WRITE(UNIT,7400) + END IF + + ELSE IF (D1.EQ.9) THEN + +C Print the appropriate messages for errors in bounds + + IF (D2.NE.0) THEN + WRITE(UNIT,6000) + END IF + + IF (D3.NE.0) THEN + WRITE(UNIT,6100) + END IF + + IF (D4.EQ.1) THEN + WRITE(UNIT,6210) + END IF + + IF (D4.EQ.2) THEN + WRITE(UNIT,6220) + END IF + + END IF + +C Print error messages for array sizes incorrect + + IF (INFO/100000.EQ.1) THEN + INFO = INFO - 100000 + IF (INFO.GE.32768) THEN + INFO = INFO - 32768 + WRITE(UNIT,8015) + END IF + IF (INFO.GE.16384) THEN + INFO = INFO - 16384 + WRITE(UNIT,8014) + END IF + IF (INFO.GE.8192) THEN + INFO = INFO - 8192 + WRITE(UNIT,8013) + END IF + IF (INFO.GE.4096) THEN + INFO = INFO - 4096 + WRITE(UNIT,8012) + END IF + IF (INFO.GE.2048) THEN + INFO = INFO - 2048 + WRITE(UNIT,8011) + END IF + IF (INFO.GE.1024) THEN + INFO = INFO - 1024 + WRITE(UNIT,8010) + END IF + IF (INFO.GE.512) THEN + INFO = INFO - 512 + WRITE(UNIT,8009) + END IF + IF (INFO.GE.256) THEN + INFO = INFO - 256 + WRITE(UNIT,8008) + END IF + IF (INFO.GE.128) THEN + INFO = INFO - 128 + WRITE(UNIT,8007) + END IF + IF (INFO.GE.64) THEN + INFO = INFO - 64 + WRITE(UNIT,8006) + END IF + IF (INFO.GE.32) THEN + INFO = INFO - 32 + WRITE(UNIT,8005) + END IF + IF (INFO.GE.16) THEN + INFO = INFO - 16 + WRITE(UNIT,8004) + END IF + IF (INFO.GE.8) THEN + INFO = INFO - 8 + WRITE(UNIT,8003) + END IF + IF (INFO.GE.4) THEN + INFO = INFO - 4 + WRITE(UNIT,8002) + END IF + IF (INFO.GE.2) THEN + INFO = INFO - 2 + WRITE(UNIT,8001) + END IF + IF (INFO.GE.1) THEN + INFO = INFO - 1 + WRITE(UNIT,8000) + END IF + END IF + +C Format statements + + 1100 FORMAT + & (/' ERROR : N is less than one.') + 1200 FORMAT + & (/' ERROR : M is less than one.') + 1300 FORMAT + & (/' ERROR : NP is less than one'/ + & ' or NP is greater than N.') + 1400 FORMAT + & (/' ERROR : NQ is less than one.') + 2110 FORMAT + & (/' ERROR : LDX is less than N.') + 2120 FORMAT + & (/' ERROR : LDY is less than N.') + 2210 FORMAT + & (/' ERROR : LDIFX is less than N'/ + & ' and LDIFX is not equal to one.') + 2220 FORMAT + & (/' ERROR : LDSCLD is less than N'/ + & ' and LDSCLD is not equal to one.') + 2230 FORMAT + & (/' ERROR : LDSTPD is less than N'/ + & ' and LDSTPD is not equal to one.') + 2310 FORMAT + & (/' ERROR : LDWE is less than N'/ + & ' and LDWE is not equal to one or'/ + & ' or'/ + & ' LD2WE is less than NQ'/ + & ' and LD2WE is not equal to one.') + 2320 FORMAT + & (/' ERROR : LDWD is less than N'/ + & ' and LDWD is not equal to one.') + 2410 FORMAT + & (/' ERROR : LWORK is less than ',I7, ','/ + & ' the smallest acceptable dimension of array WORK.') + 2420 FORMAT + & (/' ERROR : LIWORK is less than ',I7, ','/ + & ' the smallest acceptable dimension of array', + & ' IWORK.') + 3110 FORMAT + & (/' ERROR : SCLD(I,J) is less than or equal to zero'/ + & ' for some I = 1, ..., N and J = 1, ..., M.'// + & ' when SCLD(1,1) is greater than zero'/ + & ' and LDSCLD is greater than or equal to N then'/ + & ' each of the N by M elements of'/ + & ' SCLD must be greater than zero.') + 3120 FORMAT + & (/' ERROR : SCLD(1,J) is less than or equal to zero'/ + & ' for some J = 1, ..., M.'// + & ' when SCLD(1,1) is greater than zero'/ + & ' and LDSCLD is equal to one then'/ + & ' each of the 1 by M elements of'/ + & ' SCLD must be greater than zero.') + 3130 FORMAT + & (/' ERROR : SCLB(K) is less than or equal to zero'/ + & ' for some K = 1, ..., NP.'// + & ' all NP elements of', + & ' SCLB must be greater than zero.') + 3210 FORMAT + & (/' ERROR : STPD(I,J) is less than or equal to zero'/ + & ' for some I = 1, ..., N and J = 1, ..., M.'// + & ' when STPD(1,1) is greater than zero'/ + & ' and LDSTPD is greater than or equal to N then'/ + & ' each of the N by M elements of'/ + & ' STPD must be greater than zero.') + 3220 FORMAT + & (/' ERROR : STPD(1,J) is less than or equal to zero'/ + & ' for some J = 1, ..., M.'// + & ' when STPD(1,1) is greater than zero'/ + & ' and LDSTPD is equal to one then'/ + & ' each of the 1 by M elements of'/ + & ' STPD must be greater than zero.') + 3230 FORMAT + & (/' ERROR : STPB(K) is less than or equal to zero'/ + & ' for some K = 1, ..., NP.'// + & ' all NP elements of', + & ' STPB must be greater than zero.') + 3310 FORMAT + & (/' ERROR : At least one of the (NQ by NQ) arrays starting'/ + & ' in WE(I,1,1), I = 1, ..., N, is not positive'/ + & ' semidefinite. When WE(1,1,1) is greater than'/ + & ' or equal to zero, and LDWE is greater than or'/ + & ' equal to N, and LD2WE is greater than or equal'/ + & ' to NQ, then each of the (NQ by NQ) arrays in WE'/ + & ' must be positive semidefinite.') + 3320 FORMAT + & (/' ERROR : At least one of the (1 by NQ) arrays starting'/ + & ' in WE(I,1,1), I = 1, ..., N, has a negative'/ + & ' element. When WE(1,1,1) is greater than or'/ + & ' equal to zero, and LDWE is greater than or equal'/ + & ' to N, and LD2WE is equal to 1, then each of the'/ + & ' (1 by NQ) arrays in WE must have only non-'/ + & ' negative elements.') + 3410 FORMAT + & (/' ERROR : The (NQ by NQ) array starting in WE(1,1,1) is'/ + & ' not positive semidefinite. When WE(1,1,1) is'/ + & ' greater than or equal to zero, and LDWE is equal'/ + & ' to 1, and LD2WE is greater than or equal to NQ,'/ + & ' then the (NQ by NQ) array in WE must be positive'/ + & ' semidefinite.') + 3420 FORMAT + & (/' ERROR : The (1 by NQ) array starting in WE(1,1,1) has'/ + & ' a negative element. When WE(1,1,1) is greater'/ + & ' than or equal to zero, and LDWE is equal to 1,'/ + & ' and LD2WE is equal to 1, then the (1 by NQ)'/ + & ' array in WE must have only nonnegative elements.') + 3500 FORMAT + & (/' ERROR : The number of nonzero arrays in array WE is'/ + & ' less than NP.') + 4310 FORMAT + & (/' ERROR : At least one of the (M by M) arrays starting'/ + & ' in WD(I,1,1), I = 1, ..., N, is not positive'/ + & ' definite. When WD(1,1,1) is greater than zero,'/ + & ' and LDWD is greater than or equal to N, and'/ + & ' LD2WD is greater than or equal to M, then each'/ + & ' of the (M by M) arrays in WD must be positive'/ + & ' definite.') + 4320 FORMAT + & (/' ERROR : At least one of the (1 by M) arrays starting'/ + & ' in WD(I,1,1), I = 1, ..., N, has a nonpositive'/ + & ' element. When WD(1,1,1) is greater than zero,'/ + & ' and LDWD is greater than or equal to N, and'/ + & ' LD2WD is equal to 1, then each of the (1 by M)'/ + & ' arrays in WD must have only positive elements.') + 4410 FORMAT + & (/' ERROR : The (M by M) array starting in WD(1,1,1) is'/ + & ' not positive definite. When WD(1,1,1) is'/ + & ' greater than zero, and LDWD is equal to 1, and'/ + & ' LD2WD is greater than or equal to M, then the'/ + & ' (M by M) array in WD must be positive definite.') + 4420 FORMAT + & (/' ERROR : The (1 by M) array starting in WD(1,1,1) has a'/ + & ' nonpositive element. When WD(1,1,1) is greater'/ + & ' than zero, and LDWD is equal to 1, and LD2WD is'/ + & ' equal to 1, then the (1 by M) array in WD must'/ + & ' have only positive elements.') + 5000 FORMAT + & (/' ERROR : JOB requires the optional argument DELTA and'/ + & ' DELTA is not present or not associated.') + 5100 FORMAT + & (/' ERROR : JOB requires the optional argument WORK and'/ + & ' WORK is not present or not associated.') + 5200 FORMAT + & (/' ERROR : JOB requires the optional argument IWORK and'/ + & ' IWORK is not present or not associated.') + 6000 FORMAT + & (/' ERROR : LOWER(K).GT.UPPER(K) for some K. Adjust the'/ + & ' the bounds so that LOWER(K).LE.UPPER(K) holds'/ + & ' for all K.') + 6100 FORMAT + & (/' ERROR : BETA(K).GT.UPPER(K) or BETA(K).LT.LOWER(K) '/ + & ' for some K. Adjust the bounds or BETA so '/ + & ' that LOWER(K).LE.BETA(K).LE.UPPER(K) holds'/ + & ' for all K.') + 6210 FORMAT + & (/' ERROR : UPPER(K)-LOWER(K) .LT. 400*BETA(K)*EPSMAC '/ + & ' for some K and EPSMAC having the largest '/ + & ' value such that 1+EPSMAC.NE.1. This '/ + & ' constraint on UPPER and LOWER is necessary'/ + & ' for the calculation of NDIGIT. Increase the'/ + & ' range of the bounds or specify NDIGIT '/ + & ' explicitly.') + 6220 FORMAT + & (/' ERROR : UPPER(K)-LOWER(K) .LT. ABS(STEP) for some'/ + & ' K where step is the step size for numeric'/ + & ' derivatives. Increase the bounds or supply'/ + & ' an analytic jacobian.') + 7200 FORMAT + & (/' ERROR : DELTA could not be allocated. ') + 7300 FORMAT + & (/' ERROR : WORK could not be allocated. ') + 7400 FORMAT + & (/' ERROR : IWORK could not be allocated. ') + 8000 FORMAT + & (/' ERROR : BETA has incorrect size. ') + 8001 FORMAT + & (/' ERROR : Y has incorrect size. ') + 8002 FORMAT + & (/' ERROR : X has incorrect size. ') + 8003 FORMAT + & (/' ERROR : DELTA has incorrect size. ') + 8004 FORMAT + & (/' ERROR : WE has incorrect size. ') + 8005 FORMAT + & (/' ERROR : WD has incorrect size. ') + 8006 FORMAT + & (/' ERROR : IFIXB has incorrect size. ') + 8007 FORMAT + & (/' ERROR : IFIXX has incorrect size. ') + 8008 FORMAT + & (/' ERROR : STPB has incorrect size. ') + 8009 FORMAT + & (/' ERROR : STPD has incorrect size. ') + 8010 FORMAT + & (/' ERROR : SCLB has incorrect size. ') + 8011 FORMAT + & (/' ERROR : SCLD has incorrect size. ') + 8012 FORMAT + & (/' ERROR : WORK has incorrect size. ') + 8013 FORMAT + & (/' ERROR : IWORK has incorrect size. ') + 8014 FORMAT + & (/' ERROR : UPPER has incorrect size. ') + 8015 FORMAT + & (/' ERROR : LOWER has incorrect size. ') + END SUBROUTINE +*DODPE2 + SUBROUTINE DODPE2 + & (UNIT, + & N,M,NP,NQ, + & FJACB,FJACD, + & DIFF,MSGB1,MSGB,ISODR,MSGD1,MSGD, + & XPLUSD,NROW,NETA,NTOL) +C***Begin Prologue DODPE2 +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Generate the derivative checking report +C***End Prologue DODPE2 + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & M,MSGB1,MSGD1,N,NETA,NP,NQ,NROW,NTOL,UNIT + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + & MSGB(NQ,NP),MSGD(NQ,M) + +C...Local scalars + INTEGER + & I,J,K,L + CHARACTER FLAG*1,TYP*3 + +C...Local arrays + LOGICAL + & FTNOTE(0:9) + +C...Variable Definitions (alphabetically) +C DIFF: The relative differences between the user supplied and +C finite difference derivatives for each derivative checked. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FLAG: The character string indicating highly questionable results. +C FTNOTE: The array controling footnotes. +C I: An index variable. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=.TRUE.) or by OLS (ISODR=.FALSE.). +C J: An index variable. +C K: An index variable. +C L: An index variable. +C M: The number of columns of data in the explanatory variable. +C MSGB: The error checking results for the Jacobian wrt BETA. +C MSGB1: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C MSGD1: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of reliable digits in the model. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at +C which the derivative is to be checked. +C NTOL: The number of digits of agreement required between the +C finite difference and the user supplied derivatives. +C TYP: The character string indicating solution type, ODR or OLS. +C UNIT: The logical unit number used for error messages. +C XPLUSD: The values of X + DELTA. + + +C***First executable statement DODPE2 + + +C Set up for footnotes + + DO 10 I=0,9 + FTNOTE(I) = .FALSE. + 10 CONTINUE + + DO 40 L=1,NQ + IF (MSGB1.GE.1) THEN + DO 20 I=1,NP + IF (MSGB(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGB(L,I)) = .TRUE. + END IF + 20 CONTINUE + END IF + + IF (MSGD1.GE.1) THEN + DO 30 I=1,M + IF (MSGD(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGD(L,I)) = .TRUE. + END IF + 30 CONTINUE + END IF + 40 CONTINUE + +C Print report + + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + WRITE (UNIT,1000) TYP + + DO 70 L=1,NQ + + WRITE (UNIT,2100) L,NROW + WRITE (UNIT,2200) + + DO 50 I=1,NP + K = MSGB(L,I) + IF (K.EQ.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,3100) I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,3200) I,FJACB(NROW,I,L),DIFF(L,I),FLAG + ELSE IF (K.EQ.8) THEN + WRITE (UNIT,3400) I,FJACB(NROW,I,L),FLAG,K + ELSE IF (K.EQ.9) THEN + WRITE (UNIT,3500) I,FLAG,K + ELSE IF (K.GE.1) THEN + WRITE (UNIT,3300) I,FJACB(NROW,I,L),DIFF(L,I),FLAG,K + END IF + 50 CONTINUE + IF (ISODR) THEN + DO 60 I=1,M + K = MSGD(L,I) + IF (K.EQ.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,4100) NROW,I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,4200) NROW,I, + & FJACD(NROW,I,L),DIFF(L,NP+I),FLAG + ELSE IF (K.GE.1) THEN + WRITE (UNIT,4300) NROW,I, + & FJACD(NROW,I,L),DIFF(L,NP+I),FLAG,K + END IF + 60 CONTINUE + END IF + 70 CONTINUE + +C Print footnotes + + IF (FTNOTE(0)) THEN + + WRITE (UNIT,5000) + IF (FTNOTE(1)) WRITE (UNIT,5100) + IF (FTNOTE(2)) WRITE (UNIT,5200) + IF (FTNOTE(3)) WRITE (UNIT,5300) + IF (FTNOTE(4)) WRITE (UNIT,5400) + IF (FTNOTE(5)) WRITE (UNIT,5500) + IF (FTNOTE(6)) WRITE (UNIT,5600) + IF (FTNOTE(7)) WRITE (UNIT,5700) + IF (FTNOTE(8)) WRITE (UNIT,5800) + IF (FTNOTE(9)) WRITE (UNIT,5900) + END IF + + IF (NETA.LT.0) THEN + WRITE (UNIT,6000) -NETA + ELSE + WRITE (UNIT,6100) NETA + END IF + WRITE (UNIT,7000) NTOL + +C Print out row of explanatory variable which was checked. + + WRITE (UNIT,8100) NROW + + DO 80 J=1,M + WRITE (UNIT,8110) NROW,J,XPLUSD(NROW,J) + 80 CONTINUE + + RETURN + +C Format statements + + 1000 FORMAT + & (//' *** Derivative checking report for fit by method of ',A3, + & ' ***'/) + 2100 FORMAT (/' For response ',I2,' of observation ', I5/) + 2200 FORMAT (' ',' User', + & ' ',' '/ + & ' ',' Supplied', + & ' Relative',' Derivative '/ + & ' Derivative WRT',' Value', + & ' Difference',' Assessment '/) + 3100 FORMAT (' BETA(',I3,')', ' --- ', + & ' --- ',' Unchecked') + 3200 FORMAT (' BETA(',I3,')', 1P,2E13.2,3X,A1, + & 'Verified') + 3300 FORMAT (' BETA(',I3,')', 1P,2E13.2,3X,A1, + & 'Questionable (see note ',I1,')') + 3400 FORMAT (' BETA(',I3,')', 1P,1E13.2,13X,3X,A1, + & 'Questionable (see note ',I1,')') + 3500 FORMAT (' BETA(',I3,')', 1P,13X,13X,3X,A1, + & 'Small bounds (see note ',I1,')') + 4100 FORMAT (' DELTA(',I2,',',I2,')', ' --- ', + & ' --- ',' Unchecked') + 4200 FORMAT (' DELTA(',I2,',',I2,')', 1P,2E13.2,3X,A1, + & 'Verified') + 4300 FORMAT (' DELTA(',I2,',',I2,')', 1P,2E13.2,3X,A1, + & 'Questionable (see note ',I1,')') + 5000 FORMAT + & (/' NOTES:') + 5100 FORMAT + & (/' (1) User supplied and finite difference derivatives', + & ' agree, but'/ + & ' results are questionable because both are zero.') + 5200 FORMAT + & (/' (2) User supplied and finite difference derivatives', + & ' agree, but'/ + & ' results are questionable because one is', + & ' identically zero'/ + & ' and the other is only approximately zero.') + 5300 FORMAT + & (/' (3) User supplied and finite difference derivatives', + & ' disagree, but'/ + & ' results are questionable because one is', + & ' identically zero'/ + & ' and the other is not.') + 5400 FORMAT + & (/' (4) User supplied and finite difference derivatives', + & ' disagree, but'/ + & ' finite difference derivative is questionable', + & ' because either'/ + & ' the ratio of relative curvature to relative', + & ' slope is too high'/ + & ' or the scale is wrong.') + 5500 FORMAT + & (/' (5) User supplied and finite difference derivatives', + & ' disagree, but'/ + & ' finite difference derivative is questionable', + & ' because the'/ + & ' ratio of relative curvature to relative slope is', + & ' too high.') + 5600 FORMAT + & (/' (6) User supplied and finite difference derivatives', + & ' disagree, but'/ + & ' have at least 2 digits in common.') + 5700 FORMAT + & (/' (7) User supplied and finite difference derivatives', + & ' disagree, and'/ + & ' have fewer than 2 digits in common. derivative', + & ' checking must'/ + & ' be turned off in order to proceed.') + 5800 FORMAT + & (/' (8) User supplied and finite difference derivatives', + & ' disagree, and'/ + & ' bound constraints are too small to calculate', + & ' further'/ + & ' information.') + 5900 FORMAT + & (/' (9) Bound constraints too small to check derivative.') + 6000 FORMAT + & (/' Number of reliable digits in function results ', + & I5/ + & ' (estimated by ODRPACK95)') + 6100 FORMAT + & (/' Number of reliable digits in function results ', + & I5/ + & ' (supplied by user)') + 7000 FORMAT + & (/' Number of digits of agreement required between '/ + & ' user supplied and finite difference derivative for '/ + & ' user supplied derivative to be considered verified ', + & I5) + 8100 FORMAT + & (/' Row number at which derivatives were checked ', + & I5// + & ' -values of the explanatory variables at this row'/) + 8110 FORMAT + & (10X,'X(',I2,',',I2,')',1X,1P,3E16.8) + END SUBROUTINE +*DODPE3 + SUBROUTINE DODPE3 + & (UNIT,D2,D3) +C***Begin Prologue DODPE3 +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Print error reports indicating that computations were +C stopped in user supplied subroutines FCN +C***End Prologue DODPE3 + +C...Scalar arguments + INTEGER + & D2,D3,UNIT + +C...Variable Definitions (alphabetically) +C D2: The 2nd digit (from the left) of INFO. +C D3: The 3rd digit (from the left) of INFO. +C UNIT: The logical unit number used for error messages. + + +C***First executable statement DODPE3 + + +C Print appropriate messages to indicate where computations were +C stopped + + IF (D2.EQ.2) THEN + WRITE(UNIT,1100) + ELSE IF (D2.EQ.3) THEN + WRITE(UNIT,1200) + ELSE IF (D2.EQ.4) THEN + WRITE(UNIT,1300) + END IF + IF (D3.EQ.2) THEN + WRITE(UNIT,1400) + END IF + +C Format statements + + 1100 FORMAT + & (//' Variable ISTOP has been returned with a nonzero value '/ + & ' from user supplied subroutine FCN when invoked using the'/ + & ' initial estimates of BETA and DELTA supplied by the '/ + & ' user. The initial estimates must be adjusted to allow '/ + & ' proper evaluation of subroutine FCN before the '/ + & ' regression procedure can continue.') + 1200 FORMAT + & (//' Variable ISTOP has been returned with a nonzero value '/ + & ' from user supplied subroutine FCN. This occurred during'/ + & ' the computation of the number of reliable digits in the '/ + & ' predicted values (F) returned from subroutine FCN, indi-'/ + & ' cating that changes in the initial estimates of BETA(K),'/ + & ' K=1,NP, as small as 2*BETA(K)*SQRT(MACHINE PRECISION), '/ + & ' where MACHINE PRECISION is defined as the smallest value'/ + & ' E such that 1+E>1 on the computer being used, prevent '/ + & ' subroutine FCN from being properly evaluated. The '/ + & ' initial estimates must be adjusted to allow proper '/ + & ' evaluation of subroutine FCN during these computations '/ + & ' before the regression procedure can continue.') + 1300 FORMAT + & (//' Variable ISTOP has been returned with a nonzero value '/ + & ' from user supplied subroutine FCN. This occurred during'/ + & ' the derivative checking procedure, indicating that '/ + & ' changes in the initial estimates of BETA(K), K=1,NP, as '/ + & ' small as MAX[BETA(K),1/SCLB(K)]*10**(-NETA/2), and/or '/ + & ' of DELTA(I,J), I=1,N and J=1,M, as small as '/ + & ' MAX[DELTA(I,J),1/SCLD(I,J)]*10**(-NETA/2), where NETA '/ + & ' is defined to be the number of reliable digits in '/ + & ' predicted values (F) returned from subroutine FCN, '/ + & ' prevent subroutine FCN from being properly evaluated. '/ + & ' the initial estimates must be adjusted to allow proper '/ + & ' evaluation of subroutine FCN during these computations '/ + & ' before the regression procedure can continue.') + 1400 FORMAT + & (//' Variable ISTOP has been returned with a nonzero value '/ + & ' from user supplied subroutine FCN when invoked for '/ + & ' derivative evaluations using the initial estimates of '/ + & ' BETA and DELTA supplied by the user. The initial '/ + & ' estimates must be adjusted to allow proper evaluation '/ + & ' of subroutine FCN before the regression procedure can '/ + & ' continue.') + END SUBROUTINE +*DODPER + SUBROUTINE DODPER + & (INFO,LUNERR, + & N,M,NP,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LWKMN,LIWKMN, + & FJACB,FJACD, + & DIFF,MSGB,ISODR,MSGD, + & XPLUSD,NROW,NETA,NTOL) +C***Begin Prologue DODPER +C***Refer to ODR +C***Routines Called DODPE1,DODPE2,DODPE3,DODPHD +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Controlling routine for printing error reports +C***End Prologue DODPER + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INFO,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE,LIWKMN,LUNERR,LWKMN, + & M,N,NETA,NP,NQ,NROW,NTOL + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + & MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...Local scalars + INTEGER + & D1,D2,D3,D4,D5,UNIT + LOGICAL + & HEAD + +C...External subroutines + EXTERNAL + & DODPE1,DODPE2,DODPE3,DODPHD + +C...Variable Definitions (alphabetically) +C D1: The 1st digit (from the left) of INFO. +C D2: The 2nd digit (from the left) of INFO. +C D3: The 3rd digit (from the left) of INFO. +C D4: The 4th digit (from the left) of INFO. +C D5: The 5th digit (from the left) of INFO. +C DIFF: The relative differences between the user supplied and +C finite difference derivatives for each derivative checked. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=.TRUE.) or not (HEAD=.FALSE.). +C INFO: The variable designating why the computations were stopped. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=.TRUE.) or by OLS (ISODR=.FALSE.). +C LDSCLD: The leading dimension of array SCLD. +C LDSTPD: The leading dimension of array STPD. +C LDWD: The leading dimension of array WD. +C LDWE: The leading dimension of array WE. +C LD2WD: The second dimension of array WD. +C LD2WE: The second dimension of array WE. +C LIWKMN: The minimum acceptable length of array IWORK. +C LUNERR: The logical unit number used for error messages. +C LWKMN: The minimum acceptable length of array WORK. +C M: The number of columns of data in the explanatory variable. +C MSGB: The error checking results for the Jacobian wrt BETA. +C MSGD: The error checking results for the Jacobian wrt DELTA. +C N: The number of observations. +C NETA: The number of reliable digits in the model. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the explanatory variable array at +C which the derivative is to be checked. +C NTOL: The number of digits of agreement required between the +C finite difference and the user supplied derivatives. +C UNIT: The logical unit number for error messages. +C XPLUSD: The values X + DELTA. + + +C***First executable statement DODPER + + +C Set logical unit number for error report + + IF (LUNERR.EQ.0) THEN + RETURN + ELSE IF (LUNERR.LT.0) THEN + UNIT = 6 + ELSE + UNIT = LUNERR + END IF + +C Print heading + + HEAD = .TRUE. + CALL DODPHD(HEAD,UNIT) + +C Extract individual digits from variable INFO + + D1 = MOD(INFO,100000)/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C Print appropriate error messages for ODRPACK95 invoked stop + + IF ( + & (D1.GE.1 .AND. D1.LE.3) .OR. + & (D1.EQ.7 .OR. D1.EQ.9) + & ) THEN + +C Print appropriate messages for errors in +C problem specification parameters +C dimension specification parameters +C number of good digits in X +C weights + + CALL DODPE1(UNIT,INFO,D1,D2,D3,D4,D5, + & N,M,NQ, + & LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + & LWKMN,LIWKMN) + + ELSE IF ((D1.EQ.4) .OR. (MSGB(1).GE.0)) THEN + +C Print appropriate messages for derivative checking + + CALL DODPE2(UNIT, + & N,M,NP,NQ, + & FJACB,FJACD, + & DIFF,MSGB(1),MSGB(2),ISODR,MSGD(1),MSGD(2), + & XPLUSD,NROW,NETA,NTOL) + + ELSE IF (D1.EQ.5) THEN + +C Print appropriate error message for user invoked stop from FCN + + CALL DODPE3(UNIT,D2,D3) + + END IF + +C Print correct form of call statement + + IF ((D1.GE.1 .AND. D1.LE.3) .OR. + & (D1.EQ.4 .AND. (D2.EQ.2 .OR. D3.EQ.2)) .OR. + & (D1.EQ.5)) THEN + WRITE (UNIT,1100) + END IF + + RETURN + +C Format statements + + 1100 FORMAT + & (//' The correct form of the call statement is '// + & ' CALL ODR'/ + & ' + (FCN,'/ + & ' + N,M,NP,NQ,'/ + & ' + BETA,'/ + & ' + Y,X,'/ + & ' + DELTA*,'/ + & ' + WE*,WD*,'/ + & ' + IFIXB*,IFIXX*,'/ + & ' + JOB*,NDIGIT*,TAUFAC*,'/ + & ' + SSTOL*,PARTOL*,MAXIT*,'/ + & ' + IPRINT*,LUNERR*,LUNRPT*,'/ + & ' + STPB*,STPD*,'/ + & ' + SCLB*,SCLD*,'/ + & ' + WORK*,IWORK*,'/ + & ' + INFO*,'/ + & ' + LOWER*,UPPER*)'/ + & ' * optional argument') + + END SUBROUTINE +*DODPHD + SUBROUTINE DODPHD + & (HEAD,UNIT) +C***Begin Prologue DODPHD +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Print ODRPACK95 heading +C***End Prologue DODPHD + +C...Scalar arguments + INTEGER + & UNIT + LOGICAL + & HEAD + +C...Variable Definitions (alphabetically) +C HEAD: The variable designating whether the heading is to be +C printed (HEAD=.TRUE.) or not (HEAD=.FALSE.). +C UNIT: The logical unit number to which the heading is written. + + +C***First executable statement DODPHD + + + IF (HEAD) THEN + WRITE(UNIT,1000) + HEAD = .FALSE. + END IF + + RETURN + +C Format statements + + 1000 FORMAT ( + & ' ********************************************************* '/ + & ' * ODRPACK95 version 1.00 of 12-27-2005 (REAL (KIND=R8)) * '/ + & ' ********************************************************* '/) + END SUBROUTINE +*DODSTP + SUBROUTINE DODSTP + & (N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ALPHA,EPSFCN,ISODR, + & TFJACB,OMEGA,U,QRAUX,KPVT, + & S,T,PHI,IRANK,RCOND,FORVCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***Begin Prologue DODSTP +C***Refer to ODR +C***Routines Called IDAMAX,DCHEX,DESUBI,DFCTR,DNRM2,DQRDC,DQRSL,DROT, +C DROTG,DSOLVE,DTRCO,DTRSL,DVEVTR,DWGHT,DZERO +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute locally constrained steps S and T, and PHI(ALPHA) +C***End Prologue DODSTP + +C...Used modules + USE REAL_PRECISION + USE ODRPACK95, ONLY : TEMPRET + +C...Scalar arguments + REAL (KIND=R8) + & ALPHA,EPSFCN,PHI,RCOND + INTEGER + & IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + & OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + & T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + & WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M),WRK(LWRK) + INTEGER + & KPVT(NP) + +C...Local scalars + REAL (KIND=R8) + & CO,ONE,SI,TEMP,ZERO + INTEGER + & I,IMAX,INF,IPVT,J,K,K1,K2,KP,L + LOGICAL + & ELIM,FORVCV + +C...LOCAL ARRAYS + REAL (KIND=R8) + & DUM(2) + +C...External functions + REAL (KIND=R8) + & DNRM2 + INTEGER + & IDAMAX + EXTERNAL + & DNRM2,IDAMAX + +C...External subroutines + EXTERNAL + & DCHEX,DESUBI,DFCTR,DQRDC,DQRSL,DROT,DROTG, + & DSOLVE,DTRCO,DTRSL,DVEVTR,DZERO + +C...Data statements + DATA + & ZERO,ONE + & /0.0E0_R8,1.0E0_R8/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Variable definitions (alphabetically) +C ALPHA: The Levenberg-Marquardt parameter. +C CO: The cosine from the plane rotation. +C DELTA: The estimated errors in the explanatory variables. +C DUM: A dummy array. +C ELIM: The variable designating whether columns of the Jacobian +C wrt BETA have been eliminated (ELIM=TRUE) or not +C (ELIM=FALSE). +C EPSFCN: The function's precision. +C F: The (weighted) estimated values of EPSILON. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FORVCV: The variable designating whether this subroutine was +C called to set up for the covariance matrix computations +C (FORVCV=TRUE) or not (FORVCV=FALSE). +C I: An indexing variable. +C IMAX: The index of the element of U having the largest absolute +C value. +C INF: The return code from LINPACK routines. +C IPVT: The variable designating whether pivoting is to be done. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOPC: The variable designating whether the computations were +C stoped due to a numerical error within subroutine DODSTP. +C J: An indexing variable. +C K: An indexing variable. +C K1: An indexing variable. +C K2: An indexing variable. +C KP: The rank of the Jacobian wrt BETA. +C KPVT: The pivot vector. +C L: An indexing variable. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LD2WD: The second dimension of array WD. +C LWRK: The length of vector WRK. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C OMEGA: The array defined S.T. +C OMEGA*trans(OMEGA) = inv(I+FJACD*inv(E)*trans(FJACD)) +C = (I-FJACD*inv(P)*trans(FJACD)) +C where E = D**2 + ALPHA*TT**2 +C P = trans(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C ONE: The value 1.0E0_R8. +C PHI: The difference between the norm of the scaled step +C And the trust region diameter. +C QRAUX: The array required to recover the orthogonal part of the +C Q-R decomposition. +C RCOND: The approximate reciprocal condition number of TFJACB. +C S: The step for BETA. +C SI: The sine from the plane rotation. +C SS: The scaling values for the unfixed BETAS. +C T: The step for DELTA. +C TEMP: A temporary storage LOCATION. +C TFJACB: The array OMEGA*FJACB. +C TT: The scaling values for DELTA. +C U: The approximate null vector for TFJACB. +C WD: The (squared) DELTA weights. +C WRK: A work array of (LWRK) elements, +C equivalenced to WRK1 and WRK2. +C WRK1: A work array of (N by NQ by M) elements. +C WRK2: A work array of (N by NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK4: A work array of (M by M) elements. +C WRK5: A work array of (M) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODSTP + + +C Compute loop parameters which depend on weight structure + +C Set up KPVT if ALPHA = 0 + + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + DO 10 K=1,NP + KPVT(K) = K + 10 CONTINUE + ELSE + IF (NPP.GE.1) THEN + KP = NPP-IRANK + ELSE + KP = NPP + END IF + END IF + + IF (ISODR) THEN + +C T = WD * DELTA = D*G2 + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,T) + + DO 300 I=1,N + +C Compute WRK4, such that +C TRANS(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C Compute OMEGA, such that +C trans(OMEGA)*OMEGA = I+FJACD*inv(E)*trans(FJACD) +C inv(trans(OMEGA)*OMEGA) = I-FJACD*inv(P)*trans(FJACD) + CALL DVEVTR(M,NQ,I, + & FJACD,N,M, WRK4,M, WRK1,N,NQ, OMEGA,NQ, WRK5) + DO 110 L=1,NQ + OMEGA(L,L) = ONE + OMEGA(L,L) + 110 CONTINUE + CALL DFCTR(.FALSE.,OMEGA,NQ,NQ,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C Compute WRK1 = trans(FJACD)*(I-FJACD*inv(P)*trans(JFACD)) +C = trans(FJACD)*inv(trans(OMEGA)*OMEGA) + DO 130 J=1,M + DO 120 L=1,NQ + WRK1(I,L,J) = FJACD(I,J,L) + 120 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1:NQ,J),4) + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1:NQ,J),2) + 130 CONTINUE + +C Compute WRK5 = inv(E)*D*G2 + DO 140 J=1,M + WRK5(J) = T(I,J) + 140 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,4) + CALL DSOLVE(M,WRK4,M,WRK5,2) + +C Compute TFJACB = inv(trans(OMEGA))*FJACB + DO 170 K=1,KP + DO 150 L=1,NQ + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + 150 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,TFJACB(I,1:NQ,K),4) + DO 160 L=1,NQ + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 160 CONTINUE + 170 CONTINUE + +C Compute WRK2 = (V*inv(E)*D**2*G2 - G1) + DO 190 L=1,NQ + WRK2(I,L) = ZERO + DO 180 J=1,M + WRK2(I,L) = WRK2(I,L) + FJACD(I,J,L)*WRK5(J) + 180 CONTINUE + WRK2(I,L) = WRK2(I,L) - F(I,L) + 190 CONTINUE + +C Compute WRK2 = inv(trans(OMEGA))*(V*inv(E)*D**2*G2 - G1) + CALL DSOLVE(NQ,OMEGA,NQ,WRK2(I,1:NQ),4) + 300 CONTINUE + + ELSE + DO 360 I=1,N + DO 350 L=1,NQ + DO 340 K=1,KP + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 340 CONTINUE + WRK2(I,L) = -F(I,L) + 350 CONTINUE + 360 CONTINUE + END IF + +C Compute S + +C Do QR factorization (with column pivoting of TFJACB if ALPHA = 0) + + IF (ALPHA.EQ.ZERO) THEN + IPVT = 1 + DO 410 K=1,NP + KPVT(K) = 0 + 410 CONTINUE + ELSE + IPVT = 0 + END IF + + CALL DQRDC(TFJACB,N*NQ,N*NQ,KP,QRAUX,KPVT,WRK3,IPVT) + CALL DQRSL(TFJACB,N*NQ,N*NQ,KP, + & QRAUX,WRK2,DUM,WRK2,DUM,DUM,DUM,1000,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C Eliminate alpha part using givens rotations + + IF (ALPHA.NE.ZERO) THEN + CALL DZERO(NPP,1,S,NPP) + DO 430 K1=1,KP + CALL DZERO(KP,1,WRK3,KP) + WRK3(K1) = SQRT(ALPHA) + DO 420 K2=K1,KP + CALL DROTG(TFJACB(K2,1,K2),WRK3(K2),CO,SI) + IF (KP-K2.GE.1) THEN + CALL DROT(KP-K2,TFJACB(K2,1,K2+1),N*NQ, + & WRK3(K2+1),1,CO,SI) + END IF + TEMP = CO*WRK2(K2,1) + SI*S(KPVT(K1)) + S(KPVT(K1)) = -SI*WRK2(K2,1) + CO*S(KPVT(K1)) + WRK2(K2,1) = TEMP + 420 CONTINUE + 430 CONTINUE + END IF + +C Compute solution - eliminate variables if necessary + + IF (NPP.GE.1) THEN + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + +C Estimate RCOND - U will contain approx null vector + + 440 CALL DTRCO(TFJACB,N*NQ,KP,RCOND,U,1) + IF (RCOND.LE.EPSFCN) THEN + ELIM = .TRUE. + IMAX = IDAMAX(KP,U,1) + +C IMAX is the column to remove - use DCHEX and fix KPVT + + IF (IMAX.NE.KP) THEN + CALL DCHEX(TFJACB,N*NQ,KP,IMAX,KP,WRK2,N*NQ,1, + & QRAUX,WRK3,2) + K = KPVT(IMAX) + DO 450 I=IMAX,KP-1 + KPVT(I) = KPVT(I+1) + 450 CONTINUE + KPVT(KP) = K + END IF + KP = KP-1 + ELSE + ELIM = .FALSE. + END IF + IF (ELIM .AND. KP.GE.1) THEN + GO TO 440 + ELSE + IRANK = NPP-KP + END IF + END IF + END IF + + IF (FORVCV) RETURN + +C Backsolve and unscramble + + IF (NPP.GE.1) THEN + DO 510 I=KP+1,NPP + WRK2(I,1) = ZERO + 510 CONTINUE + IF (KP.GE.1) THEN + CALL DTRSL(TFJACB,N*NQ,KP,WRK2,01,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + END IF + DO 520 I=1,NPP + IF (SS(1).GT.ZERO) THEN + S(KPVT(I)) = WRK2(I,1)/SS(KPVT(I)) + ELSE + S(KPVT(I)) = WRK2(I,1)/ABS(SS(1)) + END IF + 520 CONTINUE + END IF + + IF (ISODR) THEN + +C NOTE: T and WRK1 have been initialized above, +C where T = WD * DELTA = D*G2 +C WRK1 = trans(FJACD)*(I-FJACD*inv(P)*trans(JFACD)) + + DO 670 I=1,N + +C Compute WRK4, such that +C trans(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C Compute WRK5 = inv(E)*D*G2 + DO 610 J=1,M + WRK5(J) = T(I,J) + 610 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,4) + CALL DSOLVE(M,WRK4,M,WRK5,2) + + DO 640 L=1,NQ + WRK2(I,L) = F(I,L) + DO 620 K=1,NPP + WRK2(I,L) = WRK2(I,L) + FJACB(I,K,L)*S(K) + 620 CONTINUE + DO 630 J=1,M + WRK2(I,L) = WRK2(I,L) - FJACD(I,J,L)*WRK5(J) + 630 CONTINUE + 640 CONTINUE + + DO 660 J=1,M + WRK5(J) = ZERO + DO 650 L=1,NQ + WRK5(J) = WRK5(J) + WRK1(I,L,J)*WRK2(I,L) + 650 CONTINUE + T(I,J) = -(WRK5(J) + T(I,J)) + 660 CONTINUE + CALL DSOLVE(M,WRK4,M,T(I,1:M),4) + CALL DSOLVE(M,WRK4,M,T(I,1:M),2) + 670 CONTINUE + + END IF + +C Compute PHI(ALPHA) from scaled S and T + + CALL DWGHT(NPP,1,RESHAPE(SS,(/NPP,1,1/)),NPP,1, + & RESHAPE(S,(/NPP,1/)),TEMPRET(1:NPP,1:1)) + WRK(1:NPP) = TEMPRET(1:NPP,1) + IF (ISODR) THEN + CALL DWGHT(N,M,RESHAPE(TT,(/LDTT,1,M/)),LDTT,1, + & T,TEMPRET(1:N,1:M)) + WRK(NPP+1:NPP+1+N*M-1) = RESHAPE(TEMPRET(1:N,1:M),(/N*M/)) + PHI = DNRM2(NPP+N*M,WRK,1) + ELSE + PHI = DNRM2(NPP,WRK,1) + END IF + + RETURN + END SUBROUTINE +*DODVCV + SUBROUTINE DODVCV + & (N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + & EPSFCN,ISODR, + & VCV,SD, + & WRK6,OMEGA,U,QRAUX,JPVT, + & S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***Begin Prologue DODVCV +C***Refer to ODR +C***Routines Called DPODI,DODSTP +C***Date Written 901207 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute covariance matrix of estimated parameters +C***End Prologue DODVCV + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & EPSFCN,RCOND,RSS,RVAR + INTEGER + & IDF,IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + & ISODR + +C...Array arguments + REAL (KIND=R8) + & DELTA(N,M),F(N,NQ), + & FJACB(N,NP,NQ),FJACD(N,M,NQ), + & OMEGA(NQ,NQ),QRAUX(NP),S(NP),SD(NP),SS(NP),SSF(NP), + & T(N,M),TT(LDTT,M),U(NP),VCV(NP,NP),WD(LDWD,LD2WD,M), + & WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M), + & WRK6(N*NQ,NP),WRK(LWRK) + INTEGER + & IFIXB(NP),JPVT(NP) + +C...Local scalars + REAL (KIND=R8) + & TEMP,ZERO + INTEGER + & I,IUNFIX,J,JUNFIX,KP,L + LOGICAL + & FORVCV + +C...External subroutines + EXTERNAL + & DPODI,DODSTP + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable definitions (alphabetically) +C DELTA: The estimated errors in the explanatory variables. +C EPSFCN: The function's precision. +C F: The (weighted) estimated values of EPSILON. +C FJACB: The Jacobian with respect to BETA. +C FJACD: The Jacobian with respect to DELTA. +C FORVCV: The variable designating whether subroutine DODSTP is +C called to set up for the covariance matrix computations +C (FORVCV=TRUE) or not (FORVCV=FALSE). +C I: An indexing variable. +C IDF: The degrees of freedom of the fit, equal to the number of +C observations with nonzero weighted derivatives minus the +C number of parameters being estimated. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IMAX: The index of the element of U having the largest absolute +C value. +C IRANK: The rank deficiency of the Jacobian wrt BETA. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C ISTOPC: The variable designating whether the computations were +C stoped due to a numerical error within subroutine DODSTP. +C IUNFIX: The index of the next unfixed parameter. +C J: An indexing variable. +C JPVT: The pivot vector. +C JUNFIX: The index of the next unfixed parameter. +C KP: The rank of the Jacobian wrt BETA. +C L: An indexing variable. +C LDTT: The leading dimension of array TT. +C LDWD: The leading dimension of array WD. +C LD2WD: The second dimension of array WD. +C LWRK: The length of vector WRK. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NP: The number of function parameters. +C NPP: The number of function parameters being estimated. +C NQ: The number of responses per observation. +C OMEGA: The array defined S.T. +C OMEGA*trans(OMEGA) = inv(I+FJACD*inv(E)*trans(FJACD)) +C = (I-FJACD*inv(P)*trans(FJACD)) +C where E = D**2 + ALPHA*TT**2 +C P = trans(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C QRAUX: The array required to recover the orthogonal part of the +C Q-R decomposition. +C RCOND: The approximate reciprocal condition of FJACB. +C RSS: The residual sum of squares. +C RVAR: The residual variance. +C S: The step for BETA. +C SD: The standard deviations of the estimated BETAS. +C SS: The scaling values for the unfixed BETAS. +C SSF: The scaling values used for BETA. +C T: The step for DELTA. +C TEMP: A temporary storage location +C TT: The scaling values for DELTA. +C U: The approximate null vector for FJACB. +C VCV: The covariance matrix of the estimated BETAS. +C WD: The DELTA weights. +C WRK: A work array of (LWRK) elements, +C equivalenced to WRK1 and WRK2. +C WRK1: A work array of (N by NQ by M) elements. +C WRK2: A work array of (N by NQ) elements. +C WRK3: A work array of (NP) elements. +C WRK4: A work array of (M by M) elements. +C WRK5: A work array of (M) elements. +C WRK6: A work array of (N*NQ by P) elements. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODVCV + + + FORVCV = .TRUE. + ISTOPC = 0 + + CALL DODSTP(N,M,NP,NQ,NPP, + & F,FJACB,FJACD, + & WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + & ZERO,EPSFCN,ISODR, + & WRK6,OMEGA,U,QRAUX,JPVT, + & S,T,TEMP,IRANK,RCOND,FORVCV, + & WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + KP = NPP - IRANK + CALL DPODI (WRK6,N*NQ,KP,WRK3,1) + + IDF = 0 + DO 150 I=1,N + DO 120 J=1,NPP + DO 110 L=1,NQ + IF (FJACB(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 110 CONTINUE + 120 CONTINUE + IF (ISODR) THEN + DO 140 J=1,M + DO 130 L=1,NQ + IF (FJACD(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 130 CONTINUE + 140 CONTINUE + END IF + 150 CONTINUE + + IF (IDF.GT.KP) THEN + IDF = IDF - KP + RVAR = RSS/IDF + ELSE + IDF = 0 + RVAR = RSS + END IF + +C Store variances in SD, restoring original order + + DO 200 I=1,NP + SD(I) = ZERO + 200 CONTINUE + DO 210 I=1,KP + SD(JPVT(I)) = WRK6(I,I) + 210 CONTINUE + IF (NP.GT.NPP) THEN + JUNFIX = NPP + DO 220 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + SD(J) = ZERO + ELSE + SD(J) = SD(JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 220 CONTINUE + END IF + +C Store covariance matrix in VCV, restoring original order + + DO 310 I=1,NP + DO 300 J=1,I + VCV(I,J) = ZERO + 300 CONTINUE + 310 CONTINUE + DO 330 I=1,KP + DO 320 J=I+1,KP + IF (JPVT(I).GT.JPVT(J)) THEN + VCV(JPVT(I),JPVT(J))=WRK6(I,J) + ELSE + VCV(JPVT(J),JPVT(I))=WRK6(I,J) + END IF + 320 CONTINUE + 330 CONTINUE + IF (NP.GT.NPP) THEN + IUNFIX = NPP + DO 360 I=NP,1,-1 + IF (IFIXB(I).EQ.0) THEN + DO 340 J=I,1,-1 + VCV(I,J) = ZERO + 340 CONTINUE + ELSE + JUNFIX = NPP + DO 350 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + VCV(I,J) = ZERO + ELSE + VCV(I,J) = VCV(IUNFIX,JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 350 CONTINUE + IUNFIX = IUNFIX - 1 + END IF + 360 CONTINUE + END IF + + DO 380 I=1,NP + VCV(I,I) = SD(I) + SD(I) = SQRT(RVAR*SD(I)) + DO 370 J=1,I + VCV(J,I) = VCV(I,J) + 370 CONTINUE + 380 CONTINUE + +C Unscale standard errors and covariance matrix + DO 410 I=1,NP + IF (SSF(1).GT.ZERO) THEN + SD(I) = SD(I)/SSF(I) + ELSE + SD(I) = SD(I)/ABS(SSF(1)) + END IF + DO 400 J=1,NP + IF (SSF(1).GT.ZERO) THEN + VCV(I,J) = VCV(I,J)/(SSF(I)*SSF(J)) + ELSE + VCV(I,J) = VCV(I,J)/(SSF(1)*SSF(1)) + END IF + 400 CONTINUE + 410 CONTINUE + + RETURN + END SUBROUTINE +*DPACK + SUBROUTINE DPACK + & (N2,N1,V1,V2,IFIX) +C***Begin Prologue DPACK +C***Refer to ODR +C***Routines Called DCOPY +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Select the unfixed elements of V2 and return them in V1 +C***End Prologue DPACK + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & N1,N2 + +C...Array arguments + REAL (KIND=R8) + & V1(N2),V2(N2) + INTEGER + & IFIX(N2) + +C...Local scalars + INTEGER + & I + +C...External subroutines + EXTERNAL + & DCOPY + +C...Variable definitions (alphabetically) +C I: An indexing variable. +C IFIX: The values designating whether the elements of V2 are +C fixed at their input values or not. +C N1: The number of items in V1. +C N2: The number of items in V2. +C V1: The vector of the unfixed items from V2. +C V2: The vector of the fixed and unfixed items from which the +C unfixed elements are to be extracted. + + +C***First executable statement DPACK + + + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I=1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1+1 + V1(N1) = V2(I) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY(N2,V2,1,V1,1) + END IF + + RETURN + END SUBROUTINE +*DPPNML + FUNCTION DPPNML + & (P) + & RESULT(DPPNMLR) +C***Begin Prologue DPPNML +C***Refer to ODR +C***Routines Called (None) +C***Date Written 901207 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Author Filliben, James J., +C Statistical Engineering Division +C National Bureau of Standards +C Washington, D. C. 20234 +C (Original Version--June 1972. +C (Updated --September 1975, +C November 1975, AND +C October 1976. +C***Purpose Compute the percent point function value for the +C normal (Gaussian) distribution with mean 0 and standard +C deviation 1, and with probability density function +C F(X) = (1/SQRT(2*PI))*EXP(-X*X/2). +C (Adapted from DATAPAC subroutine TPPF, with modifications +C to facilitate conversion to REAL (KIND=R8) automatically) +C***Description +C --The coding as presented below is essentially +C identical to that presented by Odeh and Evans +C as Algortihm 70 of Applied Statistics. +C --As pointed out by Odeh and Evans in Applied +C Statistics, their algorithm representes a +C substantial improvement over the previously employed +C Hastings approximation for the normal percent point +C function, with accuracy improving from 4.5*(10**-4) +C to 1.5*(10**-8). +C***References Odeh and Evans, the Percentage Points of the Normal +C Distribution, Algortihm 70, Applied Statistics, 1974, +C Pages 96-97. +C Evans, Algorithms for Minimal Degree Polynomial and +C Rational Approximation, M. Sc. Thesis, 1972, +C University of Victoria, B. C., Canada. +C Hastings, Approximations for Digital Computers, 1955, +C Pages 113, 191, 192. +C National Bureau of Standards Applied Mathematics +C Series 55, 1964, Page 933, Formula 26.2.23. +C Filliben, Simple and Robust Linear Estimation of the +C Location Parameter of a Symmetric Distribution +C (Unpublished Ph.D. Dissertation, Princeton +C University), 1969, Pages 21-44, 229-231. +C Filliben, "The Percent Point Function", +C (Unpublished Manuscript), 1970, Pages 28-31. +C Johnson and Kotz, Continuous Univariate Distributions, +C Volume 1, 1970, Pages 40-111. +C Kelley Statistical Tables, 1948. +C Owen, Handbook of Statistical Tables, 1962, Pages 3-16. +C Pearson and Hartley, Biometrika Tables for +C Statisticians, Volume 1, 1954, Pages 104-113. +C***End Prologue DPPNML + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & P + +C...Result + REAL (KIND=R8) + & DPPNMLR + +C...Local scalars + REAL (KIND=R8) + & ADEN,ANUM,HALF,ONE,P0,P1,P2,P3,P4,Q0,Q1,Q2,Q3,Q4,R,T,TWO,ZERO + +C...Data statements + DATA + & P0,P1,P2,P3,P4 + & /-0.322232431088E0_R8,-1.0E0_R8,-0.342242088547E0_R8, + & -0.204231210245E-1_R8,-0.453642210148E-4_R8/ + DATA + & Q0,Q1,Q2,Q3,Q4 + & /0.993484626060E-1_R8,0.588581570495E0_R8, + & 0.531103462366E0_R8,0.103537752850E0_R8,0.38560700634E-2_R8/ + DATA + & ZERO,HALF,ONE,TWO + & /0.0E0_R8,0.5E0_R8,1.0E0_R8,2.0E0_R8/ + +C...Variable Definitions (alphabetically) +C ADEN: A value used in the approximation. +C ANUM: A value used in the approximation. +C HALF: The value 0.5E0_R8. +C ONE: The value 1.0E0_R8. +C P: The probability at which the percent point is to be +C evaluated. P must be between 0.0E0_R8 and 1.0E0_R8, exclusive. +C P0: A parameter used in the approximation. +C P1: A parameter used in the approximation. +C P2: A parameter used in the approximation. +C P3: A parameter used in the approximation. +C P4: A parameter used in the approximation. +C Q0: A parameter used in the approximation. +C Q1: A parameter used in the approximation. +C Q2: A parameter used in the approximation. +C Q3: A parameter used in the approximation. +C Q4: A parameter used in the approximation. +C R: The probability at which the percent point is evaluated. +C T: A value used in the approximation. +C TWO: The value 2.0E0_R8. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DPPT + + + IF (P.EQ.HALF) THEN + DPPNMLR = ZERO + + ELSE + R = P + IF (P.GT.HALF) R = ONE - R + T = SQRT(-TWO*LOG(R)) + ANUM = ((((T*P4+P3)*T+P2)*T+P1)*T+P0) + ADEN = ((((T*Q4+Q3)*T+Q2)*T+Q1)*T+Q0) + DPPNMLR = T + (ANUM/ADEN) + + IF (P.LT.HALF) DPPNMLR = -DPPNMLR + END IF + + RETURN + + END FUNCTION +*DPPT + FUNCTION DPPT + & (P, IDF) + & RESULT (DPPTR) +C***Begin Prologue DPPT +C***Refer to ODR +C***Routines Called DPPNML +C***Date Written 901207 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Author Filliben, James J., +C Statistical Engineering Division +C National Bureau of Standards +C Washington, D. C. 20234 +C (Original Version--October 1975.) +C (Updated --November 1975.) +C***Purpose Compute the percent point function value for the +C student's T distribution with IDF degrees of freedom. +C (Adapted from DATAPAC subroutine TPPF, with modifications +C to facilitate conversion to REAL (KIND=R8) automatically) +C***Description +C --For IDF = 1 AND IDF = 2, the percent point function +C for the T distribution exists in simple closed form +C and so the computed percent points are exact. +C --For IDF between 3 and 6, inclusively, the approximation +C is augmented by 3 iterations of Newton's method to +C improve the accuracy, especially for P near 0 or 1. +C***References National Bureau of Standards Applied Mathmatics +C Series 55, 1964, Page 949, Formula 26.7.5. +C Johnson and Kotz, Continuous Univariate Distributions, +C Volume 2, 1970, Page 102, Formula 11. +C Federighi, "Extended Tables of the Percentage Points +C of Student"S T Distribution, Journal of the American +C Statistical Association, 1969, Pages 683-688. +C Hastings and Peacock, Statistical Distributions, A +C Handbook for Students and Practitioners, 1975, +C Pages 120-123. +C***End Prologue DPPT + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & P + INTEGER + & IDF + +C...Result + REAL (KIND=R8) + & DPPTR + +C...Local scalars + REAL (KIND=R8) + & ARG,B21,B31,B32,B33,B34,B41,B42,B43,B44,B45, + & B51,B52,B53,B54,B55,B56,C,CON,D1,D3,D5,D7,D9,DF,EIGHT,FIFTN, + & HALF,ONE,PI,PPFN,S,TERM1,TERM2,TERM3,TERM4,TERM5,THREE,TWO, + & Z,ZERO + INTEGER + & IPASS,MAXIT + +C...External functions + REAL (KIND=R8) + & DPPNML + EXTERNAL + & DPPNML + +C...Data statements + DATA + & B21 + & /4.0E0_R8/ + DATA + & B31, B32, B33, B34 + & /96.0E0_R8,5.0E0_R8,16.0E0_R8,3.0E0_R8/ + DATA + & B41, B42, B43, B44, B45 + & /384.0E0_R8,3.0E0_R8,19.0E0_R8,17.0E0_R8,-15.0E0_R8/ + DATA + & B51,B52,B53,B54,B55,B56 + & /9216.0E0_R8,79.0E0_R8,776.0E0_R8,1482.0E0_R8,-1920.0E0_R8, + & -945.0E0_R8/ + DATA + & ZERO,HALF,ONE,TWO,THREE,EIGHT,FIFTN + & /0.0E0_R8,0.5E0_R8,1.0E0_R8,2.0E0_R8,3.0E0_R8,8.0E0_R8, + & 15.0E0_R8/ + +C...Variable definitions (alphabetically) +C ARG: A value used in the approximation. +C B21: A parameter used in the approximation. +C B31: A parameter used in the approximation. +C B32: A parameter used in the approximation. +C B33: A parameter used in the approximation. +C B34: A parameter used in the approximation. +C B41: A parameter used in the approximation. +C B42: A parameter used in the approximation. +C B43: A parameter used in the approximation. +C B44: A parameter used in the approximation. +C B45: A parameter used in the approximation. +C B51: A parameter used in the approximation. +C B52: A parameter used in the approximation. +C B53: A parameter used in the approximation. +C B54: A parameter used in the approximation. +C B55: A parameter used in the approximation. +C B56: A parameter used in the approximation. +C C: A value used in the approximation. +C CON: A value used in the approximation. +C DF: The degrees of freedom. +C D1: A value used in the approximation. +C D3: A value used in the approximation. +C D5: A value used in the approximation. +C D7: A value used in the approximation. +C D9: A value used in the approximation. +C EIGHT: The value 8.0E0_R8. +C FIFTN: The value 15.0E0_R8. +C HALF: The value 0.5E0_R8. +C IDF: The (positive integer) degrees of freedom. +C IPASS: A value used in the approximation. +C MAXIT: The maximum number of iterations allowed for the approx. +C ONE: The value 1.0E0_R8. +C P: The probability at which the percent point is to be +C evaluated. P must lie between 0.0DO and 1.0E0_R8, exclusive. +C PI: The value of pi. +C PPFN: The normal percent point value. +C S: A value used in the approximation. +C TERM1: A value used in the approximation. +C TERM2: A value used in the approximation. +C TERM3: A value used in the approximation. +C TERM4: A value used in the approximation. +C TERM5: A value used in the approximation. +C THREE: The value 3.0E0_R8. +C TWO: The value 2.0E0_R8. +C Z: A value used in the approximation. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DPPT + + + PI = 3.141592653589793238462643383279E0_R8 + DF = IDF + MAXIT = 5 + + IF (IDF.LE.0) THEN + +C Treat the IDF < 1 case + DPPTR = ZERO + + ELSE IF (IDF.EQ.1) THEN + +C Treat the IDF = 1 (Cauchy) case + ARG = PI*P + DPPTR = -COS(ARG)/SIN(ARG) + + ELSE IF (IDF.EQ.2) THEN + +C Treat the IDF = 2 case + TERM1 = SQRT(TWO)/TWO + TERM2 = TWO*P - ONE + TERM3 = SQRT(P*(ONE-P)) + DPPTR = TERM1*TERM2/TERM3 + + ELSE IF (IDF.GE.3) THEN + +C Treat the IDF greater than or equal to 3 case + PPFN = DPPNML(P) + D1 = PPFN + D3 = PPFN**3 + D5 = PPFN**5 + D7 = PPFN**7 + D9 = PPFN**9 + TERM1 = D1 + TERM2 = (ONE/B21)*(D3+D1)/DF + TERM3 = (ONE/B31)*(B32*D5+B33*D3+B34*D1)/(DF**2) + TERM4 = (ONE/B41)*(B42*D7+B43*D5+B44*D3+B45*D1)/(DF**3) + TERM5 = (ONE/B51)*(B52*D9+B53*D7+B54*D5+B55*D3+B56*D1)/(DF**4) + DPPTR = TERM1 + TERM2 + TERM3 + TERM4 + TERM5 + + IF (IDF.EQ.3) THEN + +C Augment the results for the IDF = 3 case + CON = PI*(P-HALF) + ARG = DPPTR/SQRT(DF) + Z = ATAN(ARG) + DO 70 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+S*C-CON)/(TWO*C**2) + 70 CONTINUE + DPPTR = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.4) THEN + +C Augment the results for the IDF = 4 case + CON = TWO*(P-HALF) + ARG = DPPTR/SQRT(DF) + Z = ATAN(ARG) + DO 90 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2)*S-CON)/((ONE+HALF)*C**3) + 90 CONTINUE + DPPTR = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.5) THEN + +C Augment the results for the IDF = 5 case + + CON = PI*(P-HALF) + ARG = DPPTR/SQRT(DF) + Z = ATAN(ARG) + DO 110 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+(C+(TWO/THREE)*C**3)*S-CON)/ + & ((EIGHT/THREE)*C**4) + 110 CONTINUE + DPPTR = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.6) THEN + +C Augment the results for the IDF = 6 case + CON = TWO*(P-HALF) + ARG = DPPTR/SQRT(DF) + Z = ATAN(ARG) + DO 130 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2 + (THREE/EIGHT)*C**4)*S-CON)/ + & ((FIFTN/EIGHT)*C**5) + 130 CONTINUE + DPPTR = SQRT(DF)*S/C + END IF + END IF + + RETURN + + END FUNCTION +*DPVB + SUBROUTINE DPVB + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVB, + & WRK1,WRK2,WRK6) +C***Begin Prologue DPVB +C***Refer to ODR +C***Routines Called FCN +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute the NROW-th function value using BETA(J) + STP +C***End Prologue DPVB + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PVB,STP + INTEGER + & ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & BETAJ + +C...Routine names used as subprogram arguments +C FCN: The user-supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BETAJ: The current estimate of the jth parameter. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C J: The index of the partial derivative being examined. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the independent variable array at +C which the derivative is to be checked. +C PVB: The function value for the selected observation & response. +C STP: The step size for the finite difference derivative. +C XPLUSD: The values of X + DELTA. + + +C***First executable statement DPVB + + +C Compute predicted values + + BETAJ = BETA(J) + BETA(J) = BETA(J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 003,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + BETA(J) = BETAJ + + PVB = WRK2(NROW,LQ) + + RETURN + END SUBROUTINE +*DPVD + SUBROUTINE DPVD + & (FCN, + & N,M,NP,NQ, + & BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + & NROW,J,LQ,STP, + & ISTOP,NFEV,PVD, + & WRK1,WRK2,WRK6) +C***Begin Prologue DPVD +C***Refer to ODR +C***Routines Called FCN +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute NROW-th function value using +C X(NROW,J) + DELTA(NROW,J) + STP +C***End Prologue DPVD + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + REAL (KIND=R8) + & PVD,STP + INTEGER + & ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Subroutine arguments + EXTERNAL + & FCN + +C...Local scalars + REAL (KIND=R8) + & XPDJ + +C...Routine names used as subprogram arguments +C FCN: The user-supplied subroutine for evaluating the model. + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of X are +C fixed at their input values or not. +C ISTOP: The variable designating whether there are problems +C computing the function at the current BETA and DELTA. +C J: The index of the partial derivative being examined. +C LDIFX: The leading dimension of array IFIXX. +C LQ: The response currently being examined. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C NFEV: The number of function evaluations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C NROW: The row number of the independent variable array at +C which the derivative is to be checked. +C PVD: The function value for the selected observation & response. +C STP: The step size for the finite difference derivative. +C XPDJ: The (NROW,J)th element of XPLUSD. +C XPLUSD: The values of X + DELTA. + + +C***First executable statement DPVD + + +C Compute predicted values + + XPDJ = XPLUSD(NROW,J) + XPLUSD(NROW,J) = XPLUSD(NROW,J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + & N,M,NP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & 003,WRK2,WRK6,WRK1, + & ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + XPLUSD(NROW,J) = XPDJ + + PVD = WRK2(NROW,LQ) + + RETURN + END SUBROUTINE +*DSCALE + SUBROUTINE DSCALE + & (N,M,SCL,LDSCL,T,LDT,SCLT,LDSCLT) +C***Begin Prologue DSCALE +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Scale T by the inverse of SCL, I.E., compute T/SCL +C***End Prologue DSCALE + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDT,LDSCL,LDSCLT,M,N + +C...Array arguments + REAL (KIND=R8) + & T(LDT,M),SCL(LDSCL,M),SCLT(LDSCLT,M) + +C...Local scalars + REAL (KIND=R8) + & ONE,TEMP,ZERO + INTEGER + & I,J + +C...Data statements + DATA + & ONE,ZERO + & /1.0E0_R8,0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C J: An indexing variable. +C LDSCL: The leading dimension of array SCL. +C LDSCLT: The leading dimension of array SCLT. +C LDT: The leading dimension of array T. +C M: The number of columns of data in T. +C N: The number of rows of data in T. +C ONE: The value 1.0E0_R8. +C SCL: The scale values. +C SCLT: The inversely scaled matrix. +C T: The array to be inversely scaled by SCL. +C TEMP: A temporary scalar. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DSCALE + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (SCL(1,1).GE.ZERO) THEN + IF (LDSCL.GE.N) THEN + DO 80 J=1,M + DO 70 I=1,N + SCLT(I,J) = T(I,J)/SCL(I,J) + 70 CONTINUE + 80 CONTINUE + ELSE + DO 100 J=1,M + TEMP = ONE/SCL(1,J) + DO 90 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 90 CONTINUE + 100 CONTINUE + END IF + ELSE + TEMP = ONE/ABS(SCL(1,1)) + DO 120 J=1,M + DO 110 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 110 CONTINUE + 120 CONTINUE + END IF + + RETURN + END SUBROUTINE +*DSCLB + SUBROUTINE DSCLB + & (NP,BETA,SSF) +C***Begin Prologue DSCLB +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Select scaling values for BETA according to the +C algorithm given in the ODRPACK95 reference guide +C***End Prologue DSCLB + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & NP + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),SSF(NP) + +C...Local scalars + REAL (KIND=R8) + & BMAX,BMIN,ONE,TEN,ZERO + INTEGER + & K + LOGICAL + & BIGDIF + +C...Data statements + DATA + & ZERO,ONE,TEN + & /0.0E0_R8,1.0E0_R8,10.0E0_R8/ + +C...Variable Definitions (alphabetically) +C BETA: The function parameters. +C BIGDIF: The variable designating whether there is a significant +C difference in the magnitudes of the nonzero elements of +C BETA (BIGDIF=.TRUE.) or not (BIGDIF=.FALSE.). +C BMAX: The largest nonzero magnitude. +C BMIN: The smallest nonzero magnitude. +C K: An indexing variable. +C NP: The number of function parameters. +C ONE: The value 1.0E0_R8. +C SSF: The scaling values for BETA. +C TEN: The value 10.0E0_R8. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DSCLB + + + BMAX = ABS(BETA(1)) + DO 10 K=2,NP + BMAX = MAX(BMAX,ABS(BETA(K))) + 10 CONTINUE + + IF (BMAX.EQ.ZERO) THEN + +C All input values of BETA are zero + + DO 20 K=1,NP + SSF(K) = ONE + 20 CONTINUE + + ELSE + +C Some of the input values are nonzero + + BMIN = BMAX + DO 30 K=1,NP + IF (BETA(K).NE.ZERO) THEN + BMIN = MIN(BMIN,ABS(BETA(K))) + END IF + 30 CONTINUE + BIGDIF = LOG10(BMAX)-LOG10(BMIN).GE.ONE + DO 40 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + SSF(K) = TEN/BMIN + ELSE + IF (BIGDIF) THEN + SSF(K) = ONE/ABS(BETA(K)) + ELSE + SSF(K) = ONE/BMAX + END IF + END IF + 40 CONTINUE + + END IF + + RETURN + END SUBROUTINE +*DSCLD + SUBROUTINE DSCLD + & (N,M,X,LDX,TT,LDTT) +C***Begin Prologue DSCLD +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Select scaling values for DELTA according to the +C algorithm given in the ODRPACK95 reference guide +C***End Prologue DSCLD + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDTT,LDX,M,N + +C...Array arguments + REAL (KIND=R8) + & TT(LDTT,M),X(LDX,M) + +C...Local scalars + REAL (KIND=R8) + & ONE,TEN,XMAX,XMIN,ZERO + INTEGER + & I,J + LOGICAL + & BIGDIF + +C...Data statements + DATA + & ZERO,ONE,TEN + & /0.0E0_R8,1.0E0_R8,10.0E0_R8/ + +C...Variable Definitions (alphabetically) +C BIGDIF: The variable designating whether there is a significant +C difference in the magnitudes of the nonzero elements of +C X (BIGDIF=.TRUE.) or not (BIGDIF=.FALSE.). +C I: An indexing variable. +C J: An indexing variable. +C LDTT: The leading dimension of array TT. +C LDX: The leading dimension of array X. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C ONE: The value 1.0E0_R8. +C TT: THE SCALING VALUES FOR DELTA. +C X: The independent variable. +C XMAX: The largest nonzero magnitude. +C XMIN: THE SMALLEST NONZERO MAGNITUDE. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DSCLD + + + DO 50 J=1,M + XMAX = ABS(X(1,J)) + DO 10 I=2,N + XMAX = MAX(XMAX,ABS(X(I,J))) + 10 CONTINUE + + IF (XMAX.EQ.ZERO) THEN + +C All input values of X(I,J), I=1,...,N, are zero + + DO 20 I=1,N + TT(I,J) = ONE + 20 CONTINUE + + ELSE + +C Some of the input values are nonzero + + XMIN = XMAX + DO 30 I=1,N + IF (X(I,J).NE.ZERO) THEN + XMIN = MIN(XMIN,ABS(X(I,J))) + END IF + 30 CONTINUE + BIGDIF = LOG10(XMAX)-LOG10(XMIN).GE.ONE + DO 40 I=1,N + IF (X(I,J).NE.ZERO) THEN + IF (BIGDIF) THEN + TT(I,J) = ONE/ABS(X(I,J)) + ELSE + TT(I,J) = ONE/XMAX + END IF + ELSE + TT(I,J) = TEN/XMIN + END IF + 40 CONTINUE + END IF + 50 CONTINUE + + RETURN + END SUBROUTINE +*DSETN + SUBROUTINE DSETN + & (N,M,X,LDX,NROW) +C***Begin Prologue DSETN +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Select the row at which the derivative will be checked +C***End Prologue DSETN + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDX,M,N,NROW + +C...Array arguments + REAL (KIND=R8) + & X(LDX,M) + +C...Local scalars + INTEGER + & I,J + +C...Variable Definitions (alphabetically) +C I: An index variable. +C J: An index variable. +C LDX: The leading dimension of array X. +C M: The number of columns of data in the independent variable. +C N: The number of observations. +C NROW: The selected row number of the independent variable. +C X: The independent variable. + + +C***First executable statement DSETN + + + IF ((NROW.GE.1) .AND. (NROW.LE.N)) RETURN + +C Select first row of independent variables which contains no zeros +C if there is one, otherwise first row is used. + + DO 20 I = 1, N + DO 10 J = 1, M + IF (X(I,J).EQ.0.0) GO TO 20 + 10 CONTINUE + NROW = I + RETURN + 20 CONTINUE + + NROW = 1 + + RETURN + END SUBROUTINE +*DSOLVE + SUBROUTINE DSOLVE(N,T,LDT,B,JOB) +C***Begin Prologue DSOLVE +C***Refer to ODR +C***Routines Called DAXPY,DDOT +C***Date Written 920220 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Solve systems of the form +C T * X = B or trans(T) * X = B +C where T is an upper or lower triangular matrix of order N, +C and the solution X overwrites the RHS B. +C (adapted from LINPACK subroutine DTRSL) +C***References Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W., +C *LINPACK Users Guide*, SIAM, 1979. +C***End Prologue DSOLVE + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & JOB,LDT,N + +C...Array arguments + REAL (KIND=R8) + & B(N),T(LDT,N) + +C...Local scalars + REAL (KIND=R8) + & TEMP,ZERO + INTEGER + & J1,J,JN + +C...External functions + REAL (KIND=R8) + & DDOT + EXTERNAL + & DDOT + +C...External subroutines + EXTERNAL + & DAXPY + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C B: On input: the right hand side; On exit: the solution +C J1: The first nonzero entry in T. +C J: An indexing variable. +C JN: The last nonzero entry in T. +C JOB: What kind of system is to be solved, where if JOB is +C 1 Solve T*X=B, T lower triangular, +C 2 Solve T*X=B, T upper triangular, +C 3 Solve trans(T)*X=B, T lower triangular, +C 4 Solve trans(T)*X=B, T upper triangular. +C LDT: The leading dimension of array T. +C N: The number of rows and columns of data in array T. +C T: The upper or lower tridiagonal system. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DSOLVE + + +C Find first nonzero diagonal entry in T + J1 = 0 + DO 10 J=1,N + IF (J1.EQ.0 .AND. T(J,J).NE.ZERO) THEN + J1 = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(J) = ZERO + END IF + 10 CONTINUE + IF (J1.EQ.0) RETURN + +C Find last nonzero diagonal entry in T + JN = 0 + DO 20 J=N,J1,-1 + IF (JN.EQ.0 .AND. T(J,J).NE.ZERO) THEN + JN = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(J) = ZERO + END IF + 20 CONTINUE + + IF (JOB.EQ.1) THEN + +C Solve T*X=B for T lower triangular + B(J1) = B(J1)/T(J1,J1) + DO 30 J = J1+1, JN + TEMP = -B(J-1) + CALL DAXPY(JN-J+1,TEMP,T(J,J-1),1,B(J),1) + IF (T(J,J).NE.ZERO) THEN + B(J) = B(J)/T(J,J) + ELSE + B(J) = ZERO + END IF + 30 CONTINUE + + ELSE IF (JOB.EQ.2) THEN + +C Solve T*X=B for T upper triangular. + B(JN) = B(JN)/T(JN,JN) + DO 40 J = JN-1,J1,-1 + TEMP = -B(J+1) + CALL DAXPY(J,TEMP,T(1,J+1),1,B(1),1) + IF (T(J,J).NE.ZERO) THEN + B(J) = B(J)/T(J,J) + ELSE + B(J) = ZERO + END IF + 40 CONTINUE + + ELSE IF (JOB.EQ.3) THEN + +C Solve trans(T)*X=B for T lower triangular. + B(JN) = B(JN)/T(JN,JN) + DO 50 J = JN-1,J1,-1 + B(J) = B(J) - DDOT(JN-J+1,T(J+1,J),1,B(J+1),1) + IF (T(J,J).NE.ZERO) THEN + B(J) = B(J)/T(J,J) + ELSE + B(J) = ZERO + END IF + 50 CONTINUE + + ELSE IF (JOB.EQ.4) THEN + +C Solve trans(T)*X=B for T upper triangular. + B(J1) = B(J1)/T(J1,J1) + DO 60 J = J1+1,JN + B(J) = B(J) - DDOT(J-1,T(1,J),1,B(1),1) + IF (T(J,J).NE.ZERO) THEN + B(J) = B(J)/T(J,J) + ELSE + B(J) = ZERO + END IF + 60 CONTINUE + END IF + + RETURN + END SUBROUTINE +*DUNPAC + SUBROUTINE DUNPAC + & (N2,V1,V2,IFIX) +C***Begin Prologue DUNPAC +C***Refer to ODR +C***Routines Called DCOPY +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Copy the elements of V1 into the locations of V2 which are +C unfixed +C***End Prologue DUNPAC + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & N2 + +C...Array arguments + REAL (KIND=R8) + & V1(N2),V2(N2) + INTEGER + & IFIX(N2) + +C...Local scalars + INTEGER + & I,N1 + +C...External subroutines + EXTERNAL + & DCOPY + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C IFIX: The values designating whether the elements of V2 are +C fixed at their input values or not. +C ODRPACK95 reference guide.) +C N1: The number of items in V1. +C N2: The number of items in V2. +C V1: The vector of the unfixed items. +C V2: The vector of the fixed and unfixed items into which the +C elements of V1 are to be inserted. + + +C***First executable statement DUNPAC + + + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I = 1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1 + 1 + V2(I) = V1(N1) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY(N2,V1,1,V2,1) + END IF + + RETURN + END SUBROUTINE +*DVEVTR + SUBROUTINE DVEVTR + & (M,NQ,INDX, + & V,LDV,LD2V, E,LDE, VE,LDVE,LD2VE, VEV,LDVEV, + & WRK5) +C***Begin Prologue DVEVTR +C***Refer to ODR +C***Routines Called DSOLVE +C***Date Written 910613 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute V*E*trans(V) for the (INDX)TH M by NQ array in V +C***End Prologue DVEVTR + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & INDX,LDE,LDV,LDVE,LDVEV,LD2V,LD2VE,M,NQ + +C...Array arguments + REAL (KIND=R8) + & E(LDE,M),V(LDV,LD2V,NQ),VE(LDVE,LD2VE,M),VEV(LDVEV,NQ),WRK5(M) + +C...Local scalars + REAL (KIND=R8) + & ZERO + INTEGER + & J,L1,L2 + +C...External subroutines + EXTERNAL + & DSOLVE + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C INDX: The row in V in which the M by NQ array is stored. +C J: An indexing variable. +C LDE: The leading dimension of array E. +C LDV: The leading dimension of array V. +C LDVE: The leading dimension of array VE. +C LDVEV: The leading dimension of array VEV. +C LD2V: The second dimension of array V. +C L1: An indexing variable. +C L2: An indexing variable. +C M: The number of columns of data in the independent variable. +C NQ: The number of responses per observation. +C E: The M by M matrix of the factors so ETE = (D**2 + ALPHA*T**2). +C V: An array of NQ by M matrices. +C VE: The NQ by M array VE = V * inv(E) +C VEV: The NQ by NQ array VEV = V * inv(ETE) * trans(V). +C WRK5: An M work vector. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DVEVTR + + + IF (NQ.EQ.0 .OR. M.EQ.0) RETURN + + DO 140 L1 = 1,NQ + DO 110 J = 1,M + WRK5(J) = V(INDX,J,L1) + 110 CONTINUE + CALL DSOLVE(M,E,LDE,WRK5,4) + DO 120 J = 1,M + VE(INDX,L1,J) = WRK5(J) + 120 CONTINUE + 140 CONTINUE + + DO 230 L1 = 1,NQ + DO 220 L2 = 1,L1 + VEV(L1,L2) = ZERO + DO 210 J = 1,M + VEV(L1,L2) = VEV(L1,L2) + VE(INDX,L1,J)*VE(INDX,L2,J) + 210 CONTINUE + VEV(L2,L1) = VEV(L1,L2) + 220 CONTINUE + 230 CONTINUE + + RETURN + END SUBROUTINE +*DWGHT + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) +C***Begin Prologue DWGHT +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Scale matrix T using WT, i.e., compute WTT = WT*T +C***End Prologue DWGHT + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDWT,LD2WT,M,N + +C...Array arguments + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + +C...Local scalars + REAL (KIND=R8) + & TEMP,ZERO + INTEGER + & I,J,K + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C J: An indexing variable. +C K: An indexing variable. +C LDWT: The leading dimension of array WT. +C LD2WT: The second dimension of array WT. +C M: The number of columns of data in T. +C N: The number of rows of data in T. +C T: The array being scaled by WT. +C TEMP: A temporary scalar. +C WT: The weights. +C WTT: The results of weighting array T by WT. +C Array WTT can be the same as T only if the arrays in WT +C are upper triangular with zeros below the diagonal. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DWGHT + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WT(1,1,1).GE.ZERO) THEN + IF (LDWT.GE.N) THEN + IF (LD2WT.GE.M) THEN +C WT is an N-array of M by M matrices + DO 130 I=1,N + DO 120 J=1,M + TEMP = ZERO + DO 110 K=1,M + TEMP = TEMP + WT(I,J,K)*T(I,K) + 110 CONTINUE + WTT(I,J) = TEMP + 120 CONTINUE + 130 CONTINUE + ELSE +C WT is an N-array of diagonal matrices + DO 230 I=1,N + DO 220 J=1,M + WTT(I,J) = WT(I,1,J)*T(I,J) + 220 CONTINUE + 230 CONTINUE + END IF + ELSE + IF (LD2WT.GE.M) THEN +C WT is an M by M matrix + DO 330 I=1,N + DO 320 J=1,M + TEMP = ZERO + DO 310 K=1,M + TEMP = TEMP + WT(1,J,K)*T(I,K) + 310 CONTINUE + WTT(I,J) = TEMP + 320 CONTINUE + 330 CONTINUE + ELSE +C WT is a diagonal matrice + DO 430 I=1,N + DO 420 J=1,M + WTT(I,J) = WT(1,1,J)*T(I,J) + 420 CONTINUE + 430 CONTINUE + END IF + END IF + ELSE +C WT is a scalar + DO 520 J=1,M + DO 510 I=1,N + WTT(I,J) = ABS(WT(1,1,1))*T(I,J) + 510 CONTINUE + 520 CONTINUE + END IF + + RETURN + END SUBROUTINE +*DWINF + SUBROUTINE DWINF + & (N,M,NP,NQ,LDWE,LD2WE,ISODR, + & DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + & RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + & OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + & PARTLI,SSTOLI,TAUFCI,EPSMAI, + & BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + & FSI,FJACBI,WE1I,DIFFI, + & DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + & WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + & LOWERI,UPPERI, + & LWKMN) +C***Begin Prologue DWINF +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Set storage locations within REAL (KIND=R8) work space +C***End Prologue DWINF + +C...Scalar arguments + INTEGER + & ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,DELTAI,DELTNI,DELTSI, + & DIFFI,EPSI,EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,LDWE,LD2WE,LOWERI, + & LWKMN,M,N,NP,NQ,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI, + & RCONDI,RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI, + & UI,UPPERI,VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + & WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + & ISODR + +C...Local scalars + INTEGER + & NEXT + +C...Variable Definitions (alphabetically) +C ACTRSI: The location in array WORK of variable ACTRS. +C ALPHAI: The location in array WORK of variable ALPHA. +C BETACI: The starting location in array WORK of array BETAC. +C BETANI: The starting location in array WORK of array BETAN. +C BETASI: The starting location in array WORK of array BETAS. +C BETA0I: The starting location in array WORK of array BETA0. +C DELTAI: The starting location in array WORK of array DELTA. +C DELTNI: The starting location in array WORK of array DELTAN. +C DELTSI: The starting location in array WORK of array DELTAS. +C DIFFI: The starting location in array WORK of array DIFF. +C EPSI: The starting location in array WORK of array EPS. +C EPSMAI: The location in array WORK of variable EPSMAC. +C ETAI: The location in array WORK of variable ETA. +C FJACBI: The starting location in array WORK of array FJACB. +C FJACDI: The starting location in array WORK of array FJACD. +C FNI: The starting location in array WORK of array FN. +C FSI: The starting location in array WORK of array FS. +C ISODR: The variable designating whether the solution is by ODR +C (ISODR=TRUE) or by OLS (ISODR=FALSE). +C LDWE: The leading dimension of array WE. +C LD2WE: The second dimension of array WE. +C LWKMN: The minimum acceptable length of vector work. +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NEXT: The next available location with WORK. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C OLMAVI: The location in array WORK of variable OLMAVG. +C OMEGAI: The starting location in array WORK of array OMEGA. +C PARTLI: The location in array WORK of variable PARTOL. +C PNORMI: The location in array WORK of variable PNORM. +C PRERSI: The location in array WORK of variable PRERS. +C QRAUXI: The starting location in array WORK of array QRAUX. +C RCONDI: The location in array WORK of variable RCONDI. +C RNORSI: The location in array WORK of variable RNORMS. +C RVARI: The location in array WORK of variable RVAR. +C SDI: The starting location in array WORK of array SD. +C SI: The starting location in array WORK of array S. +C SSFI: The starting location in array WORK of array SSF. +C SSI: The starting location in array WORK of array SS. +C SSTOLI: The location in array WORK of variable SSTOL. +C TAUFCI: The location in array WORK of variable TAUFAC. +C TAUI: The location in array WORK of variable TAU. +C TI: The starting location in array WORK of array T. +C TTI: The starting location in array WORK of array TT. +C UI: The starting location in array WORK of array U. +C VCVI: The starting location in array WORK of array VCV. +C WE1I: The starting location in array WORK of array WE1. +C WRK1I: The starting location in array WORK of array WRK1. +C WRK2I: The starting location in array WORK of array WRK2. +C WRK3I: The starting location in array WORK of array WRK3. +C WRK4I: The starting location in array WORK of array WRK4. +C WRK5I: The starting location in array WORK of array WRK5. +C WRK6I: The starting location in array WORK of array WRK6. +C WRK7I: The starting location in array WORK of array WRK7. +C WSSI: The location in array WORK of variable WSS. +C WSSDEI: The location in array WORK of variable WSSDEL. +C WSSEPI: The location in array work of variable WSSEPS. +C XPLUSI: The starting location in array WORK of array XPLUSD. + + +C***First executable statement DWINF + + + IF (N.GE.1 .AND. M.GE.1 .AND. NP.GE.1 .AND. NQ.GE.1 .AND. + & LDWE.GE.1 .AND. LD2WE.GE.1) THEN + + DELTAI = 1 + EPSI = DELTAI + N*M + XPLUSI = EPSI + N*NQ + FNI = XPLUSI + N*M + SDI = FNI + N*NQ + VCVI = SDI + NP + RVARI = VCVI + NP*NP + + WSSI = RVARI + 1 + WSSDEI = WSSI + 1 + WSSEPI = WSSDEI + 1 + RCONDI = WSSEPI + 1 + ETAI = RCONDI + 1 + OLMAVI = ETAI + 1 + + TAUI = OLMAVI + 1 + ALPHAI = TAUI + 1 + ACTRSI = ALPHAI + 1 + PNORMI = ACTRSI + 1 + RNORSI = PNORMI + 1 + PRERSI = RNORSI + 1 + PARTLI = PRERSI + 1 + SSTOLI = PARTLI + 1 + TAUFCI = SSTOLI + 1 + EPSMAI = TAUFCI + 1 + BETA0I = EPSMAI + 1 + + BETACI = BETA0I + NP + BETASI = BETACI + NP + BETANI = BETASI + NP + SI = BETANI + NP + SSI = SI + NP + SSFI = SSI + NP + QRAUXI = SSFI + NP + UI = QRAUXI + NP + FSI = UI + NP + + FJACBI = FSI + N*NQ + + WE1I = FJACBI + N*NP*NQ + + DIFFI = WE1I + LDWE*LD2WE*NQ + + NEXT = DIFFI + NQ*(NP+M) + + IF (ISODR) THEN + DELTSI = NEXT + DELTNI = DELTSI + N*M + TI = DELTNI + N*M + TTI = TI + N*M + OMEGAI = TTI + N*M + FJACDI = OMEGAI + NQ*NQ + WRK1I = FJACDI + N*M*NQ + NEXT = WRK1I + N*M*NQ + ELSE + DELTSI = DELTAI + DELTNI = DELTAI + TI = DELTAI + TTI = DELTAI + OMEGAI = DELTAI + FJACDI = DELTAI + WRK1I = DELTAI + END IF + + WRK2I = NEXT + WRK3I = WRK2I + N*NQ + WRK4I = WRK3I + NP + WRK5I = WRK4I + M*M + WRK6I = WRK5I + M + WRK7I = WRK6I + N*NQ*NP + LOWERI = WRK7I + 5*NQ + UPPERI = LOWERI + NP + NEXT = UPPERI + NP + + LWKMN = NEXT + ELSE + DELTAI = 1 + EPSI = 1 + XPLUSI = 1 + FNI = 1 + SDI = 1 + VCVI = 1 + RVARI = 1 + WSSI = 1 + WSSDEI = 1 + WSSEPI = 1 + RCONDI = 1 + ETAI = 1 + OLMAVI = 1 + TAUI = 1 + ALPHAI = 1 + ACTRSI = 1 + PNORMI = 1 + RNORSI = 1 + PRERSI = 1 + PARTLI = 1 + SSTOLI = 1 + TAUFCI = 1 + EPSMAI = 1 + BETA0I = 1 + BETACI = 1 + BETASI = 1 + BETANI = 1 + SI = 1 + SSI = 1 + SSFI = 1 + QRAUXI = 1 + FSI = 1 + UI = 1 + FJACBI = 1 + WE1I = 1 + DIFFI = 1 + DELTSI = 1 + DELTNI = 1 + TI = 1 + TTI = 1 + FJACDI = 1 + OMEGAI = 1 + WRK1I = 1 + WRK2I = 1 + WRK3I = 1 + WRK4I = 1 + WRK5I = 1 + WRK6I = 1 + WRK7I = 1 + LOWERI = 1 + UPPERI = 1 + LWKMN = 1 + END IF + + RETURN + END SUBROUTINE +*DXMY + SUBROUTINE DXMY + & (N,M,X,LDX,Y,LDY,XMY,LDXMY) +C***Begin Prologue DXMY +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute XMY = X - Y +C***End Prologue DXMY + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDX,LDXMY,LDY,M,N + +C...Array arguments + REAL (KIND=R8) + & X(LDX,M),XMY(LDXMY,M),Y(LDY,M) + +C...Local scalars + INTEGER + & I,J + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C J: An indexing variable. +C LDX: The leading dimension of array X. +C LDXMY: The leading dimension of array XMY. +C LDY: The leading dimension of array Y. +C M: The number of columns of data in arrays X and Y. +C N: The number of rows of data in arrays X and Y. +C X: The first of the two arrays. +C XMY: The values of X-Y. +C Y: The second of the two arrays. + + +C***First executable statement DXMY + + + DO 20 J=1,M + DO 10 I=1,N + XMY(I,J) = X(I,J) - Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END SUBROUTINE +*DXPY + SUBROUTINE DXPY + & (N,M,X,LDX,Y,LDY,XPY,LDXPY) +C***Begin Prologue DXPY +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Compute XPY = X + Y +C***End Prologue DXPY + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDX,LDXPY,LDY,M,N + +C...Array arguments + REAL (KIND=R8) + & X(LDX,M),XPY(LDXPY,M),Y(LDY,M) + +C...Local scalars + INTEGER + & I,J + +C...Variable Definitions (alphabetically) +C I: An indexing variable. +C J: An indexing variable. +C LDX: The leading dimension of array X. +C LDXPY: The leading dimension of array XPY. +C LDY: The leading dimension of array Y. +C M: The number of columns of data in arrays X and Y. +C N: The number of rows of data in arrays X and Y. +C X: The first of the two arrays to be added together. +C XPY: The values of X+Y. +C Y: The second of the two arrays to be added together. + + +C***First executable statement DXPY + + + DO 20 J=1,M + DO 10 I=1,N + XPY(I,J) = X(I,J) + Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END SUBROUTINE +*DZERO + SUBROUTINE DZERO + & (N,M,A,LDA) +C***Begin Prologue DZERO +C***Refer to ODR +C***Routines Called (None) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920304 (YYMMDD) +C***Purpose Set A = ZERO +C***End Prologue DZERO + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDA,M,N + +C...Array arguments + REAL (KIND=R8) + & A(LDA,M) + +C...Local scalars + REAL (KIND=R8) + & ZERO + INTEGER + & I,J + +C...Data statements + DATA + & ZERO + & /0.0E0_R8/ + +C...Variable Definitions (alphabetically) +C A: The array to be set to zero. +C I: An indexing variable. +C J: An indexing variable. +C LDA: The leading dimension of array A. +C M: The number of columns to be set to zero. +C N: The number of rows to be set to zero. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DZERO + + + DO 20 J=1,M + DO 10 I=1,N + A(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + + RETURN + END SUBROUTINE diff --git a/dataassim/math/optimization/odrpack95/real_precision.f b/dataassim/math/optimization/odrpack95/real_precision.f new file mode 100644 index 0000000..63d727d --- /dev/null +++ b/dataassim/math/optimization/odrpack95/real_precision.f @@ -0,0 +1,5 @@ +C From HOMPACK90. + MODULE REAL_PRECISION +C This is for 64-bit arithmetic. + INTEGER, PARAMETER:: R8=SELECTED_REAL_KIND(13) + END MODULE REAL_PRECISION diff --git a/dataassim/math/optimization/odrpack95/restart_example.f b/dataassim/math/optimization/odrpack95/restart_example.f new file mode 100644 index 0000000..a42c029 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/restart_example.f @@ -0,0 +1,172 @@ +C +C This example takes drive4.f and modifies it to stop ODRPACK95 and use the +C restart facility. Run diff to see what additions were made. +C + +C This sample problem comes from Zwolak et al. 2001 (High Performance Computing +C Symposium, "Estimating rate constants in cell cycle models"). The call to +C ODRPACK95 is modified from the call the authors make to ODRPACK. This is +C done to illustrate the need for bounds. The authors could just have easily +C used the call statement here to solve their problem. +C +C Curious users are encouraged to remove the bounds in the call statement, +C run the code, and compare the results to the current call statement. + PROGRAM SAMPLE + USE REAL_PRECISION + USE ODRPACK95 + IMPLICIT NONE + INTEGER :: I + REAL (KIND=R8) :: C, M, TOUT + INTERFACE + SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB, + + IFIXX,LDIFX,IDEVAL,F,FJACB,FJACD,ISTOP) + USE REAL_PRECISION + INTEGER, INTENT(IN) :: IDEVAL,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + INTEGER, INTENT(IN) :: IFIXB(NP),IFIXX(LDIFX,M) + REAL(KIND=R8), INTENT(IN) :: BETA(NP),XPLUSD(LDN,M) + INTEGER, INTENT(OUT) :: ISTOP + REAL(KIND=R8), INTENT(OUT) :: F(LDN,NQ),FJACB(LDN,LDNP,NQ), + + FJACD(LDN,LDM,NQ) + END SUBROUTINE FCN + END INTERFACE + REAL(KIND=R8) :: BETA(3) = (/ 1.1E-0_R8, 3.3E+0_R8, 8.7_R8 /) + REAL(KIND=R8), POINTER :: WORK(:) + INTEGER, POINTER :: IWORK(:) + OPEN(9,FILE="REPORT_RESTART") + WORK => NULL() + IWORK => NULL() + CALL ODR( + + FCN, + + N = 5, M = 1, NP = 3, NQ = 1, + + BETA = BETA, + + Y = RESHAPE((/ 55.0_R8, 45.0_R8, 40.0_R8, 30.0_R8, 20.0_R8 /), + + (/5,1/)), + + X = RESHAPE((/ 0.15_R8, 0.20_R8, 0.25_R8, 0.30_R8, 0.50_R8 /), + + (/5,1/)), + + LOWER = (/ 0.0_R8, 0.0_R8, 0.0_R8 /), + + IPRINT = 6666, + + LUNRPT = 9, + + MAXIT = 20, + + WORK = WORK, + + IWORK = IWORK + +) + WRITE(*,*) "Restarting ----------------------------------------" + CALL ODR( + + FCN, + + N = 5, M = 1, NP = 3, NQ = 1, + + BETA = BETA, + + Y = RESHAPE((/ 55.0_R8, 45.0_R8, 40.0_R8, 30.0_R8, 20.0_R8 /), + + (/5,1/)), + + X = RESHAPE((/ 0.15_R8, 0.20_R8, 0.25_R8, 0.30_R8, 0.50_R8 /), + + (/5,1/)), + + LOWER = (/ 0.0_R8, 0.0_R8, 0.0_R8 /), + + IPRINT = 6666, + + LUNRPT = 9, + + MAXIT = 20, + + WORK = WORK, + + IWORK = IWORK, + + JOB = 10000 + +) + CLOSE(9) +C The following code will reproduce the plot in Figure 2 of Zwolak et +C al. 2001. +C DO I = 0, 100 +C C = 0.05+(0.7-0.05)*I/100 +C TOUT = 1440.0D0 +C !CALL MPF(M,C,1.1D-10,3.3D-3,8.7D0,0.0D0,TOUT,C/2) +C CALL MPF(M,C,1.15395968E-02_R8, 2.61676386E-03_R8, +C + 9.23138811E+00_R8,0.0D0,TOUT,C/2) +C WRITE(*,*) C, TOUT +C END DO + END PROGRAM + + SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB, + + IFIXX,LDIFX,IDEVAL,F,FJACB,FJACD,ISTOP) + USE REAL_PRECISION + IMPLICIT NONE + INTEGER, INTENT(IN) :: IDEVAL,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + INTEGER, INTENT(IN) :: IFIXB(NP),IFIXX(LDIFX,M) + REAL(KIND=R8), INTENT(IN) :: BETA(NP),XPLUSD(LDN,M) + INTEGER, INTENT(OUT) :: ISTOP + REAL(KIND=R8), INTENT(OUT) :: F(LDN,NQ),FJACB(LDN,LDNP,NQ), + + FJACD(LDN,LDM,NQ) + ! Local variables + REAL(KIND=R8) :: MOUT + INTEGER :: I + ISTOP = 0 + FJACB(:,:,:) = 0.0E0_R8 + FJACD(:,:,:) = 0.0E0_R8 + IF ( MOD(IDEVAL,10).GE.1 ) THEN + DO I = 1, N + F(I,1) = 1440.0_R8 + CALL MPF(MOUT,XPLUSD(I,1),BETA(1),BETA(2),BETA(3),0.0_R8, + + F(I,1),XPLUSD(I,1)/2) + END DO + END IF + END SUBROUTINE FCN + +C------------------------------------------------------------------------------- +C +C MPF +C +C If ROOT is not zero then returns value of time when M==ROOT in TOUT. Else, +C runs until TOUT and returns value in M. If PRINT_EVERY is non-zero then +C the solution is printed every PRINT_EVERY time units or every H (which ever +C is greater). +C +C This routine is not meant to be precise, it is only intended to be good +C enough for providing a working example of ODRPACK95 with bounds. 4th order +C Runge Kutta and linear interpolation are used for numerical integration and +C root finding, respectively. +C +C M - MPF +C C - Total Cyclin +C KWEE, K25, K25P - Model parameters (BETA(1:3)) +C + SUBROUTINE MPF(M,C,KWEE,K25,K25P,PRINT_EVERY,TOUT,ROOT) + USE REAL_PRECISION + REAL (KIND=R8), INTENT(OUT) :: M + REAL (KIND=R8), INTENT(IN) :: C, KWEE, K25, K25P, + + PRINT_EVERY, ROOT + REAL (KIND=R8), INTENT(INOUT) :: TOUT + ! Local variables + REAL (KIND=R8), PARAMETER :: H = 1.0D-1 + REAL (KIND=R8) :: LAST_PRINT, LAST_M, LAST_T, T + REAL (KIND=R8) :: K1, K2, K3, K4, DMDT + M = 0.0D0 + T = 0.0D0 + LAST_PRINT = 0 + IF ( PRINT_EVERY .GT. 0.0D0 ) THEN + WRITE(*,*) T, M + END IF + DO WHILE ( T .LT. TOUT ) + LAST_T = T + LAST_M = M + K1 = H*DMDT(M,C,KWEE,K25,K25P) + K2 = H*DMDT(M+K1/2,C,KWEE,K25,K25P) + K3 = H*DMDT(M+K2/2,C,KWEE,K25,K25P) + K4 = H*DMDT(M+K3,C,KWEE,K25,K25P) + M = M+(K1+2*K2+2*K3+K4)/6 + T = T + H + IF ( T .GE. PRINT_EVERY+LAST_PRINT .AND. + + PRINT_EVERY .GT. 0.0D0 ) + + THEN + WRITE(*,*) T, M + LAST_PRINT = LAST_PRINT + PRINT_EVERY + END IF + IF ( ROOT .GT. 0.0D0 ) THEN + IF ( LAST_M .LE. ROOT .AND. ROOT .LT. M ) THEN + TOUT = (T-LAST_T)/(M-LAST_M)*(ROOT-LAST_M)+LAST_T + RETURN + END IF + END IF + END DO + END SUBROUTINE MPF + + +C Equation from Zwolak et al. 2001. + FUNCTION DMDT(M,C,KWEE,K25,K25P) RESULT(RES) + USE REAL_PRECISION + REAL (KIND=R8) :: M, C, KWEE, K25, K25P, RES + RES = KWEE*M+(K25+K25P*M**2)*(C-M) + END FUNCTION DMDT diff --git a/dataassim/math/optimization/odrpack95/simple_example.f90 b/dataassim/math/optimization/odrpack95/simple_example.f90 new file mode 100644 index 0000000..bce96a9 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/simple_example.f90 @@ -0,0 +1,66 @@ +PROGRAM ODRPACK95_EXAMPLE + USE ODRPACK95 + USE REAL_PRECISION + REAL (KIND=R8), ALLOCATABLE :: BETA(:),L(:),U(:),X(:,:),Y(:,:) + INTEGER :: NP,N,M,NQ + INTERFACE + SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB,IFIXX,LDIFX,& + IDEVAL,F,FJACB,FJACD,ISTOP) + USE REAL_PRECISION + INTEGER :: IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + REAL (KIND=R8) :: BETA(NP),F(LDN,NQ),FJACB(LDN,LDNP,NQ), & + FJACD(LDN,LDM,NQ),XPLUSD(LDN,M) + INTEGER :: IFIXB(NP),IFIXX(LDIFX,M) + END SUBROUTINE FCN + END INTERFACE + + NP = 2 + N = 4 + M = 1 + NQ = 1 + ALLOCATE(BETA(NP),L(NP),U(NP),X(N,M),Y(N,NQ)) + BETA(1:2) = (/ 2.0_R8, 0.5_R8 /) + L(1:2) = (/ 0.0_R8, 0.0_R8 /) + U(1:2) = (/ 10.0_R8, 0.9_R8 /) + X(1:4,1) = (/ 0.982_R8, 1.998_R8, 4.978_R8, 6.01_R8 /) + Y(1:4,1) = (/ 2.7_R8, 7.4_R8, 148.0_R8, 403.0_R8 /) + CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,LOWER=L,UPPER=U) +END PROGRAM ODRPACK95_EXAMPLE + + +SUBROUTINE FCN(N,M,NP,NQ,LDN,LDM,LDNP,BETA,XPLUSD,IFIXB,IFIXX,LDIFX,& + IDEVAL,F,FJACB,FJACD,ISTOP) + + USE REAL_PRECISION + + INTEGER :: IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ, I + REAL (KIND=R8) :: BETA(NP),F(LDN,NQ),FJACB(LDN,LDNP,NQ), & + FJACD(LDN,LDM,NQ),XPLUSD(LDN,M) + INTEGER :: IFIXB(NP),IFIXX(LDIFX,M) + + ISTOP = 0 + + ! Calculate model. + IF (MOD(IDEVAL,10).NE.0) THEN + DO I=1,N + F(I,1) = BETA(1)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + ! Calculate model partials with respect to BETA. + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO I=1,N + FJACB(I,1,1) = EXP(BETA(2)*XPLUSD(I,1)) + FJACB(I,2,1) = BETA(1)*XPLUSD(I,1)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + ! Calculate model partials with respect to DELTA. + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO I=1,N + FJACD(I,1,1) = BETA(1)*BETA(2)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + +END SUBROUTINE FCN diff --git a/dataassim/math/optimization/odrpack95/test.f b/dataassim/math/optimization/odrpack95/test.f new file mode 100644 index 0000000..a1565b7 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/test.f @@ -0,0 +1,2742 @@ +*DTEST + PROGRAM DTEST +C***Begin Prologue DTEST +C***Refer to ODR +C***Routines Called DODRX +C***Date Written 861229 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose EXERCISE FEATURES OF ODRPACK95 SOFTWARE +C***End Prologue DTEST + +C...Used modules + USE REAL_PRECISION + +C...Scalars in common + INTEGER + & NTEST + +C...Local scalars + REAL (KIND=R8) + & TSTFAC + INTEGER + & LUNERR,LUNRPT,LUNSUM + LOGICAL + & PASSED + +C...External subroutines + EXTERNAL + & DODRX + +C...Common blocks + COMMON /TSTSET/ NTEST + +C***Variable declarations (alphabetically) + +C LUNERR: The logical unit number used for error messages. +C LUNRPT: The logical unit number used for computation reports. +C LUNSUM: The logical unit number used for a summary report listing +C only the test comparisons and not the odrpack generated +C reports. +C NTEST: The number of tests to be run. +C PASSED: The variable designating whether the results of all of the +C tests agree with those from the cray ymp using double +C precision (PASSED=TRUE), or whether some of the results +C disagreed (PASSED=FALSE). +C TSTFAC: The user-supplied factor for scaling the test tolerances +C used to check for agreement between computed results and +C results obtained using REAL (KIND=R8) version on cray +C YMP. Values of TSTFAC greater than one increase the +C test tolerances, making the tests easier to pass and +C allowing small discrepancies between the computed and +C expected results to be automatically discounted. + + +C***First executable statement TEST + + +C Set up necessary files + +C NOTE: ODRPACK95 generates computation and error reports on +C logical unit 6 by default; +C logical unit 'LUNSUM' used to summarize results of comparisons +C from exercise routine DODRX. + + LUNRPT = 18 + LUNERR = 18 + LUNSUM = 19 + + OPEN(UNIT=LUNRPT,FILE='REPORT') + OPEN(UNIT=LUNERR,FILE='REPORT') + OPEN(UNIT=LUNSUM,FILE='SUMMARY') + +C Exercise REAL (KIND=R8) version of ODRPACK95 +C (test reports generated on file 'RESULTS' and +C summarized in file 'SUMMARY') + + NTEST = 23 + TSTFAC = 1.0E0_R8 + CALL DODRX(TSTFAC,PASSED,LUNSUM) + + END +*DODRX + SUBROUTINE DODRX + & (TSTFAC,PASSED,LUNSUM) +C***Begin Prologue DODRX +C***Refer to ODR +C***Routines Called DDOT,DNRM2,ODR,DODRXD, +C DODRXF,DODRXW,DWGHT,DZERO +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Exercise features of ODRPACK95 software +C***End Prologue DODRX + +C...Used modules + USE ODRPACK95 + USE REAL_PRECISION + +C...Parameters + INTEGER + & LDWD,LDWE,LD2WD,LD2WE,LIWORK,LWORK,MAXN,MAXM,MAXNP,MAXNQ,NTESTS + REAL (KIND=R8) + & BASE + PARAMETER + & (MAXN=50, MAXM=3, MAXNP=10, MAXNQ=2, NTESTS=23, + & LDWE=MAXN, LD2WE=MAXNQ, LDWD=MAXN, LD2WD=MAXM, + & LWORK = 18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ, + & LIWORK = 20+MAXNP+MAXNQ*(MAXNP+MAXM), + & BASE = RADIX(1.0E0_R8)) + +C...Scalar arguments + REAL (KIND=R8) + & TSTFAC + INTEGER + & LUNSUM + LOGICAL + & PASSED + +C...Scalars in common + INTEGER + & NTEST,SETNO + +C...Local scalars + INTEGER + & I,INFO,IPRINT,ITEST,JOB,L,LDIFX,LDSCLD,LDSTPD,LDWD1,LDWE1, + & LDX,LDY,LD2WD1,LD2WE1,LIWMIN,LUN,LUNERR,LUNRPT,LWMIN, + & M,MAXIT,MSG,N,NDIGIT,NP,NQ + REAL (KIND=R8) + & BNRM,EPSMAC,EWRT,EWRT2,HUNDRD,ONE,P01,P2,PARTOL,SSTOL, + & TAUFAC,THREE,TSTTOL,TWO,WSS,WSSDEL,WSSEPS,ZERO + LOGICAL + & FAILED,FAILS,ISODR,SHORT + CHARACTER TITLE*80 + +C...Arrays in common + REAL (KIND=R8) + & LOWER(MAXNP),UPPER(MAXNP) + +C...Local arrays + REAL (KIND=R8) + & BETA(MAXNP),DELTA(:,:),DPYMP(2,NTESTS), + & SCLB(MAXNP),SCLD(MAXN,MAXM), + & STPB(MAXNP),STPD(MAXN,MAXM), + & WE(MAXN,MAXNQ,MAXNQ),WD(MAXN,MAXM,MAXM),WORK(:), + & WRK(MAXN*MAXM+MAXN*MAXNQ),X(MAXN,MAXM),Y(MAXN,MAXNQ), + & TEMPRETL(MAXN,MAXM) + INTEGER + & IDPYMP(NTESTS),IFIXB(MAXNP),IFIXX(MAXN,MAXM),IWORK(:) + +C...Pointers + POINTER + & DELTA,IWORK,WORK + +C...External functions + REAL (KIND=R8) + & DDOT,DNRM2 + EXTERNAL + & DDOT,DNRM2 + +C...External subroutines + EXTERNAL + & DODRXD,DODRXF,DODRXW,DZERO + +C...Intrinsic functions + INTRINSIC + & ABS,MOD + +C...Common blocks + COMMON /SETID/SETNO + COMMON /TSTSET/ NTEST + COMMON /BOUNDS/ LOWER,UPPER + +C...Data statements + DATA + & ZERO,P01,P2,ONE,TWO,THREE,HUNDRD + & /0.0E0_R8,0.01E0_R8,0.2E0_R8,1.0E0_R8,2.0E0_R8,3.0E0_R8, + & 100.0E0_R8/ + + DATA + & (DPYMP(I,1),I=1,2) + & /2.762733195780256808978449342964E+04_R8, + & 7.532639569022918943695104672512E-04_R8/ + DATA + & (DPYMP(I,2),I=1,2) + & /2.762732630143673024399942947263E+04_R8, + & 7.538467722687131506874279314940E-04_R8/ + DATA + & (DPYMP(I,3),I=1,2) + & /1.069944100000000027940905194068E+09_R8, + & 1.212808593256056359629660672046E-05_R8/ + DATA + & (DPYMP(I,4),I=1,2) + & /1.069944100000000026623461142867E+09_R8, + & 5.452084633790606017572015067556E-07_R8/ + DATA + & (DPYMP(I,5),I=1,2) + & /1.426988156377258617521571734503E+00_R8, + & 1.084728687127432219753903919409E+00_R8/ + DATA + & (DPYMP(I,6),I=1,2) + & /4.261321829513978871872508874025E+00_R8, + & 1.477967210398420733565424329280E-02_R8/ + DATA + & (DPYMP(I,7),I=1,2) + & /4.261272307142888464011486769858E+00_R8, + & 1.477966125465374336804138554559E-02_R8/ + DATA + & (DPYMP(I,8),I=1,2) + & /4.371487317909745009110272283622E+01_R8, + & 1.144419474408286067112233592550E-03_R8/ + DATA + & (DPYMP(I,9),I=1,2) + & /3.099048849376848610380977303924E+00_R8, + & 8.824708863783850023783338218501E-02_R8/ + DATA + & (DPYMP(I,10),I=1,2) + & /9.469917836739932584221023234527E+00_R8, + & 4.205389215588104651198536809880E-01_R8/ + DATA + & (DPYMP(I,11),I=1,2) + & /3.950949253027682207109233363651E+01_R8, + & 6.651838750834910819636881506915E+01_R8/ + DATA + & (DPYMP(I,12),I=1,2) + & /3.950949253027682207109233363651E+01_R8, + & 6.651838750834910819636881506915E+01_R8/ + DATA + & (DPYMP(I,13),I=1,2) + & /1.414213562373095000000000000000E+00_R8, + & 5.250825926608277346013642256883E-26_R8/ + DATA + & (DPYMP(I,14),I=1,2) + & /1.414213562373095000000000000000E+00_R8, + & 8.159081600696301507018019048968E-26_R8/ + DATA + & (DPYMP(I,15),I=1,2) + & /1.486588477064952451556223422813E+00_R8, + & 1.841690442255357083922717720270E+03_R8/ + DATA + & (DPYMP(I,16),I=1,2) + & /2.001224625073357401561224833131E+02_R8, + & 0.000000000000000000000000000000E+00_R8/ + DATA + & (DPYMP(I,17),I=1,2) + & /2.000099997500125000000000000000E+02_R8, + & 0.000000000000000000000000000000E+00_R8/ + DATA + & (DPYMP(I,18),I=1,2) + & /1.414213562373095000000000000000E+00_R8, + & 5.816277809383742531415846947805E-26_R8/ + DATA + & (DPYMP(I,19),I=1,2) + & /2.000624902374255782433465356007E+02_R8, + & 4.568236947482152283374593507328E+30_R8/ + + DATA + & (DPYMP(I,20),I=1,2) + & /2.000624902374255782433465356007E+02_R8, + & 1.848525209410256939008831977844E+05_R8/ + + DATA + & (DPYMP(I,21),I=1,2) + & /2.000624902374255782433465356007E+02_R8, + & 1.848525209410256939008831977844E+05_R8/ + + DATA + & (DPYMP(I,22),I=1,2) + & /2.731300056749532689792659000000E+00_R8, + & 3.378975642596100806258619000000E+05_R8/ + + DATA + & (DPYMP(I,23),I=1,2) + & /2.675757304209387399396291584708E+00_R8, + & 5.174484505019630309341494012187E-02_R8/ + + DATA + & (IDPYMP(I),I=1,23) + & /1,1,3,1,1,4,1,1,2,1,1023,40100,2,2,3,90100,91000,2,90010, + & 90020,90010,21,1/ + +C...Interface blocks + INTERFACE + SUBROUTINE DWGHT + & (N,M,WT,LDWT,LD2WT,T,WTT) + USE REAL_PRECISION + INTEGER + & LDWT,LD2WT,M,N + REAL (KIND=R8) + & T(:,:),WT(:,:,:),WTT(:,:) + END SUBROUTINE + END INTERFACE + +C...Routine names used as subprogram arguments +C DODRXF: The user-supplied routine for evaluating the model. + +C...Variable definitions (alphabetically) +C BASE: The base of floating point numbers on the current machine +C BETA: The function parameters. +C BNRM: The norm of BETA. +C DELTA: The error in the X data. +C DPYMP: The floating point results from a cray YMP using +C REAL (KIND=R8). +C EPSMAC: The value of machine precision. +C EWRT: A temporary variable for the denominator of the relative error +C calculations (error with respect to). +C EWRT2: A temporary variable for the denominator of the relative error +C calculations (error with respect to). +C FAILED: The variable designating whether the results of all of the +C demonstration runs agreed with those from the cray YMP +C using REAL (KIND=R8) (FAILED=FALSE) or whether some of +C the tests disagreed (FAILED=TRUE). +C FAILS: The variable designating whether the results of an +C individual demonstration run agreed with those from the +C cray YMP using REAL (KIND=R8) (FAILS=FALSE) or +C disagree (FAILS=TRUE). +C HUNDRD: The value 100.0E0_R8. +C I: An index variable. +C IDPYMP: The integer results from a cray YMP using +C REAL (KIND=R8). +C IFIXB: The values designating whether the elements of BETA are +C fixed at their input values or not. +C IFIXX: The values designating whether the elements of DELTA are +C fixed at their input values or not. +C INFO: The variable designating why the computations stopped. +C IPRINT: The print control variable. +C ISODR: The variable designating whether the solution is by odr +C (ISODR=TRUE) or by ols (ISODR=FALSE). +C ITEST: The number of the current test being run. +C IWORK: The integer work space. +C J: An index variable. +C JOB: The variable controlling problem initialization and +C computational method. +C LDIFX: The leading dimension of array IFIXX. +C LDSCLD: The leading dimension of array SCLD. +C LDWD: The leading dimension of array WD. +C LDWD1: The leading dimension of array WD as passed to ODRPACK95. +C LDWE: The leading dimension of array WE. +C LDWE1: The leading dimension of array WE as passed to ODRPACK95. +C LDX: The leading dimension of array X. +C LDY: The leading dimension of array Y. +C LD2WD: The second dimension of array WD. +C LD2WD1: The second dimension of array WD as passed to ODRPACK95. +C LD2WE: The second dimension of array WE. +C LD2WE1: The second dimension of array WE as passed to ODRPACK95. +C LIWKMN: The minimum acceptable length of array IWORK. +C LIWMIN: The minimum length of vector IWORK for a given problem. +C LIWORK: The length of vector IWORK. +C LUN: The logical unit number currently being used. +C LUNERR: The logical unit number used for error messages. +C LUNRPT: The logical unit number used for computation reports. +C LUNSUM: The logical unit number used for a summary report. +C LWKMN: The minimum acceptable length of array WORK. +C LWMIN: The minimum length of vector WORK for a given problem. +C LWORK: The length of vector WORK. +C M: The number of columns of data in the explanatory variable. +C MAXIT: The maximum number of iterations allowed. +C MSG: The variable designating which message is to be printed as +C a result of the comparison with the cray YMP or x86 (Linux) +C results. +C N: The number of observations. +C NDIGIT: The number of accurate digits in the function results, as +C supplied by the user. +C NP: The number of function parameters. +C NTEST: The number of tests to be run. +C NTESTS: The number of different tests available. +C ONE: The value 1.0E0_R8. +C PASSED: The variable designating whether the results of all of the +C demonstration runs agreed with those from the cray YMP +C using REAL (KIND=R8) (PASSED=TRUE), or whether some of +C the results disagreed (PASSED=FALSE). +C P01: The value 0.01E0_R8. +C P2: The value 0.2E0_R8. +C PARTOL: The parameter convergence stopping criteria. +C SCLB: The scaling values for BETA. +C SCLD: The scaling values for DELTA. +C SETNO: The number of the data set being analyzed. +C SHORT: The variable designating whether ODRPACK95 is invoked by the +C short-call (SHORT=.TRUE.) or the long-call (SHORT=.FALSE.). +C SSTOL: The sum-of-squares convergence stopping tolerance. +C TAUFAC: The factor used to compute the initial trust region +C diameter. +C THREE: The value 3.0E0_R8. +C TITLE: The reference for the data set being analyzed. +C TSTFAC: The user-supplied factor for scaling the test tolerances +C used to check for agreement between computed results and +C results obtained using REAL (KIND=R8) version on cray +C YMP. +C TSTTOL: The test tolerance used in checking computed values for +C purposes of determining proper installation. +C TWO: The value 2.0E0_R8. +C WD: The DELTA weights. +C WE: The EPSILON weights. +C WORK: The REAL (KIND=R8) work space. +C WRK: The REAL (KIND=R8) work space for computing test results. +C WSS: The sum of the squared weighted errors. +C WSSDEL: The sum of the squared weighted errors in X. +C WSSEPS: The sum of the squared weighted errors in Y. +C X: The explanatory variable. +C Y: The response variable. +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODRX + + +C Allocate work arrays and DELTA + + ALLOCATE(DELTA(MAXN,MAXM),IWORK(LIWORK),WORK(LWORK)) + +C Set logical units for error and computation reports + + LUNERR = 18 + LUNRPT = 18 + +C Initialize test tolerance + + IF (TSTFAC.GT.ONE) THEN + TSTTOL = TSTFAC + ELSE + TSTTOL = ONE + END IF + +C Initialize machine precision + + EPSMAC = BASE**(1-DIGITS(BASE)) + +C Initialize leading dimension of X + + LDX = MAXN + LDY = MAXN + +C Initialize miscellaneous variables used in the exercise procedure + + FAILED = .FALSE. + SHORT = .TRUE. + ISODR = .TRUE. + N = 0 + +C Begin exercising ODRPACK95 + + DO 400 ITEST=1,NTEST + +C Set control values to invoke default values + + WE(1,1,1) = -ONE + LDWE1 = LDWE + LD2WE1 = LD2WE + WD(1,1,1) = -ONE + LDWD1 = LDWD + LD2WD1 = LD2WD + + IFIXB(1) = -1 + IFIXX(1,1) = -1 + LDIFX = MAXN + + NDIGIT = -1 + TAUFAC = -ONE + + SSTOL = -ONE + PARTOL = -ONE + MAXIT = -1 + + IPRINT = 2112 +C IPRINT = 6616 + + STPB(1) = -ONE + STPD(1,1) = -ONE + LDSTPD = 1 + + SCLB(1) = -ONE + SCLD(1,1) = -ONE + LDSCLD = 1 + + UPPER(:) = HUGE(ONE) + LOWER(:) = -HUGE(ONE) + + + IF (ITEST.EQ.1) THEN + +C Test simple odr problem +C with analytic derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 10 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + 10 CONTINUE + SETNO = 5 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00020 + SHORT = .TRUE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.2) THEN + +C Test simple ols problem +C with forward difference derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 20 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1020) + LUN = LUNSUM + 20 CONTINUE + SETNO = 5 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00002 + SHORT = .TRUE. + ISODR = .FALSE. + + ELSE IF (ITEST.EQ.3) THEN + +C Test parameter fixing capabilities for poorly scaled ols problem +C with analytic derivatives. +C (derivative checking turned off.) + + LUN = LUNRPT + WRITE (LUN,1000) + DO 30 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1030) + LUN = LUNSUM + 30 CONTINUE + SETNO = 3 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + IFIXB(1) = 1 + IFIXB(2) = 1 + IFIXB(3) = 1 + IFIXB(4) = 0 + IFIXB(5) = 1 + IFIXB(6) = 0 + IFIXB(7) = 0 + IFIXB(8) = 0 + IFIXB(9) = 0 + JOB = 00042 + SHORT = .FALSE. + ISODR = .FALSE. + + ELSE IF (ITEST.EQ.4) THEN + +C Test weighting capabilities for odr problem with +C analytic derivatives. +C Also shows solution of poorly scaled odr problem. +C (derivative checking turned off.) +C N.B., this run continues from where test 3 left off. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 40 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1040) + LUN = LUNSUM + 40 CONTINUE + SETNO = 3 + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + LDWD1 = LDWD + LDWE1 = LDWE + LD2WD1 = LD2WD + LD2WE1 = LD2WE + DO 45 I=1,N + WD(I,1,1) = (P01/ABS(X(I,1)))**2 + WE(I,1,1) = ONE + 45 CONTINUE + WE(28,1,1) = ZERO + IFIXB(1) = 1 + IFIXB(2) = 1 + IFIXB(3) = 1 + IFIXB(4) = 0 + IFIXB(5) = 1 + IFIXB(6) = 1 + IFIXB(7) = 1 + IFIXB(8) = 0 + IFIXB(9) = 0 + JOB = 00030 + IPRINT = 2232 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.5) THEN + +C Test DELTA initialization capabilities and user-supplied scaling +C and use of istop to restrict parameter values +C for odr problem with analytic derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 50 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1050) + LUN = LUNSUM + 50 CONTINUE + SETNO = 1 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 01020 + LDSCLD = 1 + SCLD(1,1) = TWO + SCLB(1) = P2 + SCLB(2) = ONE + LDWE1 = 1 + LD2WE1 = 1 + WE(1,1,1) = -ONE + LDWD1 = 1 + LD2WD1 = 1 + WD(1,1,1) = -ONE + DO 55 I=20,21 + DELTA(I,1) = BETA(1)/Y(I,1) + BETA(2) - X(I,1) + 55 CONTINUE + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.6) THEN + +C Test stiff stopping conditions for unscaled odr problem +C with analytic derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 60 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1060) + LUN = LUNSUM + 60 CONTINUE + SETNO = 4 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00020 + SSTOL = HUNDRD*EPSMAC + PARTOL = EPSMAC + MAXIT = 2 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.7) THEN + +C Test restart for unscaled odr problem +C with analytic derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 70 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1070) + LUN = LUNSUM + 70 CONTINUE + SETNO = 4 + JOB = 20220 + SSTOL = HUNDRD*EPSMAC + PARTOL = EPSMAC + MAXIT = 50 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.8) THEN + +C Test use of TAUFAC to restrict first step +C for odr problem with central difference derivatives. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 80 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1080) + LUN = LUNSUM + 80 CONTINUE + SETNO = 6 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00210 + TAUFAC = P01 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.9) THEN + +C Test implicit odr problem +C with forward finite difference derivatives +C and covariance matrix constructed with recomputed derivatives. + + + LUN = LUNRPT + WRITE (LUN,1000) + DO 90 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1090) + LUN = LUNSUM + 90 CONTINUE + SETNO = 7 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00001 + PARTOL = EPSMAC**(ONE/THREE) + SHORT = .TRUE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.10) THEN + +C Test multiresponse odr problem +C with central difference derivatives , +C DELTA initialized to nonzero values, +C variable fixing, and weighting. + + LUN = LUNRPT + WRITE (LUN,1000) + DO 100 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1100) + LUN = LUNSUM + 100 CONTINUE + SETNO = 8 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + + LDWD1 = LDWD + LDWE1 = LDWE + LD2WD1 = LD2WD + LD2WE1 = LD2WE + DO 105 I=1,N +C Initialize DELTA, and specify first decade of frequencies as fixed + IF (X(I,1).LT.100.0E0_R8) THEN + DELTA(I,1) = 0.0E0_R8 + IFIXX(I,1) = 0 + ELSE IF (X(I,1).LE.150.0E0_R8) THEN + DELTA(I,1) = 0.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.1000.0E0_R8) THEN + DELTA(I,1) = 25.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.10000.0E0_R8) THEN + DELTA(I,1) = 560.0E0_R8 + IFIXX(I,1) = 1 + ELSE IF (X(I,1).LE.100000.0E0_R8) THEN + DELTA(I,1) = 9500.0E0_R8 + IFIXX(I,1) = 1 + ELSE + DELTA(I,1) = 144000.0E0_R8 + IFIXX(I,1) = 1 + END IF + +C Set weights + IF (X(I,1).EQ.100.0E0_R8 .OR. X(I,1).EQ.150.0E0_R8) THEN + WE(I,1,1) = 0.0E0_R8 + WE(I,1,2) = 0.0E0_R8 + WE(I,2,1) = 0.0E0_R8 + WE(I,2,2) = 0.0E0_R8 + ELSE + WE(I,1,1) = 559.6E0_R8 + WE(I,1,2) = -1634.0E0_R8 + WE(I,2,1) = -1634.0E0_R8 + WE(I,2,2) = 8397.0E0_R8 + END IF + WD(I,1,1) = (1.0E-4_R8)/(X(I,1)**2) + 105 CONTINUE + JOB = 00210 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.11) THEN + +C Test detection of incorrect derivatives + + LUN = LUNRPT + WRITE (LUN,1000) + DO 110 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1110) + LUN = LUNSUM + 110 CONTINUE + SETNO = 6 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00022 + SHORT = .FALSE. + ISODR = .FALSE. + + ELSE IF (ITEST.EQ.12) THEN + +C Test detection of incorrect derivatives + + LUN = LUNRPT + WRITE (LUN,1000) + DO 120 I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1120) + LUN = LUNSUM + 120 CONTINUE + SETNO = 6 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00020 + SHORT = .FALSE. + ISODR = .TRUE. + + ELSE IF (ITEST.EQ.13) THEN + +C Test bounded odr problem where +C parameters start on bound, move away, hit bound, move away, find minimum. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ 200.0_R8, 5.0_R8 /) + LOWER(1:2) = (/ 0.1_R8, 0.0_R8 /) + UPPER(1:2) = (/ 200.0_R8, 5.0_R8 /) + + ELSE IF (ITEST.EQ.14) THEN + +C Test bounded odr problem where +C bounds are never hit. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + LOWER(1:2) = (/ 0.0_R8, 0.0_R8 /) + UPPER(1:2) = (/ 400.0_R8, 6.0_R8 /) + + ELSE IF (ITEST.EQ.15) THEN + +C Test bounded odr problem where +C minimum is on boundary. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 1000 + BETA(1:2) = (/ 200.0_R8, 3.0_R8 /) + LOWER(1:2) = (/ 1.1_R8, 0.0_R8 /) + UPPER(1:2) = (/ 400.0_R8, 6.0_R8 /) + TSTTOL = 500.0_R8 + + ELSE IF (ITEST.EQ.16) THEN + +C Test bounded odr problem where +C initial BETA is outside bounds. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 1000 + BETA(1:2) = (/ 200.0_R8, 7.0_R8 /) + LOWER(1:2) = (/ 1.1_R8, 0.0_R8 /) + UPPER(1:2) = (/ 200.0_R8, 5.0_R8 /) + + ELSE IF (ITEST.EQ.17) THEN + +C Test bounded odr problem where +C bounds are ill defined. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 1000 + BETA(1:2) = (/ 200.0_R8, 2.0_R8 /) + LOWER(1:2) = (/ 10.0_R8, 0.0_R8 /) + UPPER(1:2) = (/ 2.0_R8, 5.0_R8 /) + + ELSE IF (ITEST.EQ.18) THEN + +C Test bounded odr problem using centered differences where +C parameters start on bound, move away, hit bound, move away, find minimum. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00010 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ 200.0_R8, 5.0_R8 /) + LOWER(1:2) = (/ 0.1_R8, 0.0_R8 /) + UPPER(1:2) = (/ 200.0_R8, 5.0_R8 /) + + ELSE IF (ITEST.EQ.19) THEN + +C Test bounded odr problem when bounds are too small. +C Parameters start on bound. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00010 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ 200.0_R8, 5.0_R8 /) + UPPER(1) = 200.0_R8 + LOWER(2) = 5.0_R8 + LOWER(1) = UPPER(1) - 400*UPPER(1)*EPSMAC + & + UPPER(1)*EPSMAC + + UPPER(2) = LOWER(2) + 400*LOWER(2)*EPSMAC + & - LOWER(2)*EPSMAC + + ELSE IF (ITEST.EQ.20) THEN + +C Test bounded odr problem when bounds are just big enough for ndigit +C calculation but too small for difference calculation. +C Parameters start on bound. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ -200.0_R8, -5.0_R8 /) + UPPER(1) = -200.0_R8 + LOWER(2) = -5.0_R8 + LOWER(1) = UPPER(1) + 400*UPPER(1)*EPSMAC + UPPER(2) = LOWER(2) - 400*LOWER(2)*EPSMAC + + ELSE IF (ITEST.EQ.21) THEN + +C Test bounded odr problem when bounds are too small for derivative +C step sizes using forward differences. Parameters start on bound. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 9 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00000 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ -200.0_R8, -5.0_R8 /) + UPPER(1) = -200.0_R8 + LOWER(2) = -5.0_R8 + LOWER(1) = UPPER(1) + UPPER(1)*EPSMAC + UPPER(2) = LOWER(2) - LOWER(2)*EPSMAC + + ELSE IF (ITEST.EQ.22) THEN + +C Test bounded odr problem when first parameter is fixed and second is bounded. +C However, set the bounds on the first parameter to exclude the correct value +C of the second parameter. This will exercise the packing and unpacking of +C parameters and ensure that bounds and fixed parameters can be mixed. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 10 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00010 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ 2.5_R8, 1.5_R8 /) + LOWER(1:2) = (/ 2.5_R8, 1.1_R8 /) + UPPER(1:2) = (/ 10.0_R8, 5.0_R8 /) + IFIXB(1:2) = (/ 0, 1 /) + + ELSE IF (ITEST.EQ.23) THEN + +C Similar to test 22 but without bounds. + + LUN = LUNRPT + WRITE (LUN,1000) + DO I=1,2 + WRITE (LUN,1001) ITEST + WRITE (LUN,1010) + LUN = LUNSUM + END DO + SETNO = 10 + CALL DODRXD(TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) + CALL DZERO(LWORK,1,WORK,LWORK) + DELTA(:,:) = ZERO + JOB = 00010 + SHORT = .FALSE. + ISODR = .TRUE. + MAXIT = 100 + BETA(1:2) = (/ 2.5_R8, 1.5_R8 /) + LOWER(1:2) = -HUGE(1.0_R8) + UPPER(1:2) = HUGE(1.0_R8) + IFIXB(1:2) = (/ 0, 1 /) + + END IF + + CALL DODRXW + & (N,M,NP,NQ,LDWE1,LD2WE1,ISODR,LIWMIN,LWMIN) + +C Compute solution + + WRITE (LUNRPT,2200) TITLE + WRITE (LUNSUM,2200) TITLE + IF (SHORT) THEN + CALL ODR(FCN=DODRXF, + & N=N,M=M,NP=NP,NQ=NQ, + & BETA=BETA, + & Y=Y,X=X, + & DELTA=DELTA, + & WE=WE(1:LDWE1,1:LD2WE1,:), + & WD=WD(1:LDWD1,1:LD2WD1,:), + & JOB=JOB, + & IPRINT=IPRINT,LUNERR=LUNERR,LUNRPT=LUNRPT, + & WORK=WORK,IWORK=IWORK, + & INFO=INFO) + ELSE + CALL ODR(FCN=DODRXF, + & N=N,M=M,NP=NP,NQ=NQ, + & BETA=BETA, + & Y=Y,X=X, + & DELTA=DELTA, + & WE=WE(1:LDWE1,1:LD2WE1,:), + & WD=WD(1:LDWD1,1:LD2WD1,:), + & IFIXB=IFIXB,IFIXX=IFIXX(1:LDIFX,:), + & JOB=JOB,NDIGIT=NDIGIT,TAUFAC=TAUFAC, + & SSTOL=SSTOL,PARTOL=PARTOL,MAXIT=MAXIT, + & IPRINT=IPRINT,LUNERR=LUNERR,LUNRPT=LUNRPT, + & STPB=STPB,STPD=STPD(1:LDSTPD,:), + & SCLB=SCLB,SCLD=SCLD(1:LDSCLD,:), + & WORK=WORK,IWORK=IWORK, + & LOWER=LOWER(1:NP),UPPER=UPPER(1:NP), + & INFO=INFO) + END IF + +C Compare results with those obtained on the cray ymp or the intel xeon running +C Linux using REAL (KIND=R8) version of ODRPACK95 + + BNRM = DNRM2(NP,BETA,1) + CALL DWGHT(N,M,WD,LDWD1,LD2WD1,RESHAPE(WORK(1:N*M),(/N,M/)), + & TEMPRETL(1:N,1:M)) + WRK(1:N*M) = RESHAPE(TEMPRETL(1:N,1:M),(/N*M/)) + WSSDEL = DDOT(N*M,WORK(1:N*M),1,WRK(1),1) + CALL DWGHT(N,NQ,WE,LDWE1,LD2WE1, + & RESHAPE(WORK(N*M+1:N*M+1+N*NQ-1),(/N,NQ/)), + & TEMPRETL(1:N,1:NQ)) + WRK(N*M+1:N*M+1+N*NQ-1) = RESHAPE(TEMPRETL(1:N,1:NQ),(/N*NQ/)) + WSSEPS = DDOT(N*NQ,WORK(N*M+1:N*M+1+N*NQ-1),1, + & WRK(N*M+1:N*M+1+N*NQ-1),1) + WSS = WSSEPS + WSSDEL + + IF (SSTOL.LT.ZERO) THEN + SSTOL = SQRT(EPSMAC) + ELSE + SSTOL = MIN(SSTOL, ONE) + END IF + + IF (PARTOL.LT.ZERO) THEN + PARTOL = EPSMAC**(TWO/THREE) + ELSE + PARTOL = MIN(PARTOL, ONE) + END IF + + IF (INFO.GE.10000) THEN + IF (IDPYMP(ITEST).EQ.INFO) THEN + FAILS = .FALSE. + MSG = 1 + ELSE + FAILS = .TRUE. + MSG = 3 + END IF + + ELSE IF (MOD(INFO,10).EQ.1) THEN + FAILS = ABS(WSS-DPYMP(2,ITEST)).GT. + & DPYMP(2,ITEST)*SSTOL*TSTTOL + MSG = 2 + + ELSE IF (MOD(INFO,10).EQ.2) THEN + FAILS = ABS(BNRM-DPYMP(1,ITEST)).GT. + & DPYMP(1,ITEST)*PARTOL*TSTTOL + MSG = 2 + + ELSE IF (MOD(INFO,10).EQ.3) THEN + FAILS = (ABS(WSS-DPYMP(2,ITEST)).GT. + & DPYMP(2,ITEST)*SSTOL*TSTTOL) + & .AND. + & (ABS(BNRM-DPYMP(1,ITEST)).GT. + & DPYMP(1,ITEST)*PARTOL*TSTTOL) + MSG = 2 + + ELSE IF ((MOD(INFO,10).EQ.4) .AND. (IDPYMP(ITEST).EQ.4)) THEN + FAILS = .FALSE. + MSG = 1 + + ELSE IF (INFO.EQ.IDPYMP(ITEST)) THEN + FAILS = .TRUE. + MSG = 4 + ELSE + FAILS = .TRUE. + MSG = 3 + END IF + + FAILED = FAILED .OR. FAILS + + LUN = LUNRPT + DO 300 L=1,2 + WRITE (LUN,3100) + WRITE (LUN,3210) + & ' CRAY YMP OR X86 RESULT = ', + & DPYMP(1,ITEST),DPYMP(2,ITEST),IDPYMP(ITEST) + WRITE (LUN,3210) ' NEW TEST RESULT = ', + & BNRM,WSS,INFO + WRITE (LUN,3220) ' DIFFERENCE = ', + & ABS(DPYMP(1,ITEST)-BNRM),ABS(DPYMP(2,ITEST)-WSS) + EWRT = ABS(DPYMP(1,ITEST)) + EWRT2 = ABS(DPYMP(2,ITEST)) + IF (EWRT.EQ.ZERO) THEN + EWRT = ONE + END IF + IF (EWRT2.EQ.ZERO) THEN + EWRT2 = ONE + END IF + WRITE (LUN,3220) ' RELATIVE ERROR = ', + & ABS(DPYMP(1,ITEST)-BNRM)/EWRT, + & ABS(DPYMP(2,ITEST)-WSS)/EWRT2 + + IF (MSG.EQ.1) THEN + WRITE (LUN,3310) + ELSE IF (MSG.EQ.2) THEN + IF (FAILS) THEN + WRITE (LUN,3320) + ELSE + WRITE (LUN,3330) + END IF + ELSE IF (MSG.EQ.3) THEN + WRITE (LUN,3340) + ELSE IF (MSG.EQ.4) THEN + WRITE (LUN,3350) + END IF + + LUN = LUNSUM + 300 CONTINUE + 400 CONTINUE + + WRITE (LUNRPT,1000) + IF (FAILED) THEN + WRITE (LUNRPT,4100) + WRITE (LUNSUM,4100) + PASSED = .FALSE. + ELSE + WRITE (LUNRPT,4200) + WRITE (LUNSUM,4200) + PASSED = .TRUE. + END IF + +C Format statements + + 1000 FORMAT('1') + 1001 FORMAT(' Example ', I2/) + 1010 FORMAT(' Test simple odr problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 1020 FORMAT(' Test simple OLS problem'/ + & ' with finite difference derivatives', + & ' using ODR.') + 1030 FORMAT(' Test parameter fixing capabilities', + & ' for poorly scaled OLS problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 1040 FORMAT(' Test weighting capabilities', + & ' for ODR problem'/ + & ' with analytic derivatives', + & ' using ODR. '/ + & ' also shows solution of poorly scaled', + & ' ODR problem.'/ + & ' (derivative checking turned off.)') + 1050 FORMAT(' Test DELTA initialization capabilities'/ + & ' and use of ISTOP to restrict parameter values', + & ' for ODR problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 1060 FORMAT(' Test stiff stopping conditions', + & ' for unscaled ODR problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 1070 FORMAT(' Test restart', + & ' for unscaled ODR problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 1080 FORMAT(' Test use of TAUFAC to restrict first step', + & ' for ODR problem'/ + & ' with finite difference derivatives', + & ' using ODR.') + 1090 FORMAT(' Test implicit model', + & ' for OLS problem'/ + & ' using ODR.') + 1100 FORMAT(' Test multiresponse model', + & ' for ODR problem'/ + & ' with finite difference derivatives', + & ' using ODR.') + 1110 FORMAT(' Test detection of questionable analytic derivatives', + & ' for OLS problem'/ + & ' using ODR.') + 1120 FORMAT(' Test detection of incorrect analytic derivatives', + & ' for ODR problem'/ + & ' with analytic derivatives', + & ' using ODR.') + 2200 FORMAT (' Data Set Reference: ', A80) + 3100 FORMAT + & (/' Comparison of new results with', + & ' REAL (KIND=R8) Cray YMP or Intel X86 (Linux) '/ + & ' Result:'// + & ' Norm of BETA', + & ' Sum of Squared WTD OBS Errors INFO') + 3210 FORMAT + & (/A25/1P,2E37.30,I6) + 3220 FORMAT + & (/A25,1P,D12.5,25X,D12.5,I6) + 3310 FORMAT + & (/' *** Stopping conditions', + & ' show convergence not attained. ***'/ + & ' no further comparisons made between results.'//) + 3320 FORMAT + & (//' *** WARNING ***', + & ' results do not agree to within stopping tolerance. ***'//) + 3330 FORMAT + & (//' *** Results agree to within stopping tolerance. ***'//) + 3340 FORMAT + & (//' *** WARNING ***', + & ' stopping conditions do not agree. ***'//) + 3350 FORMAT + & (//' *** WARNING ***', + & ' unexpected stopping condition.', + & ' please contact package authors. ***'//) + 4100 FORMAT + & (/// + & ' *** Summary:', + & ' one or more tests do not agree with expected results. ***') + 4200 FORMAT + & (/// + & ' *** Summary:', + & ' all tests agree with expected results. ***') + + END +*DODRXD + SUBROUTINE DODRXD + & (TITLE,N,M,NP,NQ,LDX,X,LDY,Y,BETA) +C***Begin Prologue DODRXD +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Set up data for ODRPACK95 exerciser +C***End Prologue DODRXD + +C...Used modules + USE REAL_PRECISION + +C...Parameters + INTEGER + & MAXN,MAXM,MAXNP,MAXNQ,MAXSET + PARAMETER + & (MAXN=50,MAXM=3,MAXNP=10,MAXNQ=3,MAXSET=16) + +C...Scalar arguments + INTEGER + & LDX,LDY,M,N,NP,NQ + CHARACTER TITLE*80 + +C...Array arguments + REAL (KIND=R8) + & BETA(*),X(LDX,*),Y(LDY,*) + +C...Scalars in common + INTEGER + & SETNO + +C...Local scalars + INTEGER + & I,J,K,L + +C...Local arrays + REAL (KIND=R8) + & BDATA(MAXNP,MAXSET),XDATA(MAXN,MAXM,MAXSET), + & YDATA(MAXN,MAXNQ,MAXSET) + INTEGER + & MDATA(MAXSET),NDATA(MAXSET),NPDATA(MAXSET),NQDATA(MAXSET) + CHARACTER TDATA(MAXSET)*80 + +C...Common blocks + COMMON /SETID/SETNO + +C...Data statements + DATA + & TDATA(1) + & /' BOGGS, BYRD AND SCHNABEL, 1985, EXAMPLE 1'/ + DATA + & NDATA(1), MDATA(1), NPDATA(1), NQDATA(1) + & /40, 1, 2, 1/ + DATA + & (BDATA(K,1),K=1,2) + & /1.0E+0_R8, 1.0E+0_R8/ + DATA + & YDATA( 1,1,1), XDATA( 1,1,1) + & /-0.119569795672791172E+1_R8, -0.213701920211315155E-1_R8/ + DATA + & YDATA( 2,1,1), XDATA( 2,1,1) + & /-0.128023349509594288E+1_R8, 0.494813247025012969E-1_R8/ + DATA + & YDATA( 3,1,1), XDATA( 3,1,1) + & /-0.125270693343174591E+1_R8, 0.127889194935560226E+0_R8/ + DATA + & YDATA( 4,1,1), XDATA( 4,1,1) + & /-0.996698267935287383E+0_R8, 0.128615394085645676E+0_R8/ + DATA + & YDATA( 5,1,1), XDATA( 5,1,1) + & /-0.104681033065801934E+1_R8, 0.232544285655021667E+0_R8/ + DATA + & YDATA( 6,1,1), XDATA( 6,1,1) + & /-0.146724952092847308E+1_R8, 0.268151108026504516E+0_R8/ + DATA + & YDATA( 7,1,1), XDATA( 7,1,1) + & /-0.123366891873487528E+1_R8, 0.309041029810905456E+0_R8/ + DATA + & YDATA( 8,1,1), XDATA( 8,1,1) + & /-0.165665097907185554E+1_R8, 0.405991539210081099E+0_R8/ + DATA + & YDATA( 9,1,1), XDATA( 9,1,1) + & /-0.168476460930907119E+1_R8, 0.376611424833536147E+0_R8/ + DATA + & YDATA(10,1,1), XDATA(10,1,1) + & /-0.198571971169224491E+1_R8, 0.475875890851020811E+0_R8/ + DATA + & YDATA(11,1,1), XDATA(11,1,1) + & /-0.195691696638051344E+1_R8, 0.499246935397386550E+0_R8/ + DATA + & YDATA(12,1,1), XDATA(12,1,1) + & /-0.211871342665769836E+1_R8, 0.536615037024021147E+0_R8/ + DATA + & YDATA(13,1,1), XDATA(13,1,1) + & /-0.268642932558671020E+1_R8, 0.581830765902996060E+0_R8/ + DATA + & YDATA(14,1,1), XDATA(14,1,1) + & /-0.281123260058024347E+1_R8, 0.684512710422277446E+0_R8/ + DATA + & YDATA(15,1,1), XDATA(15,1,1) + & /-0.328704486581785920E+1_R8, 0.660219819694757458E+0_R8/ + DATA + & YDATA(16,1,1), XDATA(16,1,1) + & /-0.423062993461887032E+1_R8, 0.766990323960781092E+0_R8/ + DATA + & YDATA(17,1,1), XDATA(17,1,1) + & /-0.512043906552226903E+1_R8, 0.808270426690578456E+0_R8/ + DATA + & YDATA(18,1,1), XDATA(18,1,1) + & /-0.731032616379005535E+1_R8, 0.897410020083189004E+0_R8/ + DATA + & YDATA(19,1,1), XDATA(19,1,1) + & /-0.109002759485608993E+2_R8, 0.959199774116277687E+0_R8/ + DATA + & YDATA(20,1,1), XDATA(20,1,1) + & /-0.251810238510370206E+2_R8, 0.914675474762916558E+0_R8/ + DATA + & YDATA(21,1,1), XDATA(21,1,1) + & /0.100123028650879944E+3_R8, 0.997759691476821892E+0_R8/ + DATA + & YDATA(22,1,1), XDATA(22,1,1) + & /0.168225085871915048E+2_R8, 0.107136870384216308E+1_R8/ + DATA + & YDATA(23,1,1), XDATA(23,1,1) + & /0.894830510866913009E+1_R8, 0.108033321037888526E+1_R8/ + DATA + & YDATA(24,1,1), XDATA(24,1,1) + & /0.645853815227747004E+1_R8, 0.116064198672771453E+1_R8/ + DATA + & YDATA(25,1,1), XDATA(25,1,1) + & /0.498218564760117328E+1_R8, 0.119080889359116553E+1_R8/ + DATA + & YDATA(26,1,1), XDATA(26,1,1) + & /0.382971664718710476E+1_R8, 0.129418875187635420E+1_R8/ + DATA + & YDATA(27,1,1), XDATA(27,1,1) + & /0.344116492497344184E+1_R8, 0.135594148099422453E+1_R8/ + DATA + & YDATA(28,1,1), XDATA(28,1,1) + & /0.276840496973858949E+1_R8, 0.135302808716893195E+1_R8/ + DATA + & YDATA(29,1,1), XDATA(29,1,1) + & /0.259521665196956666E+1_R8, 0.137994666010141371E+1_R8/ + DATA + & YDATA(30,1,1), XDATA(30,1,1) + & /0.205996022794557661E+1_R8, 0.147630019545555113E+1_R8/ + DATA + & YDATA(31,1,1), XDATA(31,1,1) + & /0.197939614345337836E+1_R8, 0.153450708076357840E+1_R8/ + DATA + & YDATA(32,1,1), XDATA(32,1,1) + & /0.156739340562905589E+1_R8, 0.152805351451039313E+1_R8/ + DATA + & YDATA(33,1,1), XDATA(33,1,1) + & /0.159032057073028366E+1_R8, 0.157147316247224806E+1_R8/ + DATA + & YDATA(34,1,1), XDATA(34,1,1) + & /0.173102268158937949E+1_R8, 0.166649596005678175E+1_R8/ + DATA + & YDATA(35,1,1), XDATA(35,1,1) + & /0.155512561664824758E+1_R8, 0.166505665838718412E+1_R8/ + DATA + & YDATA(36,1,1), XDATA(36,1,1) + & /0.149635994944133260E+1_R8, 0.175214128553867338E+1_R8/ + DATA + & YDATA(37,1,1), XDATA(37,1,1) + & /0.147487601463073568E+1_R8, 0.180567992463707922E+1_R8/ + DATA + & YDATA(38,1,1), XDATA(38,1,1) + & /0.117244575233306998E+1_R8, 0.184624404296278952E+1_R8/ + DATA + & YDATA(39,1,1), XDATA(39,1,1) + & /0.910931336069172580E+0_R8, 0.195568727388978002E+1_R8/ + DATA + & YDATA(40,1,1), XDATA(40,1,1) + & /0.126172980914513272E+1_R8, 0.199326394036412237E+1_R8/ + + DATA + & TDATA(2) + & /' BOGGS, BYRD AND SCHNABEL, 1985, EXAMPLE 2'/ + DATA + & NDATA(2), MDATA(2), NPDATA(2), NQDATA(2) + & /50, 2, 3, 1/ + DATA + & (BDATA(K,2),K=1,3) + & /-1.0E+0_R8, 1.0E+0_R8, 1.0E+0_R8/ + DATA + & YDATA( 1,1,2), XDATA( 1,1,2), XDATA( 1,2,2) + & /0.680832777217942900E+0_R8, + & 0.625474598833994800E-1_R8, 0.110179064209783100E+0_R8/ + DATA + & YDATA( 2,1,2), XDATA( 2,1,2), XDATA( 2,2,2) + & /0.122183594595302200E+1_R8, + & 0.202500343620642400E+0_R8, -0.196140862891327600E-1_R8/ + DATA + & YDATA( 3,1,2), XDATA( 3,1,2), XDATA( 3,2,2) + & /0.118958678734608200E+1_R8, + & 0.164943738599876500E+0_R8, 0.166514874750996600E+0_R8/ + DATA + & YDATA( 4,1,2), XDATA( 4,1,2), XDATA( 4,2,2) + & /0.146982623764094600E+1_R8, + & 0.304874137610506100E+0_R8, 0.612908688041490500E-2_R8/ + DATA + & YDATA( 5,1,2), XDATA( 5,1,2), XDATA( 5,2,2) + & /0.167775338189355300E+1_R8, + & 0.532727445580665100E+0_R8, 0.938248787552444600E-1_R8/ + DATA + & YDATA( 6,1,2), XDATA( 6,1,2), XDATA( 6,2,2) + & /0.202485721906026200E+1_R8, + & 0.508823707598910200E+0_R8, 0.499605775020505400E-2_R8/ + DATA + & YDATA( 7,1,2), XDATA( 7,1,2), XDATA( 7,2,2) + & /0.258912851935938800E+1_R8, + & 0.704227041878554000E+0_R8, 0.819354849092326200E-1_R8/ + DATA + & YDATA( 8,1,2), XDATA( 8,1,2), XDATA( 8,2,2) + & /0.366894203254154800E+1_R8, + & 0.592077736111512000E+0_R8, 0.127113960672389100E-1_R8/ + DATA + & YDATA( 9,1,2), XDATA( 9,1,2), XDATA( 9,2,2) + & /0.574609583351347300E+1_R8, + & 0.104940945646421600E+1_R8, 0.258095243658316100E-1_R8/ + DATA + & YDATA(10,1,2), XDATA(10,1,2), XDATA(10,2,2) + & /0.127676424026489300E+2_R8, + & 0.979382517558619200E+0_R8, 0.124280755181027900E+0_R8/ + DATA + & YDATA(11,1,2), XDATA(11,1,2), XDATA(11,2,2) + & /0.123473079693623100E+1_R8, + & 0.637870453165538700E-1_R8, 0.304856401137196400E+0_R8/ + DATA + & YDATA(12,1,2), XDATA(12,1,2), XDATA(12,2,2) + & /0.142256120864082800E+1_R8, + & 0.176123312906025700E+0_R8, 0.262387028078896900E+0_R8/ + DATA + & YDATA(13,1,2), XDATA(13,1,2), XDATA(13,2,2) + & /0.169889534013024700E+1_R8, + & 0.310965082300263000E+0_R8, 0.226430765474758800E+0_R8/ + DATA + & YDATA(14,1,2), XDATA(14,1,2), XDATA(14,2,2) + & /0.173485577901204400E+1_R8, + & 0.311394269116782100E+0_R8, 0.271375840410281800E+0_R8/ + DATA + & YDATA(15,1,2), XDATA(15,1,2), XDATA(15,2,2) + & /0.277761263972834600E+1_R8, + & 0.447076126190612500E+0_R8, 0.255000858902618300E+0_R8/ + DATA + & YDATA(16,1,2), XDATA(16,1,2), XDATA(16,2,2) + & /0.339163324662617300E+1_R8, + & 0.384786230998211100E+0_R8, 0.154958003178364000E+0_R8/ + DATA + & YDATA(17,1,2), XDATA(17,1,2), XDATA(17,2,2) + & /0.589615137312147500E+1_R8, + & 0.649093176450780500E+0_R8, 0.258301685463773200E+0_R8/ + DATA + & YDATA(18,1,2), XDATA(18,1,2), XDATA(18,2,2) + & /0.124415625214576800E+2_R8, + & 0.685612005372525500E+0_R8, 0.107391260603228600E+0_R8/ + DATA + & YDATA(19,1,2), XDATA(19,1,2), XDATA(19,2,2) + & /-0.498491739153861600E+2_R8, + & 0.968747139425088400E+0_R8, 0.151932526135740700E+0_R8/ + DATA + & YDATA(20,1,2), XDATA(20,1,2), XDATA(20,2,2) + & /-0.832795509000618600E+1_R8, + & 0.869789367989532900E+0_R8, 0.625507500586400000E-1_R8/ + DATA + & YDATA(21,1,2), XDATA(21,1,2), XDATA(21,2,2) + & /0.184934617774239900E+1_R8, + & -0.465309930332736600E-2_R8, 0.546795662595375200E+0_R8/ + DATA + & YDATA(22,1,2), XDATA(22,1,2), XDATA(22,2,2) + & /0.175192979176839200E+1_R8, + & 0.604753397196646000E-2_R8, 0.230905749473922700E+0_R8/ + DATA + & YDATA(23,1,2), XDATA(23,1,2), XDATA(23,2,2) + & /0.253949381238535800E+1_R8, + & 0.239418809621756000E+0_R8, 0.190752069681170700E+0_R8/ + DATA + & YDATA(24,1,2), XDATA(24,1,2), XDATA(24,2,2) + & /0.373500774928501700E+1_R8, + & 0.456662468911699800E+0_R8, 0.328870615170984400E+0_R8/ + DATA + & YDATA(25,1,2), XDATA(25,1,2), XDATA(25,2,2) + & /0.548408128950331000E+1_R8, + & 0.371115320522079500E+0_R8, 0.439978556640660500E+0_R8/ + DATA + & YDATA(26,1,2), XDATA(26,1,2), XDATA(26,2,2) + & /0.125256880521774300E+2_R8, + & 0.586442107042503000E+0_R8, 0.490689043752286700E+0_R8/ + DATA + & YDATA(27,1,2), XDATA(27,1,2), XDATA(27,2,2) + & /-0.493587797164916600E+2_R8, + & 0.579796274973298000E+0_R8, 0.521860998203383100E+0_R8/ + DATA + & YDATA(28,1,2), XDATA(28,1,2), XDATA(28,2,2) + & /-0.801158974965412700E+1_R8, + & 0.805008094903899900E+0_R8, 0.292283538955391600E+0_R8/ + DATA + & YDATA(29,1,2), XDATA(29,1,2), XDATA(29,2,2) + & /-0.437399487061934100E+1_R8, + & 0.637242340835710000E+0_R8, 0.402261740352486000E+0_R8/ + DATA + & YDATA(30,1,2), XDATA(30,1,2), XDATA(30,2,2) + & /-0.297800103425979600E+1_R8, + & 0.982132817936118700E+0_R8, 0.392546836419047000E+0_R8/ + DATA + & YDATA(31,1,2), XDATA(31,1,2), XDATA(31,2,2) + & /0.271811057454661300E+1_R8, + & -0.223515657121262700E-1_R8, 0.650479019708978800E+0_R8/ + DATA + & YDATA(32,1,2), XDATA(32,1,2), XDATA(32,2,2) + & /0.377035865613392400E+1_R8, + & 0.136081427545033600E+0_R8, 0.753020101897661800E+0_R8/ + DATA + & YDATA(33,1,2), XDATA(33,1,2), XDATA(33,2,2) + & /0.560111053917143100E+1_R8, + & 0.145367053019870600E+0_R8, 0.611153532003093100E+0_R8/ + DATA + & YDATA(34,1,2), XDATA(34,1,2), XDATA(34,2,2) + & /0.128152376174926800E+2_R8, + & 0.308221919576435500E+0_R8, 0.455217283290423900E+0_R8/ + DATA + & YDATA(35,1,2), XDATA(35,1,2), XDATA(35,2,2) + & /-0.498709177732467200E+2_R8, + & 0.432658769133528300E+0_R8, 0.678607663414113000E+0_R8/ + DATA + & YDATA(36,1,2), XDATA(36,1,2), XDATA(36,2,2) + & /-0.815797696908314300E+1_R8, + & 0.477785501079980300E+0_R8, 0.536178207572157000E+0_R8/ + DATA + & YDATA(37,1,2), XDATA(37,1,2), XDATA(37,2,2) + & /-0.440240491195158600E+1_R8, + & 0.727986827616619000E+0_R8, 0.668497920573493900E+0_R8/ + DATA + & YDATA(38,1,2), XDATA(38,1,2), XDATA(38,2,2) + & /-0.276723957061767500E+1_R8, + & 0.745950385588265100E+0_R8, 0.786077589007263700E+0_R8/ + DATA + & YDATA(39,1,2), XDATA(39,1,2), XDATA(39,2,2) + & /-0.223203667288734800E+1_R8, + & 0.732537503527113500E+0_R8, 0.582625164046828400E+0_R8/ + DATA + & YDATA(40,1,2), XDATA(40,1,2), XDATA(40,2,2) + & /-0.169728270310622000E+1_R8, + & 0.967352361433846300E+0_R8, 0.460779396016832800E+0_R8/ + DATA + & YDATA(41,1,2), XDATA(41,1,2), XDATA(41,2,2) + & /0.551015652153227000E+1_R8, + & 0.129761784310891100E-1_R8, 0.700009537931860000E+0_R8/ + DATA + & YDATA(42,1,2), XDATA(42,1,2), XDATA(42,2,2) + & /0.128036180496215800E+2_R8, + & 0.170163243950629700E+0_R8, 0.853131830764348700E+0_R8/ + DATA + & YDATA(43,1,2), XDATA(43,1,2), XDATA(43,2,2) + & /-0.498257683396339000E+2_R8, + & 0.162768461906274000E+0_R8, 0.865315129048175000E+0_R8/ + DATA + & YDATA(44,1,2), XDATA(44,1,2), XDATA(44,2,2) + & /-0.877334550221761900E+1_R8, + & 0.222914807946165800E+0_R8, 0.797511758502094500E+0_R8/ + DATA + & YDATA(45,1,2), XDATA(45,1,2), XDATA(45,2,2) + & /-0.453820192156867600E+1_R8, + & 0.402910095604624900E+0_R8, 0.761492958727023100E+0_R8/ + DATA + & YDATA(46,1,2), XDATA(46,1,2), XDATA(46,2,2) + & /-0.297499315738677900E+1_R8, + & 0.233770812593443200E+0_R8, 0.896000095844223500E+0_R8/ + DATA + & YDATA(47,1,2), XDATA(47,1,2), XDATA(47,2,2) + & /-0.212743255978538900E+1_R8, + & 0.646528693486914700E+0_R8, 0.968574333700755700E+0_R8/ + DATA + & YDATA(48,1,2), XDATA(48,1,2), XDATA(48,2,2) + & /-0.209703205365401000E+1_R8, + & 0.802811658568969400E+0_R8, 0.904866450476711600E+0_R8/ + DATA + & YDATA(49,1,2), XDATA(49,1,2), XDATA(49,2,2) + & /-0.155287292042086200E+1_R8, + & 0.837137859891222900E+0_R8, 0.835684424990021900E+0_R8/ + DATA + & YDATA(50,1,2), XDATA(50,1,2), XDATA(50,2,2) + & /-0.161356673770480700E+1_R8, + & 0.103165980756526600E+1_R8, 0.793902191912346100E+0_R8/ + + DATA + & TDATA(3) + & /' BOGGS, BYRD AND SCHNABEL, 1985, EXAMPLE 3'/ + DATA + & NDATA(3), MDATA(3), NPDATA(3), NQDATA(3) + & /44, 1, 9, 1/ + DATA + & (BDATA(K,3),K=1,9) + & /0.281887509408440189E-5_R8, + & -0.231290549212363845E-2_R8, 0.583035555572801965E+1_R8, + & 0.000000000000000000E+0_R8, 0.406910776203121026E+8_R8, + & 0.138001105225000000E-2_R8, 0.596038513209999999E-1_R8, + & 0.670582099359999998E+1_R8, 0.106994410000000000E+10_R8/ + DATA + & YDATA( 1,1,3), XDATA( 1,1,3) + & /0.988227696721327788E+0_R8, 0.25E-8_R8/ + DATA + & YDATA( 2,1,3), XDATA( 2,1,3) + & /0.988268083998559958E+0_R8, 0.64E-8_R8/ + DATA + & YDATA( 3,1,3), XDATA( 3,1,3) + & /0.988341022958438831E+0_R8, 1.0E-8_R8/ + DATA + & YDATA( 4,1,3), XDATA( 4,1,3) + & /0.988380557606306446E+0_R8, 0.9E-7_R8/ + DATA + & YDATA( 5,1,3), XDATA( 5,1,3) + & /0.988275062411751338E+0_R8, 1.0E-6_R8/ + DATA + & YDATA( 6,1,3), XDATA( 6,1,3) + & /0.988326680176446987E+0_R8, 0.4E-5_R8/ + DATA + & YDATA( 7,1,3), XDATA( 7,1,3) + & /0.988306058860433439E+0_R8, 0.9E-5_R8/ + DATA + & YDATA( 8,1,3), XDATA( 8,1,3) + & /0.988292880079125555E+0_R8, 0.16E-4_R8/ + DATA + & YDATA( 9,1,3), XDATA( 9,1,3) + & /0.988305279259496905E+0_R8, 0.36E-4_R8/ + DATA + & YDATA(10,1,3), XDATA(10,1,3) + & /0.988278142019574202E+0_R8, 0.64E-4_R8/ + DATA + & YDATA(11,1,3), XDATA(11,1,3) + & /0.988224953369819946E+0_R8, 1.0E-4_R8/ + DATA + & YDATA(12,1,3), XDATA(12,1,3) + & /0.988111989169778223E+0_R8, 0.144E-3_R8/ + DATA + & YDATA(13,1,3), XDATA(13,1,3) + & /0.988045627103840613E+0_R8, 0.225E-3_R8/ + DATA + & YDATA(14,1,3), XDATA(14,1,3) + & /0.987913715667047655E+0_R8, 0.400E-3_R8/ + DATA + & YDATA(15,1,3), XDATA(15,1,3) + & /0.987841994238525678E+0_R8, 0.625E-3_R8/ + DATA + & YDATA(16,1,3), XDATA(16,1,3) + & /0.987638450432434270E+0_R8, 0.900E-3_R8/ + DATA + & YDATA(17,1,3), XDATA(17,1,3) + & /0.987587364331771395E+0_R8, 0.1225E-2_R8/ + DATA + & YDATA(18,1,3), XDATA(18,1,3) + & /0.987576264149633684E+0_R8, 0.1600E-2_R8/ + DATA + & YDATA(19,1,3), XDATA(19,1,3) + & /0.987539209110983643E+0_R8, 0.2025E-2_R8/ + DATA + & YDATA(20,1,3), XDATA(20,1,3) + & /0.987621143807705698E+0_R8, 0.25E-2_R8/ + DATA + & YDATA(21,1,3), XDATA(21,1,3) + & /0.988023229785526217E+0_R8, 0.36E-2_R8/ + DATA + & YDATA(22,1,3), XDATA(22,1,3) + & /0.988558376710994197E+0_R8, 0.49E-2_R8/ + DATA + & YDATA(23,1,3), XDATA(23,1,3) + & /0.989304775352439885E+0_R8, 0.64E-2_R8/ + DATA + & YDATA(24,1,3), XDATA(24,1,3) + & /0.990210452265710472E+0_R8, 0.81E-2_R8/ + DATA + & YDATA(25,1,3), XDATA(25,1,3) + & /0.991095950592263900E+0_R8, 1.00E-2_R8/ + DATA + & YDATA(26,1,3), XDATA(26,1,3) + & /0.991475677297119272E+0_R8, 0.11025E-1_R8/ + DATA + & YDATA(27,1,3), XDATA(27,1,3) + & /0.991901306250746771E+0_R8, 0.12100E-1_R8/ + DATA + & YDATA(28,1,3), XDATA(28,1,3) + & /0.992619222425303263E+0_R8, 0.14400E-1_R8/ + DATA + & YDATA(29,1,3), XDATA(29,1,3) + & /0.993617037631973475E+0_R8, 0.16900E-1_R8/ + DATA + & YDATA(30,1,3), XDATA(30,1,3) + & /0.994727321698030676E+0_R8, 0.19600E-1_R8/ + DATA + & YDATA(31,1,3), XDATA(31,1,3) + & /0.996523114720326189E+0_R8, 0.25600E-1_R8/ + DATA + & YDATA(32,1,3), XDATA(32,1,3) + & /0.998036909563764020E+0_R8, 0.32400E-1_R8/ + DATA + & YDATA(33,1,3), XDATA(33,1,3) + & /0.999151968626971372E+0_R8, 0.40000E-1_R8/ + DATA + & YDATA(34,1,3), XDATA(34,1,3) + & /0.100017083706131769E+1_R8, 0.50625E-1_R8/ + DATA + & YDATA(35,1,3), XDATA(35,1,3) + & /0.100110046382923523E+1_R8, 0.75625E-1_R8/ + DATA + & YDATA(36,1,3), XDATA(36,1,3) + & /0.100059103180404652E+1_R8, 0.12250E+0_R8/ + DATA + & YDATA(37,1,3), XDATA(37,1,3) + & /0.999211829791257561E+0_R8, 0.16000E+0_R8/ + DATA + & YDATA(38,1,3), XDATA(38,1,3) + & /0.994711451526761862E+0_R8, 0.25000E+0_R8/ + DATA + & YDATA(39,1,3), XDATA(39,1,3) + & /0.989844132928847109E+0_R8, 0.33640E+0_R8/ + DATA + & YDATA(40,1,3), XDATA(40,1,3) + & /0.987234104554490439E+0_R8, 0.38440E+0_R8/ + DATA + & YDATA(41,1,3), XDATA(41,1,3) + & /0.980928240178404887E+0_R8, 0.49E+0_R8/ + DATA + & YDATA(42,1,3), XDATA(42,1,3) + & /0.970888680366055576E+0_R8, 0.64E+0_R8/ + DATA + & YDATA(43,1,3), XDATA(43,1,3) + & /0.960043769857327398E+0_R8, 0.81E+0_R8/ + DATA + & YDATA(44,1,3), XDATA(44,1,3) + & /0.947277159259551068E+0_R8, 1.00E+0_R8/ + + DATA + & TDATA(4) + & /' HIMMELBLAU, 1970, EXAMPLE 6.2-4, PAGE 188'/ + DATA + & NDATA(4), MDATA(4), NPDATA(4), NQDATA(4) + & /13, 2, 3, 1/ + DATA + & (BDATA(K,4),K=1,3) + & /3.0E+0_R8, 3.0E+0_R8, -0.5E+0_R8/ + DATA + & YDATA( 1,1,4), XDATA( 1,1,4), XDATA( 1,2,4) + & /2.93E+0_R8, 0.0E+0_R8, 0.0E+0_R8/ + DATA + & YDATA( 2,1,4), XDATA( 2,1,4), XDATA( 2,2,4) + & /1.95E+0_R8, 0.0E+0_R8, 1.0E+0_R8/ + DATA + & YDATA( 3,1,4), XDATA( 3,1,4), XDATA( 3,2,4) + & /0.81E+0_R8, 0.0E+0_R8, 2.0E+0_R8/ + DATA + & YDATA( 4,1,4), XDATA( 4,1,4), XDATA( 4,2,4) + & /0.58E+0_R8, 0.0E+0_R8, 3.0E+0_R8/ + DATA + & YDATA( 5,1,4), XDATA( 5,1,4), XDATA( 5,2,4) + & /5.90E+0_R8, 1.0E+0_R8, 0.0E+0_R8/ + DATA + & YDATA( 6,1,4), XDATA( 6,1,4), XDATA( 6,2,4) + & /4.74E+0_R8, 1.0E+0_R8, 1.0E+0_R8/ + DATA + & YDATA( 7,1,4), XDATA( 7,1,4), XDATA( 7,2,4) + & /4.18E+0_R8, 1.0E+0_R8, 2.0E+0_R8/ + DATA + & YDATA( 8,1,4), XDATA( 8,1,4), XDATA( 8,2,4) + & /4.05E+0_R8, 1.0E+0_R8, 2.0E+0_R8/ + DATA + & YDATA( 9,1,4), XDATA( 9,1,4), XDATA( 9,2,4) + & /9.03E+0_R8, 2.0E+0_R8, 0.0E+0_R8/ + DATA + & YDATA(10,1,4), XDATA(10,1,4), XDATA(10,2,4) + & /7.85E+0_R8, 2.0E+0_R8, 1.0E+0_R8/ + DATA + & YDATA(11,1,4), XDATA(11,1,4), XDATA(11,2,4) + & /7.22E+0_R8, 2.0E+0_R8, 2.0E+0_R8/ + DATA + & YDATA(12,1,4), XDATA(12,1,4), XDATA(12,2,4) + & /8.50E+0_R8, 2.5E+0_R8, 2.0E+0_R8/ + DATA + & YDATA(13,1,4), XDATA(13,1,4), XDATA(13,2,4) + & /9.81E+0_R8, 2.9E+0_R8, 1.8E+0_R8/ + + DATA + & TDATA(5) + & /' DRAPER AND SMITH, 1981, EXERCISE I, PAGE 521-522'/ + DATA + & NDATA(5), MDATA(5), NPDATA(5), NQDATA(5) + & /8, 2, 2, 1/ + DATA + & (BDATA(K,5),K=1,2) + & /0.01155E+0_R8, 5000.0E+0_R8/ + DATA + & YDATA(1,1,5), XDATA(1,1,5), XDATA(1,2,5) + & /0.912E+0_R8, 109.0E+0_R8, 600.0E+0_R8/ + DATA + & YDATA(2,1,5), XDATA(2,1,5), XDATA(2,2,5) + & /0.382E+0_R8, 65.0E+0_R8, 640.0E+0_R8/ + DATA + & YDATA(3,1,5), XDATA(3,1,5), XDATA(3,2,5) + & /0.397E+0_R8, 1180.0E+0_R8, 600.0E+0_R8/ + DATA + & YDATA(4,1,5), XDATA(4,1,5), XDATA(4,2,5) + & /0.376E+0_R8, 66.0E+0_R8, 640.0E+0_R8/ + DATA + & YDATA(5,1,5), XDATA(5,1,5), XDATA(5,2,5) + & /0.342E+0_R8, 1270.0E+0_R8, 600.0E+0_R8/ + DATA + & YDATA(6,1,5), XDATA(6,1,5), XDATA(6,2,5) + & /0.358E+0_R8, 69.0E+0_R8, 640.0E+0_R8/ + DATA + & YDATA(7,1,5), XDATA(7,1,5), XDATA(7,2,5) + & /0.348E+0_R8, 1230.0E+0_R8, 600.0E+0_R8/ + DATA + & YDATA(8,1,5), XDATA(8,1,5), XDATA(8,2,5) + & /0.376E+0_R8, 68.0E+0_R8, 640.0E+0_R8/ + + DATA + & TDATA(6) + & /' POWELL AND MACDONALD, 1972, TABLES 7 AND 8, PAGES 153-154'/ + DATA + & NDATA(6), MDATA(6), NPDATA(6), NQDATA(6) + & /14, 1, 3, 1/ + DATA + & (BDATA(K,6),K=1,3) + & /25.0E+0_R8, 30.0E+0_R8, 6.0E+0_R8/ + DATA + & YDATA( 1,1,6), XDATA( 1,1,6) + & /26.38E+0_R8, 1.0E+0_R8/ + DATA + & YDATA( 2,1,6), XDATA( 2,1,6) + & /25.79E+0_R8, 2.0E+0_R8/ + DATA + & YDATA( 3,1,6), XDATA( 3,1,6) + & /25.29E+0_R8, 3.0E+0_R8/ + DATA + & YDATA( 4,1,6), XDATA( 4,1,6) + & /24.86E+0_R8, 4.0E+0_R8/ + DATA + & YDATA( 5,1,6), XDATA( 5,1,6) + & /24.46E+0_R8, 5.0E+0_R8/ + DATA + & YDATA( 6,1,6), XDATA( 6,1,6) + & /24.10E+0_R8, 6.0E+0_R8/ + DATA + & YDATA( 7,1,6), XDATA( 7,1,6) + & /23.78E+0_R8, 7.0E+0_R8/ + DATA + & YDATA( 8,1,6), XDATA( 8,1,6) + & /23.50E+0_R8, 8.0E+0_R8/ + DATA + & YDATA( 9,1,6), XDATA( 9,1,6) + & /23.24E+0_R8, 9.0E+0_R8/ + DATA + & YDATA(10,1,6), XDATA(10,1,6) + & /23.00E+0_R8, 10.0E+0_R8/ + DATA + & YDATA(11,1,6), XDATA(11,1,6) + & /22.78E+0_R8, 11.0E+0_R8/ + DATA + & YDATA(12,1,6), XDATA(12,1,6) + & /22.58E+0_R8, 12.0E+0_R8/ + DATA + & YDATA(13,1,6), XDATA(13,1,6) + & /22.39E+0_R8, 13.0E+0_R8/ + DATA + & YDATA(14,1,6), XDATA(14,1,6) + & /22.22E+0_R8, 14.0E+0_R8/ + + DATA + & TDATA(7) + & /' FULLER, 1987, TABLE 3.2.10, PAGES 244-245'/ + DATA + & NDATA(7), MDATA(7), NPDATA(7), NQDATA(7) + & /20, 2, 5, 1/ + DATA + & (BDATA(K,7),K=1,5) + & /-1.0E+0_R8, -3.0E+0_R8, 0.09E+0_R8, 0.02E+0_R8, 0.08E+0_R8/ + DATA + & YDATA( 1,1,7), XDATA( 1,1,7), XDATA( 1,2,7) + & /0.0E+0_R8, 0.50E+0_R8, -0.12E+0_R8/ + DATA + & YDATA( 2,1,7), XDATA( 2,1,7), XDATA( 2,2,7) + & /0.0E+0_R8, 1.20E+0_R8, -0.60E+0_R8/ + DATA + & YDATA( 3,1,7), XDATA( 3,1,7), XDATA( 3,2,7) + & /0.0E+0_R8, 1.60E+0_R8, -1.00E+0_R8/ + DATA + & YDATA( 4,1,7), XDATA( 4,1,7), XDATA( 4,2,7) + & /0.0E+0_R8, 1.86E+0_R8, -1.40E+0_R8/ + DATA + & YDATA( 5,1,7), XDATA( 5,1,7), XDATA( 5,2,7) + & /0.0E+0_R8, 2.12E+0_R8, -2.54E+0_R8/ + DATA + & YDATA( 6,1,7), XDATA( 6,1,7), XDATA( 6,2,7) + & /0.0E+0_R8, 2.36E+0_R8, -3.36E+0_R8/ + DATA + & YDATA( 7,1,7), XDATA( 7,1,7), XDATA( 7,2,7) + & /0.0E+0_R8, 2.44E+0_R8, -4.00E+0_R8/ + DATA + & YDATA( 8,1,7), XDATA( 8,1,7), XDATA( 8,2,7) + & /0.0E+0_R8, 2.36E+0_R8, -4.75E+0_R8/ + DATA + & YDATA( 9,1,7), XDATA( 9,1,7), XDATA( 9,2,7) + & /0.0E+0_R8, 2.06E+0_R8, -5.25E+0_R8/ + DATA + & YDATA(10,1,7), XDATA(10,1,7), XDATA(10,2,7) + & /0.0E+0_R8, 1.74E+0_R8, -5.64E+0_R8/ + DATA + & YDATA(11,1,7), XDATA(11,1,7), XDATA(11,2,7) + & /0.0E+0_R8, 1.34E+0_R8, -5.97E+0_R8/ + DATA + & YDATA(12,1,7), XDATA(12,1,7), XDATA(12,2,7) + & /0.0E+0_R8, 0.90E+0_R8, -6.32E+0_R8/ + DATA + & YDATA(13,1,7), XDATA(13,1,7), XDATA(13,2,7) + & /0.0E+0_R8, -0.28E+0_R8, -6.44E+0_R8/ + DATA + & YDATA(14,1,7), XDATA(14,1,7), XDATA(14,2,7) + & /0.0E+0_R8, -0.78E+0_R8, -6.44E+0_R8/ + DATA + & YDATA(15,1,7), XDATA(15,1,7), XDATA(15,2,7) + & /0.0E+0_R8, -1.36E+0_R8, -6.41E+0_R8/ + DATA + & YDATA(16,1,7), XDATA(16,1,7), XDATA(16,2,7) + & /0.0E+0_R8, -1.90E+0_R8, -6.25E+0_R8/ + DATA + & YDATA(17,1,7), XDATA(17,1,7), XDATA(17,2,7) + & /0.0E+0_R8, -2.50E+0_R8, -5.88E+0_R8/ + DATA + & YDATA(18,1,7), XDATA(18,1,7), XDATA(18,2,7) + & /0.0E+0_R8, -2.88E+0_R8, -5.50E+0_R8/ + DATA + & YDATA(19,1,7), XDATA(19,1,7), XDATA(19,2,7) + & /0.0E+0_R8, -3.18E+0_R8, -5.24E+0_R8/ + DATA + & YDATA(20,1,7), XDATA(20,1,7), XDATA(20,2,7) + & /0.0E+0_R8, -3.44E+0_R8, -4.86E+0_R8/ + + DATA + & TDATA(8) + & /' BATES AND WATTS, 1988, TABLE A1.13, PAGES 280-281'/ + DATA + & NDATA(8), MDATA(8), NPDATA(8), NQDATA(8) + & /23, 1, 5, 2/ + DATA + & (BDATA(K,8),K=1,5) + & /4.0E+0_R8, 2.0E+0_R8, 7.0E+0_R8, 0.40E+0_R8, 0.50E+0_R8/ + DATA + & YDATA( 1,1,8), YDATA( 1,2,8), XDATA( 1,1,8) + & /4.220E+0_R8, 0.136E+0_R8, 30.0E+0_R8/ + DATA + & YDATA( 2,1,8), YDATA( 2,2,8), XDATA( 2,1,8) + & /4.167E+0_R8, 0.167E+0_R8, 50.0E+0_R8/ + DATA + & YDATA( 3,1,8), YDATA( 3,2,8), XDATA( 3,1,8) + & /4.132E+0_R8, 0.188E+0_R8, 70.0E+0_R8/ + DATA + & YDATA( 4,1,8), YDATA( 4,2,8), XDATA( 4,1,8) + & /4.038E+0_R8, 0.212E+0_R8, 100.0E+0_R8/ + DATA + & YDATA( 5,1,8), YDATA( 5,2,8), XDATA( 5,1,8) + & /4.019E+0_R8, 0.236E+0_R8, 150.0E+0_R8/ + DATA + & YDATA( 6,1,8), YDATA( 6,2,8), XDATA( 6,1,8) + & /3.956E+0_R8, 0.257E+0_R8, 200.0E+0_R8/ + DATA + & YDATA( 7,1,8), YDATA( 7,2,8), XDATA( 7,1,8) + & /3.884E+0_R8, 0.276E+0_R8, 300.0E+0_R8/ + DATA + & YDATA( 8,1,8), YDATA( 8,2,8), XDATA( 8,1,8) + & /3.784E+0_R8, 0.297E+0_R8, 500.0E+0_R8/ + DATA + & YDATA( 9,1,8), YDATA( 9,2,8), XDATA( 9,1,8) + & /3.713E+0_R8, 0.309E+0_R8, 700.0E+0_R8/ + DATA + & YDATA(10,1,8), YDATA(10,2,8), XDATA(10,1,8) + & /3.633E+0_R8, 0.311E+0_R8, 1000.0E+0_R8/ + DATA + & YDATA(11,1,8), YDATA(11,2,8), XDATA(11,1,8) + & /3.540E+0_R8, 0.314E+0_R8, 1500.0E+0_R8/ + DATA + & YDATA(12,1,8), YDATA(12,2,8), XDATA(12,1,8) + & /3.433E+0_R8, 0.311E+0_R8, 2000.0E+0_R8/ + DATA + & YDATA(13,1,8), YDATA(13,2,8), XDATA(13,1,8) + & /3.358E+0_R8, 0.305E+0_R8, 3000.0E+0_R8/ + DATA + & YDATA(14,1,8), YDATA(14,2,8), XDATA(14,1,8) + & /3.258E+0_R8, 0.289E+0_R8, 5000.0E+0_R8/ + DATA + & YDATA(15,1,8), YDATA(15,2,8), XDATA(15,1,8) + & /3.193E+0_R8, 0.277E+0_R8, 7000.0E+0_R8/ + DATA + & YDATA(16,1,8), YDATA(16,2,8), XDATA(16,1,8) + & /3.128E+0_R8, 0.255E+0_R8, 10000.0E+0_R8/ + DATA + & YDATA(17,1,8), YDATA(17,2,8), XDATA(17,1,8) + & /3.059E+0_R8, 0.240E+0_R8, 15000.0E+0_R8/ + DATA + & YDATA(18,1,8), YDATA(18,2,8), XDATA(18,1,8) + & /2.984E+0_R8, 0.218E+0_R8, 20000.0E+0_R8/ + DATA + & YDATA(19,1,8), YDATA(19,2,8), XDATA(19,1,8) + & /2.934E+0_R8, 0.202E+0_R8, 30000.0E+0_R8/ + DATA + & YDATA(20,1,8), YDATA(20,2,8), XDATA(20,1,8) + & /2.876E+0_R8, 0.182E+0_R8, 50000.0E+0_R8/ + DATA + & YDATA(21,1,8), YDATA(21,2,8), XDATA(21,1,8) + & /2.838E+0_R8, 0.168E+0_R8, 70000.0E+0_R8/ + DATA + & YDATA(22,1,8), YDATA(22,2,8), XDATA(22,1,8) + & /2.798E+0_R8, 0.153E+0_R8, 100000.0E+0_R8/ + DATA + & YDATA(23,1,8), YDATA(23,2,8), XDATA(23,1,8) + & /2.759E+0_R8, 0.139E+0_R8, 150000.0E+0_R8/ + + DATA + & TDATA(9) + & /' ZWOLAK, WATSON, AND TYSON, 2004.'/ + DATA + & NDATA(9), MDATA(9), NPDATA(9), NQDATA(9) + & /4, 1, 2, 1/ + DATA + & (BDATA(K,9),K=1,2) + & /200.0_R8, 5.0_R8/ + DATA + & YDATA( 1,1,9), XDATA( 1,1,9) + & /2.718281828459045_R8, 1.0_R8/ + DATA + & YDATA( 2,1,9), XDATA( 2,1,9) + & /7.389056098930650_R8, 2.0_R8/ + DATA + & YDATA( 3,1,9), XDATA( 3,1,9) + & /148.4131591025766_R8, 5.0_R8/ + DATA + & YDATA( 4,1,9), XDATA( 4,1,9) + & /403.4287934927353_R8, 6.0_R8/ + + DATA + & TDATA(10) + & /' ZWOLAK, WATSON, AND TYSON, 2005.'/ + DATA + & NDATA(10), MDATA(10), NPDATA(10), NQDATA(10) + & /4, 1, 2, 1/ + DATA + & (BDATA(K,10),K=1,2) + & /200.0_R8, 5.0_R8/ + DATA + & YDATA( 1,1,10), XDATA( 1,1,10) + & /2.718281828459045_R8, 1.0_R8/ + DATA + & YDATA( 2,1,10), XDATA( 2,1,10) + & /7.389056098930650_R8, 2.0_R8/ + DATA + & YDATA( 3,1,10), XDATA( 3,1,10) + & /148.4131591025766_R8, 5.0_R8/ + DATA + & YDATA( 4,1,10), XDATA( 4,1,10) + & /403.4287934927353_R8, 6.0_R8/ + +C...Variable definitions (alphabetically) +C BDATA: The function parameter for each data set. +C BETA: The function parameters. +C I: An indexing variable. +C J: An indexing variable. +C L: An indexing variable. +C LDX: The leading dimension of array X. +C M: The number of columns of data in the explanatory variable. +C MDATA: The number of columns of data in the explanatory variable +C in each data set. +C N: The number of observations. +C NDATA: The number of observations per data set. +C NP: The number of function parameters. +C NPDATA: The number of function parameters in each data set. +C NQDATA: The number of responses per observation in each data set. +C SETNO: The number of the data set being analyzed. +C TDATA: The reference for the each of the data sets. +C TITLE: The reference for the data set being analyzed. +C X: The explanatory variables. +C XDATA: The explanatory variables for each data set. +C Y: The response variable. +C YDATA: The response variables for each data set. + + +C***First executable statement DODRXD + + + TITLE = TDATA(SETNO) + + N = NDATA(SETNO) + M = MDATA(SETNO) + NP = NPDATA(SETNO) + NQ = NQDATA(SETNO) + + DO 20 L=1,NQ + DO 10 I=1,N + Y(I,L) = YDATA(I,L,SETNO) + 10 CONTINUE + 20 CONTINUE + + DO 40 J=1,M + DO 30 I=1,N + X(I,J) = XDATA(I,J,SETNO) + 30 CONTINUE + 40 CONTINUE + + DO 50 K=1,NP + BETA(K) = BDATA(K,SETNO) + 50 CONTINUE + + RETURN + + END +*DODRXF + SUBROUTINE DODRXF + & (N,M,NP,NQ, + & LDN,LDM,LDNP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,F,FJACB,FJACD, + & ISTOP) +C***Begin Prologue DODRXF +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 860529 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute jacobian matricies for ODRPACK95 exerciser +C***End Prologue DODRXF + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + +C...Array arguments + REAL (KIND=R8) + & BETA(NP),F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ), + & XPLUSD(LDN,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...Scalar parameters + INTEGER, PARAMETER :: MAXNP=10 + +C...Scalars in common + INTEGER + & SETNO + +C...Arrays in common + REAL (KIND=R8) + & LOWER(MAXNP),UPPER(MAXNP) + +C...Local scalars + REAL (KIND=R8) + & CTHETA,FAC1,FAC2,FAC3,FAC4,FREQ, + & OMEGA,ONE,PHI,PI,R,STHETA,THETA,ZERO + INTEGER + & I,J,K + +C...Intrinsic functions + INTRINSIC + & ATAN2,COS,EXP,SIN,SQRT + +C...Common blocks + COMMON /SETID/SETNO + COMMON /BOUNDS/ LOWER,UPPER + +C...Data statements + DATA + & ZERO,ONE + & /0.0E0_R8,1.0E0_R8/ + +C...Variable definitions (alphabetically) +C BETA: Current values of parameters +C F: Predicted function values +C FAC1: A factors or terms used in computing the jacobians. +C FAC2: A factors or terms used in computing the jacobians. +C FAC3: A factors or terms used in computing the jacobians. +C FAC4: A factors or terms used in computing the jacobians. +C FJACB: Jacobian with respect to BETA +C FJACD: Jacobian with respect to errors DELTA +C IDEVAL: Indicator for selecting computation to be performed +C IFIXB: Indicators for "fixing" parameters (BETA) +C IFIXX: Indicators for "fixing" explanatory variable (X) +C LDIFX: Leading dimension of array IFIXX +C ISTOP: Stopping condition, where +C 0 means current BETA and X+DELTA were +C acceptable and values were computed successfully +C 1 means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should select +C values closer to most recently used values +C -1 means current BETA and X+DELTA are +C not acceptable; ODRPACK95 should stop +C LDN: Leading dimension declarator equal or exceeding N +C LDM: Leading dimension declarator equal or exceeding M +C LDNP: Leading dimension declarator equal or exceeding NP +C M: The number of columns of data in the explanatory variable. +C N: The number of observations. +C NP: The number of function parameters. +C NQ: The number of responses per observation. +C ONE: The value 1.0E0_R8. +C SETNO: The number of the data set being analyzed. +C XPLUSD: Current value of explanatory variable, i.e., X + DELTA +C ZERO: The value 0.0E0_R8. + + +C***First executable statement DODRXF + + +C Do something with FJACD, FJACB, IFIXB and IFIXX to avoid warnings that they +C are not being used. This is simply not to worry users that the example +C program is failing. + IF (IFIXB(1) .GT. 0 .AND. IFIXX(1,1) .GT. 0 + & .AND. FJACB(1,1,1) .GT. 0 .AND. FJACD(1,1,1) .GT. 0 ) THEN +C Do nothing. + END IF + + +C Check for BETA outside bounds. Return with error if BETA outside bounds. + + IF (ANY(LOWER(1:NP).GT.BETA(1:NP))) THEN + ISTOP = -1 + RETURN + END IF + + IF (ANY(UPPER(1:NP).LT.BETA(1:NP))) THEN + ISTOP = -2 + RETURN + END IF + + + IF (SETNO.EQ.1) THEN + +C Setno. 1: Boggs, Byrd and Schnabel, 1985, example 1 + + IF (BETA(1).LE.1.01E0_R8) THEN + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 100 I=1,N + F(I,1) = BETA(1)/(XPLUSD(I,1)-BETA(2)) + 100 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 110 I=1,N + FJACB(I,1,1) = ONE/(XPLUSD(I,1)-BETA(2)) + FJACB(I,2,1) = BETA(1)*(XPLUSD(I,1)-BETA(2))**(-2) + 110 CONTINUE + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO 120 I=1,N + FJACD(I,1,1) = -BETA(1)*(XPLUSD(I,1)-BETA(2))**(-2) + 120 CONTINUE + END IF + + ELSE + ISTOP = 1 + END IF + + ELSE IF (SETNO.EQ.2) THEN + +C Setno. 2: Boggs, Byrd and Schnabel, 1985, example 2 + + ISTOP = 0 + + DO 200 I=1,N + FAC1 = (BETA(2)*XPLUSD(I,1)+BETA(3)*XPLUSD(I,2)-ONE) + + IF (MOD(IDEVAL,10).NE.0) THEN + F(I,1) = BETA(1)/FAC1 + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + FJACB(I,1,1) = ONE/FAC1 + FJACB(I,2,1) = -BETA(1)*(FAC1**(-2))*XPLUSD(I,1) + FJACB(I,3,1) = -BETA(1)*(FAC1**(-2))*XPLUSD(I,2) + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + FJACD(I,1,1) = -BETA(1)*(FAC1**(-2))*BETA(2) + FJACD(I,2,1) = -BETA(1)*(FAC1**(-2))*BETA(3) + END IF + 200 CONTINUE + + ELSE IF (SETNO.EQ.3) THEN + +C Setno. 3: Boggs, Byrd and Schnabel, 1985, example 3 + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 310 I=1,N + F(I,1) = ZERO + DO 300 J=1,4 + F(I,1) = F(I,1) + BETA(J)/(XPLUSD(I,1)+BETA(J+5)) + 300 CONTINUE + F(I,1) = F(I,1) + BETA(5) + 310 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 330 I=1,N + FJACB(I,5,1) = ONE + DO 320 K=1,4 + FJACB(I,K,1) = ONE/(XPLUSD(I,1)+BETA(K+5)) + FJACB(I,K+5,1) = -BETA(K)* + & (XPLUSD(I,1)+BETA(K+5))**(-2) + 320 CONTINUE + 330 CONTINUE + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO 350 I=1,N + FJACD(I,1,1) = ZERO + DO 340 K=4,1,-1 + FJACD(I,1,1) = FJACD(I,1,1) - + & BETA(K)*(XPLUSD(I,1)+BETA(K+5))**(-2) + 340 CONTINUE + 350 CONTINUE + END IF + + ELSE IF (SETNO.EQ.4) THEN + +C Setno. 4: Himmelblau, 1970, example 6.2-4, page 188 + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 400 I = 1, N + F(I,1) = BETA(1)*XPLUSD(I,1) + + & BETA(2)*EXP(BETA(3)*XPLUSD(I,2)) + 400 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 410 I=1,N + FJACB(I,1,1) = XPLUSD(I,1) + FJACB(I,2,1) = EXP(BETA(3)*XPLUSD(I,2)) + FJACB(I,3,1) = BETA(2)* + & EXP(BETA(3)*XPLUSD(I,2))*XPLUSD(I,2) + 410 CONTINUE + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO 420 I=1,N + FJACD(I,1,1) = BETA(1) + FJACD(I,2,1) = BETA(2)*EXP(BETA(3)*XPLUSD(I,2))*BETA(3) + 420 CONTINUE + END IF + + ELSE IF (SETNO.EQ.5) THEN + +C Setno. 5: Draper and Smith, 1981, exercise i, page 521-522 + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 500 I=1,N + F(I,1) = EXP(-BETA(1)*XPLUSD(I,1)* + & EXP(-BETA(2)*(ONE/XPLUSD(I,2) - ONE/620.0E0_R8))) + 500 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 510 I=1,N + FAC1 = ONE/XPLUSD(I,2) - ONE/620.0E0_R8 + FAC2 = EXP(-BETA(2)*FAC1) + FAC3 = BETA(1)*XPLUSD(I,1) + FAC4 = EXP(-FAC3*FAC2) + + FJACB(I,1,1) = -FAC4*XPLUSD(I,1)*FAC2 + FJACB(I,2,1) = FAC4*FAC3*FAC2*FAC1 + + IF (MOD(IDEVAL/100,10).NE.0) THEN + FJACD(I,1,1) = -FAC4*BETA(1)*FAC2 + FJACD(I,2,1) = -FAC4*FAC3*FAC2* + & BETA(2)/XPLUSD(I,2)**2 + END IF + 510 CONTINUE + END IF + + ELSE IF (SETNO.EQ.6) THEN + +C Setno. 6: Powell and Macdonald, 1972, tables 7 and 8, page 153-154 +C N.B. this derivative is intentionally coded incorrectly + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 600 I=1,N + F(I,1) = BETA(1)* + & (ONE+BETA(3)*XPLUSD(I,1)/BETA(2))**(-ONE/BETA(3)) + 600 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 610 I=1,N + FJACB(I,1,1) = ZERO + FJACB(I,2,1) = ZERO + FJACB(I,3,1) = ZERO + + IF (MOD(IDEVAL/100,10).NE.0) THEN + FJACD(I,1,1) = XPLUSD(I,1) + END IF + 610 CONTINUE + END IF + + ELSE IF (SETNO.EQ.7) THEN + +C Setno. 7: Fuller, 1987, table 3.2.10, pages 244-245 +C N.B. this derivative is intentionally coded incorrectly + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO 700 I=1,N + F(I,1) = BETA(3)*(XPLUSD(I,1)-BETA(1))**2 + + & 2*BETA(4)*(XPLUSD(I,1)-BETA(1))* + & (XPLUSD(I,2)-BETA(2)) + + & BETA(5)*(XPLUSD(I,2)-BETA(2))**2 - 1.0E0_R8 + 700 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 710 I=1,N + FJACB(I,1,1) = ZERO + FJACB(I,2,1) = ZERO + FJACB(I,3,1) = ZERO + FJACB(I,4,1) = ZERO + FJACB(I,5,1) = ZERO + + IF (MOD(IDEVAL/100,10).NE.0) THEN + FJACD(I,1,1) = ZERO + FJACD(I,2,1) = ZERO + END IF + 710 CONTINUE + END IF + + ELSE IF (SETNO.EQ.8) THEN + +C Setno. 8: Bates and Watts, 1988, table A1.13, pages 280-281 +C N.B. This derivative is intentionally coded incorrectly + + DO 800 I=1,N + IF (XPLUSD(I,1).LT.0.0E0_R8) THEN + ISTOP = 1 + RETURN + END IF + 800 CONTINUE + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + PI = 3.141592653589793238462643383279E0_R8 + THETA = PI*BETA(4)*0.5E0_R8 + CTHETA = COS(THETA) + STHETA = SIN(THETA) + DO 810 I=1,N + FREQ = XPLUSD(I,1) + OMEGA = (2.0E0_R8*PI*FREQ*EXP(-BETA(3)))**BETA(4) + PHI = ATAN2((OMEGA*STHETA),(1+OMEGA*CTHETA)) + R = (BETA(1)-BETA(2)) * + & SQRT((1+OMEGA*CTHETA)**2+(OMEGA*STHETA)**2)** + & (-BETA(5)) + F(I,1) = BETA(2) + R*COS(BETA(5)*PHI) + F(I,2) = R*SIN(BETA(5)*PHI) + 810 CONTINUE + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO 820 I=1,N + FJACB(I,1,1) = ZERO + FJACB(I,2,1) = ZERO + FJACB(I,3,1) = ZERO + FJACB(I,4,1) = ZERO + FJACB(I,5,1) = ZERO + + FJACB(I,1,2) = ZERO + FJACB(I,2,2) = ZERO + FJACB(I,3,2) = ZERO + FJACB(I,4,2) = ZERO + FJACB(I,5,2) = ZERO + + IF (MOD(IDEVAL/100,10).NE.0) THEN + FJACD(I,1,1) = ZERO + FJACD(I,1,2) = ZERO + END IF + 820 CONTINUE + END IF + + ELSE IF (SETNO.EQ.9) THEN + +C Setno. 9: Zwolak, Watson, and Tyson, 2004. + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO I=1,N + F(I,1) = BETA(1)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO I=1,N + FJACB(I,1,1) = EXP(BETA(2)*XPLUSD(I,1)) + FJACB(I,2,1) = BETA(1)*XPLUSD(I,1)*EXP(BETA(2)* + & XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO I=1,N + FJACD(I,1,1) = BETA(1)*BETA(2)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + ELSE IF (SETNO.EQ.10) THEN + +C Setno. 10: Zwolak, Watson, and Tyson, 2005. + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO I=1,N + F(I,1) = BETA(1)/2.0_R8*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO I=1,N + FJACB(I,1,1) = EXP(BETA(2)*XPLUSD(I,1))/2.0_R8 + FJACB(I,2,1) = BETA(1)/2.0_R8*XPLUSD(I,1)*EXP(BETA(2)* + & XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO I=1,N + FJACD(I,1,1) = BETA(1)/2.0_R8*BETA(2)*EXP(BETA(2)* + & XPLUSD(I,1)) + END DO + END IF + + END IF + + RETURN + + END +*DODRXW + SUBROUTINE DODRXW + & (MAXN,MAXM,MAXNP,MAXNQ,LDWE,LD2WE,ISODR,LIWMIN,LWMIN) +C***Begin Prologue DODRXW +C***Refer to ODR +C***Routines Called (NONE) +C***Date Written 890205 (YYMMDD) +C***Revision Date 920619 (YYMMDD) +C***Purpose Compute minimum lengths for work vectors +C***Routines Called NONE +C***End Prologue DODRXW + +C...Used modules + USE REAL_PRECISION + +C...Scalar arguments + INTEGER + & LDWE,LD2WE,LIWMIN,LWMIN,MAXN,MAXM,MAXNP,MAXNQ + LOGICAL + & ISODR + +C...Variable definitions (alphabetically) +C ISODR: The variable designating whether the solution is by odr +C (ISODR=TRUE) or by ols (ISODR=FALSE). +C LDWE: The leading dimension of array WE. +C LD2WE: The second dimension of array WE. +C LIWMIN: The minimum length of vector IWORK for a given problem. +C LWMIN: The minimum length of vector WORK for a given problem. +C MAXM: The number of columns in the explanatory variable. +C MAXN: The number of observations. +C MAXNP: The number of function parameters. +C MAXNQ: The number of responses per observation. + + +C***First executable statement DODRXW + + + LIWMIN = 20+MAXNP+MAXNQ*(MAXNP+MAXM) + IF (ISODR) THEN + LWMIN = 18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 6*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 2*MAXN*MAXNQ*MAXM + MAXNQ**2 + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ + ELSE + LWMIN = 18 + 11*MAXNP + MAXNP**2 + MAXM + MAXM**2 + + & 4*MAXN*MAXNQ + 2*MAXN*MAXM + 2*MAXN*MAXNQ*MAXNP + + & 5*MAXNQ + MAXNQ*(MAXNP+MAXM) + LDWE*LD2WE*MAXNQ + END IF + + RETURN + END diff --git a/dataassim/math/optimization/odrpack95/tester.f b/dataassim/math/optimization/odrpack95/tester.f new file mode 100644 index 0000000..b01e1b6 --- /dev/null +++ b/dataassim/math/optimization/odrpack95/tester.f @@ -0,0 +1,241 @@ +*TESTER + PROGRAM TESTER +C***BEGIN PROLOGUE TESTER +C***REFER TO ODR +C***ROUTINES CALLED ODR +C***DATE WRITTEN 20040322 (YYYYMMDD) +C***REVISION DATE 20040322 (YYYYMMDD) +C***PURPOSE EXCERCISE ERROR REPORTING OF THE F90 VERSION OF ODRPACK95 +C***END PROLOGUE TESTER + +C...USED MODULES + USE REAL_PRECISION + USE ODRPACK95 + +C...LOCAL SCALARS + INTEGER N, M, NQ, NP, INFO, LUN +C STAT + +C...LOCAL ARRAYS + REAL (KIND=R8) + & BETA(:),Y(:,:),X(:,:),UPPER(2),LOWER(2) + +C...ALLOCATABLE ARRAYS + ALLOCATABLE BETA,Y,X + +C...EXTERNAL SUBPROGRAMS + EXTERNAL FCN + + COMMON /BOUNDS/ UPPER,LOWER + +C***FIRST EXECUTABLE STATEMENT TESTER + + OPEN(UNIT=8,FILE="SUMMARY") + WRITE(8,*) "NO SUMMARY AVAILABLE" + CLOSE(8) + + LUN = 9 + OPEN(UNIT=LUN,FILE="REPORT") + +C ERROR IN PROBLEM SIZE + + N = 0 + M = 0 + NQ = 0 + NP = 0 + ALLOCATE(BETA(NP),Y(N,NQ),X(N,M)) + Y(:,:) = 0.0_R8 + X(:,:) = 0.0_R8 + BETA(:) = 0.0_R8 + + CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,IPRINT=1,INFO=INFO, + & LUNRPT=LUN,LUNERR=LUN) + + WRITE(LUN,*) "INFO = ", INFO + +C ERROR IN JOB SPECIFICATION WITH WORK AND IWORK + + N = 1 + M = 1 + NQ = 1 + NP = 1 + DEALLOCATE(BETA,Y,X) + ALLOCATE(BETA(NP),Y(N,NQ),X(N,M)) + Y(:,:) = 0.0_R8 + X(:,:) = 0.0_R8 + BETA(:) = 0.0_R8 + + CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,IPRINT=1,INFO=INFO,JOB=10000, + & LUNRPT=LUN,LUNERR=LUN) + + WRITE(LUN,*) "INFO = ", INFO + +C ERROR IN JOB SPECIFICATION WITH DELTA + + N = 1 + M = 1 + NQ = 1 + NP = 1 + DEALLOCATE(BETA,Y,X) + ALLOCATE(BETA(NP),Y(N,NQ),X(N,M)) + Y(:,:) = 0.0_R8 + X(:,:) = 0.0_R8 + BETA(:) = 0.0_R8 + + CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,IPRINT=1,INFO=INFO,JOB=1000, + & LUNRPT=LUN,LUNERR=LUN) + + WRITE(LUN,*) "INFO = ", INFO + +C BOUNDS TOO SMALL FOR DERIVATIVE CHECKER WHEN DERIVATIVES DON'T AGREE. + + N = 4 + M = 1 + NQ = 1 + NP = 2 + DEALLOCATE(BETA,Y,X) + ALLOCATE(BETA(NP),Y(N,NQ),X(N,M)) + BETA(:) = (/ -200.0_R8, -5.0_R8 /) + UPPER(1:2) = (/ -200.0_R8, 0.0_R8 /) + LOWER(1:2) = (/ -200.000029802322_R8, -5.0_R8 /) + Y(:,1) = (/ 2.718281828459045_R8, 7.389056098930650_R8, + &148.4131591025766_R8, 403.4287934927353_R8 /) + X(:,1) = (/ 1.0_R8, 2.0_R8, 5.0_R8, 6.0_R8 /) + + CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,IPRINT=1,INFO=INFO,JOB=0020, + & LUNRPT=LUN,LUNERR=LUN,LOWER=LOWER,UPPER=UPPER) + + WRITE(LUN,*) "INFO = ", INFO + +C ERROR IN ARRAY ALLOCATION +C The following code is intended to force memory allocation failure. An +C appropriate N for your machine must be chosen to ensure memory allocation +C will fail within ODRPACK95. A value of about 1/4 the total memory available +C to a process should do the trick. However, most modern operating systems and +C Fortran compilers will not likely deny ODRPACK95 memory before they fail for +C another reason. Therefore, the memory allocation checks in ODRPACK95 are not +C easy to provoke. An operating system may return successfull memory +C allocation but fail to guarantee the memory causing a segfault when some +C memory locations are accessed. A Fortran compiler or operating system may +C allow limited sized stacks during subroutine invocation causing the ODRPACK95 +C call to fail before ODRPACK95 executes its first line. +C +C N = 032000000 +C M = 1 +C NQ = 1 +C NP = 1 +C DEALLOCATE(BETA,Y,X) +C ALLOCATE(BETA(NP),Y(N,NQ),X(N,M),STAT=STAT) +C IF (STAT.NE.0) THEN +C WRITE(0,*) +C & "SYSTEM ERROR: COULD NOT ALLOCATE MEMORY, TESTER ", +C & "FAILED TO RUN." +C STOP +C END IF +C Y(:,:) = 0.0_R8 +C X(:,:) = 0.0_R8 +C BETA(:) = 0.0_R8 +C +C CALL ODR(FCN,N,M,NP,NQ,BETA,Y,X,IPRINT=1,INFO=INFO, +C & LUNRPT=LUN,LUNERR=LUN) +C +C WRITE(LUN,*) "INFO = ", INFO + + CLOSE(LUN) + + END PROGRAM +*FCN + SUBROUTINE FCN + & (N,M,NP,NQ, + & LDN,LDM,LDNP, + & BETA,XPLUSD, + & IFIXB,IFIXX,LDIFX, + & IDEVAL,F,FJACB,FJACD, + & ISTOP) +C***BEGIN PROLOGUE FCN +C***REFER TO ODR +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 20040322 (YYYYMMDD) +C***REVISION DATE 20040322 (YYYYMMDD) +C***PURPOSE DUMMY ROUTINE FOR ODRPACK95 ERROR EXERCISER +C***END PROLOGUE FCN + +C...USED MODULES + USE REAL_PRECISION + +C...SCALAR ARGUMENTS + INTEGER + & IDEVAL,ISTOP,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + +C...ARRAY ARGUMENTS + REAL (KIND=R8) + & BETA(NP),F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ), + & XPLUSD(LDN,M) + INTEGER + & IFIXB(NP),IFIXX(LDIFX,M) + +C...ARRAYS IN COMMON + REAL (KIND=R8) + & LOWER(2),UPPER(2) + +C...LOCAL SCALARS + INTEGER + & I + + COMMON /BOUNDS/ UPPER,LOWER + + +C***FIRST EXECUTABLE STATEMENT + +C Do something with FJACD, FJACB, IFIXB and IFIXX to avoid warnings that they +C are not being used. This is simply not to worry users that the example +C program is failing. + IF (IFIXB(1) .GT. 0 .AND. IFIXX(1,1) .GT. 0 + & .AND. FJACB(1,1,1) .GT. 0 .AND. FJACD(1,1,1) .GT. 0 ) THEN +C Do nothing. + END IF + + + IF (ANY(LOWER(1:NP).GT.BETA(1:NP))) THEN + WRITE(0,*) "LOWER BOUNDS VIOLATED" + DO I=1,NP + IF (LOWER(I).GT.BETA(I)) THEN + WRITE(0,*) " IN THE ", I, " POSITION WITH ", BETA(I), + & "<", LOWER(I) + END IF + END DO + END IF + + IF (ANY(UPPER(1:NP).LT.BETA(1:NP))) THEN + WRITE(0,*) "UPPER BOUNDS VIOLATED" + DO I=1,NP + IF (UPPER(I).LT.BETA(I)) THEN + WRITE(0,*) " IN THE ", I, " POSITION WITH ", BETA(I), + & ">", UPPER(I) + END IF + END DO + END IF + + ISTOP = 0 + + IF (MOD(IDEVAL,10).NE.0) THEN + DO I=1,N + F(I,1) = BETA(1)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/10,10).NE.0) THEN + DO I=1,N + FJACB(I,1,1) = EXP(BETA(2)*XPLUSD(I,1)) + FJACB(I,2,1) = BETA(1)*XPLUSD(I,1)*EXP(BETA(2)* + & XPLUSD(I,1)) + END DO + END IF + + IF (MOD(IDEVAL/100,10).NE.0) THEN + DO I=1,N + FJACD(I,1,1) = BETA(1)*BETA(2)*EXP(BETA(2)*XPLUSD(I,1)) + END DO + END IF + + END SUBROUTINE diff --git a/dataassim/math/optimization/odrpack_old.f b/dataassim/math/optimization/odrpack_old.f new file mode 100644 index 0000000..0f38289 --- /dev/null +++ b/dataassim/math/optimization/odrpack_old.f @@ -0,0 +1,13610 @@ +! This file contains subroutines from ODRPACK and Numerical Recipes. +! Note that machine precision is now computed within the program so +! there is no need to set machine dependent constants. +! Lianhong Gu, Oak Ridge National Laboratory + +*DMPREC + DOUBLE PRECISION FUNCTION DMPREC() + implicit none + integer ibeta,it,irnd,ngrd,machep,negep,iexp,minexp, + *maxexp + double precision eps,epsneg,xmin,xmax + +C***BEGIN PROLOGUE DPREC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE DETERMINE MACHINE PRECISION FOR TARGET MACHINE AND COMPILER +C ASSUMING FLOATING-POINT NUMBERS ARE REPRESENTED IN THE +C T-DIGIT, BASE-B FORM +C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) +C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T, AND +C 0 .LT. X(1). +C TO ALTER THIS FUNCTION FOR A PARTICULAR TARGET MACHINE, +C EITHER +C ACTIVATE THE DESIRED SET OF DATA STATEMENTS BY +C REMOVING THE C FROM COLUMN 1 +C OR +C SET B, TD AND TS USING I1MACH BY ACTIVATING +C THE DECLARATION STATEMENTS FOR I1MACH +C AND THE STATEMENTS PRECEEDING THE FIRST +C EXECUTABLE STATEMENT BELOW. +C***END PROLOGUE DPREC + +C...LOCAL SCALARS +C DOUBLE PRECISION +C + B +C INTEGER +C + TD,TS + +C...EXTERNAL FUNCTIONS +c INTEGER +c + I1MACH +c EXTERNAL +c + I1MACH + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) + +C DOUBLE PRECISION B +C THE BASE OF THE TARGET MACHINE. +C (MAY BE DEFINED USING I1MACH(10).) +C INTEGER TD +C THE NUMBER OF BASE-B DIGITS IN DOUBLE PRECISION. +C (MAY BE DEFINED USING I1MACH(14).) +C INTEGER TS +C THE NUMBER OF BASE-B DIGITS IN SINGLE PRECISION. +C (MAY BE DEFINED USING I1MACH(11).) + + +C MACHINE CONSTANTS FOR COMPUTERS FOLLOWING IEEE ARITHMETIC STANDARD +C (E.G., MOTOROLA 68000 BASED MACHINES SUCH AS SUN AND SPARC +C WORKSTATIONS, AND AT&T PC 7300; AND 8087 BASED MICROS SUCH AS THE +C IBM PC AND THE AT&T 6300). +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 60 / + +C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM +C THE BURROUGHS 6700/7700 SYSTEMS +C DATA B / 8 / +C DATA TS / 13 / +C DATA TD / 26 / + +C MACHINE CONSTANTS FOR THE CDC 6000/7000 (FTN5 COMPILER) +C THE CYBER 170/180 SERIES UNDER NOS +C DATA B / 2 / +C DATA TS / 48 / +C DATA TD / 96 / + +C MACHINE CONSTANTS FOR THE CDC 6000/7000 (FTN COMPILER) +C THE CYBER 170/180 SERIES UNDER NOS/VE +C THE CYBER 200 SERIES +C DATA B / 2 / +C DATA TS / 47 / +C DATA TD / 94 / + +C MACHINE CONSTANTS FOR THE CRAY +C DATA B / 2 / +C DATA TS / 47 / +C DATA TD / 94 / + +C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE HARRIS COMPUTER +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 38 / + +C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 +C THE HONEYWELL 600/6000 SERIES +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 63 / + +C MACHINE CONSTANTS FOR THE HP 2100 +C (3 WORD DOUBLE PRECISION OPTION WITH FTN4) +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 39 / + +C MACHINE CONSTANTS FOR THE HP 2100 +C (4 WORD DOUBLE PRECISION OPTION WITH FTN4) +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 55 / + +C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE IBM PC +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE INTERDATA (PERKIN ELMER) 7/32 +C INTERDATA (PERKIN ELMER) 8/32 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 54 / + +C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 62 / + +C MACHINE CONSTANTS FOR THE PDP-11 SYSTEM +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE PERKIN-ELMER 3230 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR THE PRIME 850 AND PRIME 4050 +C DATA B / 2 / +C DATA TS / 23 / +C DATA TD / 47 / + +C MACHINE CONSTANTS FOR THE SEL SYSTEMS 85/86 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + +C MACHINE CONSTANTS FOR SUN AND SPARC WORKSTATIONS +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES +C DATA B / 2 / +C DATA TS / 27 / +C DATA TD / 60 / + +C MACHINE CONSTANTS FOR THE VAX-11 WITH FORTRAN IV-PLUS COMPILER +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE VAX/VMS SYSTEM WITHOUT G_FLOATING +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 56 / + +C MACHINE CONSTANTS FOR THE VAX/VMS SYSTEM WITH G_FLOATING +C DATA B / 2 / +C DATA TS / 24 / +C DATA TD / 53 / + +C MACHINE CONSTANTS FOR THE XEROX SIGMA 5/7/9 +C DATA B / 16 / +C DATA TS / 6 / +C DATA TD / 14 / + + +C***FIRST EXECUTABLE STATEMENT DMPREC + + +c B = I1MACH(10) +c TS = I1MACH(11) +c TD = I1MACH(14) + +c DMPREC = B ** (1-TD) + + call machar_odr(ibeta,it,irnd,ngrd,machep,negep,iexp, + *minexp,maxexp,eps,epsneg,xmin,xmax) + DMPREC=eps + RETURN + + END + + SUBROUTINE machar_odr(ibeta,it,irnd,ngrd,machep,negep, + *iexp,minexp,maxexp,eps,epsneg,xmin,xmax) + implicit none + INTEGER ibeta,iexp,irnd,it,machep,maxexp,minexp,negep,ngrd + double precision eps,epsneg,xmax,xmin + INTEGER i,itemp,iz,j,k,mx,nxres + double precision a,b,beta,betah,betain,one,t,temp,temp1,tempa, + &two,y,z,zero,CONV + CONV(i)=dble(i) + one=CONV(1) + two=one+one + zero=one-one + a=one +1 continue + a=a+a + temp=a+one + temp1=temp-a + if (temp1-one.eq.zero) goto 1 + b=one +2 continue + b=b+b + temp=a+b + itemp=int(temp-a) + if (itemp.eq.0) goto 2 + ibeta=itemp + beta=CONV(ibeta) + it=0 + b=one +3 continue + it=it+1 + b=b*beta + temp=b+one + temp1=temp-b + if (temp1-one.eq.zero) goto 3 + irnd=0 + betah=beta/two + temp=a+betah + if (temp-a.ne.zero) irnd=1 + tempa=a+beta + temp=tempa+betah + if ((irnd.eq.0).and.(temp-tempa.ne.zero)) irnd=2 + negep=it+3 + betain=one/beta + a=one + do 11 i=1, negep + a=a*betain +11 continue + b=a +4 continue + temp=one-a + if (temp-one.ne.zero) goto 5 + a=a*beta + negep=negep-1 + goto 4 +5 negep=-negep + epsneg=a + machep=-it-3 + a=b +6 continue + temp=one+a + if (temp-one.ne.zero) goto 7 + a=a*beta + machep=machep+1 + goto 6 +7 eps=a + ngrd=0 + temp=one+eps + if ((irnd.eq.0).and.(temp*one-one.ne.zero)) ngrd=1 + i=0 + k=1 + z=betain + t=one+eps + nxres=0 +8 continue + y=z + z=y*y + a=z*one + temp=z*t + if ((a+a.eq.zero).or.(dabs(z).ge.y)) goto 9 + temp1=temp*betain + if (temp1*beta.eq.z) goto 9 + i=i+1 + k=k+k + goto 8 +9 if (ibeta.ne.10) then + iexp=i+1 + mx=k+k + else + iexp=2 + iz=ibeta +10 if (k.ge.iz) then + iz=iz*ibeta + iexp=iexp+1 + goto 10 + endif + mx=iz+iz-1 + endif +20 xmin=y + y=y*betain + a=y*one + temp=y*t + if (((a+a).ne.zero).and.(dabs(y).lt.xmin)) then + k=k+1 + temp1=temp*betain + if ((temp1*beta.ne.y).or.(temp.eq.y)) then + goto 20 + else + nxres=3 + xmin=y + endif + endif + minexp=-k + if ((mx.le.k+k-3).and.(ibeta.ne.10)) then + mx=mx+mx + iexp=iexp+1 + endif + maxexp=mx+minexp + irnd=irnd+nxres + if (irnd.ge.2) maxexp=maxexp-2 + i=maxexp+minexp + if ((ibeta.eq.2).and.(i.eq.0)) maxexp=maxexp-1 + if (i.gt.20) maxexp=maxexp-1 + if (a.ne.y) maxexp=maxexp-2 + xmax=one-epsneg + if (xmax*one.ne.xmax) xmax=one-beta*epsneg + xmax=xmax/(beta*beta*beta*xmin) + i=maxexp+minexp+3 + do 12 j=1,i + if (ibeta.eq.2) xmax=xmax+xmax + if (ibeta.ne.2) xmax=xmax*beta +12 continue + return + END +C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. + +*DODR + SUBROUTINE DODR + + (FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + JOB, + + IPRINT,LUNERR,LUNRPT, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODR +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***CATEGORY NO. G2E,I1B1 +C***KEYWORDS ORTHOGONAL DISTANCE REGRESSION, +C NONLINEAR LEAST SQUARES, +C MEASUREMENT ERROR MODELS, +C ERRORS IN VARIABLES +C***AUTHOR BOGGS, PAUL T. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C GAITHERSBURG, MD 20899 +C BYRD, RICHARD H. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C ROGERS, JANET E. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C SCHNABEL, ROBERT B. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C AND +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION (SHORT CALL STATEMENT) +C***DESCRIPTION +C FOR DETAILS, SEE ODRPACK USER'S REFERENCE GUIDE. +C***REFERENCES BOGGS, P. T., R. H. BYRD, J. R. DONALDSON, AND +C R. B. SCHNABEL (1989), +C "ALGORITHM 676 --- ODRPACK: SOFTWARE FOR WEIGHTED +C ORTHOGONAL DISTANCE REGRESSION," +C ACM TRANS. MATH. SOFTWARE., 15(4):348-364. +C BOGGS, P. T., R. H. BYRD, J. E. ROGERS, AND +C R. B. SCHNABEL (1992), +C "USER'S REFERENCE GUIDE FOR ODRPACK VERSION 2.01, +C SOFTWARE FOR WEIGHTED ORTHOGONAL DISTANCE REGRESSION," +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C INTERNAL REPORT NUMBER 92-4834. +C BOGGS, P. T., R. H. BYRD, AND R. B. SCHNABEL (1987), +C "A STABLE AND EFFICIENT ALGORITHM FOR NONLINEAR +C ORTHOGONAL DISTANCE REGRESSION," +C SIAM J. SCI. STAT. COMPUT., 8(6):1052-1078. +C***ROUTINES CALLED DODCNT +C***END PROLOGUE DODR + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE,LIWORK,LWORK, + + M,N,NDIGIT,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + NEGONE,PARTOL,SSTOL,TAUFAC,ZERO + INTEGER + + IPRINT,LDIFX,LDSCLD,LDSTPD,LUNERR,LUNRPT,MAXIT + LOGICAL + + SHORT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + SCLB(1),SCLD(1,1),STPB(1),STPD(1,1),WD1(1,1,1) + INTEGER + + IFIXB(1),IFIXX(1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODCNT + +C...DATA STATEMENTS + DATA + + NEGONE,ZERO + + /-1.0D0,0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C N: THE NUMBER OF OBSERVATIONS. +C NEGONE: THE VALUE -1.0D0. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C WD: THE DELTA WEIGHTS. +C WD1: A DUMMY ARRAY USED WHEN WD(1,1,1)=0.0D0. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODR + + +C INITIALIZE NECESSARY VARIABLES TO INDICATE USE OF DEFAULT VALUES + + IFIXB(1) = -1 + IFIXX(1,1) = -1 + LDIFX = 1 + NDIGIT = -1 + TAUFAC = NEGONE + SSTOL = NEGONE + PARTOL = NEGONE + MAXIT = -1 + STPB(1) = NEGONE + STPD(1,1) = NEGONE + LDSTPD = 1 + SCLB(1) = NEGONE + SCLD(1,1) = NEGONE + LDSCLD = 1 + + SHORT = .TRUE. + IF (WD(1,1,1).NE.ZERO) THEN + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + ELSE + WD1(1,1,1) = NEGONE + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD1,1,1, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END IF + RETURN + + END +*DODRC + SUBROUTINE DODRC + + (FCN, + + N,M,NP,NQ, + + BETA, + + Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, + + SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, + + SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODRC +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***CATEGORY NO. G2E,I1B1 +C***KEYWORDS ORTHOGONAL DISTANCE REGRESSION, +C NONLINEAR LEAST SQUARES, +C MEASUREMENT ERROR MODELS, +C ERRORS IN VARIABLES +C***AUTHOR BOGGS, PAUL T. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C GAITHERSBURG, MD 20899 +C BYRD, RICHARD H. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C ROGERS, JANET E. +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C SCHNABEL, ROBERT B. +C DEPARTMENT OF COMPUTER SCIENCE +C UNIVERSITY OF COLORADO, BOULDER, CO 80309 +C AND +C APPLIED AND COMPUTATIONAL MATHEMATICS DIVISION +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C BOULDER, CO 80303-3328 +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION (LONG CALL STATEMENT) +C***DESCRIPTION +C FOR DETAILS, SEE ODRPACK USER'S REFERENCE GUIDE. +C***REFERENCES BOGGS, P. T., R. H. BYRD, J. R. DONALDSON, AND +C R. B. SCHNABEL (1989), +C "ALGORITHM 676 --- ODRPACK: SOFTWARE FOR WEIGHTED +C ORTHOGONAL DISTANCE REGRESSION," +C ACM TRANS. MATH. SOFTWARE., 15(4):348-364. +C BOGGS, P. T., R. H. BYRD, J. E. ROGERS, AND +C R. B. SCHNABEL (1992), +C "USER'S REFERENCE GUIDE FOR ODRPACK VERSION 2.01, +C SOFTWARE FOR WEIGHTED ORTHOGONAL DISTANCE REGRESSION," +C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY +C INTERNAL REPORT NUMBER 92-4834. +C BOGGS, P. T., R. H. BYRD, AND R. B. SCHNABEL (1987), +C "A STABLE AND EFFICIENT ALGORITHM FOR NONLINEAR +C ORTHOGONAL DISTANCE REGRESSION," +C SIAM J. SCI. STAT. COMPUT., 8(6):1052-1078. +C***ROUTINES CALLED DODCNT +C***END PROLOGUE DODRC + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,N,NDIGIT,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + NEGONE,ZERO + LOGICAL + + SHORT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + WD1(1,1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODCNT + +C...DATA STATEMENTS + DATA + + NEGONE,ZERO + + /-1.0D0,0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C WD: THE DELTA WEIGHTS. +C WD1: A DUMMY ARRAY USED WHEN WD(1,1,1)=0.0D0. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODRC + + SHORT = .FALSE. + IF (WD(1,1,1).NE.ZERO) THEN + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + ELSE + WD1(1,1,1) = NEGONE + CALL DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD1,1,1, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) + END IF + RETURN + + END +*DACCES + SUBROUTINE DACCES + + (N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) +C***BEGIN PROLOGUE DACCES +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DIWINF,DWINF +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE ACCESS OR STORE VALUES IN THE WORK ARRAYS +C***END PROLOGUE DACESS + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRS,ALPHA,ETA,OLMAVG,PARTOL,PNORM,PRERS,RCOND, + + RNORMS,RVAR,SSTOL,TAU,TAUFAC + INTEGER + + IDF,INT2,IPR1,IPR2,IPR2F,IPR3,IRANK,ISTOP,ISTOPI,JOB,JPVT, + + LDWE,LD2WE,LIWORK,LUNRPT,LWORK,M,MAXIT,N,NETA,NFEV,NITER,NJEV, + + NNZW,NP,NPP,NQ,OMEGA,QRAUX,SD,U,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + + ACCESS,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + WORK(LWORK),WSS(3) + INTEGER + + IWORK(LIWORK) + +C...LOCAL SCALARS + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I, + + DELTAI,DELTNI,DELTSI,DIFFI,EPSI, + + EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,IDFI,INT2I,IPRINI,IPRINT, + + IRANKI,JOBI,JPVTI,LDTTI,LIWKMN,LUNERI,LUNRPI,LWKMN,MAXITI, + + MSGB,MSGD,NETAI,NFEVI,NITERI,NJEVI,NNZWI,NPPI,NROWI, + + NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + + VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WSSI,WSSDEI,WSSEPI,XPLUSI +C...EXTERNAL SUBROUTINES + EXTERNAL + + DIWINF,DWINF + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACCESS: THE VARIABLE DESIGNATING WHETHER INFORMATION IS TO BE +C ACCESSED FROM THE WORK ARRAYS (ACCESS=TRUE) OR STORED IN +C THEM (ACCESS=FALSE). +C ACTRS: THE SAVED ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C EPSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY EPS. +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IDFI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C INT2: THE NUMBER OF INTERNAL DOUBLING STEPS. +C INT2I: THE LOCATION IN ARRAY IWORK OF VARIABLE INT2. +C IPR1: THE VALUE OF THE FOURTH DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE INITIAL SUMMARY REPORT. +C IPR2: THE VALUE OF THE THIRD DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE ITERATION REPORTS. +C IPR2F: THE VALUE OF THE SECOND DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FREQUENCY OF THE ITERATION REPORTS. +C IPR3: THE VALUE OF THE FIRST DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FINAL SUMMARY REPORT. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS TO BE +C FOUND BY ODR (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C JPVT: THE PIVOT VECTOR. +C JPVTI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE JPVT. +C LDTTI: THE STARTING LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGB: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGD: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITER: THE NUMBER OF ITERATIONS TAKEN. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABLE NITER. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS ACTUALLY ESTIMATED. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. +C OLMAVG: THE AVERAGE NUMBER OF LEVENBERG-MARQUARDT STEPS PER +C ITERATION. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGA: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERS: THE SAVED PREDICTED RELATIVE REDUCTION IN THE +C SUM-OF-SQUARES. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C QRAUX: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCOND. +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORMS: THE NORM OF THE SAVED WEIGHTED EPSILONS AND DELTAS. +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVAR: THE RESIDUAL VARIANCE, I.E. STANDARD DEVIATION SQUARED. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SCLB: THE SCALING VALUES USED FOR BETA. +C SCLD: THE SCALING VALUES USED FOR DELTA. +C SD: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=TRUE) OR THE LONG- +C CALL (SHORT=FALSE). +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C U: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCV: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WRK1: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSS: THE SUM OF THE SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM OF THE SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM OF THE SQUARES OF THE WEIGHTED EPSILONS. +C WSSI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(1). +C WSSDEI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(2). +C WSSEPI: THE STARTING LOCATION IN ARRAY WORK OF VARIABLE WSS(3). +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. + + +C***FIRST EXECUTABLE STATEMENT DACCES + + +C FIND STARTING LOCATIONS WITHIN INTEGER WORKSPACE + + CALL DIWINF(M,NP,NQ, + + MSGB,MSGD,JPVTI,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) + +C FIND STARTING LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) + + IF (ACCESS) THEN + +C SET STARTING LOCATIONS FOR WORK VECTORS + + JPVT = JPVTI + OMEGA = OMEGAI + QRAUX = QRAUXI + SD = SDI + VCV = VCVI + U = UI + WRK1 = WRK1I + WRK2 = WRK2I + WRK3 = WRK3I + WRK4 = WRK4I + WRK5 = WRK5I + WRK6 = WRK6I + +C ACCESS VALUES FROM THE WORK VECTORS + + ACTRS = WORK(ACTRSI) + ALPHA = WORK(ALPHAI) + ETA = WORK(ETAI) + OLMAVG = WORK(OLMAVI) + PARTOL = WORK(PARTLI) + PNORM = WORK(PNORMI) + PRERS = WORK(PRERSI) + RCOND = WORK(RCONDI) + WSS(1) = WORK(WSSI) + WSS(2) = WORK(WSSDEI) + WSS(3) = WORK(WSSEPI) + RVAR = WORK(RVARI) + RNORMS = WORK(RNORSI) + SSTOL = WORK(SSTOLI) + TAU = WORK(TAUI) + TAUFAC = WORK(TAUFCI) + + NETA = IWORK(NETAI) + IRANK = IWORK(IRANKI) + JOB = IWORK(JOBI) + LUNRPT = IWORK(LUNRPI) + MAXIT = IWORK(MAXITI) + NFEV = IWORK(NFEVI) + NITER = IWORK(NITERI) + NJEV = IWORK(NJEVI) + NNZW = IWORK(NNZWI) + NPP = IWORK(NPPI) + IDF = IWORK(IDFI) + INT2 = IWORK(INT2I) + +C SET UP PRINT CONTROL VARIABLES + + IPRINT = IWORK(IPRINI) + + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + + ELSE + +C STORE VALUES INTO THE WORK VECTORS + + WORK(ACTRSI) = ACTRS + WORK(ALPHAI) = ALPHA + WORK(OLMAVI) = OLMAVG + WORK(PARTLI) = PARTOL + WORK(PNORMI) = PNORM + WORK(PRERSI) = PRERS + WORK(RCONDI) = RCOND + WORK(WSSI) = WSS(1) + WORK(WSSDEI) = WSS(2) + WORK(WSSEPI) = WSS(3) + WORK(RVARI) = RVAR + WORK(RNORSI) = RNORMS + WORK(SSTOLI) = SSTOL + WORK(TAUI) = TAU + + IWORK(IRANKI) = IRANK + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NITERI) = NITER + IWORK(NJEVI) = NJEV + IWORK(IDFI) = IDF + IWORK(INT2I) = INT2 + END IF + + RETURN + END +*DESUBI + SUBROUTINE DESUBI + + (N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,E) +C***BEGIN PROLOGUE DESUBI +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE E = WD + ALPHA*TT**2 +C***END PROLOGUE DESUBI + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA + INTEGER + + LDTT,LDWD,LD2WD,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + E(M,M),TT(LDTT,M),WD(LDWD,LD2WD,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J,J1,J2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C E: THE VALUE OF THE ARRAY E = WD + ALPHA*TT**2 +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C J1: AN INDEXING VARIABLE. +C J2: AN INDEXING VARIABLE. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF RESPONSES PER OBSERVATION. +C TT: THE SCALING VALUES USED FOR DELTA. +C WD: THE SQUARED DELTA WEIGHTS, D**2. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DESUBI + + +C N.B. THE LOCATIONS OF WD AND TT ACCESSED DEPEND ON THE VALUE +C OF THE FIRST ELEMENT OF EACH ARRAY AND THE LEADING DIMENSIONS +C OF THE MULTIPLY SUBSCRIPTED ARRAYS. + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WD(1,1,1).GE.ZERO) THEN + IF (LDWD.GE.N) THEN +C THE ELEMENTS OF WD HAVE BEEN INDIVIDUALLY SPECIFIED + + IF (LD2WD.EQ.1) THEN +C THE ARRAYS STORED IN WD ARE DIAGONAL + CALL DZERO(M,M,E,M) + DO 10 J=1,M + E(J,J) = WD(I,1,J) + 10 CONTINUE + ELSE +C THE ARRAYS STORED IN WD ARE FULL POSITIVE SEMIDEFINITE MATRICES + DO 30 J1=1,M + DO 20 J2=1,M + E(J1,J2) = WD(I,J1,J2) + 20 CONTINUE + 30 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 110 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 110 CONTINUE + ELSE + DO 120 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 120 CONTINUE + END IF + ELSE + DO 130 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 130 CONTINUE + END IF + ELSE +C WD IS AN M BY M MATRIX + + IF (LD2WD.EQ.1) THEN +C THE ARRAY STORED IN WD IS DIAGONAL + CALL DZERO(M,M,E,M) + DO 140 J=1,M + E(J,J) = WD(1,1,J) + 140 CONTINUE + ELSE +C THE ARRAY STORED IN WD IS A FULL POSITIVE SEMIDEFINITE MATRICES + DO 160 J1=1,M + DO 150 J2=1,M + E(J1,J2) = WD(1,J1,J2) + 150 CONTINUE + 160 CONTINUE + END IF + + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 210 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(I,J)**2 + 210 CONTINUE + ELSE + DO 220 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,J)**2 + 220 CONTINUE + END IF + ELSE + DO 230 J=1,M + E(J,J) = E(J,J) + ALPHA*TT(1,1)**2 + 230 CONTINUE + END IF + END IF + ELSE +C WD IS A DIAGONAL MATRIX WITH ELEMENTS ABS(WD(1,1,1)) + CALL DZERO(M,M,E,M) + IF (TT(1,1).GT.ZERO) THEN + IF (LDTT.GE.N) THEN + DO 310 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(I,J)**2 + 310 CONTINUE + ELSE + DO 320 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,J)**2 + 320 CONTINUE + END IF + ELSE + DO 330 J=1,M + E(J,J) = ABS(WD(1,1,1)) + ALPHA*TT(1,1)**2 + 330 CONTINUE + END IF + END IF + + RETURN + END +*DETAF + SUBROUTINE DETAF + + (FCN, + + N,M,NP,NQ, + + XPLUSD,BETA,EPSMAC,NROW, + + PARTMP,PV0, + + IFIXB,IFIXX,LDIFX, + + ISTOP,NFEV,ETA,NETA, + + WRK1,WRK2,WRK6,WRK7) +C***BEGIN PROLOGUE DETAF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE NOISE AND NUMBER OF GOOD DIGITS IN FUNCTION RESULTS +C (ADAPTED FROM STARPAC SUBROUTINE ETAFUN) +C***END PROLOGUE DETAF + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSMAC,ETA + INTEGER + + ISTOP,LDIFX,M,N,NETA,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),PARTMP(NP),PV0(N,NQ), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),WRK7(-2:2,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + A,B,FAC,HUNDRD,ONE,P1,P2,P5,STP,TWO,ZERO + INTEGER + + J,K,L + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,INT,LOG10,MAX,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P1,P2,P5,ONE,TWO,HUNDRD + + /0.0D0,0.1D0,0.2D0,0.5D0,1.0D0,2.0D0,1.0D2/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: PARAMETERS OF THE LOCAL FIT. +C B: PARAMETERS OF THE LOCAL FIT. +C BETA: THE FUNCTION PARAMETERS. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE NOISE IN THE MODEL RESULTS. +C FAC: A FACTOR USED IN THE COMPUTATIONS. +C HUNDRD: THE VALUE 1.0D2. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEX VARIABLE. +C K: AN INDEX VARIABLE. +C L: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE MODEL RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER AT WHICH THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C P1: THE VALUE 0.1D0. +C P2: THE VALUE 0.2D0. +C P5: THE VALUE 0.5D0. +C PARTMP: THE MODEL PARAMETERS. +C PV0: THE ORIGINAL PREDICTED VALUES. +C STP: A SMALL VALUE USED TO PERTURB THE PARAMETERS. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C WRK7: A WORK ARRAY OF (5 BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DETAF + + + STP = HUNDRD*EPSMAC + ETA = EPSMAC + + DO 40 J=-2,2 + IF (J.EQ.0) THEN + DO 10 L=1,NQ + WRK7(J,L) = PV0(NROW,L) + 10 CONTINUE + ELSE + DO 20 K=1,NP + IF (IFIXB(1).LT.0) THEN + PARTMP(K) = BETA(K) + J*STP*BETA(K) + ELSE IF (IFIXB(K).NE.0) THEN + PARTMP(K) = BETA(K) + J*STP*BETA(K) + ELSE + PARTMP(K) = BETA(K) + END IF + 20 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + PARTMP,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1,ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO 30 L=1,NQ + WRK7(J,L) = WRK2(NROW,L) + 30 CONTINUE + END IF + 40 CONTINUE + + DO 100 L=1,NQ + A = ZERO + B = ZERO + DO 50 J=-2,2 + A = A + WRK7(J,L) + B = B + J*WRK7(J,L) + 50 CONTINUE + A = P2*A + B = P1*B + IF ((WRK7(0,L).NE.ZERO) .AND. + + (ABS(WRK7(1,L)+WRK7(-1,L)).GT.HUNDRD*EPSMAC)) THEN + FAC = ONE/ABS(WRK7(0,L)) + ELSE + FAC = ONE + END IF + DO 60 J=-2,2 + WRK7(J,L) = ABS((WRK7(J,L)-(A+J*B))*FAC) + ETA = MAX(WRK7(J,L),ETA) + 60 CONTINUE + 100 CONTINUE + NETA = MAX(TWO,P5-LOG10(ETA)) + + RETURN + END +*DEVJAC + SUBROUTINE DEVJAC + + (FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN, + + STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) +C***BEGIN PROLOGUE DEVJAC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DDOT_odr,DIFIX,DJACCD,DJACFD,DWGHT,DUNPAC,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE THE WEIGHTED JACOBIANS WRT BETA AND DELTA +C***END PROLOGUE DEVJAC + +C...SCALAR ARGUMENTS + INTEGER + + INFO,ISTOP,LDIFX,LDSTPD,LDTT,LDWE,LDX,LD2WE, + + M,N,NETA,NFEV,NJEV,NP,NQ + LOGICAL + + ANAJAC,CDJAC,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),BETAC(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + FN(N,NQ),SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WE1(LDWE,LD2WE,NQ),WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP), + + WRK6(N,NP,NQ),X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + INTEGER + + IDEVAL,J,K,K1,L + DOUBLE PRECISION + + ZERO + LOGICAL + + ERROR + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DIFIX,DJACCD,DJACFD,DWGHT,DUNPAC,DXPY + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr + EXTERNAL + + DDOT_odr + +C...DATA STATEMENTS + DATA ZERO + + /0.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETAC: THE CURRENT ESTIMATED VALUES OF THE UNFIXED BETA'S. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C DELTA: THE ESTIMATED VALUES OF DELTA. +C ERROR: THE VARIABLE DESIGNATING WHETHER ODRPACK DETECTED NONZERO +C VALUES IN ARRAY DELTA IN THE OLS CASE, AND THUS WHETHER +C THE USER MAY HAVE OVERWRITTEN IMPORTANT INFORMATION +C BY COMPUTING FJACD IN THE OLS CASE. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE PREDICTED VALUES OF THE FUNCTION AT THE CURRENT POINT. +C IDEVAL: THE VARIABLE DESIGNATING WHAT COMPUTATIONS ARE TO BE +C PERFORMED BY USER-SUPPLIED SUBROUTINE FCN. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF DELTA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISTOP: THE VARIABLE DESIGNATING THAT THE USER WISHES THE +C COMPUTATIONS STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C K1: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWE: THE LEADING DIMENSION OF ARRAYS WE AND WE1. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LD2WE: THE SECOND DIMENSION OF ARRAYS WE AND WE1. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C SSF: THE SCALE USED FOR THE BETA'S. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C WE1: THE SQUARE ROOTS OF THE EPSILON WEIGHTS IN ARRAY WE. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C X: THE INDEPENDENT VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + +C***FIRST EXECUTABLE STATEMENT DEVJAC +C INSERT CURRENT UNFIXED BETA ESTIMATES INTO BETA + CALL DUNPAC(NP,BETAC,BETA,IFIXB) +C COMPUTE XPLUSD = X + DELTA + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS (FJACB) AND +C THE JACOBIAN WRT DELTA (FJACD) + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + IF (ANAJAC) THEN + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,WRK2,FJACB,FJACD, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV+1 + END IF +C MAKE SURE FIXED ELEMENTS OF FJACD ARE ZERO + IF (ISODR) THEN + DO 10 L=1,NQ + CALL DIFIX(N,M,IFIXX,LDIFX,FJACD(1,1,L),N,FJACD(1,1,L),N) + 10 CONTINUE + END IF + ELSE IF (CDJAC) THEN + CALL DJACCD(FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) + ELSE + CALL DJACFD(FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) + END IF + IF (ISTOP.LT.0) THEN + RETURN + ELSE IF (.NOT.ISODR) THEN +C TRY TO DETECT WHETHER THE USER HAS COMPUTED JFACD +C WITHIN FCN IN THE OLS CASE + ERROR = DDOT_odr(N*M,DELTA,1,DELTA,1).NE.ZERO + IF (ERROR) THEN + INFO = 50300 + RETURN + END IF + END IF +C WEIGHT THE JACOBIAN WRT THE ESTIMATED BETAS + + IF (IFIXB(1).LT.0) THEN + DO 20 K=1,NP + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACB(1,K,1),N*NP,FJACB(1,K,1),N*NP) + 20 CONTINUE + ELSE + K1 = 0 + DO 30 K=1,NP + IF (IFIXB(K).GE.1) THEN + K1 = K1 + 1 + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACB(1,K,1),N*NP,FJACB(1,K1,1),N*NP) + END IF + 30 CONTINUE + END IF + +C WEIGHT THE JACOBIAN'S WRT DELTA AS APPROPRIATE + + IF (ISODR) THEN + DO 40 J=1,M + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE, + + FJACD(1,J,1),N*M,FJACD(1,J,1),N*M) + 40 CONTINUE + END IF + RETURN + END +*DFCTR + SUBROUTINE DFCTR(OKSEMI,A,LDA,N,INFO) +C***BEGIN PROLOGUE DFCTR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DDOT_odr +C***DATE WRITTEN 910706 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE FACTOR THE POSITIVE (SEMI)DEFINITE MATRIX A USING A +C MODIFIED CHOLESKY FACTORIZATION +C (ADAPTED FROM LINPACK SUBROUTINE DPOFA) +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***END PROLOGUE DFCTR + +C...SCALAR ARGUMENTS + INTEGER INFO,LDA,N + LOGICAL OKSEMI + +C...ARRAY ARGUMENTS + DOUBLE PRECISION A(LDA,N) + +C...LOCAL SCALARS + DOUBLE PRECISION XI,S,T,TEN,ZERO + INTEGER J,K + +C...EXTERNAL FUNCTIONS + EXTERNAL DMPREC,DDOT_odr + DOUBLE PRECISION DMPREC,DDOT_odr + +C...INTRINSIC FUNCTIONS + INTRINSIC SQRT + +C...DATA STATEMENTS + DATA + + ZERO,TEN + + /0.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: THE ARRAY TO BE FACTORED. UPON RETURN, A CONTAINS THE +C UPPER TRIANGULAR MATRIX R SO THAT A = TRANS(R)*R +C WHERE THE STRICT LOWER TRIANGLE IS SET TO ZERO +C IF INFO .NE. 0 , THE FACTORIZATION IS NOT COMPLETE. +C I: AN INDEXING VARIABLE. +C INFO: AN IDICATOR VARIABLE, WHERE IF +C INFO = 0 THEN FACTORIZATION WAS COMPLETED +C INFO = K SIGNALS AN ERROR CONDITION. THE LEADING MINOR +C OF ORDER K IS NOT POSITIVE (SEMI)DEFINITE. +C J: AN INDEXING VARIABLE. +C LDA: THE LEADING DIMENSION OF ARRAY A. +C N: THE NUMBER OF ROWS AND COLUMNS OF DATA IN ARRAY A. +C OKSEMI: THE INDICATING WHETHER THE FACTORED ARRAY CAN BE POSITIVE +C SEMIDEFINITE (OKSEMI=TRUE) OR WHETHER IT MUST BE FOUND TO +C BE POSITIVE DEFINITE (OKSEMI=FALSE). +C TEN: THE VALUE 10.0D0. +C XI: A VALUE USED TO TEST FOR NON POSITIVE SEMIDEFINITENESS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DFCTR + + +C SET RELATIVE TOLERANCE FOR DETECTING NON POSITIVE SEMIDEFINITENESS. + XI = -TEN*DMPREC() + +C COMPUTE FACTORIZATION, STORING IN UPPER TRIANGULAR PORTION OF A + DO 20 J=1,N + INFO = J + S = ZERO + DO 10 K=1,J-1 + IF (A(K,K).EQ.ZERO) THEN + T = ZERO + ELSE + T = A(K,J) - DDOT_odr(K-1,A(1,K),1,A(1,J),1) + T = T/A(K,K) + END IF + A(K,J) = T + S = S + T*T + 10 CONTINUE + S = A(J,J) - S +C ......EXIT + IF (A(J,J).LT.ZERO .OR. S.LT.XI*ABS(A(J,J))) THEN + RETURN + ELSE IF (.NOT.OKSEMI .AND. S.LE.ZERO) THEN + RETURN + ELSE IF (S.LE.ZERO) THEN + A(J,J) = ZERO + ELSE + A(J,J) = SQRT(S) + END IF + 20 CONTINUE + INFO = 0 + +C ZERO OUT LOWER PORTION OF A + DO 40 J=2,N + DO 30 K=1,J-1 + A(J,K) = ZERO + 30 CONTINUE + 40 CONTINUE + + RETURN + END +*DFCTRW + SUBROUTINE DFCTRW + + (N,M,NQ,NPP, + + ISODR, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + WRK0,WRK4, + + WE1,NNZW,INFO) +C***BEGIN PROLOGUE DFCTRW +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFCTR +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK INPUT PARAMETERS, INDICATING ERRORS FOUND USING +C NONZERO VALUES OF ARGUMENT INFO AS DESCRIBED IN THE +C ODRPACK REFERENCE GUIDE +C***END PROLOGUE DFCTRW + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDWD,LDWE,LD2WD,LD2WE, + + M,N,NNZW,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ),WD(LDWD,LD2WD,M), + + WRK0(NQ,NQ),WRK4(M,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,INF,J,J1,J2,L,L1,L2 + LOGICAL + + NOTZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DFCTR + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C J1: AN INDEXING VARIABLE. +C J2: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C L1: AN INDEXING VARIABLE. +C L2: AN INDEXING VARIABLE. +C LAST: THE LAST ROW OF THE ARRAY TO BE ACCESSED. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NOTZRO: THE VARIABLE DESIGNATING WHETHER A GIVEN COMPONENT OF THE +C WEIGHT ARRAY WE CONTAINS A NONZERO ELEMENT (NOTZRO=FALSE) +C OR NOT (NOTZRO=TRUE). +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATIONS. +C WE: THE (SQUARED) EPSILON WEIGHTS. +C WE1: THE FACTORED EPSILON WEIGHTS, S.T. TRANS(WE1)*WE1 = WE. +C WD: THE (SQUARED) DELTA WEIGHTS. +C WRK0: A WORK ARRAY OF (NQ BY NQ) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DFCTRW + + +C CHECK EPSILON WEIGHTS, AND STORE FACTORIZATION IN WE1 + + IF (WE(1,1,1).LT.ZERO) THEN +C WE CONTAINS A SCALAR + WE1(1,1,1) = -SQRT(ABS(WE(1,1,1))) + NNZW = N + + ELSE + NNZW = 0 + + IF (LDWE.EQ.1) THEN + + IF (LD2WE.EQ.1) THEN +C WE CONTAINS A DIAGONAL MATRIX + DO 110 L=1,NQ + IF (WE(1,1,L).GT.ZERO) THEN + NNZW = N + WE1(1,1,L) = SQRT(WE(1,1,L)) + ELSE IF (WE(1,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 110 CONTINUE + ELSE + +C WE CONTAINS A FULL NQ BY NQ SEMIDEFINITE MATRIX + DO 130 L1=1,NQ + DO 120 L2=L1,NQ + WRK0(L1,L2) = WE(1,L1,L2) + 120 CONTINUE + 130 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + DO 150 L1=1,NQ + DO 140 L2=1,NQ + WE1(1,L1,L2) = WRK0(L1,L2) + 140 CONTINUE + IF (WE1(1,L1,L1).NE.ZERO) THEN + NNZW = N + END IF + 150 CONTINUE + END IF + END IF + + ELSE + + IF (LD2WE.EQ.1) THEN +C WE CONTAINS AN ARRAY OF DIAGONAL MATRIX + DO 220 I=1,N + NOTZRO = .FALSE. + DO 210 L=1,NQ + IF (WE(I,1,L).GT.ZERO) THEN + NOTZRO = .TRUE. + WE1(I,1,L) = SQRT(WE(I,1,L)) + ELSE IF (WE(I,1,L).LT.ZERO) THEN + INFO = 30010 + GO TO 300 + END IF + 210 CONTINUE + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 220 CONTINUE + ELSE + +C WE CONTAINS AN ARRAY OF FULL NQ BY NQ SEMIDEFINITE MATRICES + DO 270 I=1,N + DO 240 L1=1,NQ + DO 230 L2=L1,NQ + WRK0(L1,L2) = WE(I,L1,L2) + 230 CONTINUE + 240 CONTINUE + CALL DFCTR(.TRUE.,WRK0,NQ,NQ,INF) + IF (INF.NE.0) THEN + INFO = 30010 + GO TO 300 + ELSE + NOTZRO = .FALSE. + DO 260 L1=1,NQ + DO 250 L2=1,NQ + WE1(I,L1,L2) = WRK0(L1,L2) + 250 CONTINUE + IF (WE1(I,L1,L1).NE.ZERO) THEN + NOTZRO = .TRUE. + END IF + 260 CONTINUE + END IF + IF (NOTZRO) THEN + NNZW = NNZW + 1 + END IF + 270 CONTINUE + END IF + END IF + END IF + +C CHECK FOR A SUFFICIENT NUMBER OF NONZERO EPSILON WEIGHTS + + IF (NNZW.LT.NPP) THEN + INFO = 30020 + END IF + + +C CHECK DELTA WEIGHTS + + 300 CONTINUE + IF (.NOT.ISODR .OR. WD(1,1,1).LT.ZERO) THEN +C PROBLEM IS NOT ODR, OR WD CONTAINS A SCALAR + RETURN + + ELSE + + IF (LDWD.EQ.1) THEN + + IF (LD2WD.EQ.1) THEN +C WD CONTAINS A DIAGONAL MATRIX + DO 310 J=1,M + IF (WD(1,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 310 CONTINUE + ELSE + +C WD CONTAINS A FULL M BY M POSITIVE DEFINITE MATRIX + DO 330 J1=1,M + DO 320 J2=J1,M + WRK4(J1,J2) = WD(1,J1,J2) + 320 CONTINUE + 330 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + END IF + + ELSE + + IF (LD2WD.EQ.1) THEN +C WD CONTAINS AN ARRAY OF DIAGONAL MATRICES + DO 420 I=1,N + DO 410 J=1,M + IF (WD(I,1,J).LE.ZERO) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 410 CONTINUE + 420 CONTINUE + ELSE + +C WD CONTAINS AN ARRAY OF FULL M BY M POSITIVE DEFINITE MATRICES + DO 470 I=1,N + DO 440 J1=1,M + DO 430 J2=J1,M + WRK4(J1,J2) = WD(I,J1,J2) + 430 CONTINUE + 440 CONTINUE + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + INFO = MAX(30001,INFO+1) + RETURN + END IF + 470 CONTINUE + END IF + END IF + END IF + + RETURN + END +*DFLAGS + SUBROUTINE DFLAGS + + (JOB,RESTRT,INITD,DOVCV,REDOJ,ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) +C***BEGIN PROLOGUE DFLAGS +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET FLAGS INDICATING CONDITIONS SPECIFIED BY JOB +C***END PROLOGUE DFLAGS + +C...SCALAR ARGUMENTS + INTEGER + + JOB + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...LOCAL SCALARS + INTEGER + + J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER-SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE FIRST N BY M ELEMENTS OF +C ARRAY WORK (INITD=FALSE). +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: THE VALUE OF A SPECIFIC DIGIT OF JOB. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). + + +C***FIRST EXECUTABLE STATEMENT DFLAGS + + + IF (JOB.GE.0) THEN + + RESTRT= JOB.GE.10000 + + INITD = MOD(JOB,10000)/1000.EQ.0 + + J = MOD(JOB,1000)/100 + IF (J.EQ.0) THEN + DOVCV = .TRUE. + REDOJ = .TRUE. + ELSE IF (J.EQ.1) THEN + DOVCV = .TRUE. + REDOJ = .FALSE. + ELSE + DOVCV = .FALSE. + REDOJ = .FALSE. + END IF + + J = MOD(JOB,100)/10 + IF (J.EQ.0) THEN + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.1) THEN + ANAJAC = .FALSE. + CDJAC = .TRUE. + CHKJAC = .FALSE. + ELSE IF (J.EQ.2) THEN + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .TRUE. + ELSE + ANAJAC = .TRUE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + END IF + + J = MOD(JOB,10) + IF (J.EQ.0) THEN + ISODR = .TRUE. + IMPLCT = .FALSE. + ELSE IF (J.EQ.1) THEN + ISODR = .TRUE. + IMPLCT = .TRUE. + ELSE + ISODR = .FALSE. + IMPLCT = .FALSE. + END IF + + ELSE + + RESTRT = .FALSE. + INITD = .TRUE. + DOVCV = .TRUE. + REDOJ = .TRUE. + ANAJAC = .FALSE. + CDJAC = .FALSE. + CHKJAC = .FALSE. + ISODR = .TRUE. + IMPLCT = .FALSE. + + END IF + + RETURN + END +*DHSTEP + DOUBLE PRECISION FUNCTION DHSTEP + + (ITYPE,NETA,I,J,STP,LDSTP) +C***BEGIN PROLOGUE DHSTEP +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET RELATIVE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES +C***END PROLOGUE DHSTEP + +C...SCALAR ARGUMENTS + INTEGER + + I,ITYPE,J,LDSTP,NETA + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + STP(LDSTP,J) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEN,THREE,TWO,ZERO + +C...DATA STATEMENTS + DATA + + ZERO,TWO,THREE,TEN + + /0.0D0,2.0D0,3.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN IDENTIFIER FOR SELECTING USER SUPPLIED STEP SIZES. +C ITYPE: THE FINITE DIFFERENCE METHOD BEING USED, WHERE +C ITYPE = 0 INDICATES FORWARD FINITE DIFFERENCES, AND +C ITYPE = 1 INDICATES CENTRAL FINITE DIFFERENCES. +C J: AN IDENTIFIER FOR SELECTING USER SUPPLIED STEP SIZES. +C LDSTP: THE LEADING DIMENSION OF ARRAY STP. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TEN: THE VALUE 10.0D0. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C ZERO: THE VALUE 0.0D0. + + + +C***FIRST EXECUTABLE STATEMENT DHSTEP + + +C SET DHSTEP TO RELATIVE FINITE DIFFERENCE STEP SIZE + + IF (STP(1,1).LE.ZERO) THEN + + IF (ITYPE.EQ.0) THEN +C USE DEFAULT FORWARD FINITE DIFFERENCE STEP SIZE + DHSTEP = TEN**(-ABS(NETA)/TWO - TWO) + + ELSE +C USE DEFAULT CENTRAL FINITE DIFFERENCE STEP SIZE + DHSTEP = TEN**(-ABS(NETA)/THREE) + END IF + + ELSE IF (LDSTP.EQ.1) THEN + DHSTEP = STP(1,J) + + ELSE + DHSTEP = STP(I,J) + END IF + + RETURN + END +*DIFIX + SUBROUTINE DIFIX + + (N,M,IFIX,LDIFIX,T,LDT,TFIX,LDTFIX) +C***BEGIN PROLOGUE DIFIX +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 910612 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET ELEMENTS OF T TO ZERO ACCORDING TO IFIX +C***END PROLOGUE DIFIX + +C...SCALAR ARGUMENTS + INTEGER + + LDIFIX,LDT,LDTFIX,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),TFIX(LDTFIX,M) + INTEGER + + IFIX(LDIFIX,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE ARRAY DESIGNATING WHETHER AN ELEMENT OF T IS TO BE +C SET TO ZERO. +C J: AN INDEXING VARIABLE. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C LDIFIX: THE LEADING DIMENSION OF ARRAY IFIX. +C LDTFIX: THE LEADING DIMENSION OF ARRAY TFIX. +C M: THE NUMBER OF COLUMNS OF DATA IN THE ARRAY. +C N: THE NUMBER OF ROWS OF DATA IN THE ARRAY. +C T: THE ARRAY BEING SET TO ZERO ACCORDING TO THE ELEMENTS +C OF IFIX. +C TFIX: THE RESULTING ARRAY. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DIFIX + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (IFIX(1,1).GE.ZERO) THEN + IF (LDIFIX.GE.N) THEN + DO 20 J=1,M + DO 10 I=1,N + IF (IFIX(I,J).EQ.0) THEN + TFIX(I,J) = ZERO + ELSE + TFIX(I,J) = T(I,J) + END IF + 10 CONTINUE + 20 CONTINUE + ELSE + DO 100 J=1,M + IF (IFIX(1,J).EQ.0) THEN + DO 30 I=1,N + TFIX(I,J) = ZERO + 30 CONTINUE + ELSE + DO 90 I=1,N + TFIX(I,J) = T(I,J) + 90 CONTINUE + END IF + 100 CONTINUE + END IF + END IF + + RETURN + END +*DINIWK + SUBROUTINE DINIWK + + (N,M,NP,WORK,LWORK,IWORK,LIWORK, + + X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + + BETA,SCLB, + + SSTOL,PARTOL,MAXIT,TAUFAC, + + JOB,IPRINT,LUNERR,LUNRPT, + + EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + SSFI,TTI,LDTTI,DELTAI) +C***BEGIN PROLOGUE DINIWK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFLAGS,DMPREC,DSCLB,DSCLD,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE INITIALIZE WORK VECTORS AS NECESSARY +C***END PROLOGUE DINIWK + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + DELTAI,EPSMAI,IPRINI,IPRINT,JOB,JOBI,LDIFX, + + LDSCLD,LDTTI,LDX,LIWORK,LUNERI,LUNERR,LUNRPI,LUNRPT,LWORK,M, + + MAXIT,MAXITI,N,NP,PARTLI,SSFI,SSTOLI,TAUFCI,TTI + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),WORK(LWORK),X(LDX,M) + INTEGER + + IFIXX(LDIFX,M),IWORK(LIWORK) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,THREE,TWO,ZERO + INTEGER + + I,J + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DMPREC + EXTERNAL + + DMPREC + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY_odr,DFLAGS,DSCLB,DSCLD,DZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TWO,THREE + + /0.0D0,1.0D0,2.0D0,3.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER-SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C I: AN INDEXING VARIABLE. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE FIXED +C AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C IWORK: THE INTEGER WORK SPACE. +C J: AN INDEXING VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDTTI: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING CRITERIA. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING CRITERIA. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C THREE: THE VALUE 3.0D0. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF THE ARRAY TT. +C TWO: THE VALUE 2.0D0. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE INDEPENDENT VARIABLE. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DINIWK + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C STORE VALUE OF MACHINE PRECISION IN WORK VECTOR + + WORK(EPSMAI) = DMPREC() + +C SET TOLERANCE FOR STOPPING CRITERIA BASED ON THE CHANGE IN THE +C PARAMETERS (SEE ALSO SUBPROGRAM DODCNT) + + IF (PARTOL.LT.ZERO) THEN + WORK(PARTLI) = WORK(EPSMAI)**(TWO/THREE) + ELSE + WORK(PARTLI) = MIN(PARTOL, ONE) + END IF + +C SET TOLERANCE FOR STOPPING CRITERIA BASED ON THE CHANGE IN THE +C SUM OF SQUARES OF THE WEIGHTED OBSERVATIONAL ERRORS + + IF (SSTOL.LT.ZERO) THEN + WORK(SSTOLI) = SQRT(WORK(EPSMAI)) + ELSE + WORK(SSTOLI) = MIN(SSTOL, ONE) + END IF + +C SET FACTOR FOR COMPUTING TRUST REGION DIAMETER AT FIRST ITERATION + + IF (TAUFAC.LE.ZERO) THEN + WORK(TAUFCI) = ONE + ELSE + WORK(TAUFCI) = MIN(TAUFAC, ONE) + END IF + +C SET MAXIMUM NUMBER OF ITERATIONS + + IF (MAXIT.LT.0) THEN + IWORK(MAXITI) = 50 + ELSE + IWORK(MAXITI) = MAXIT + END IF + +C STORE PROBLEM INITIALIZATION AND COMPUTATIONAL METHOD CONTROL +C VARIABLE + + IF (JOB.LE.0) THEN + IWORK(JOBI) = 0 + ELSE + IWORK(JOBI) = JOB + END IF + +C SET PRINT CONTROL + + IF (IPRINT.LT.0) THEN + IWORK(IPRINI) = 2001 + ELSE + IWORK(IPRINI) = IPRINT + END IF + +C SET LOGICAL UNIT NUMBER FOR ERROR MESSAGES + + IF (LUNERR.LT.0) THEN + IWORK(LUNERI) = 6 + ELSE + IWORK(LUNERI) = LUNERR + END IF + +C SET LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS + + IF (LUNRPT.LT.0) THEN + IWORK(LUNRPI) = 6 + ELSE + IWORK(LUNRPI) = LUNRPT + END IF + +C COMPUTE SCALING FOR BETA'S AND DELTA'S + + IF (SCLB(1).LE.ZERO) THEN + CALL DSCLB(NP,BETA,WORK(SSFI)) + ELSE + CALL DCOPY_odr(NP,SCLB,1,WORK(SSFI),1) + END IF + IF (ISODR) THEN + IF (SCLD(1,1).LE.ZERO) THEN + IWORK(LDTTI) = N + CALL DSCLD(N,M,X,LDX,WORK(TTI),IWORK(LDTTI)) + ELSE + IF (LDSCLD.EQ.1) THEN + IWORK(LDTTI) = 1 + CALL DCOPY_odr(M,SCLD(1,1),1,WORK(TTI),1) + ELSE + IWORK(LDTTI) = N + DO 10 J=1,M + CALL DCOPY_odr(N,SCLD(1,J),1, + + WORK(TTI+(J-1)*IWORK(LDTTI)),1) + 10 CONTINUE + END IF + END IF + END IF + +C INITIALIZE DELTA'S AS NECESSARY + + IF (ISODR) THEN + IF (INITD) THEN + CALL DZERO(N,M,WORK(DELTAI),N) + ELSE + IF (IFIXX(1,1).GE.0) THEN + IF (LDIFX.EQ.1) THEN + DO 20 J=1,M + IF (IFIXX(1,J).EQ.0) THEN + CALL DZERO(N,1,WORK(DELTAI+(J-1)*N),N) + END IF + 20 CONTINUE + ELSE + DO 40 J=1,M + DO 30 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + WORK(DELTAI-1+I+(J-1)*N) = ZERO + END IF + 30 CONTINUE + 40 CONTINUE + END IF + END IF + END IF + ELSE + CALL DZERO(N,M,WORK(DELTAI),N) + END IF + + RETURN + END +*DIWINF + SUBROUTINE DIWINF + + (M,NP,NQ, + + MSGBI,MSGDI,IFIX2I,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) +C***BEGIN PROLOGUE DIWINF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET STORAGE LOCATIONS WITHIN INTEGER WORK SPACE +C***END PROLOGUE DIWINF + +C...SCALAR ARGUMENTS + INTEGER + + IDFI,INT2I,IPRINI,IRANKI,ISTOPI,JOBI,IFIX2I,LDTTI,LIWKMN, + + LUNERI,LUNRPI,M,MAXITI,MSGBI,MSGDI,NETAI,NFEVI,NITERI,NJEVI, + + NNZWI,NP,NPPI,NQ,NROWI,NTOLI + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C IDFI: THE LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C IFIX2I: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY IFIX2. +C INT2I: THE LOCATION IN ARRAY IWORK OF VARIABLE INT2. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C LDTTI: THE LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGBI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGDI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABEL NITER. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. + + +C***FIRST EXECUTABLE STATEMENT DIWINF + + + IF (NP.GE.1 .AND. M.GE.1) THEN + MSGBI = 1 + MSGDI = MSGBI + NQ*NP+1 + IFIX2I = MSGDI + NQ*M+1 + ISTOPI = IFIX2I + NP + NNZWI = ISTOPI + 1 + NPPI = NNZWI + 1 + IDFI = NPPI + 1 + JOBI = IDFI + 1 + IPRINI = JOBI + 1 + LUNERI = IPRINI + 1 + LUNRPI = LUNERI + 1 + NROWI = LUNRPI + 1 + NTOLI = NROWI + 1 + NETAI = NTOLI + 1 + MAXITI = NETAI + 1 + NITERI = MAXITI + 1 + NFEVI = NITERI + 1 + NJEVI = NFEVI + 1 + INT2I = NJEVI + 1 + IRANKI = INT2I + 1 + LDTTI = IRANKI + 1 + LIWKMN = LDTTI + ELSE + MSGBI = 1 + MSGDI = 1 + IFIX2I = 1 + ISTOPI = 1 + NNZWI = 1 + NPPI = 1 + IDFI = 1 + JOBI = 1 + IPRINI = 1 + LUNERI = 1 + LUNRPI = 1 + NROWI = 1 + NTOLI = 1 + NETAI = 1 + MAXITI = 1 + NITERI = 1 + NFEVI = 1 + NJEVI = 1 + INT2I = 1 + IRANKI = 1 + LDTTI = 1 + LIWKMN = 1 + END IF + + RETURN + END +*DJACCD + SUBROUTINE DJACCD + + (FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) +C***BEGIN PROLOGUE DJACCD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE CENTRAL DIFFERENCE APPROXIMATIONS TO THE +C JACOBIAN WRT THE ESTIMATED BETAS AND WRT THE DELTAS +C***END PROLOGUE DJACCD + +C...SCALAR ARGUMENTS + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + + X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAK,ONE,TYPJ,ZERO + INTEGER + + I,J,K,L + LOGICAL + + DOIT,SETZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAK: THE K-TH FUNCTION PARAMETER. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOIT: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT A GIVEN +C BETA OR DELTA NEEDS TO BE COMPUTED (DOIT=TRUE) OR NOT +C (DOIT=FALSE). +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE FIXED +C AT THEIR INPUT VALUES OR NOT. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SETZRO: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT SOME +C DELTA NEEDS TO BE SET TO ZERO (SETZRO=TRUE) OR NOT +C (SETZRO=FALSE). +C SSF: THE SCALING VALUES USED FOR BETA. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJACCD + + +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS + + DO 60 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + IF (BETAK.EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETAK) + END IF + WRK3(K) = BETAK + + + SIGN(ONE,BETAK)*TYPJ*DHSTEP(1,NETA,1,K,STPB,1) + WRK3(K) = WRK3(K) - BETAK + + BETA(K) = BETAK + WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = WRK2(I,L) + 20 CONTINUE + 30 CONTINUE + END IF + + BETA(K) = BETAK - WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + + DO 50 L=1,NQ + DO 40 I=1,N + FJACB(I,K,L) = (FJACB(I,K,L)-WRK2(I,L))/(2*WRK3(K)) + 40 CONTINUE + 50 CONTINUE + BETA(K) = BETAK + END IF + 60 CONTINUE + +C COMPUTE THE JACOBIAN WRT THE X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + STP(I) = XPLUSD(I,J) + + + SIGN(ONE,XPLUSD(I,J)) + + *TYPJ*DHSTEP(1,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + END IF + + DO 150 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) - STP(I) + 150 CONTINUE + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + + (2*STP(I)) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-WRK2(I,L))/ + + (2*STP(I)) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END +*DJACFD + SUBROUTINE DJACFD + + (FCN, + + N,M,NP,NQ, + + BETA,X,LDX,DELTA,XPLUSD,IFIXB,IFIXX,LDIFX, + + STPB,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FN,STP,WRK1,WRK2,WRK3,WRK6, + + FJACB,ISODR,FJACD,NFEV,ISTOP) +C***BEGIN PROLOGUE DJACFD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE FORWARD DIFFERENCE APPROXIMATIONS TO THE +C JACOBIAN WRT THE ESTIMATED BETAS AND WRT THE DELTAS +C***END PROLOGUE DJACFD + +C...SCALAR ARGUMENTS + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT,LDX,M,N,NETA,NFEV,NP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ), + + SSF(NP),STP(N),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK3(NP),WRK6(N,NP,NQ), + + X(LDX,M),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAK,ONE,TYPJ,ZERO + INTEGER + + I,J,K,L + LOGICAL + + DOIT,SETZRO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DZERO + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAK: THE K-TH FUNCTION PARAMETER. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOIT: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT A +C GIVEN BETA OR DELTA NEEDS TO BE COMPUTED (DOIT=TRUE) +C OR NOT (DOIT=FALSE). +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE NEW PREDICTED VALUES FROM THE FUNCTION. +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF GOOD DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SETZRO: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVE WRT SOME +C DELTA NEEDS TO BE SET TO ZERO (SETZRO=TRUE) OR NOT +C (SETZRO=FALSE). +C SSF: THE SCALE USED FOR THE BETA'S. +C STP: THE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJACFD + + +C COMPUTE THE JACOBIAN WRT THE ESTIMATED BETAS + + DO 40 K=1,NP + IF (IFIXB(1).GE.0) THEN + IF (IFIXB(K).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + ELSE + DOIT = .TRUE. + END IF + IF (.NOT.DOIT) THEN + DO 10 L=1,NQ + CALL DZERO(N,1,FJACB(1,K,L),N) + 10 CONTINUE + ELSE + BETAK = BETA(K) + IF (BETAK.EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(K) + END IF + ELSE + TYPJ = ABS(BETAK) + END IF + WRK3(K) = BETAK + + + SIGN(ONE,BETAK)*TYPJ*DHSTEP(0,NETA,1,K,STPB,1) + WRK3(K) = WRK3(K) - BETAK + BETA(K) = BETAK + WRK3(K) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + END IF + DO 30 L=1,NQ + DO 20 I=1,N + FJACB(I,K,L) = (WRK2(I,L)-FN(I,L))/WRK3(K) + 20 CONTINUE + 30 CONTINUE + BETA(K) = BETAK + END IF + 40 CONTINUE + +C COMPUTE THE JACOBIAN WRT THE X'S + + IF (ISODR) THEN + DO 220 J=1,M + IF (IFIXX(1,1).LT.0) THEN + DOIT = .TRUE. + SETZRO = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + DOIT = .FALSE. + ELSE + DOIT = .TRUE. + END IF + SETZRO = .FALSE. + ELSE + DOIT = .FALSE. + SETZRO = .FALSE. + DO 100 I=1,N + IF (IFIXX(I,J).NE.0) THEN + DOIT = .TRUE. + ELSE + SETZRO = .TRUE. + END IF + 100 CONTINUE + END IF + IF (.NOT.DOIT) THEN + DO 110 L=1,NQ + CALL DZERO(N,1,FJACD(1,J,L),N) + 110 CONTINUE + ELSE + DO 120 I=1,N + IF (XPLUSD(I,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(I,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(I,J)) + END IF + + STP(I) = XPLUSD(I,J) + + + SIGN(ONE,XPLUSD(I,J)) + + *TYPJ*DHSTEP(0,NETA,I,J,STPD,LDSTPD) + STP(I) = STP(I) - XPLUSD(I,J) + XPLUSD(I,J) = XPLUSD(I,J) + STP(I) + 120 CONTINUE + + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 001,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NFEV = NFEV + 1 + DO 140 L=1,NQ + DO 130 I=1,N + FJACD(I,J,L) = WRK2(I,L) + 130 CONTINUE + 140 CONTINUE + + END IF + + IF (SETZRO) THEN + DO 180 I=1,N + IF (IFIXX(I,J).EQ.0) THEN + DO 160 L=1,NQ + FJACD(I,J,L) = ZERO + 160 CONTINUE + ELSE + DO 170 L=1,NQ + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 170 CONTINUE + END IF + 180 CONTINUE + ELSE + DO 200 L=1,NQ + DO 190 I=1,N + FJACD(I,J,L) = (FJACD(I,J,L)-FN(I,L))/STP(I) + 190 CONTINUE + 200 CONTINUE + END IF + DO 210 I=1,N + XPLUSD(I,J) = X(I,J) + DELTA(I,J) + 210 CONTINUE + END IF + 220 CONTINUE + END IF + + RETURN + END +*DJCK + SUBROUTINE DJCK + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + + SSF,TT,LDTT, + + ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + + PV0,FJACB,FJACD, + + MSGB,MSGD,DIFF,ISTOP,NFEV,NJEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DHSTEP,DJCKM +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE DRIVER ROUTINE FOR THE DERIVATIVE CHECKING PROCESS +C (ADAPTED FROM STARPAC SUBROUTINE DCKCNT) +C***END PROLOGUE DJCK + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSMAC,ETA + INTEGER + + ISTOP,LDIFX,LDSTPD,LDTT, + + M,N,NETA,NFEV,NJEV,NP,NQ,NROW,NTOL + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + PV0(N,NQ),SSF(NP),STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(1+NQ*NP),MSGD(1+NQ*M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + DIFFJ,H0,HC0,ONE,P5,PV,TOL,TYPJ,ZERO + INTEGER + + IDEVAL,J,LQ,MSGB1,MSGD1 + LOGICAL + + ISFIXD,ISWRTB + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKM + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,INT,LOG10 + +C...DATA STATEMENTS + DATA + + ZERO,P5,ONE + + /0.0D0,0.5D0,1.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C H0: THE INITIAL RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C HC0: THE INITIAL RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C IDEVAL: THE VARIABLE DESIGNATING WHAT COMPUTATIONS ARE TO BE +C PERFORMED BY USER SUPPLIED SUBROUTINE FCN. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISFIXD: THE VARIABLE DESIGNATING WHETHER THE PARAMETER IS FIXED +C (ISFIXD=TRUE) OR NOT (ISFIXD=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA (ISWRTB=FALSE) ARE BEING CHECKED. +C J: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL RESULTS, EITHER +C SET BY THE USER OR COMPUTED BY DETAF. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C NUMERICAL DERIVATIVES AND THE USER SUPPLIED DERIVATIVES. +C ONE: THE VALUE 1.0D0. +C P5: THE VALUE 0.5D0. +C PV: THE SCALAR IN WHICH THE PREDICTED VALUE FROM THE MODEL FOR +C ROW NROW IS STORED. +C PV0: THE PREDICTED VALUES USING THE CURRENT PARAMETER ESTIMATES. +C SSF: THE SCALING VALUES USED FOR BETA. +C STPB: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT BETA. +C STPD: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA. +C TOL: THE AGREEMENT TOLERANCE. +C TT: THE SCALING VALUES USED FOR DELTA. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCK + + +C SET TOLERANCE FOR CHECKING DERIVATIVES + + TOL = ETA**(0.25D0) + NTOL = MAX(ONE,P5-LOG10(TOL)) + + +C COMPUTE USER SUPPLIED DERIVATIVE VALUES + + ISTOP = 0 + IF (ISODR) THEN + IDEVAL = 110 + ELSE + IDEVAL = 010 + END IF + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,WRK2,FJACB,FJACD, + + ISTOP) + IF (ISTOP.NE.0) THEN + RETURN + ELSE + NJEV = NJEV + 1 + END IF + +C CHECK DERIVATIVES WRT BETA FOR EACH RESPONSE OF OBSERVATION NROW + + MSGB1 = 0 + MSGD1 = 0 + + DO 30 LQ=1,NQ + +C SET PREDICTED VALUE OF MODEL AT CURRENT PARAMETER ESTIMATES + PV = PV0(NROW,LQ) + + ISWRTB = .TRUE. + DO 10 J=1,NP + + IF (IFIXB(1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (IFIXB(J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGB(1+LQ+(J-1)*NQ) = -1 + ELSE + IF (BETA(J).EQ.ZERO) THEN + IF (SSF(1).LT.ZERO) THEN + TYPJ = ONE/ABS(SSF(1)) + ELSE + TYPJ = ONE/SSF(J) + END IF + ELSE + TYPJ = ABS(BETA(J)) + END IF + + H0 = DHSTEP(0,NETA,1,J,STPB,1) + HC0 = H0 + +C CHECK DERIVATIVE WRT THE J-TH PARAMETER AT THE NROW-TH ROW + + CALL DJCKM(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,FJACB(NROW,J,LQ), + + DIFFJ,MSGB1,MSGB(2),ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + MSGB(1) = -1 + RETURN + ELSE + DIFF(LQ,J) = DIFFJ + END IF + END IF + + 10 CONTINUE + +C CHECK DERIVATIVES WRT X FOR EACH RESPONSE OF OBSERVATION NROW + + IF (ISODR) THEN + ISWRTB = .FALSE. + DO 20 J=1,M + + IF (IFIXX(1,1).LT.0) THEN + ISFIXD = .FALSE. + ELSE IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + ISFIXD = .TRUE. + ELSE + ISFIXD = .FALSE. + END IF + ELSE + ISFIXD = .FALSE. + END IF + + IF (ISFIXD) THEN + MSGD(1+LQ+(J-1)*NQ) = -1 + ELSE + + IF (XPLUSD(NROW,J).EQ.ZERO) THEN + IF (TT(1,1).LT.ZERO) THEN + TYPJ = ONE/ABS(TT(1,1)) + ELSE IF (LDTT.EQ.1) THEN + TYPJ = ONE/TT(1,J) + ELSE + TYPJ = ONE/TT(NROW,J) + END IF + ELSE + TYPJ = ABS(XPLUSD(NROW,J)) + END IF + + H0 = DHSTEP(0,NETA,NROW,J,STPD,LDSTPD) + HC0 = DHSTEP(1,NETA,NROW,J,STPD,LDSTPD) + +C CHECK DERIVATIVE WRT THE J-TH COLUMN OF DELTA AT ROW NROW + + CALL DJCKM(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,FJACD(NROW,J,LQ), + + DIFFJ,MSGD1,MSGD(2),ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + MSGD(1) = -1 + RETURN + ELSE + DIFF(LQ,NP+J) = DIFFJ + END IF + END IF + + 20 CONTINUE + END IF + 30 CONTINUE + MSGB(1) = MSGB1 + MSGD(1) = MSGD1 + + RETURN + END +*DJCKC + SUBROUTINE DJCKC + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + + FD,TYPJ,PVPSTP,STP0, + + PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DJCKF,DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK WHETHER HIGH CURVATURE COULD BE THE CAUSE OF THE +C DISAGREEMENT BETWEEN THE NUMERICAL AND ANALYTIC DERVIATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKCRV) +C***END PROLOGUE DJCKC + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,ETA,FD,HC,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CURVE,ONE,PVMCRV,PVPCRV,P01,STP,STPCRV,TEN,TWO + + double precision guterm + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKF,DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SIGN + +C...DATA STATEMENTS + DATA + + P01,ONE,TWO,TEN + + /0.01D0,1.0D0,2.0D0,10.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CURVE: A MEASURE OF THE CURVATURE IN THE MODEL. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE MODEL +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C HC: THE RELATIVE STEP SIZE FOR CENTRAL FINITE DIFFERENCES. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA(ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE OF THE MODEL FOR ROW NROW . +C PVMCRV: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J)-STPCRV. +C PVPCRV: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J)+STPCRV. +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P01: THE VALUE 0.01D0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C STP: A STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C STPCRV: THE STEP SIZE SELECTED TO CHECK FOR CURVATURE IN THE MODEL. +C TEN: THE VALUE 10.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TWO: THE VALUE 2.0D0. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DJCKC + + + IF (ISWRTB) THEN + +C PERFORM CENTRAL DIFFERENCE COMPUTATIONS FOR DERIVATIVES WRT BETA + + STPCRV = (HC*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STPCRV, + + ISTOP,NFEV,PVPCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STPCRV, + + ISTOP,NFEV,PVMCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C PERFORM CENTRAL DIFFERENCE COMPUTATIONS FOR DERIVATIVES WRT DELTA + + STPCRV = (HC*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STPCRV, + + ISTOP,NFEV,PVPCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STPCRV, + + ISTOP,NFEV,PVMCRV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C ESTIMATE CURVATURE BY SECOND DERIVATIVE OF MODEL + + CURVE = ABS((PVPCRV-PV)+(PVMCRV-PV)) / (STPCRV*STPCRV) + CURVE = CURVE + + + ETA*(ABS(PVPCRV)+ABS(PVMCRV)+TWO*ABS(PV)) / (STPCRV**2) + + +C CHECK IF FINITE PRECISION ARITHMETIC COULD BE THE CULPRIT. + CALL DJCKF(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,J,LQ,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + IF (MSG(LQ,J).EQ.0) THEN + RETURN + END IF + +C CHECK IF HIGH CURVATURE COULD BE THE PROBLEM. + + STP = TWO*MAX(TOL*ABS(D)/CURVE,EPSMAC) + IF (STP.LT.ABS(TEN*STP0)) THEN + STP = MIN(STP,P01*ABS(STP0)) + END IF + + guterm=STP + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + STP = (STP*SIGN(ONE,BETA(J)) + BETA(J)) - BETA(J) + + if(STP.eq.0.0d0)then + STP=guterm*SIGN(ONE,BETA(J)) + endif + + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + + if(STP.eq.0.0d0)then + STP=guterm*SIGN(ONE,XPLUSD(NROW,J)) + endif + + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + IF (ISTOP.NE.0) THEN + RETURN + END IF + END IF + +C COMPUTE THE NEW NUMERICAL DERIVATIVE + + FD = (PVPSTP-PV)/STP + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C CHECK WHETHER THE NEW NUMERICAL DERIVATIVE IS OK + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN + MSG(LQ,J) = 0 + +C CHECK IF FINITE PRECISION MAY BE THE CULPRIT (FUDGE FACTOR = 2) + ELSE IF (ABS(STP*(FD-D)).LT.TWO*ETA*(ABS(PV)+ABS(PVPSTP)) + + + CURVE*(EPSMAC*TYPJ)**2) THEN + MSG(LQ,J) = 5 + END IF + + RETURN + END +*DJCKF + SUBROUTINE DJCKF + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,J,LQ,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,CURVE,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK WHETHER FINITE PRECISION ARITHMETIC COULD BE THE +C CAUSE OF THE DISAGREEMENT BETWEEN THE DERIVATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKFPA) +C***END PROLOGUE DJCKF + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + CURVE,D,DIFFJ,ETA,FD,PV,PVPSTP,STP0,TOL,TYPJ + + double precision holder + + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + HUNDRD,ONE,P1,STP,TWO + LOGICAL + + LARGE + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SIGN + +C...DATA STATEMENTS + DATA + + P1,ONE,TWO,HUNDRD + + /0.1D0,1.0D0,2.0D0,100.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CURVE: A MEASURE OF THE CURVATURE IN THE MODEL. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C ETA: THE RELATIVE NOISE IN THE MODEL +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C HUNDRD: THE VALUE 100.0D0. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTA(ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LARGE: THE VALUE DESIGNATING WHETHER THE RECOMMENDED INCREASE IN +C THE STEP SIZE WOULD BE GREATER THAN TYPJ. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FOR ROW NROW . +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C BASED ON THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P1: THE VALUE 0.1D0. +C STP0: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TOL: THE AGREEMENT TOLERANCE. +C TWO: THE VALUE 2.0D0. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DJCKF + + +C FINITE PRECISION ARITHMETIC COULD BE THE PROBLEM. +C TRY A LARGER STEP SIZE BASED ON ESTIMATE OF CONDITION ERROR + + STP = ETA*(ABS(PV)+ABS(PVPSTP))/(TOL*ABS(D)) + + IF (STP.GT.ABS(P1*STP0)) THEN + STP = MAX(STP,HUNDRD*ABS(STP0)) + END IF + IF (STP.GT.TYPJ) THEN + STP = TYPJ + LARGE = .TRUE. + ELSE + LARGE = .FALSE. + END IF + + holder=STP + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + STP = (STP*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + + if(STP.eq.0.0d0)then + STP=holder*SIGN(ONE,BETA(J)) + endif + + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + + STP = (STP*SIGN(ONE,XPLUSD(NROW,J)) + XPLUSD(NROW,J)) - + + XPLUSD(NROW,J) + + if(STP.eq.0.0d0)then + STP=holder*SIGN(ONE,XPLUSD(NROW,J)) + endif + + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP + + DIFFJ = MIN(DIFFJ,ABS(FD-D)/ABS(D)) + +C CHECK FOR AGREEMENT + + IF ((ABS(FD-D)).LE.TOL*ABS(D)) THEN +C FORWARD DIFFERENCE QUOTIENT AND ANALYTIC DERIVATIVES AGREE. + MSG(LQ,J) = 0 + + ELSE IF ((ABS(FD-D).LE.ABS(TWO*CURVE*STP)) .OR. LARGE) THEN +C CURVATURE MAY BE THE CULPRIT (FUDGE FACTOR = 2) + IF (LARGE) THEN + MSG(LQ,J) = 4 + ELSE + MSG(LQ,J) = 5 + END IF + END IF + + RETURN + END +*DJCKM + SUBROUTINE DJCKM + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,TYPJ,H0,HC0, + + ISWRTB,PV,D, + + DIFFJ,MSG1,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKM +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DJCKC,DJCKZ,DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK USER SUPPLIED ANALYTIC DERIVATIVES AGAINST NUMERICAL +C DERIVATIVES +C (ADAPTED FROM STARPAC SUBROUTINE DCKMN) +C***END PROLOGUE DJCKM + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,ETA,H0,HC0,PV,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,MSG1,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BIG,FD,H,HC,H1,HC1,HUNDRD,ONE,PVPSTP,P01,P1,STP0, + + TEN,THREE,TOL2,TWO,ZERO + INTEGER + + I + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DJCKC,DJCKZ,DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,SIGN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P01,P1,ONE,TWO,THREE,TEN,HUNDRD + + /0.0D0,0.01D0,0.1D0,1.0D0,2.0D0,3.0D0,1.0D1,1.0D2/ + DATA + + BIG,TOL2 + + /1.0D19,5.0D-2/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BIG: A BIG VALUE, USED TO INITIALIZE DIFFJ. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C H: THE RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C H0: THE INITIAL RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C H1: THE DEFAULT RELATIVE STEP SIZE FOR FORWARD DIFFERENCES. +C HC: THE RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HC0: THE INITIAL RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HC1: THE DEFAULT RELATIVE STEP SIZE FOR CENTRAL DIFFERENCES. +C HUNDRD: THE VALUE 100.0D0. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR DELTAS (ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C MSG1: THE ERROR CHECKING RESULTS SUMMARY. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FROM THE MODEL FOR ROW NROW . +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE JTH +C PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C P01: THE VALUE 0.01D0. +C P1: THE VALUE 0.1D0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C TEN: THE VALUE 10.0D0. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TOL2: A MINIMUM AGREEMENT TOLERANCE. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCKM + + +C CALCULATE THE JTH PARTIAL DERIVATIVE USING FORWARD DIFFERENCE +C QUOTIENTS AND DECIDE IF IT AGREES WITH USER SUPPLIED VALUES + + H1 = SQRT(ETA) + HC1 = ETA**(ONE/THREE) + + MSG(LQ,J) = 7 + DIFFJ = BIG + + DO 10 I=1,3 + + IF (I.EQ.1) THEN +C TRY INITIAL RELATIVE STEP SIZE + H = H0 + HC = HC0 + + ELSE IF (I.EQ.2) THEN +C TRY LARGER RELATIVE STEP SIZE + H = MAX(TEN*H1, MIN(HUNDRD*H0, ONE)) + HC = MAX(TEN*HC1,MIN(HUNDRD*HC0,ONE)) + + ELSE IF (I.EQ.3) THEN +C TRY SMALLER RELATIVE STEP SIZE + H = MIN(P1*H1, MAX(P01*H,TWO*EPSMAC)) + HC = MIN(P1*HC1,MAX(P01*HC,TWO*EPSMAC)) + END IF + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + + STP0 = (H*TYPJ*SIGN(ONE,BETA(J))+BETA(J)) - BETA(J) + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP0, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + + STP0 = (H*TYPJ*SIGN(ONE,XPLUSD(NROW,J))+XPLUSD(NROW,J)) + + - XPLUSD(NROW,J) + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP0, + + ISTOP,NFEV,PVPSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + FD = (PVPSTP-PV)/STP0 + +C CHECK FOR AGREEMENT + + IF (ABS(FD-D).LE.TOL*ABS(D)) THEN +C NUMERICAL AND ANALYTIC DERIVATIVES AGREE + +C SET RELATIVE DIFFERENCE FOR DERIVATIVE CHECKING REPORT + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + DIFFJ = ABS(FD-D) + ELSE + DIFFJ = ABS(FD-D)/ABS(D) + END IF + +C SET MSG FLAG. + IF (D.EQ.ZERO) THEN + +C JTH ANALYTIC AND NUMERICAL DERIVATIVES ARE BOTH ZERO. + MSG(LQ,J) = 1 + + ELSE +C JTH ANALYTIC AND NUMERICAL DERIVATIVES ARE BOTH NONZERO. + MSG(LQ,J) = 0 + END IF + + ELSE + +C NUMERICAL AND ANALYTIC DERIVATIVES DISAGREE. CHECK WHY + IF ((D.EQ.ZERO) .OR. (FD.EQ.ZERO)) THEN + CALL DJCKZ(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,EPSMAC,J,LQ,ISWRTB, + + TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + ELSE + CALL DJCKC(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + ETA,TOL,NROW,EPSMAC,J,LQ,HC,ISWRTB, + + FD,TYPJ,PVPSTP,STP0,PV,D, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) + END IF + IF (MSG(LQ,J).LE.2) THEN + GO TO 20 + END IF + END IF + 10 CONTINUE + +C SET SUMMARY FLAG TO INDICATE QUESTIONABLE RESULTS + 20 CONTINUE + IF ((MSG(LQ,J).GE.7) .AND. (DIFFJ.LE.TOL2)) MSG(LQ,J) = 6 + IF ((MSG(LQ,J).GE.1) .AND. (MSG(LQ,J).LE.6)) THEN + MSG1 = MAX(MSG1,1) + ELSE IF (MSG(LQ,J).GE.7) THEN + MSG1 = 2 + END IF + + RETURN + END +*DJCKZ + SUBROUTINE DJCKZ + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,EPSMAC,J,LQ,ISWRTB, + + TOL,D,FD,TYPJ,PVPSTP,STP0,PV, + + DIFFJ,MSG,ISTOP,NFEV, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DJCKZ +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPVB,DPVD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE RECHECK THE DERIVATIVES IN THE CASE WHERE THE FINITE +C DIFFERENCE DERIVATIVE DISAGREES WITH THE ANALYTIC +C DERIVATIVE AND THE ANALYTIC DERIVATIVE IS ZERO +C (ADAPTED FROM STARPAC SUBROUTINE DCKZRO) +C***END PROLOGUE DJCKZ + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + D,DIFFJ,EPSMAC,FD,PV,PVPSTP,STP0,TOL,TYPJ + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + LOGICAL + + ISWRTB + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSG(NQ,J) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CD,ONE,PVMSTP,THREE,TWO,ZERO + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPVB,DPVD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TWO,THREE + + /0.0D0,1.0D0,2.0D0,3.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CD: THE CENTRAL DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C D: THE DERIVATIVE WITH RESPECT TO THE JTH UNKNOWN PARAMETER. +C DIFFJ: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR THE DERIVATIVE BEING +C CHECKED. +C EPSMAC: THE VALUE OF MACHINE PRECISION. +C FD: THE FORWARD DIFFERENCE DERIVATIVE WRT THE JTH PARAMETER. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISWRTB: THE VARIABLE DESIGNATING WHETHER THE DERIVATIVES WRT BETA +C (ISWRTB=TRUE) OR X (ISWRTB=FALSE) ARE BEING CHECKED. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSG: THE ERROR CHECKING RESULTS. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT WHICH +C THE DERIVATIVE IS TO BE CHECKED. +C ONE: THE VALUE 1.0D0. +C PV: THE PREDICTED VALUE FROM THE MODEL FOR ROW NROW . +C PVMSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) - STP0. +C PVPSTP: THE PREDICTED VALUE FOR ROW NROW OF THE MODEL +C USING THE CURRENT PARAMETER ESTIMATES FOR ALL BUT THE +C JTH PARAMETER VALUE, WHICH IS BETA(J) + STP0. +C STP0: THE INITIAL STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C TOL: THE AGREEMENT TOLERANCE. +C TYPJ: THE TYPICAL SIZE OF THE J-TH UNKNOWN BETA OR DELTA. +C WRK1: A WORK ARRAY OF (N BY M BY NQ) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK6: A WORK ARRAY OF (N BY NP BY NQ) ELEMENTS. +C XPLUSD: THE VALUES OF X + DELTA. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DJCKZ + + +C RECALCULATE NUMERICAL DERIVATIVE USING CENTRAL DIFFERENCE AND STEP +C SIZE OF 2*STP0 + + IF (ISWRTB) THEN + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT BETA + + CALL DPVB(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STP0, + + ISTOP,NFEV,PVMSTP, + + WRK1,WRK2,WRK6) + ELSE + +C PERFORM COMPUTATIONS FOR DERIVATIVES WRT DELTA + + CALL DPVD(FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,-STP0, + + ISTOP,NFEV,PVMSTP, + + WRK1,WRK2,WRK6) + END IF + IF (ISTOP.NE.0) THEN + RETURN + END IF + + CD = (PVPSTP-PVMSTP)/(TWO*STP0) + DIFFJ = MIN(ABS(CD-D),ABS(FD-D)) + +C CHECK FOR AGREEMENT + + IF (DIFFJ.LE.TOL*ABS(D)) THEN + +C FINITE DIFFERENCE AND ANALYTIC DERIVATIVES NOW AGREE. + IF (D.EQ.ZERO) THEN + MSG(LQ,J) = 1 + ELSE + MSG(LQ,J) = 0 + END IF + + ELSE IF (DIFFJ*TYPJ.LE.ABS(PV*EPSMAC**(ONE/THREE))) THEN +C DERIVATIVES ARE BOTH CLOSE TO ZERO + MSG(LQ,J) = 2 + + ELSE +C DERIVATIVES ARE NOT BOTH CLOSE TO ZERO + MSG(LQ,J) = 3 + END IF + + RETURN + END +*DODCHK + SUBROUTINE DODCHK + + (N,M,NP,NQ, + + ISODR,ANAJAC,IMPLCT, + + IFIXB, + + LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LDY, + + LWORK,LWKMN,LIWORK,LIWKMN, + + SCLB,SCLD,STPB,STPD, + + INFO) +C***BEGIN PROLOGUE DODCHK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CHECK INPUT PARAMETERS, INDICATING ERRORS FOUND USING +C NONZERO VALUES OF ARGUMENT INFO +C***END PROLOGUE DODCHK + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWKMN,LIWORK,LWKMN,LWORK,M,N,NP,NQ + LOGICAL + + ANAJAC,IMPLCT,ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M) + INTEGER + + IFIXB(NP) + +C...LOCAL SCALARS + INTEGER + + I,J,K,LAST,NPP + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C LAST: THE LAST ROW OF THE ARRAY TO BE ACCESSED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY X. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATIONS. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUE FOR DELTA. +C STPB: THE STEP FOR THE FINITE DIFFERENCE DERIVITIVE WRT BETA. +C STPD: THE STEP FOR THE FINITE DIFFERENCE DERIVITIVE WRT DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODCHK + + +C FIND ACTUAL NUMBER OF PARAMETERS BEING ESTIMATED + + IF (NP.LE.0 .OR. IFIXB(1).LT.0) THEN + NPP = NP + ELSE + NPP = 0 + DO 10 K=1,NP + IF (IFIXB(K).NE.0) THEN + NPP = NPP + 1 + END IF + 10 CONTINUE + END IF + +C CHECK PROBLEM SPECIFICATION PARAMETERS + + IF (N.LE.0 .OR. + + M.LE.0 .OR. + + (NPP.LE.0 .OR. NPP.GT.N) .OR. + + (NQ.LE.0)) THEN + + INFO = 10000 + IF (N.LE.0) THEN + INFO = INFO + 1000 + END IF + IF (M.LE.0) THEN + INFO = INFO + 100 + END IF + IF (NPP.LE.0 .OR. NPP.GT.N) THEN + INFO = INFO + 10 + END IF + IF (NQ.LE.0) THEN + INFO = INFO + 1 + END IF + + RETURN + + END IF + +C CHECK DIMENSION SPECIFICATION PARAMETERS + + IF ((.NOT.IMPLCT .AND. LDY.LT.N) .OR. + + (LDX.LT.N) .OR. + + (LDWE.NE.1 .AND. LDWE.LT.N) .OR. + + (LD2WE.NE.1 .AND. LD2WE.LT.NQ) .OR. + + (ISODR .AND. (LDWD.NE.1 .AND. LDWD.LT.N)) .OR. + + (ISODR .AND. (LD2WD.NE.1 .AND. LD2WD.LT.M)) .OR. + + (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) .OR. + + (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) .OR. + + (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) .OR. + + (LWORK.LT.LWKMN) .OR. + + (LIWORK.LT.LIWKMN)) THEN + + INFO = 20000 + IF (.NOT.IMPLCT .AND. LDY.LT.N) THEN + INFO = INFO + 1000 + END IF + IF (LDX.LT.N) THEN + INFO = INFO + 2000 + END IF + + IF ((LDWE.NE.1 .AND. LDWE.LT.N) .OR. + + (LD2WE.NE.1 .AND. LD2WE.LT.NQ)) THEN + INFO = INFO + 100 + END IF + IF (ISODR .AND. ((LDWD.NE.1 .AND. LDWD.LT.N) .OR. + + (LD2WD.NE.1 .AND. LD2WD.LT.M))) THEN + INFO = INFO + 200 + END IF + + IF (ISODR .AND. (LDIFX.NE.1 .AND. LDIFX.LT.N)) THEN + INFO = INFO + 10 + END IF + IF (ISODR .AND. (LDSTPD.NE.1 .AND. LDSTPD.LT.N)) THEN + INFO = INFO + 20 + END IF + IF (ISODR .AND. (LDSCLD.NE.1 .AND. LDSCLD.LT.N)) THEN + INFO = INFO + 40 + END IF + + IF (LWORK.LT.LWKMN) THEN + INFO = INFO + 1 + END IF + IF (LIWORK.LT.LIWKMN) THEN + INFO = INFO + 2 + END IF + RETURN + + END IF + +C CHECK DELTA SCALING + + IF (ISODR .AND. SCLD(1,1).GT.0) THEN + IF (LDSCLD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 120 J=1,M + DO 110 I=1,LAST + IF (SCLD(I,J).LE.0) THEN + INFO = 30200 + GO TO 130 + END IF + 110 CONTINUE + 120 CONTINUE + END IF + 130 CONTINUE + +C CHECK BETA SCALING + + IF (SCLB(1).GT.0) THEN + DO 210 K=1,NP + IF (SCLB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 30100 + ELSE + INFO = INFO + 100 + END IF + GO TO 220 + END IF + 210 CONTINUE + END IF + 220 CONTINUE + +C CHECK DELTA FINITE DIFFERENCE STEP SIZES + + IF (ANAJAC .AND. ISODR .AND. STPD(1,1).GT.0) THEN + IF (LDSTPD.GE.N) THEN + LAST = N + ELSE + LAST = 1 + END IF + DO 320 J=1,M + DO 310 I=1,LAST + IF (STPD(I,J).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 32000 + ELSE + INFO = INFO + 2000 + END IF + GO TO 330 + END IF + 310 CONTINUE + 320 CONTINUE + END IF + 330 CONTINUE + +C CHECK BETA FINITE DIFFERENCE STEP SIZES + + IF (ANAJAC .AND. STPB(1).GT.0) THEN + DO 410 K=1,NP + IF (STPB(K).LE.0) THEN + IF (INFO.EQ.0) THEN + INFO = 31000 + ELSE + INFO = INFO + 1000 + END IF + GO TO 420 + END IF + 410 CONTINUE + END IF + 420 CONTINUE + + RETURN + END +*DODCNT + SUBROUTINE DODCNT + + (SHORT, FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + INFO) +C***BEGIN PROLOGUE DODCNT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DODDRV +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE DOUBLE PRECISION DRIVER ROUTINE FOR FINDING +C THE WEIGHTED EXPLICIT OR IMPLICIT ORTHOGONAL DISTANCE +C REGRESSION (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST +C SQUARES (OLS) SOLUTION +C***END PROLOGUE DODCNT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,N,NDIGIT,NP,NQ + LOGICAL + + SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + CNVTOL,ONE,PCHECK,PFAC,PSTART,THREE,TSTIMP,ZERO + INTEGER + + IPRNTI,IPR1,IPR2,IPR2F,IPR3,JOBI,JOB1,JOB2,JOB3,JOB4,JOB5, + + MAXITI,MAXIT1 + LOGICAL + + DONE,FSTITR,HEAD,IMPLCT,PRTPEN + +C...LOCAL ARRAYS + DOUBLE PRECISION + + PNLTY(1,1,1) + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODDRV + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DMPREC + EXTERNAL + + DMPREC + +C...DATA STATEMENTS + DATA + + PCHECK,PSTART,PFAC,ZERO,ONE,THREE + + /1.0D3,1.0D1,1.0D1,0.0D0,1.0D0,3.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C CNVTOL: THE CONVERGENCE TOLERANCE FOR IMPLICIT MODELS. +C DONE: THE VARIABLE DESIGNATING WHETHER THE INPLICIT SOLUTION HAS +C BEEN FOUND (DONE=TRUE) OR NOT (DONE=FALSE). +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPRINT: THE PRINT CONTROL VARIABLES. +C IPRNTI: THE PRINT CONTROL VARIABLES. +C IPR1: THE 1ST DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR2: THE 2ND DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR3: THE 3RD DIGIT OF THE PRINT CONTROL VARIABLE. +C IPR4: THE 4TH DIGIT OF THE PRINT CONTROL VARIABLE. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOB1: THE 1ST DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB2: THE 2ND DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB3: THE 3RD DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB4: THE 4TH DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C JOB5: THE 5TH DIGIT OF THE VARIABLE CONTROLING PROBLEM +C INITIALIZATION AND COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXITI: FOR IMPLICIT MODELS, THE NUMBER OF ITERATIONS ALLOWED FOR +C THE CURRENT PENALTY PARAMETER VALUE. +C MAXIT1: FOR IMPLICIT MODELS, THE NUMBER OF ITERATIONS ALLOWED FOR +C THE NEXT PENALTY PARAMETER VALUE. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C ONE: THE VALUE 1.0D0. +C PARTOL: THE USER SUPPLIED PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PCHECK: THE VALUE DESIGNATING THE MINIMUM PENALTY PARAMETER ALLOWED +C BEFORE THE IMPLICIT PROBLEM CAN BE CONSIDERED SOLVED. +C PFAC: THE FACTOR FOR INCREASING THE PENALTY PARAMETER. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PRTPEN: THE VALUE DESIGNATING WHETHER THE PENALTY PARAMETER IS TO BE +C PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C PSTART: THE FACTOR FOR INCREASING THE PENALTY PARAMETER. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C THREE: THE VALUE 3.0D0. +C TSTIMP: THE RELATIVE CHANGE IN THE PARAMETERS BETWEEN THE INITIAL +C VALUES AND THE SOLUTION. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C X: THE INDEPENDENT VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODCNT + + + IMPLCT = MOD(JOB,10).EQ.1 + FSTITR = .TRUE. + HEAD = .TRUE. + PRTPEN = .FALSE. + + IF (IMPLCT) THEN + +C SET UP FOR IMPLICIT PROBLEM + + IF (IPRINT.GE.0) THEN + IPR1 = MOD(IPRINT,10000)/1000 + IPR2 = MOD(IPRINT,1000)/100 + IPR2F = MOD(IPRINT,100)/10 + IPR3 = MOD(IPRINT,10) + ELSE + IPR1 = 2 + IPR2 = 0 + IPR2F = 0 + IPR3 = 1 + END IF + IPRNTI = IPR1*1000 + IPR2*100 + IPR2F*10 + + JOB5 = MOD(JOB,100000)/10000 + JOB4 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB2 = MOD(JOB,100)/10 + JOB1 = MOD(JOB,10) + JOBI = JOB5*10000 + JOB4*1000 + JOB3*100 + JOB2*10 + JOB1 + + IF (WE(1,1,1).LE.ZERO) THEN + PNLTY(1,1,1) = -PSTART + ELSE + PNLTY(1,1,1) = -WE(1,1,1) + END IF + + IF (PARTOL.LT.ZERO) THEN + CNVTOL = DMPREC()**(ONE/THREE) + ELSE + CNVTOL = MIN(PARTOL,ONE) + END IF + + IF (MAXIT.GE.1) THEN + MAXITI = MAXIT + ELSE + MAXITI = 100 + END IF + + DONE = MAXITI.EQ.0 + PRTPEN = .TRUE. + + 10 CONTINUE + CALL DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + PNLTY,1,1,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOBI,NDIGIT,TAUFAC, SSTOL,CNVTOL,MAXITI, + + IPRNTI,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) + IF (DONE) THEN + RETURN + ELSE + DONE = MAXIT1.LE.0 .OR. + + (ABS(PNLTY(1,1,1)).GE.PCHECK .AND. + + TSTIMP.LE.CNVTOL) + END IF + + IF (DONE) THEN + IF (TSTIMP.LE.CNVTOL) THEN + INFO = (INFO/10)*10 + 2 + ELSE + INFO = (INFO/10)*10 + 4 + END IF + JOBI = 10000 + 1000 + JOB3*100 + JOB2*10 + JOB1 + MAXITI = 0 + IPRNTI = IPR3 + ELSE + PRTPEN = .TRUE. + PNLTY(1,1,1) = PFAC*PNLTY(1,1,1) + JOBI = 10000 + 1000 + 000 + JOB2*10 + JOB1 + MAXITI = MAXIT1 + IPRNTI = 0000 + IPR2*100 + IPR2F*10 + END IF + GO TO 10 + ELSE + CALL DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) + END IF + + RETURN + + END +*DODDRV + SUBROUTINE DODDRV + + (SHORT,HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, BETA, Y,LDY,X,LDX, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, IFIXB,IFIXX,LDIFX, + + JOB,NDIGIT,TAUFAC, SSTOL,PARTOL,MAXIT, + + IPRINT,LUNERR,LUNRPT, + + STPB,STPD,LDSTPD, SCLB,SCLD,LDSCLD, + + WORK,LWORK,IWORK,LIWORK, + + MAXIT1,TSTIMP, INFO) +C***BEGIN PROLOGUE DODDRV +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DCOPY_odr,DDOT_odr,DETAF,DFCTRW,DFLAGS, +C DINIWK,DIWINF,DJCK,DNRM2_odr,DODCHK,DODMN, +C DODPER,DPACK,DSETN,DUNPAC,DWGHT,DWINF,DXMY,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PERFORM ERROR CHECKING AND INITIALIZATION, AND BEGIN +C PROCEDURE FOR PERFORMING ORTHOGONAL DISTANCE REGRESSION +C (ODR) OR ORDINARY LINEAR OR NONLINEAR LEAST SQUARES (OLS) +C***END PROLOGUE DODDRV + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,SSTOL,TAUFAC,TSTIMP + INTEGER + + INFO,IPRINT,JOB,LDIFX,LDSCLD,LDSTPD,LDWD,LDWE,LDX,LDY, + + LD2WD,LD2WE,LIWORK,LUNERR,LUNRPT,LWORK,M,MAXIT,MAXIT1, + + N,NDIGIT,NP,NQ + LOGICAL + + FSTITR,HEAD,PRTPEN,SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SCLB(NP),SCLD(LDSCLD,M),STPB(NP),STPD(LDSTPD,M), + + WE(LDWE,LD2WE,NQ),WD(LDWD,LD2WD,M),WORK(LWORK), + + X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + EPSMAC,ETA,P5,ONE,TEN,ZERO + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,DELTAI,DELTNI,DELTSI, + + DIFFI,EPSMAI,ETAI,FI,FJACBI,FJACDI,FNI,FSI,I,IDFI,INT2I,IPRINI, + + IRANKI,ISTOP,ISTOPI,JOBI,JPVTI,K,LDTT,LDTTI,LIWKMN, + + LUNERI,LUNRPI,LWKMN,LWRK,MAXITI,MSGB,MSGD,NETA,NETAI, + + NFEV,NFEVI,NITERI,NJEV,NJEVI,NNZW,NNZWI,NPP,NPPI,NROW,NROWI, + + NTOL,NTOLI,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI, + + VCVI,WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I,WRK, + + WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr,DNRM2_odr + EXTERNAL + + DDOT_odr,DNRM2_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY_odr,DETAF,DFCTRW,DFLAGS,DINIWK,DIWINF,DJCK,DODCHK, + + DODMN,DODPER,DPACK,DSETN,DUNPAC,DWGHT,DWINF,DXMY,DXPY + +C...DATA STATEMENTS + DATA + + ZERO,P5,ONE,TEN + + /0.0D0,0.5D0,1.0D0,10.0D0/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT +C (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE +C COMPUTED BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY F. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C I: AN INDEX VARIABLE. +C IDFI: THE LOCATION IN ARRAY IWORK OF VARIABLE IDF. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS TO BE INITIALIZED +C TO ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C INT2I: THE IN ARRAY IWORK OF VARIABLE INT2. +C IPRINI: THE LOCATION IN ARRAY IWORK OF VARIABLE IPRINT. +C IPRINT: THE PRINT CONTROL VARIABLE. +C IRANKI: THE LOCATION IN ARRAY IWORK OF VARIABLE IRANK. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPI: THE LOCATION IN ARRAY IWORK OF VARIABLE ISTOP. +C IWORK: THE INTEGER WORK SPACE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOBI: THE LOCATION IN ARRAY IWORK OF VARIABLE JOB. +C JPVTI: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY JPVT. +C K: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDTTI: THE LOCATION IN ARRAY IWORK OF VARIABLE LDTT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LUNERI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNERR. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LUNRPI: THE LOCATION IN ARRAY IWORK OF VARIABLE LUNRPT. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LWORK: THE LENGTH OF VECTOR WORK. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MAXIT1: FOR IMPLICIT MODELS, THE ITERATIONS ALLOWED FOR THE NEXT +C PENALTY PARAMETER VALUE. +C MAXITI: THE LOCATION IN ARRAY IWORK OF VARIABLE MAXIT. +C MSGB: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGB. +C MSGD: THE STARTING LOCATION IN ARRAY IWORK OF ARRAY MSGD. +C N: THE NUMBER OF OBSERVATIONS. +C NDIGIT: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS, AS +C SUPPLIED BY THE USER. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NETAI: THE LOCATION IN ARRAY IWORK OF VARIABLE NETA. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NFEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NFEV. +C NITERI: THE LOCATION IN ARRAY IWORK OF VARIABLE NITER. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NJEVI: THE LOCATION IN ARRAY IWORK OF VARIABLE NJEV. +C NNZW: THE NUMBER OF NONZERO OBSERVATIONAL ERROR WEIGHTS. +C NNZWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NNZW. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NPPI: THE LOCATION IN ARRAY IWORK OF VARIABLE NPP. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER AT WHICH THE DERIVATIVE IS TO BE CHECKED. +C NROWI: THE LOCATION IN ARRAY IWORK OF VARIABLE NROW. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C NUMERICAL DERIVATIVES AND THE USER SUPPLIED DERIVATIVES, +C SET BY DJCK. +C NTOLI: THE LOCATION IN ARRAY IWORK OF VARIABLE NTOL. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C ONE: THE VALUE 1.0D0. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C P5: THE VALUE 0.5D0. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCOND. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SCLB: THE SCALING VALUES FOR BETA. +C SCLD: THE SCALING VALUES FOR DELTA. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=TRUE) OR THE LONG-CALL +C (SHORT=FALSE). +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C STPB: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT BETA. +C STPD: THE STEP SIZE FOR FINITE DIFFERENCE DERIVATIVES WRT DELTA. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TEN: THE VALUE 10.0D0. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TSTIMP: THE RELATIVE CHANGE IN THE PARAMETERS BETWEEN THE INITIAL +C VALUES AND THE SOLUTION. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WRK: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSSI: THE LOCATION IN ARRAY WORK OF VARIABLE WSS. +C WSSDEI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSDEL. +C WSSEPI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSEPS. +C X: THE EXPLANATORY VARIABLE. +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODDRV + + +C INITIALIZE NECESSARY VARIABLES + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + +C SET STARTING LOCATIONS WITHIN INTEGER WORKSPACE +C (INVALID VALUES OF M, NP AND/OR NQ ARE HANDLED REASONABLY BY DIWINF) + + CALL DIWINF(M,NP,NQ, + + MSGB,MSGD,JPVTI,ISTOPI, + + NNZWI,NPPI,IDFI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + NROWI,NTOLI,NETAI, + + MAXITI,NITERI,NFEVI,NJEVI,INT2I,IRANKI,LDTTI, + + LIWKMN) + +C SET STARTING LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE +C (INVALID VALUES OF N, M, NP, NQ, LDWE AND/OR LD2WE +C ARE HANDLED REASONABLY BY DWINF) + + CALL DWINF(N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,FI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) + IF (ISODR) THEN + WRK = WRK1I + LWRK = N*M*NQ + N*NQ + ELSE + WRK = WRK2I + LWRK = N*NQ + END IF + +C UPDATE THE PENALTY PARAMETERS +C (WE(1,1,1) IS NOT A USER SUPPLIED ARRAY IN THIS CASE) + IF (RESTRT .AND. IMPLCT) THEN + WE(1,1,1) = MAX(WORK(WE1I)**2,ABS(WE(1,1,1))) + WORK(WE1I) = -SQRT(ABS(WE(1,1,1))) + END IF + + IF (RESTRT) THEN + +C RESET MAXIMUM NUMBER OF ITERATIONS + + IF (MAXIT.GE.0) THEN + IWORK(MAXITI) = IWORK(NITERI) + MAXIT + ELSE + IWORK(MAXITI) = IWORK(NITERI) + 10 + END IF + + IF (IWORK(NITERI).LT.IWORK(MAXITI)) THEN + INFO = 0 + END IF + + IF (JOB.GE.0) IWORK(JOBI) = JOB + IF (IPRINT.GE.0) IWORK(IPRINI) = IPRINT + IF (PARTOL.GE.ZERO .AND. PARTOL.LT.ONE) WORK(PARTLI) = PARTOL + IF (SSTOL.GE.ZERO .AND. SSTOL.LT.ONE) WORK(SSTOLI) = SSTOL + + WORK(OLMAVI) = WORK(OLMAVI)*IWORK(NITERI) + + IF (IMPLCT) THEN + CALL DCOPY_odr(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ,WORK(WE1I),LDWE,LD2WE,WORK(FI),N,WORK(FI),N) + WORK(WSSEPI) = DDOT_odr(N*NQ,WORK(FI),1,WORK(FI),1) + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + + ELSE + +C PERFORM ERROR CHECKING + + INFO = 0 + + CALL DODCHK(N,M,NP,NQ, + + ISODR,ANAJAC,IMPLCT, + + IFIXB, + + LDX,LDIFX,LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LDY, + + LWORK,LWKMN,LIWORK,LIWKMN, + + SCLB,SCLD,STPB,STPD, + + INFO) + IF (INFO.GT.0) THEN + GO TO 50 + END IF + +C INITIALIZE WORK VECTORS AS NECESSARY + + DO 10 I=N*M+N*NQ+1,LWORK + WORK(I) = ZERO + 10 CONTINUE + DO 20 I=1,LIWORK + IWORK(I) = 0 + 20 CONTINUE + + CALL DINIWK(N,M,NP, + + WORK,LWORK,IWORK,LIWORK, + + X,LDX,IFIXX,LDIFX,SCLD,LDSCLD, + + BETA,SCLB, + + SSTOL,PARTOL,MAXIT,TAUFAC, + + JOB,IPRINT,LUNERR,LUNRPT, + + EPSMAI,SSTOLI,PARTLI,MAXITI,TAUFCI, + + JOBI,IPRINI,LUNERI,LUNRPI, + + SSFI,TTI,LDTTI,DELTAI) + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + WORK(TAUI) = -WORK(TAUFCI) + +C SET UP FOR PARAMETER ESTIMATION - +C PULL BETA'S TO BE ESTIMATED AND CORRESPONDING SCALE VALUES +C AND STORE IN WORK(BETACI) AND WORK(SSI), RESPECTIVELY + + CALL DPACK(NP,IWORK(NPPI),WORK(BETACI),BETA,IFIXB) + CALL DPACK(NP,IWORK(NPPI),WORK(SSI),WORK(SSFI),IFIXB) + NPP = IWORK(NPPI) + +C CHECK THAT WD IS POSITIVE DEFINITE AND WE IS POSITIVE SEMIDEFINITE, +C SAVING FACTORIZATION OF WE, AND COUNTING NUMBER OF NONZERO WEIGHTS + + CALL DFCTRW(N,M,NQ,NPP, + + ISODR, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + WORK(WRK2I),WORK(WRK4I), + + WORK(WE1I),NNZW,INFO) + IWORK(NNZWI) = NNZW + + IF (INFO.NE.0) THEN + GO TO 50 + END IF +C EVALUATE THE PREDICTED VALUES AND +C WEIGHTED EPSILONS AT THE STARTING POINT + CALL DUNPAC(NP,WORK(BETACI),BETA,IFIXB) + CALL DXPY(N,M,X,LDX,WORK(DELTAI),N,WORK(XPLUSI),N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,WORK(XPLUSI), + + IFIXB,IFIXX,LDIFX, + + 002,WORK(FNI),WORK(WRK6I),WORK(WRK1I), + + ISTOP) + IWORK(ISTOPI) = ISTOP + IF (ISTOP.EQ.0) THEN + IWORK(NFEVI) = IWORK(NFEVI) + 1 + IF (IMPLCT) THEN + CALL DCOPY_odr(N*NQ,WORK(FNI),1,WORK(FI),1) + ELSE + CALL DXMY(N,NQ,WORK(FNI),N,Y,LDY,WORK(FI),N) + END IF + CALL DWGHT(N,NQ,WORK(WE1I),LDWE,LD2WE,WORK(FI),N,WORK(FI),N) + ELSE + INFO = 52000 + GO TO 50 + END IF + +C COMPUTE NORM OF THE INITIAL ESTIMATES + + CALL DWGHT(NPP,1,WORK(SSI),NPP,1,WORK(BETACI),NPP, + + WORK(WRK),NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,WORK(TTI),IWORK(LDTTI),1,WORK(DELTAI),N, + + WORK(WRK+NPP),N) + WORK(PNORMI) = DNRM2_odr(NPP+N*M,WORK(WRK),1) + ELSE + WORK(PNORMI) = DNRM2_odr(NPP,WORK(WRK),1) + END IF + +C COMPUTE SUM OF SQUARES OF THE WEIGHTED EPSILONS AND WEIGHTED DELTAS + + WORK(WSSEPI) = DDOT_odr(N*NQ,WORK(FI),1,WORK(FI),1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,WORK(DELTAI),N,WORK(WRK),N) + WORK(WSSDEI) = DDOT_odr(N*M,WORK(DELTAI),1,WORK(WRK),1) + ELSE + WORK(WSSDEI) = ZERO + END IF + WORK(WSSI) = WORK(WSSEPI) + WORK(WSSDEI) + +C SELECT FIRST ROW OF X + DELTA THAT CONTAINS NO ZEROS + + NROW = -1 + CALL DSETN(N,M,WORK(XPLUSI),N,NROW) + IWORK(NROWI) = NROW + +C SET NUMBER OF GOOD DIGITS IN FUNCTION RESULTS + + EPSMAC = WORK(EPSMAI) + IF (NDIGIT.LT.2) THEN + IWORK(NETAI) = -1 + NFEV = IWORK(NFEVI) + CALL DETAF(FCN, + + N,M,NP,NQ, + + WORK(XPLUSI),BETA,EPSMAC,NROW, + + WORK(BETANI),WORK(FNI), + + IFIXB,IFIXX,LDIFX, + + ISTOP,NFEV,ETA,NETA, + + WORK(WRK1I),WORK(WRK2I),WORK(WRK6I),WORK(WRK7I)) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IF (ISTOP.NE.0) THEN + INFO = 53000 + IWORK(NETAI) = 0 + WORK(ETAI) = ZERO + GO TO 50 + ELSE + IWORK(NETAI) = -NETA + WORK(ETAI) = ETA + END IF + ELSE + IWORK(NETAI) = MIN(NDIGIT,INT(P5-LOG10(EPSMAC))) + WORK(ETAI) = MAX(EPSMAC,TEN**(-NDIGIT)) + END IF + +C CHECK DERIVATIVES IF NECESSARY + + IF (CHKJAC .AND. ANAJAC) THEN + NTOL = -1 + NFEV = IWORK(NFEVI) + NJEV = IWORK(NJEVI) + NETA = IWORK(NETAI) + LDTT = IWORK(LDTTI) + ETA = WORK(ETAI) + EPSMAC = WORK(EPSMAI) + CALL DJCK(FCN, + + N,M,NP,NQ, + + BETA,WORK(XPLUSI), + + IFIXB,IFIXX,LDIFX,STPB,STPD,LDSTPD, + + WORK(SSFI),WORK(TTI),LDTT, + + ETA,NETA,NTOL,NROW,ISODR,EPSMAC, + + WORK(FNI),WORK(FJACBI),WORK(FJACDI), + + IWORK(MSGB),IWORK(MSGD),WORK(DIFFI), + + ISTOP,NFEV,NJEV, + + WORK(WRK1I),WORK(WRK2I),WORK(WRK6I)) + IWORK(ISTOPI) = ISTOP + IWORK(NFEVI) = NFEV + IWORK(NJEVI) = NJEV + IWORK(NTOLI) = NTOL + IF (ISTOP.NE.0) THEN + INFO = 54000 + ELSE IF (IWORK(MSGB).NE.0 .OR. IWORK(MSGD).NE.0) THEN + INFO = 40000 + END IF + ELSE + +C INDICATE USER SUPPLIED DERIVATIVES WERE NOT CHECKED + IWORK(MSGB) = -1 + IWORK(MSGD) = -1 + END IF + +C PRINT APPROPRIATE ERROR MESSAGES + + 50 IF ((INFO.NE.0) .OR. (IWORK(MSGB).NE.-1)) THEN + IF (LUNERR.NE.0 .AND. IPRINT.NE.0) THEN + CALL DODPER + + (INFO,LUNERR,SHORT, + + N,M,NP,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN, + + WORK(FJACBI),WORK(FJACDI), + + WORK(DIFFI),IWORK(MSGB),ISODR,IWORK(MSGD), + + WORK(XPLUSI),IWORK(NROWI),IWORK(NETAI),IWORK(NTOLI)) + END IF + +C SET INFO TO REFLECT ERRORS IN THE USER SUPPLIED JACOBIANS + + IF (INFO.EQ.40000) THEN + IF (IWORK(MSGB).EQ.2 .OR. IWORK(MSGD).EQ.2) THEN + IF (IWORK(MSGB).EQ.2) THEN + INFO = INFO + 1000 + END IF + IF (IWORK(MSGD).EQ.2) THEN + INFO = INFO + 100 + END IF + ELSE + INFO = 0 + END IF + END IF + IF (INFO.NE.0) THEN + RETURN + END IF + END IF + END IF + +C SAVE THE INITIAL VALUES OF BETA + CALL DCOPY_odr(NP,BETA,1,WORK(BETA0I),1) + +C FIND LEAST SQUARES SOLUTION + + CALL DCOPY_odr(N*NQ,WORK(FNI),1,WORK(FSI),1) + LDTT = IWORK(LDTTI) + CALL DODMN(HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + + WE,WORK(WE1I),LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + WORK(BETACI),WORK(BETANI),WORK(BETASI),WORK(SI), + + WORK(DELTAI),WORK(DELTNI),WORK(DELTSI), + + WORK(TI),WORK(FI),WORK(FNI),WORK(FSI), + + WORK(FJACBI),IWORK(MSGB),WORK(FJACDI),IWORK(MSGD), + + WORK(SSFI),WORK(SSI),WORK(TTI),LDTT, + + STPB,STPD,LDSTPD, + + WORK(XPLUSI),WORK(WRK),LWRK, + + WORK,LWORK,IWORK,LIWORK,INFO) + MAXIT1 = IWORK(MAXITI) - IWORK(NITERI) + TSTIMP = ZERO + DO 100 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + TSTIMP = MAX(TSTIMP, + + ABS(BETA(K)-WORK(BETA0I-1+K))/WORK(SSFI-1+K)) + ELSE + TSTIMP = MAX(TSTIMP, + + ABS(BETA(K)-WORK(BETA0I-1+K))/ABS(BETA(K))) + END IF + 100 CONTINUE + + RETURN + + END +*DODLM + SUBROUTINE DODLM + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA2,TAU,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,NLMS,RCOND,IRANK, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODLM +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DDOT_odr,DNRM2_odr,DODSTP,DSCALE,DWGHT +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE LEVENBERG-MARQUARDT PARAMETER AND STEPS S AND T +C USING ANALOG OF THE TRUST-REGION LEVENBERG-MARQUARDT +C ALGORITHM +C***END PROLOGUE DODLM + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA2,EPSFCN,RCOND,TAU + INTEGER + + IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NLMS,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + + T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + + WRK(LWRK),WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M) + INTEGER + + JPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ALPHA1,ALPHAN,BOT,P001,P1,PHI1,PHI2,SA,TOP,ZERO + INTEGER + + I,IWRK,J,K,L + LOGICAL + + FORVCV + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr,DNRM2_odr + EXTERNAL + + DDOT_odr,DNRM2_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODSTP,DSCALE,DWGHT + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MAX,MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P001,P1 + + /0.0D0,0.001D0,0.1D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHAN: THE NEW LEVENBERG-MARQUARDT PARAMETER. +C ALPHA1: THE PREVIOUS LEVENBERG-MARQUARDT PARAMETER. +C ALPHA2: THE CURRENT LEVENBERG-MARQUARDT PARAMETER. +C BOT: THE LOWER LIMIT FOR SETTING ALPHA. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER THIS SUBROUTINE WAS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO SOME NUMERICAL ERROR DETECTED WITHIN +C SUBROUTINE DODSTP. +C IWRK: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C JPVT: THE PIVOT VECTOR. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NLMS: THE NUMBER OF LEVENBERG-MARQUARDT STEPS TAKEN. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OMEGA: THE ARRAY (I-FJACD*INV(P)*TRANS(FJACD))**(-1/2) WHERE +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C P001: THE VALUE 0.001D0 +C P1: THE VALUE 0.1D0 +C PHI1: THE PREVIOUS DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C PHI2: THE CURRENT DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF TFJACB. +C S: THE STEP FOR BETA. +C SA: THE SCALAR PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2). +C SS: THE SCALING VALUES USED FOR THE UNFIXED BETAS. +C T: THE STEP FOR DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TFJACB: THE ARRAY OMEGA*FJACB. +C TOP: THE UPPER LIMIT FOR SETTING ALPHA. +C TT: THE SCALE USED FOR THE DELTA'S. +C U: THE APPROXIMATE NULL VECTOR FOR TFJACB. +C WD: THE DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODLM + + FORVCV = .FALSE. + ISTOPC = 0 + +C COMPUTE FULL GAUSS-NEWTON STEP (ALPHA=0) + + ALPHA1 = ZERO + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA1,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,PHI1,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + +C INITIALIZE TAU IF NECESSARY + + IF (TAU.LT.ZERO) THEN + TAU = ABS(TAU)*PHI1 + END IF + +C CHECK IF FULL GAUSS-NEWTON STEP IS OPTIMAL + + IF ((PHI1-TAU).LE.P1*TAU) THEN + NLMS = 1 + ALPHA2 = ZERO + RETURN + END IF + +C FULL GAUSS-NEWTON STEP IS OUTSIDE TRUST REGION - +C FIND LOCALLY CONSTRAINED OPTIMAL STEP + + PHI1 = PHI1 - TAU + +C INITIALIZE UPPER AND LOWER BOUNDS FOR ALPHA + + BOT = ZERO + + DO 30 K=1,NPP + DO 20 L=1,NQ + DO 10 I=1,N + TFJACB(I,L,K) = FJACB(I,K,L) + 10 CONTINUE + 20 CONTINUE + WRK(K) = DDOT_odr(N*NQ,TFJACB(1,1,K),1,F(1,1),1) + 30 CONTINUE + CALL DSCALE(NPP,1,SS,NPP,WRK,NPP,WRK,NPP) + + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(NPP+1),N) + IWRK = NPP + DO 50 J=1,M + DO 40 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = WRK(IWRK) + + + DDOT_odr(NQ,FJACD(I,J,1),N*M,F(I,1),N) + 40 CONTINUE + 50 CONTINUE + CALL DSCALE(N,M,TT,LDTT,WRK(NPP+1),N,WRK(NPP+1),N) + TOP = DNRM2_odr(NPP+N*M,WRK,1)/TAU + ELSE + TOP = DNRM2_odr(NPP,WRK,1)/TAU + END IF + + IF (ALPHA2.GT.TOP .OR. ALPHA2.EQ.ZERO) THEN + ALPHA2 = P001*TOP + END IF + +C MAIN LOOP + + DO 60 I=1,10 + +C COMPUTE LOCALLY CONSTRAINED STEPS S AND T AND PHI(ALPHA) FOR +C CURRENT VALUE OF ALPHA + + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA2,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,JPVT, + + S,T,PHI2,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + PHI2 = PHI2-TAU + +C CHECK WHETHER CURRENT STEP IS OPTIMAL + + IF (ABS(PHI2).LE.P1*TAU .OR. + + (ALPHA2.EQ.BOT .AND. PHI2.LT.ZERO)) THEN + NLMS = I+1 + RETURN + END IF + +C CURRENT STEP IS NOT OPTIMAL + +C UPDATE BOUNDS FOR ALPHA AND COMPUTE NEW ALPHA + + IF (PHI1-PHI2.EQ.ZERO) THEN + NLMS = 12 + RETURN + END IF + SA = PHI2*(ALPHA1-ALPHA2)/(PHI1-PHI2) + IF (PHI2.LT.ZERO) THEN + TOP = MIN(TOP,ALPHA2) + ELSE + BOT = MAX(BOT,ALPHA2) + END IF + IF (PHI1*PHI2.GT.ZERO) THEN + BOT = MAX(BOT,ALPHA2-SA) + ELSE + TOP = MIN(TOP,ALPHA2-SA) + END IF + + ALPHAN = ALPHA2 - SA*(PHI1+TAU)/TAU + IF (ALPHAN.GE.TOP .OR. ALPHAN.LE.BOT) THEN + ALPHAN = MAX(P001*TOP,SQRT(TOP*BOT)) + END IF + +C GET READY FOR NEXT ITERATION + + ALPHA1 = ALPHA2 + ALPHA2 = ALPHAN + PHI1 = PHI2 + 60 CONTINUE + +C SET NLMS TO INDICATE AN OPTIMAL STEP COULD NOT BE FOUND IN 10 TRYS + + NLMS = 12 + + RETURN + END +*DODMN + SUBROUTINE DODMN + + (HEAD,FSTITR,PRTPEN, + + FCN, N,M,NP,NQ, JOB, BETA,Y,LDY,X,LDX, + + WE,WE1,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + BETAC,BETAN,BETAS,S,DELTA,DELTAN,DELTAS, + + T,F,FN,FS,FJACB,MSGB,FJACD,MSGD, + + SSF,SS,TT,LDTT,STPB,STPD,LDSTPD, + + XPLUSD,WRK,LWRK,WORK,LWORK,IWORK,LIWORK,INFO) +C***BEGIN PROLOGUE DODMN +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN,DACCES,DCOPY_odr,DDOT_odr,DEVJAC,DFLAGS,DNRM2_odr,DODLM, +C DODPCR,DODVCV,DUNPAC,DWGHT,DXMY,DXPY +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE ITERATIVELY COMPUTE LEAST SQUARES SOLUTION +C***END PROLOGUE DODMN + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LIWORK,LWORK,LWRK,M,N,NP,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),BETAC(NP),BETAN(NP),BETAS(NP), + + DELTA(N,M),DELTAN(N,M),DELTAS(N,M), + + F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ),FN(N,NQ),FS(N,NQ), + + S(NP),SS(NP),SSF(NP),STPB(NP),STPD(LDSTPD,M), + + T(N,M),TT(LDTT,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WE1(LDWE,LD2WE,NQ), + + WORK(LWORK),X(LDX,M),XPLUSD(N,M),WRK(LWRK),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),IWORK(LIWORK), + + MSGB(NQ*NP+1),MSGD(NQ*M+1) + LOGICAL + + FSTITR,HEAD,PRTPEN + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + ACTRED,ACTRS,ALPHA,DIRDER,ETA,OLMAVG,ONE, + + P0001,P1,P25,P5,P75,PARTOL,PNORM,PRERED,PRERS, + + RATIO,RCOND,RNORM,RNORMN,RNORMS,RSS,RVAR,SSTOL,TAU,TAUFAC, + + TEMP,TEMP1,TEMP2,TSNORM,ZERO + INTEGER + + I,IDF,IFLAG,INT2,IPR,IPR1,IPR2,IPR2F,IPR3,IRANK, + + ISTOP,ISTOPC,IWRK,J,JPVT,L,LOOPED,LUDFLT,LUNR,LUNRPT, + + MAXIT,NETA,NFEV,NITER,NJEV,NLMS,NNZW,NPP,NPR,OMEGA,QRAUX, + + SD,U,VCV,WRK1,WRK2,WRK3,WRK4,WRK5,WRK6 + LOGICAL + + ACCESS,ANAJAC,CDJAC,CHKJAC,CNVPAR,CNVSS,DIDVCV,DOVCV, + + IMPLCT,INITD,INTDBL,ISODR,LSTEP,REDOJ,RESTRT + +C...LOCAL ARRAYS + DOUBLE PRECISION + + WSS(3) + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr,DNRM2_odr + EXTERNAL + + DDOT_odr,DNRM2_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DACCES,DCOPY_odr,DEVJAC,DFLAGS, + + DODLM,DODPCR,DODVCV,DUNPAC,DWGHT,DXMY,DXPY + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN,MOD,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,P0001,P1,P25,P5,P75,ONE + + /0.0D0,0.00010D0,0.10D0,0.250D0, + + 0.50D0,0.750D0,1.0D0/ + DATA + + LUDFLT + + /6/ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACCESS: THE VARIABLE DESIGNATING WHETHER INFORMATION IS TO BE +C ACCESSED FROM THE WORK ARRAYS (ACCESS=TRUE) OR STORED IN +C THEM (ACCESS=FALSE). +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ACTRS: THE SAVED ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C BETAC: THE CURRENT ESTIMATED VALUES OF THE UNFIXED BETA'S. +C BETAN: THE NEW ESTIMATED VALUES OF THE UNFIXED BETA'S. +C BETAS: THE SAVED ESTIMATED VALUES OF THE UNFIXED BETA'S. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C CNVPAR: THE VARIABLE DESIGNATING WHETHER PARAMETER CONVERGENCE WAS +C ATTAINED (CNVPAR=TRUE) OR NOT (CNVPAR=FALSE). +C CNVSS: THE VARIABLE DESIGNATING WHETHER SUM-OF-SQUARES CONVERGENCE +C WAS ATTAINED (CNVSS=TRUE) OR NOT (CNVSS=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DELTAN: THE NEW ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DELTAS: THE SAVED ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DIRDER: THE DIRECTIONAL DERIVATIVE. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX +C SHOULD TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C ETA: THE RELATIVE NOISE IN THE FUNCTION RESULTS. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FN: THE NEW PREDICTED VALUES FROM THE FUNCTION. +C FS: THE SAVED PREDICTED VALUES FROM THE FUNCTION. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFLAG: THE VARIABLE DESIGNATING WHICH REPORT IS TO BE PRINTED. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C INT2: THE NUMBER OF INTERNAL DOUBLING STEPS TAKEN. +C INTDBL: THE VARIABLE DESIGNATING WHETHER INTERNAL DOUBLING IS TO BE +C USED (INTDBL=TRUE) OR NOT (INTDBL=FALSE). +C IPR: THE VALUES DESIGNATING THE LENGTH OF THE PRINTED REPORT. +C IPR1: THE VALUE OF THE 4TH DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE INITIAL SUMMARY REPORT. +C IPR2: THE VALUE OF THE 3RD DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE ITERATION REPORT. +C IPR2F: THE VALUE OF THE 2ND DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FREQUENCY OF THE ITERATION REPORTS. +C IPR3: THE VALUE OF THE 1ST DIGIT (FROM THE RIGHT) OF IPRINT, +C WHICH CONTROLS THE FINAL SUMMARY REPORT. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO SOME NUMERICAL ERROR WITHIN ROUTINE DODSTP. +C IWORK: THE INTEGER WORK SPACE. +C IWRK: AN INDEX VARIABLE. +C J: AN INDEX VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JPVT: THE STARTING LOCATION IN IWORK OF ARRAY JPVT. +C L: AN INDEX VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE AND WE1. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE AND WE1. +C LIWORK: THE LENGTH OF VECTOR IWORK. +C LOOPED: A COUNTER USED TO DETERMINE HOW MANY TIMES THE SUBLOOP +C HAS BEEN EXECUTED, WHERE IF THE COUNT BECOMES LARGE +C ENOUGH THE COMPUTATIONS WILL BE STOPPED. +C LSTEP: THE VARIABLE DESIGNATING WHETHER A SUCCESSFUL STEP HAS +C BEEN FOUND (LSTEP=TRUE) OR NOT (LSTEP=FALSE). +C LUDFLT: THE DEFAULT LOGICAL UNIT NUMBER, USED FOR COMPUTATION +C REPORTS TO THE SCREEN. +C LUNR: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C LWORK: THE LENGTH OF VECTOR WORK. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS TAKEN. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NLMS: THE NUMBER OF LEVENBERG-MARQUARDT STEPS TAKEN. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NPR: THE NUMBER OF TIMES THE REPORT IS TO BE WRITTEN. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OLMAVG: THE AVERAGE NUMBER OF LEVENBERG-MARQUARDT STEPS PER +C ITERATION. +C OMEGA: THE STARTING LOCATION IN WORK OF ARRAY OMEGA. +C ONE: THE VALUE 1.0D0. +C P0001: THE VALUE 0.0001D0. +C P1: THE VALUE 0.1D0. +C P25: THE VALUE 0.25D0. +C P5: THE VALUE 0.5D0. +C P75: THE VALUE 0.75D0. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRERS: THE OLD PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VALUE DESIGNATING WHETHER THE PENALTY PARAMETER IS TO +C BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C QRAUX: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RATIO: THE RATIO OF THE ACTUAL RELATIVE REDUCTION TO THE PREDICTED +C RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RNORM: THE NORM OF THE WEIGHTED ERRORS. +C RNORMN: THE NEW NORM OF THE WEIGHTED ERRORS. +C RNORMS: THE SAVED NORM OF THE WEIGHTED ERRORS. +C RSS: THE RESIDUAL SUM OF SQUARES. +C RVAR: THE RESIDUAL VARIANCE. +C S: THE STEP FOR BETA. +C SD: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SS: THE SCALING VALUES USED FOR THE UNFIXED BETAS. +C SSF: THE SCALING VALUES USED FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO EACH BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C T: THE STEP FOR DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TEMP: A TEMPORARY STORAGE LOCATION. +C TEMP1: A TEMPORARY STORAGE LOCATION. +C TEMP2: A TEMPORARY STORAGE LOCATION. +C TSNORM: THE NORM OF THE SCALED STEP. +C TT: THE SCALING VALUES USED FOR DELTA. +C U: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCV: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE: THE EPSILON WEIGHTS. +C WE1: THE SQUARE ROOT OF THE EPSILON WEIGHTS. +C WD: THE DELTA WEIGHTS. +C WORK: THE DOUBLE PRECISION WORK SPACE. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C WRK: A WORK ARRAY, EQUIVALENCED TO WRK1 AND WRK2 +C WRK1: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C X: THE EXPLANATORY VARIABLE. +C XPLUSD: THE VALUES OF X + DELTA. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODMN + + +C INITIALIZE NECESSARY VARIABLES + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + ACCESS = .TRUE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + RNORM = SQRT(WSS(1)) + + DIDVCV = .FALSE. + INTDBL = .FALSE. + LSTEP = .TRUE. + +C PRINT INITIAL SUMMARY IF DESIRED + + IF (IPR1.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 1 + IF (IPR1.GE.3 .AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR1.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR1,2) + END IF + LUNR = LUNRPT + DO 10 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR1.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 10 CONTINUE + + END IF + +C STOP IF INITIAL ESTIMATES ARE EXACT SOLUTION + + IF (RNORM.EQ.ZERO) THEN + INFO = 1 + OLMAVG = ZERO + ISTOP = 0 + GO TO 150 + END IF + +C STOP IF NUMBER OF ITERATIONS ALREADY EQUALS MAXIMUM PERMITTED + + IF (RESTRT .AND. (NITER.GE.MAXIT)) THEN + ISTOP = 0 + GO TO 150 + ELSE IF (NITER.GE.MAXIT) THEN + INFO = 4 + ISTOP = 0 + GO TO 150 + END IF + +C MAIN LOOP + + 100 CONTINUE + + NITER = NITER + 1 + RNORMS = RNORM + LOOPED = 0 + +C EVALUATE JACOBIAN USING BEST ESTIMATE OF FUNCTION (FS) + + IF ((NITER.EQ.1) .AND. (ANAJAC.AND.CHKJAC)) THEN + ISTOP = 0 + ELSE + CALL DEVJAC(FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FS, + + T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) + END IF + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + +C SUB LOOP FOR +C INTERNAL DOUBLING OR +C COMPUTING NEW STEP WHEN OLD FAILED + + 110 CONTINUE + +C COMPUTE STEPS S AND T + + IF (LOOPED.GT.100) THEN + INFO = 60000 + GO TO 200 + ELSE + LOOPED = LOOPED + 1 + CALL DODLM(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA,TAU,ETA,ISODR, + + WORK(WRK6),WORK(OMEGA), + + WORK(U),WORK(QRAUX),IWORK(JPVT), + + S,T,NLMS,RCOND,IRANK, + + WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + + WORK(WRK5),WRK,LWRK,ISTOPC) + END IF + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + OLMAVG = OLMAVG+NLMS + +C COMPUTE BETAN = BETAC + S +C DELTAN = DELTA + T + + CALL DXPY(NPP,1,BETAC,NPP,S,NPP,BETAN,NPP) + IF (ISODR) CALL DXPY(N,M,DELTA,N,T,N,DELTAN,N) + +C COMPUTE NORM OF SCALED STEPS S AND T (TSNORM) + + CALL DWGHT(NPP,1,SS,NPP,1,S,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,T,N,WRK(NPP+1),N) + TSNORM = DNRM2_odr(NPP+N*M,WRK,1) + ELSE + TSNORM = DNRM2_odr(NPP,WRK,1) + END IF + +C COMPUTE SCALED PREDICTED REDUCTION + + IWRK = 0 + DO 130 L=1,NQ + DO 120 I=1,N + IWRK = IWRK + 1 + WRK(IWRK) = DDOT_odr(NPP,FJACB(I,1,L),N,S,1) + IF (ISODR) WRK(IWRK) = WRK(IWRK) + + + DDOT_odr(M,FJACD(I,1,L),N,T(I,1),N) + 120 CONTINUE + 130 CONTINUE + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,T,N,WRK(N*NQ+1),N) + TEMP1 = DDOT_odr(N*NQ,WRK,1,WRK,1) + + + DDOT_odr(N*M,T,1,WRK(N*NQ+1),1) + TEMP1 = SQRT(TEMP1)/RNORM + ELSE + TEMP1 = DNRM2_odr(N*NQ,WRK,1)/RNORM + END IF + TEMP2 = SQRT(ALPHA)*TSNORM/RNORM + PRERED = TEMP1**2+TEMP2**2/P5 + + DIRDER = -(TEMP1**2+TEMP2**2) + +C EVALUATE PREDICTED VALUES AT NEW POINT + + CALL DUNPAC(NP,BETAN,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTAN,N,XPLUSD,N) + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 002,FN,WORK(WRK6),WORK(WRK1), + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + END IF + + IF (ISTOP.LT.0) THEN + +C SET INFO TO INDICATE USER HAS STOPPED THE COMPUTATIONS IN FCN + + INFO = 51000 + GO TO 200 + ELSE IF (ISTOP.GT.0) THEN + +C SET NORM TO INDICATE STEP SHOULD BE REJECTED + + RNORMN = RNORM/(P1*P75) + ELSE + +C COMPUTE NORM OF NEW WEIGHTED EPSILONS AND WEIGHTED DELTAS (RNORMN) + + IF (IMPLCT) THEN + CALL DCOPY_odr(N*NQ,FN,1,WRK,1) + ELSE + CALL DXMY(N,NQ,FN,N,Y,LDY,WRK,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,WRK,N,WRK,N) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTAN,N,WRK(N*NQ+1),N) + RNORMN = SQRT(DDOT_odr(N*NQ,WRK,1,WRK,1) + + + DDOT_odr(N*M,DELTAN,1,WRK(N*NQ+1),1)) + ELSE + RNORMN = DNRM2_odr(N*NQ,WRK,1) + END IF + END IF + +C COMPUTE SCALED ACTUAL REDUCTION + + IF (P1*RNORMN.LT.RNORM) THEN + ACTRED = ONE - (RNORMN/RNORM)**2 + ELSE + ACTRED = -ONE + END IF + +C COMPUTE RATIO OF ACTUAL REDUCTION TO PREDICTED REDUCTION + + IF(PRERED .EQ. ZERO) THEN + RATIO = ZERO + ELSE + RATIO = ACTRED/PRERED + END IF + +C CHECK ON LACK OF REDUCTION IN INTERNAL DOUBLING CASE + + IF (INTDBL .AND. (RATIO.LT.P0001 .OR. RNORMN.GT.RNORMS)) THEN + ISTOP = 0 + TAU = TAU*P5 + ALPHA = ALPHA/P5 + CALL DCOPY_odr(NPP,BETAS,1,BETAN,1) + CALL DCOPY_odr(N*M,DELTAS,1,DELTAN,1) + CALL DCOPY_odr(N*NQ,FS,1,FN,1) + ACTRED = ACTRS + PRERED = PRERS + RNORMN = RNORMS + RATIO = P5 + END IF + +C UPDATE STEP BOUND + + INTDBL = .FALSE. + IF (RATIO.LT.P25) THEN + IF (ACTRED.GE.ZERO) THEN + TEMP = P5 + ELSE + TEMP = P5*DIRDER/(DIRDER+P5*ACTRED) + END IF + IF (P1*RNORMN.GE.RNORM .OR. TEMP.LT.P1) THEN + TEMP = P1 + END IF + TAU = TEMP*MIN(TAU,TSNORM/P1) + ALPHA = ALPHA/TEMP + + ELSE IF (ALPHA.EQ.ZERO) THEN + TAU = TSNORM/P5 + + ELSE IF (RATIO.GE.P75 .AND. NLMS.LE.11) THEN + +C STEP QUALIFIES FOR INTERNAL DOUBLING +C - UPDATE TAU AND ALPHA +C - SAVE INFORMATION FOR CURRENT POINT + + INTDBL = .TRUE. + + TAU = TSNORM/P5 + ALPHA = ALPHA*P5 + + CALL DCOPY_odr(NPP,BETAN,1,BETAS,1) + CALL DCOPY_odr(N*M,DELTAN,1,DELTAS,1) + CALL DCOPY_odr(N*NQ,FN,1,FS,1) + ACTRS = ACTRED + PRERS = PRERED + RNORMS = RNORMN + END IF + +C IF INTERNAL DOUBLING, SKIP CONVERGENCE CHECKS + + IF (INTDBL .AND. TAU.GT.ZERO) THEN + INT2 = INT2+1 + GO TO 110 + END IF + +C CHECK ACCEPTANCE + + IF (RATIO.GE.P0001) THEN + CALL DCOPY_odr(N*NQ,FN,1,FS,1) + IF (IMPLCT) THEN + CALL DCOPY_odr(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,N,F,N) + CALL DCOPY_odr(NPP,BETAN,1,BETAC,1) + CALL DCOPY_odr(N*M,DELTAN,1,DELTA,1) + RNORM = RNORMN + CALL DWGHT(NPP,1,SS,NPP,1,BETAC,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,DELTA,N,WRK(NPP+1),N) + PNORM = DNRM2_odr(NPP+N*M,WRK,1) + ELSE + PNORM = DNRM2_odr(NPP,WRK,1) + END IF + LSTEP = .TRUE. + ELSE + LSTEP = .FALSE. + END IF + +C TEST CONVERGENCE + + INFO = 0 + CNVSS = RNORM.EQ.ZERO + + .OR. + + (ABS(ACTRED).LE.SSTOL .AND. + + PRERED.LE.SSTOL .AND. + + P5*RATIO.LE.ONE) + CNVPAR = (TAU.LE.PARTOL*PNORM) .AND. (.NOT.IMPLCT) + IF (CNVSS) INFO = 1 + IF (CNVPAR) INFO = 2 + IF (CNVSS .AND. CNVPAR) INFO = 3 + +C PRINT ITERATION REPORT + + IF (INFO.NE.0 .OR. LSTEP) THEN + IF (IPR2.NE.0 .AND. IPR2F.NE.0 .AND. LUNRPT.NE.0) THEN + IF (IPR2F.EQ.1 .OR. MOD(NITER,IPR2F).EQ.1) THEN + IFLAG = 2 + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + WSS(1) = RNORM*RNORM + IF (IPR2.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR2.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR2,2) + END IF + LUNR = LUNRPT + DO 140 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR2.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 140 CONTINUE + FSTITR = .FALSE. + PRTPEN = .FALSE. + END IF + END IF + END IF + +C CHECK IF FINISHED + + IF (INFO.EQ.0) THEN + IF (LSTEP) THEN + +C BEGIN NEXT INTERATION UNLESS A STOPPING CRITERIA HAS BEEN MET + + IF (NITER.GE.MAXIT) THEN + INFO = 4 + ELSE + GO TO 100 + END IF + ELSE + +C STEP FAILED - RECOMPUTE UNLESS A STOPPING CRITERIA HAS BEEN MET + + GO TO 110 + END IF + END IF + + 150 CONTINUE + + IF (ISTOP.GT.0) INFO = INFO + 100 + +C STORE UNWEIGHTED EPSILONS AND X+DELTA TO RETURN TO USER + + IF (IMPLCT) THEN + CALL DCOPY_odr(N*NQ,FS,1,F,1) + ELSE + CALL DXMY(N,NQ,FS,N,Y,LDY,F,N) + END IF + CALL DUNPAC(NP,BETAC,BETA,IFIXB) + CALL DXPY(N,M,X,LDX,DELTA,N,XPLUSD,N) + +C COMPUTE COVARIANCE MATRIX OF ESTIMATED PARAMETERS +C IN UPPER NP BY NP PORTION OF WORK(VCV) IF REQUESTED + + IF (DOVCV .AND. ISTOP.EQ.0) THEN + +C RE-EVALUATE JACOBIAN AT FINAL SOLUTION, IF REQUESTED +C OTHERWISE, JACOBIAN FROM BEGINNING OF LAST ITERATION WILL BE USED +C TO COMPUTE COVARIANCE MATRIX + + IF (REDOJ) THEN + CALL DEVJAC(FCN, + + ANAJAC,CDJAC, + + N,M,NP,NQ, + + BETAC,BETA,STPB, + + IFIXB,IFIXX,LDIFX, + + X,LDX,DELTA,XPLUSD,STPD,LDSTPD, + + SSF,TT,LDTT,NETA,FS, + + T,WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK6), + + FJACB,ISODR,FJACD,WE1,LDWE,LD2WE, + + NJEV,NFEV,ISTOP,INFO) + + + IF (ISTOP.NE.0) THEN + INFO = 51000 + GO TO 200 + ELSE IF (INFO.EQ.50300) THEN + GO TO 200 + END IF + END IF + + IF (IMPLCT) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(N*NQ+1),N) + RSS = DDOT_odr(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + RSS = RNORM*RNORM + END IF + IF (REDOJ .OR. NITER.GE.1) THEN + CALL DODVCV(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + + ETA,ISODR, + + WORK(VCV),WORK(SD), + + WORK(WRK6),WORK(OMEGA), + + WORK(U),WORK(QRAUX),IWORK(JPVT), + + S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + + WORK(WRK1),WORK(WRK2),WORK(WRK3),WORK(WRK4), + + WORK(WRK5),WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + INFO = ISTOPC + GO TO 200 + END IF + DIDVCV = .TRUE. + END IF + + END IF + +C SET JPVT TO INDICATE DROPPED, FIXED AND ESTIMATED PARAMETERS + + 200 DO 210 I=0,NP-1 + WORK(WRK3+I) = IWORK(JPVT+I) + IWORK(JPVT+I) = -2 + 210 CONTINUE + IF (REDOJ .OR. NITER.GE.1) THEN + DO 220 I=0,NPP-1 + J = WORK(WRK3+I) - 1 + IF (I.LE.NPP-IRANK-1) THEN + IWORK(JPVT+J) = 1 + ELSE + IWORK(JPVT+J) = -1 + END IF + 220 CONTINUE + IF (NPP.LT.NP) THEN + J = NPP-1 + DO 230 I=NP-1,0,-1 + IF (IFIXB(I+1).EQ.0) THEN + IWORK(JPVT+I) = 0 + ELSE + IWORK(JPVT+I) = IWORK(JPVT+J) + J = J - 1 + END IF + 230 CONTINUE + END IF + END IF + +C STORE VARIOUS SCALARS IN WORK ARRAYS FOR RETURN TO USER + + IF (NITER.GE.1) THEN + OLMAVG = OLMAVG/NITER + ELSE + OLMAVG = ZERO + END IF + +C COMPUTE WEIGHTED SUMS OF SQUARES FOR RETURN TO USER + + CALL DWGHT(N,NQ,WE1,LDWE,LD2WE,F,N,WRK,N) + WSS(3) = DDOT_odr(N*NQ,WRK,1,WRK,1) + IF (ISODR) THEN + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,WRK(N*NQ+1),N) + WSS(2) = DDOT_odr(N*M,DELTA,1,WRK(N*NQ+1),1) + ELSE + WSS(2) = ZERO + END IF + WSS(1) = WSS(2) + WSS(3) + + ACCESS = .FALSE. + CALL DACCES(N,M,NP,NQ,LDWE,LD2WE, + + WORK,LWORK,IWORK,LIWORK, + + ACCESS,ISODR, + + JPVT,OMEGA,U,QRAUX,SD,VCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK6, + + NNZW,NPP, + + JOB,PARTOL,SSTOL,MAXIT,TAUFAC,ETA,NETA, + + LUNRPT,IPR1,IPR2,IPR2F,IPR3, + + WSS,RVAR,IDF, + + TAU,ALPHA,NITER,NFEV,NJEV,INT2,OLMAVG, + + RCOND,IRANK,ACTRS,PNORM,PRERS,RNORMS,ISTOP) + +C ENCODE EXISTANCE OF QUESTIONABLE RESULTS INTO INFO + + IF (INFO.LE.9 .OR. INFO.GE.60000) THEN + IF (MSGB(1).EQ.1 .OR. MSGD(1).EQ.1) THEN + INFO = INFO + 1000 + END IF + IF (ISTOP.NE.0) THEN + INFO = INFO + 100 + END IF + IF (IRANK.GE.1) THEN + IF (NPP.GT.IRANK) THEN + INFO = INFO + 10 + ELSE + INFO = INFO + 20 + END IF + END IF + END IF + +C PRINT FINAL SUMMARY + + IF (IPR3.NE.0 .AND. LUNRPT.NE.0) THEN + IFLAG = 3 + + IF (IPR3.GE.3. AND. LUNRPT.NE.LUDFLT) THEN + NPR = 2 + ELSE + NPR = 1 + END IF + IF (IPR3.GE.6) THEN + IPR = 2 + ELSE + IPR = 2 - MOD(IPR3,2) + END IF + LUNR = LUNRPT + DO 240 I=1,NPR + CALL DODPCR(IPR,LUNR, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IWORK(JPVT),IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,WORK(SD), + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) + IF (IPR3.GE.5) THEN + IPR = 2 + ELSE + IPR = 1 + END IF + LUNR = LUDFLT + 240 CONTINUE + END IF + + RETURN + + END +*DODPC1 + SUBROUTINE DODPC1 + + (IPR,LUNRPT, + + ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + + MSGB1,MSGB,MSGD1,MSGD, + + N,M,NP,NQ,NPP,NNZW, + + X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + + Y,LDY,WE,LDWE,LD2WE,PNLTY, + + BETA,IFIXB,SSF,STPB, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,WSSDEL,WSSEPS) +C***BEGIN PROLOGUE DODPC1 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DHSTEP +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE INITIAL SUMMARY REPORT +C***END PROLOGUE DODPC1 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PARTOL,PNLTY,SSTOL,TAUFAC,WSS,WSSDEL,WSSEPS + INTEGER + + IPR,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE,LDX,LDY,LD2WD,LD2WE, + + LUNRPT,M,MAXIT,MSGB1,MSGD1,N,NETA,NNZW,NP,NPP,NQ + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),SSF(NP),STPB(NP),STPD(LDSTPD,M), + + TT(LDTT,M),WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),X(LDX,M), + + Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ,NP),MSGD(NQ,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP1,TEMP2,TEMP3,ZERO + INTEGER + + I,ITEMP,J,JOB1,JOB2,JOB3,JOB4,JOB5,L + +C...LOCAL ARRAYS + CHARACTER TEMPC0*2,TEMPC1*5,TEMPC2*13 + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DHSTEP + EXTERNAL + + DHSTEP + + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,MIN + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR FORWARD DIFFERENCES +C (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ITEMP: A TEMPORARY INTEGER VALUE. +C J: AN INDEXING VARIABLE. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C JOB1: THE 1ST DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB2: THE 2ND DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB3: THE 3RD DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB4: THE 4TH DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C JOB5: THE 5TH DIGIT (FROM THE LEFT) OF VARIABLE JOB. +C L: AN INDEXING VARIABLE. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR THE COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C A NEGATIVE VALUE INDICATES THAT NETA WAS ESTIMATED BY +C ODRPACK. A POSITIVE VALUE INDICTES THE VALUE WAS SUPPLIED +C BY THE USER. +C NNZW: THE NUMBER OF NONZERO OBSERVATIONAL ERROR WEIGHTS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C SSF: THE SCALING VALUES FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP USED FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TEMPC0: A TEMPORARY CHARACTER*2 VALUE. +C TEMPC1: A TEMPORARY CHARACTER*5 VALUE. +C TEMPC2: A TEMPORARY CHARACTER*13 VALUE. +C TEMP1: A TEMPORARY DOUBLE PRECISION VALUE. +C TEMP2: A TEMPORARY DOUBLE PRECISION VALUE. +C TEMP3: A TEMPORARY DOUBLE PRECISION VALUE. +C TT: THE SCALING VALUES FOR DELTA. +C WD: THE DELTA WEIGHTS. +C WE: THE EPSILON WEIGHTS. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C WSSDEL: THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS. +C WSSEPS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C X: THE EXPLANATORY VARIABLE. +C Y: THE RESPONSE VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODPC1 + + +C PRINT PROBLEM SIZE SPECIFICATION + + WRITE (LUNRPT,1000) N,NNZW,NQ,M,NP,NPP + + +C PRINT CONTROL VALUES + + JOB1 = JOB/10000 + JOB2 = MOD(JOB,10000)/1000 + JOB3 = MOD(JOB,1000)/100 + JOB4 = MOD(JOB,100)/10 + JOB5 = MOD(JOB,10) + WRITE (LUNRPT,1100) JOB + IF (RESTRT) THEN + WRITE (LUNRPT,1110) JOB1 + ELSE + WRITE (LUNRPT,1111) JOB1 + END IF + IF (ISODR) THEN + IF (INITD) THEN + WRITE (LUNRPT,1120) JOB2 + ELSE + WRITE (LUNRPT,1121) JOB2 + END IF + ELSE + WRITE (LUNRPT,1122) JOB2,JOB5 + END IF + IF (DOVCV) THEN + WRITE (LUNRPT,1130) JOB3 + IF (REDOJ) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + ELSE + WRITE (LUNRPT,1133) JOB3 + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,1140) JOB4 + IF (CHKJAC) THEN + IF (MSGB1.GE.1 .OR. MSGD1.GE.1) THEN + WRITE (LUNRPT,1141) + ELSE + WRITE (LUNRPT,1142) + END IF + ELSE + WRITE (LUNRPT,1143) + END IF + ELSE IF (CDJAC) THEN + WRITE (LUNRPT,1144) JOB4 + ELSE + WRITE (LUNRPT,1145) JOB4 + END IF + IF (ISODR) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1150) JOB5 + ELSE + WRITE (LUNRPT,1151) JOB5 + END IF + ELSE + WRITE (LUNRPT,1152) JOB5 + END IF + IF (NETA.LT.0) THEN + WRITE (LUNRPT,1200) -NETA + ELSE + WRITE (LUNRPT,1210) NETA + END IF + WRITE (LUNRPT,1300) TAUFAC + + +C PRINT STOPPING CRITERIA + + WRITE (LUNRPT,1400) SSTOL,PARTOL,MAXIT + + +C PRINT INITIAL SUM OF SQUARES + + IF (IMPLCT) THEN + WRITE (LUNRPT,1500) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,1510) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,1600) WSS + IF (ISODR) THEN + WRITE (LUNRPT,1610) WSSDEL,WSSEPS + END IF + END IF + + + IF (IPR.GE.2) THEN + + +C PRINT FUNCTION PARAMETER DATA + + WRITE (LUNRPT,4000) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,4110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,4120) + ELSE + WRITE (LUNRPT,4200) + END IF + DO 130 J=1,NP + IF (IFIXB(1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (IFIXB(J).NE.0) THEN + TEMPC1 = ' NO' + ELSE + TEMPC1 = ' YES' + END IF + END IF + IF (ANAJAC) THEN + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + ITEMP = -1 + DO 110 L=1,NQ + ITEMP = MAX(ITEMP,MSGB(L,J)) + 110 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (SSF(1).LT.ZERO) THEN + TEMP1 = ABS(SSF(1)) + ELSE + TEMP1 = SSF(J) + END IF + IF (ANAJAC) THEN + WRITE (LUNRPT,4310) J,BETA(J),TEMPC1,TEMP1,TEMPC2 + ELSE + IF (CDJAC) THEN + TEMP2 = DHSTEP(1,NETA,1,J,STPB,1) + ELSE + TEMP2 = DHSTEP(0,NETA,1,J,STPB,1) + END IF + WRITE (LUNRPT,4320) J,BETA(J),TEMPC1,TEMP1,TEMP2 + END IF + 130 CONTINUE + +C PRINT EXPLANATORY VARIABLE DATA + + IF (ISODR) THEN + WRITE (LUNRPT,2010) + IF (CHKJAC .AND. ((MSGB1.GE.1) .OR. (MSGD1.GE.1))) THEN + WRITE (LUNRPT,2110) + ELSE IF (ANAJAC) THEN + WRITE (LUNRPT,2120) + ELSE + WRITE (LUNRPT,2130) + END IF + ELSE + WRITE (LUNRPT,2020) + WRITE (LUNRPT,2140) + END IF + IF (ISODR) THEN + DO 240 J = 1,M + TEMPC0 = '1,' + DO 230 I=1,N,N-1 + + IF (IFIXX(1,1).LT.0) THEN + TEMPC1 = ' NO' + ELSE + IF (LDIFX.EQ.1) THEN + IF (IFIXX(1,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + ELSE + IF (IFIXX(I,J).EQ.0) THEN + TEMPC1 = ' YES' + ELSE + TEMPC1 = ' NO' + END IF + END IF + END IF + + IF (TT(1,1).LT.ZERO) THEN + TEMP1 = ABS(TT(1,1)) + ELSE + IF (LDTT.EQ.1) THEN + TEMP1 = TT(1,J) + ELSE + TEMP1 = TT(I,J) + END IF + END IF + + IF (WD(1,1,1).LT.ZERO) THEN + TEMP2 = ABS(WD(1,1,1)) + ELSE + IF (LDWD.EQ.1) THEN + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(1,1,J) + ELSE + TEMP2 = WD(1,J,J) + END IF + ELSE + IF (LD2WD.EQ.1) THEN + TEMP2 = WD(I,1,J) + ELSE + TEMP2 = WD(I,J,J) + END IF + END IF + END IF + + IF (ANAJAC) THEN + IF (CHKJAC .AND. + + (((MSGB1.GE.1) .OR. (MSGD1.GE.1)) .AND. + + (I.EQ.1))) THEN + ITEMP = -1 + DO 210 L=1,NQ + ITEMP = MAX(ITEMP,MSGD(L,J)) + 210 CONTINUE + IF (ITEMP.LE.-1) THEN + TEMPC2 = ' UNCHECKED' + ELSE IF (ITEMP.EQ.0) THEN + TEMPC2 = ' VERIFIED' + ELSE IF (ITEMP.GE.1) THEN + TEMPC2 = ' QUESTIONABLE' + END IF + ELSE + TEMPC2 = ' ' + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMPC2 + END IF + ELSE + TEMPC2 = ' ' + IF (CDJAC) THEN + TEMP3 = DHSTEP(1,NETA,I,J,STPD,LDSTPD) + ELSE + TEMP3 = DHSTEP(0,NETA,I,J,STPD,LDSTPD) + END IF + IF (M.LE.9) THEN + WRITE (LUNRPT,5210) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + ELSE + WRITE (LUNRPT,5220) + + TEMPC0,J,X(I,J), + + DELTA(I,J),TEMPC1,TEMP1,TEMP2,TEMP3 + END IF + END IF + + TEMPC0 = 'N,' + + 230 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 240 CONTINUE + ELSE + + DO 260 J = 1,M + TEMPC0 = '1,' + DO 250 I=1,N,N-1 + IF (M.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,J,X(I,J) + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,J,X(I,J) + END IF + TEMPC0 = 'N,' + 250 CONTINUE + IF (J.LT.M) WRITE (LUNRPT,6000) + 260 CONTINUE + END IF + +C PRINT RESPONSE VARIABLE DATA AND OBSERVATION ERROR WEIGHTS + + IF (.NOT.IMPLCT) THEN + WRITE (LUNRPT,3000) + WRITE (LUNRPT,3100) + DO 310 L=1,NQ + TEMPC0 = '1,' + DO 300 I=1,N,N-1 + IF (WE(1,1,1).LT.ZERO) THEN + TEMP1 = ABS(WE(1,1,1)) + ELSE IF (LDWE.EQ.1) THEN + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(1,1,L) + ELSE + TEMP1 = WE(1,L,L) + END IF + ELSE + IF (LD2WE.EQ.1) THEN + TEMP1 = WE(I,1,L) + ELSE + TEMP1 = WE(I,L,L) + END IF + END IF + IF (NQ.LE.9) THEN + WRITE (LUNRPT,5110) + + TEMPC0,L,Y(I,L),TEMP1 + ELSE + WRITE (LUNRPT,5120) + + TEMPC0,L,Y(I,L),TEMP1 + END IF + TEMPC0 = 'N,' + 300 CONTINUE + IF (L.LT.NQ) WRITE (LUNRPT,6000) + 310 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (/' --- PROBLEM SIZE:'/ + + ' N = ',I5, + + ' (NUMBER WITH NONZERO WEIGHT = ',I5,')'/ + + ' NQ = ',I5/ + + ' M = ',I5/ + + ' NP = ',I5, + + ' (NUMBER UNFIXED = ',I5,')') + 1100 FORMAT + + (/' --- CONTROL VALUES:'/ + + ' JOB = ',I5.5/ + + ' = ABCDE, WHERE') + 1110 FORMAT + + (' A=',I1,' ==> FIT IS A RESTART.') + 1111 FORMAT + + (' A=',I1,' ==> FIT IS NOT A RESTART.') + 1120 FORMAT + + (' B=',I1,' ==> DELTAS ARE INITIALIZED', + + ' TO ZERO.') + 1121 FORMAT + + (' B=',I1,' ==> DELTAS ARE INITIALIZED', + + ' BY USER.') + 1122 FORMAT + + (' B=',I1,' ==> DELTAS ARE FIXED AT', + + ' ZERO SINCE E=',I1,'.') + 1130 FORMAT + + (' C=',I1,' ==> COVARIANCE MATRIX WILL', + + ' BE COMPUTED USING') + 1131 FORMAT + + (' DERIVATIVES RE-', + + 'EVALUATED AT THE SOLUTION.') + 1132 FORMAT + + (' DERIVATIVES FROM THE', + + ' LAST ITERATION.') + 1133 FORMAT + + (' C=',I1,' ==> COVARIANCE MATRIX WILL', + + ' NOT BE COMPUTED.') + 1140 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' SUPPLIED BY USER.') + 1141 FORMAT + + (' DERIVATIVES WERE CHECKED.'/ + + ' RESULTS APPEAR QUESTIONABLE.') + 1142 FORMAT + + (' DERIVATIVES WERE CHECKED.'/ + + ' RESULTS APPEAR CORRECT.') + 1143 FORMAT + + (' DERIVATIVES WERE NOT', + + ' CHECKED.') + 1144 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' ESTIMATED BY CENTRAL', + + ' DIFFERENCES.') + 1145 FORMAT + + (' D=',I1,' ==> DERIVATIVES ARE', + + ' ESTIMATED BY FORWARD', + + ' DIFFERENCES.') + 1150 FORMAT + + (' E=',I1,' ==> METHOD IS IMPLICIT ODR.') + 1151 FORMAT + + (' E=',I1,' ==> METHOD IS EXPLICIT ODR.') + 1152 FORMAT + + (' E=',I1,' ==> METHOD IS EXPLICIT OLS.') + 1200 FORMAT + + (' NDIGIT = ',I5,' (ESTIMATED BY ODRPACK)') + 1210 FORMAT + + (' NDIGIT = ',I5,' (SUPPLIED BY USER)') + 1300 FORMAT + + (' TAUFAC = ',1P,D12.2) + 1400 FORMAT + + (/' --- STOPPING CRITERIA:'/ + + ' SSTOL = ',1P,D12.2, + + ' (SUM OF SQUARES STOPPING TOLERANCE)'/ + + ' PARTOL = ',1P,D12.2, + + ' (PARAMETER STOPPING TOLERANCE)'/ + + ' MAXIT = ',I5, + + ' (MAXIMUM NUMBER OF ITERATIONS)') + 1500 FORMAT + + (/' --- INITIAL SUM OF SQUARED WEIGHTED DELTAS =', + + 17X,1P,D17.8) + 1510 FORMAT + + ( ' INITIAL PENALTY FUNCTION VALUE =',1P,D17.8/ + + ' PENALTY TERM =',1P,D17.8/ + + ' PENALTY PARAMETER =',1P,D10.1) + 1600 FORMAT + + (/' --- INITIAL WEIGHTED SUM OF SQUARES =', + + 17X,1P,D17.8) + 1610 FORMAT + + ( ' SUM OF SQUARED WEIGHTED DELTAS =',1P,D17.8/ + + ' SUM OF SQUARED WEIGHTED EPSILONS =',1P,D17.8) + 2010 FORMAT + + (/' --- EXPLANATORY VARIABLE AND DELTA WEIGHT SUMMARY:') + 2020 FORMAT + + (/' --- EXPLANATORY VARIABLE SUMMARY:') + 2110 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT DERIVATIVE'/ + + ' ', + + ' ASSESSMENT'/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) '/) + 2120 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT '/ + + ' ', + + ' '/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) '/) + 2130 FORMAT + + (/' INDEX X(I,J) DELTA(I,J) FIXED', + + ' SCALE WEIGHT DERIVATIVE'/ + + ' ', + + ' STEP SIZE'/, + + ' (I,J) (IFIXX)', + + ' (SCLD) (WD) (STPD)'/) + 2140 FORMAT + + (/' INDEX X(I,J)'/ + + ' (I,J) '/) + 3000 FORMAT + + (/' --- RESPONSE VARIABLE AND EPSILON ERROR WEIGHT', + + ' SUMMARY:') + 3100 FORMAT + + (/' INDEX Y(I,L) WEIGHT'/ + + ' (I,L) (WE)'/) + 4000 FORMAT + + (/' --- FUNCTION PARAMETER SUMMARY:') + 4110 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' DERIVATIVE'/ + + ' ', + + ' ASSESSMENT'/, + + ' (K) (IFIXB) (SCLB)', + + ' '/) + 4120 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' '/ + + ' ', + + ' '/, + + ' (K) (IFIXB) (SCLB)', + + ' '/) + 4200 FORMAT + + (/' INDEX BETA(K) FIXED SCALE', + + ' DERIVATIVE'/ + + ' ', + + ' STEP SIZE'/, + + ' (K) (IFIXB) (SCLB)', + + ' (STPB)'/) + 4310 FORMAT + + (7X,I5,1P,D16.8,4X,A5,D16.8,1X,A13) + 4320 FORMAT + + (7X,I5,1P,D16.8,4X,A5,D16.8,1X,D13.5) + 5110 FORMAT + + (9X,A2,I1,1P,2D12.3,4X,A5,2D10.2,1X,A13) + 5120 FORMAT + + (8X,A2,I2,1P,2D12.3,4X,A5,2D10.2,1X,A13) + 5210 FORMAT + + (9X,A2,I1,1P,2D12.3,4X,A5,2D10.2,1X,D13.5) + 5220 FORMAT + + (8X,A2,I2,1P,2D12.3,4X,A5,2D10.2,1X,D13.5) + 6000 FORMAT + + (' ') + END +*DODPC2 + SUBROUTINE DODPC2 + + (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + + PNLTY, + + NITER,NFEV,WSS,ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) +C***BEGIN PROLOGUE DODPC2 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE GENERATE ITERATION REPORTS +C***END PROLOGUE DODPC2 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRED,ALPHA,PNLTY,PNORM,PRERED,TAU,WSS + INTEGER + + IPR,LUNRPT,NFEV,NITER,NP + LOGICAL + + FSTITR,IMPLCT,PRTPEN + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + RATIO,ZERO + INTEGER + + J,K,L + CHARACTER GN*3 + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C BETA: THE FUNCTION PARAMETERS. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=.TRUE.) OR NOT (FSTITR=.FALSE.). +C GN: THE CHARACTER*3 VARIABLE INDICATING WHETHER A GAUSS-NEWTON +C STEP WAS TAKEN. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C RATIO: THE RATIO OF TAU TO PNORM. +C TAU: THE TRUST REGION DIAMETER. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODPC2 + + + IF (FSTITR) THEN + IF (IPR.EQ.1) THEN + IF (IMPLCT) THEN + WRITE (LUNRPT,1121) + ELSE + WRITE (LUNRPT,1122) + END IF + ELSE + IF (IMPLCT) THEN + WRITE (LUNRPT,1131) + ELSE + WRITE (LUNRPT,1132) + END IF + END IF + END IF + IF (PRTPEN) THEN + WRITE (LUNRPT,1133) PNLTY + END IF + + IF (ALPHA.EQ.ZERO) THEN + GN = 'YES' + ELSE + GN = ' NO' + END IF + IF (PNORM.NE.ZERO) THEN + RATIO = TAU/PNORM + ELSE + RATIO = ZERO + END IF + IF (IPR.EQ.1) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN + ELSE + J = 1 + K = MIN(3,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1141) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN,J,BETA(J) + ELSE + WRITE (LUNRPT,1142) NITER,NFEV,WSS,ACTRED,PRERED, + + RATIO,GN,J,K,(BETA(L),L=J,K) + END IF + IF (NP.GT.3) THEN + DO 10 J=4,NP,3 + K = MIN(J+2,NP) + IF (J.EQ.K) THEN + WRITE (LUNRPT,1151) J,BETA(J) + ELSE + WRITE (LUNRPT,1152) J,K,(BETA(L),L=J,K) + END IF + 10 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1121 FORMAT + + (// + + ' CUM. PENALTY ACT. REL. PRED. REL.'/ + + ' IT. NO. FN FUNCTION SUM-OF-SQS SUM-OF-SQS', + + ' G-N'/ + + ' NUM. EVALS VALUE REDUCTION REDUCTION', + + ' TAU/PNORM STEP'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ----') + 1122 FORMAT + + (// + + ' CUM. ACT. REL. PRED. REL.'/ + + ' IT. NO. FN WEIGHTED SUM-OF-SQS SUM-OF-SQS', + + ' G-N'/ + + ' NUM. EVALS SUM-OF-SQS REDUCTION REDUCTION', + + ' TAU/PNORM STEP'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ----'/) + 1131 FORMAT + + (// + + ' CUM. PENALTY ACT. REL. PRED. REL.'/ + + ' IT. NO. FN FUNCTION SUM-OF-SQS SUM-OF-SQS', + + ' G-N BETA -------------->'/ + + ' NUM. EVALS VALUE REDUCTION REDUCTION', + + ' TAU/PNORM STEP INDEX VALUE'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ---- ----- -----') + 1132 FORMAT + + (// + + ' CUM. ACT. REL. PRED. REL.'/ + + ' IT. NO. FN WEIGHTED SUM-OF-SQS SUM-OF-SQS', + + ' G-N BETA -------------->'/ + + ' NUM. EVALS SUM-OF-SQS REDUCTION REDUCTION', + + ' TAU/PNORM STEP INDEX VALUE'/ + + ' ---- ------ ----------- ----------- -----------', + + ' --------- ---- ----- -----'/) + 1133 FORMAT + + (/' PENALTY PARAMETER VALUE = ', 1P,E10.1) + 1141 FORMAT + + (1X,I4,I8,1X,1P,D12.5,2D13.4,D11.3,3X,A3,7X,I3,3D16.8) + 1142 FORMAT + + (1X,I4,I8,1X,1P,D12.5,2D13.4,D11.3,3X,A3,1X,I3,' TO',I3,3D16.8) + 1151 FORMAT + + (76X,I3,1P,D16.8) + 1152 FORMAT + + (70X,I3,' TO',I3,1P,3D16.8) + END +*DODPC3 + SUBROUTINE DODPC3 + + (IPR,LUNRPT, + + ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + + N,M,NP,NQ,NPP, + + INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + + WSS,WSSDEL,WSSEPS,PNLTY,RVAR,IDF, + + BETA,SDBETA,IFIXB2,F,DELTA) +C***BEGIN PROLOGUE DODPC3 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPPT +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE FINAL SUMMARY REPORT +C***END PROLOGUE DODPC3 + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PNLTY,RCOND,RVAR,WSS,WSSDEL,WSSEPS + INTEGER + + IDF,INFO,IPR,IRANK,ISTOP,LUNRPT,M, + + N,NFEV,NITER,NJEV,NP,NPP,NQ + LOGICAL + + ANAJAC,DIDVCV,DOVCV,IMPLCT,ISODR,REDOJ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),F(N,NQ),SDBETA(NP) + INTEGER + + IFIXB2(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TVAL + INTEGER + + D1,D2,D3,D4,D5,I,J,K,L,NPLM1 + CHARACTER FMT1*90 + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DPPT + EXTERNAL + + DPPT + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN,MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C D1: THE FIRST DIGIT OF INFO. +C D2: THE SECOND DIGIT OF INFO. +C D3: THE THIRD DIGIT OF INFO. +C D4: THE FOURTH DIGIT OF INFO. +C D5: THE FIFTH DIGIT OF INFO. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C F: THE ESTIMATED VALUES OF EPSILON. +C FMT1: A CHARACTER*90 VARIABLE USED FOR FORMATS. +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB2: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA WERE +C ESTIMATED, FIXED, OR DROPPED BECAUSE THEY CAUSED RANK +C DEFICIENCY, CORRESPONDING TO VALUES OF IFIXB2 EQUALING 1, +C 0, AND -1, RESPECTIVELY. IF IFIXB2 IS -2, THEN NO ATTEMPT +C WAS MADE TO ESTIMATE THE PARAMETERS BECAUSE MAXIT = 0. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C IPR: THE VARIABLE INDICATING WHAT IS TO BE PRINTED. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C L: AN INDEXING VARIABLE. +C LUNRPT: THE LOGICAL UNIT NUMBER USED FOR COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPLM1: THE NUMBER OF ITEMS TO BE PRINTED PER LINE, MINUS ONE. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF TFJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS +C TO BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE +C MATRIX (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RVAR: THE RESIDUAL VARIANCE. +C SDBETA: THE STANDARD ERRORS OF THE ESTIMATED PARAMETERS. +C TVAL: THE VALUE OF THE 97.5 PERCENT POINT FUNCTION FOR THE +C T DISTRIBUTION. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS. +C WSSDEL: THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS. +C WSSEPS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. + + +C***FIRST EXECUTABLE STATEMENT DODPC3 + + + D1 = INFO/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C PRINT STOPPING CONDITIONS + + WRITE (LUNRPT,1000) + IF (INFO.LE.9) THEN + IF (INFO.EQ.1) THEN + WRITE (LUNRPT,1011) INFO + ELSE IF (INFO.EQ.2) THEN + WRITE (LUNRPT,1012) INFO + ELSE IF (INFO.EQ.3) THEN + WRITE (LUNRPT,1013) INFO + ELSE IF (INFO.EQ.4) THEN + WRITE (LUNRPT,1014) INFO + ELSE IF (INFO.LE.9) THEN + WRITE (LUNRPT,1015) INFO + END IF + ELSE IF (INFO.LE.9999) THEN + +C PRINT WARNING DIAGNOSTICS + + WRITE (LUNRPT,1020) INFO + IF (D2.EQ.1) WRITE (LUNRPT,1021) + IF (D3.EQ.1) WRITE (LUNRPT,1022) + IF (D4.EQ.1) WRITE (LUNRPT,1023) + IF (D4.EQ.2) WRITE (LUNRPT,1024) + IF (D5.EQ.1) THEN + WRITE (LUNRPT,1031) + ELSE IF (D5.EQ.2) THEN + WRITE (LUNRPT,1032) + ELSE IF (D5.EQ.3) THEN + WRITE (LUNRPT,1033) + ELSE IF (D5.EQ.4) THEN + WRITE (LUNRPT,1034) + ELSE IF (D5.LE.9) THEN + WRITE (LUNRPT,1035) D5 + END IF + ELSE + +C PRINT ERROR MESSAGES + + WRITE (LUNRPT,1040) INFO + IF (D1.EQ.5) THEN + WRITE (LUNRPT,1042) + IF (D2.NE.0) WRITE (LUNRPT,1043) D2 + IF (D3.EQ.3) THEN + WRITE (LUNRPT,1044) D3 + ELSE IF (D3.NE.0) THEN + WRITE (LUNRPT,1045) D3 + END IF + ELSE IF (D1.EQ.6) THEN + WRITE (LUNRPT,1050) + ELSE + WRITE (LUNRPT,1060) D1 + END IF + END IF + +C PRINT MISC. STOPPING INFO + + WRITE (LUNRPT,1300) NITER + WRITE (LUNRPT,1310) NFEV + IF (ANAJAC) WRITE (LUNRPT,1320) NJEV + WRITE (LUNRPT,1330) IRANK + WRITE (LUNRPT,1340) RCOND + WRITE (LUNRPT,1350) ISTOP + +C PRINT FINAL SUM OF SQUARES + + IF (IMPLCT) THEN + WRITE (LUNRPT,2000) WSSDEL + IF (ISODR) THEN + WRITE (LUNRPT,2010) WSS,WSSEPS,PNLTY + END IF + ELSE + WRITE (LUNRPT,2100) WSS + IF (ISODR) THEN + WRITE (LUNRPT,2110) WSSDEL,WSSEPS + END IF + END IF + IF (DIDVCV) THEN + WRITE (LUNRPT,2200) SQRT(RVAR),IDF + END IF + + NPLM1 = 3 + +C PRINT ESTIMATED BETA'S, AND, +C IF, FULL RANK, THEIR STANDARD ERRORS + + WRITE (LUNRPT,3000) + IF (DIDVCV) THEN + WRITE (LUNRPT,7300) + TVAL = DPPT(0.975D0,IDF) + DO 10 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8400) J,BETA(J),SDBETA(J), + + BETA(J)-TVAL*SDBETA(J), + + BETA(J)+TVAL*SDBETA(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J) + END IF + 10 CONTINUE + IF (.NOT.REDOJ) WRITE (LUNRPT,7310) + ELSE + IF (DOVCV) THEN + IF (D1.LE.5) THEN + WRITE (LUNRPT,7410) + ELSE + WRITE (LUNRPT,7420) + END IF + END IF + + IF ((IRANK.EQ.0 .AND. NPP.EQ.NP) .OR. NITER.EQ.0) THEN + IF (NP.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 20 J=1,NP,NPLM1+1 + K = MIN(J+NPLM1,NP) + IF (K.EQ.J) THEN + WRITE (LUNRPT,8100) J,BETA(J) + ELSE + WRITE (LUNRPT,8200) J,K,(BETA(L),L=J,K) + END IF + 20 CONTINUE + IF (NITER.GE.1) THEN + WRITE (LUNRPT,8800) + ELSE + WRITE (LUNRPT,8900) + END IF + ELSE + WRITE (LUNRPT,7500) + DO 30 J=1,NP + IF (IFIXB2(J).GE.1) THEN + WRITE (LUNRPT,8500) J,BETA(J) + ELSE IF (IFIXB2(J).EQ.0) THEN + WRITE (LUNRPT,8600) J,BETA(J) + ELSE + WRITE (LUNRPT,8700) J,BETA(J) + END IF + 30 CONTINUE + END IF + END IF + + IF (IPR.EQ.1) RETURN + + +C PRINT EPSILON'S AND DELTA'S TOGETHER IN A COLUMN IF THE NUMBER OF +C COLUMNS OF DATA IN EPSILON AND DELTA IS LESS THAN OR EQUAL TO THREE. + + IF (IMPLCT .AND. (M.LE.4)) THEN + WRITE (LUNRPT,4100) + WRITE (FMT1,9110) M + WRITE (LUNRPT,FMT1) (J,J=1,M) + DO 40 I=1,N + WRITE (LUNRPT,4130) I,(DELTA(I,J),J=1,M) + 40 CONTINUE + + ELSE IF (ISODR .AND. (NQ+M.LE.4)) THEN + WRITE (LUNRPT,4110) + WRITE (FMT1,9120) NQ,M + WRITE (LUNRPT,FMT1) (L,L=1,NQ),(J,J=1,M) + DO 50 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ),(DELTA(I,J),J=1,M) + 50 CONTINUE + + ELSE IF (.NOT.ISODR .AND. ((NQ.GE.2) .AND. (NQ.LE.4))) THEN + WRITE (LUNRPT,4120) + WRITE (FMT1,9130) NQ + WRITE (LUNRPT,FMT1) (L,L=1,NQ) + DO 60 I=1,N + WRITE (LUNRPT,4130) I,(F(I,L),L=1,NQ) + 60 CONTINUE + ELSE + +C PRINT EPSILON'S AND DELTA'S SEPARATELY + + IF (.NOT.IMPLCT) THEN + +C PRINT EPSILON'S + + DO 80 J=1,NQ + WRITE (LUNRPT,4200) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 70 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,F(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(F(L,J),L=I,K) + END IF + 70 CONTINUE + 80 CONTINUE + END IF + +C PRINT DELTA'S + + IF (ISODR) THEN + DO 100 J=1,M + WRITE (LUNRPT,4300) J + IF (N.EQ.1) THEN + WRITE (LUNRPT,7100) + ELSE + WRITE (LUNRPT,7200) + END IF + DO 90 I=1,N,NPLM1+1 + K = MIN(I+NPLM1,N) + IF (I.EQ.K) THEN + WRITE (LUNRPT,8100) I,DELTA(I,J) + ELSE + WRITE (LUNRPT,8200) I,K,(DELTA(L,J),L=I,K) + END IF + 90 CONTINUE + 100 CONTINUE + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (/' --- STOPPING CONDITIONS:') + 1011 FORMAT + + (' INFO = ',I5,' ==> SUM OF SQUARES CONVERGENCE.') + 1012 FORMAT + + (' INFO = ',I5,' ==> PARAMETER CONVERGENCE.') + 1013 FORMAT + + (' INFO = ',I5,' ==> SUM OF SQUARES CONVERGENCE AND', + + ' PARAMETER CONVERGENCE.') + 1014 FORMAT + + (' INFO = ',I5,' ==> ITERATION LIMIT REACHED.') + 1015 FORMAT + + (' INFO = ',I5,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1020 FORMAT + + (' INFO = ',I5.4/ + + ' = ABCD, WHERE A NONZERO VALUE FOR DIGIT A,', + + ' B, OR C INDICATES WHY'/ + + ' THE RESULTS MIGHT BE QUESTIONABLE,', + + ' AND DIGIT D INDICATES'/ + + ' THE ACTUAL STOPPING CONDITION.') + 1021 FORMAT + + (' A=1 ==> DERIVATIVES ARE', + + ' QUESTIONABLE.') + 1022 FORMAT + + (' B=1 ==> USER SET ISTOP TO', + + ' NONZERO VALUE DURING LAST'/ + + ' CALL TO SUBROUTINE FCN.') + 1023 FORMAT + + (' C=1 ==> DERIVATIVES ARE NOT', + + ' FULL RANK AT THE SOLUTION.') + 1024 FORMAT + + (' C=2 ==> DERIVATIVES ARE ZERO', + + ' RANK AT THE SOLUTION.') + 1031 FORMAT + + (' D=1 ==> SUM OF SQUARES CONVERGENCE.') + 1032 FORMAT + + (' D=2 ==> PARAMETER CONVERGENCE.') + 1033 FORMAT + + (' D=3 ==> SUM OF SQUARES CONVERGENCE', + + ' AND PARAMETER CONVERGENCE.') + 1034 FORMAT + + (' D=4 ==> ITERATION LIMIT REACHED.') + 1035 FORMAT + + (' D=',I1,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1040 FORMAT + + (' INFO = ',I5.5/ + + ' = ABCDE, WHERE A NONZERO VALUE FOR A GIVEN', + + ' DIGIT INDICATES AN'/ + + ' ABNORMAL STOPPING CONDITION.') + 1042 FORMAT + + (' A=5 ==> USER STOPPED COMPUTATIONS', + + ' IN SUBROUTINE FCN.') + 1043 FORMAT + + (' B=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED DURING THE'/ + + ' FUNCTION EVALUATION.') + 1044 FORMAT + + (' C=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED BECAUSE'/ + + ' DERIVATIVES WITH', + + ' RESPECT TO DELTA WERE'/ + + ' COMPUTED BY', + + ' SUBROUTINE FCN WHEN'/ + + ' FIT IS OLS.') + 1045 FORMAT + + (' C=',I1,' ==> COMPUTATIONS WERE', + + ' STOPPED DURING THE'/ + + ' JACOBIAN EVALUATION.') + 1050 FORMAT + + (' A=6 ==> NUMERICAL INSTABILITIES', + + ' HAVE BEEN DETECTED,'/ + + ' POSSIBLY INDICATING', + + ' A DISCONTINUITY IN THE'/ + + ' DERIVATIVES OR A POOR', + + ' POOR CHOICE OF PROBLEM'/ + + ' SCALE OR WEIGHTS.') + 1060 FORMAT + + (' A=',I1,' ==> UNEXPECTED VALUE,', + + ' PROBABLY INDICATING'/ + + ' INCORRECTLY SPECIFIED', + + ' USER INPUT.') + 1300 FORMAT + + (' NITER = ',I5, + + ' (NUMBER OF ITERATIONS)') + 1310 FORMAT + + (' NFEV = ',I5, + + ' (NUMBER OF FUNCTION EVALUATIONS)') + 1320 FORMAT + + (' NJEV = ',I5, + + ' (NUMBER OF JACOBIAN EVALUATIONS)') + 1330 FORMAT + + (' IRANK = ',I5, + + ' (RANK DEFICIENCY)') + 1340 FORMAT + + (' RCOND = ',1P,D12.2, + + ' (INVERSE CONDITION NUMBER)') +*1341 FORMAT +* + (' ==> POSSIBLY FEWER THAN 2 SIGNIFICANT', +* + ' DIGITS IN RESULTS;'/ +* + ' SEE ODRPACK REFERENCE', +* + ' GUIDE, SECTION 4.C.') + 1350 FORMAT + + (' ISTOP = ',I5, + + ' (RETURNED BY USER FROM', + + ' SUBROUTINE FCN)') + 2000 FORMAT + + (/' --- FINAL SUM OF SQUARED WEIGHTED DELTAS = ', + + 17X,1P,D17.8) + 2010 FORMAT + + ( ' FINAL PENALTY FUNCTION VALUE = ',1P,D17.8/ + + ' PENALTY TERM = ',1P,D17.8/ + + ' PENALTY PARAMETER = ',1P,D10.1) + 2100 FORMAT + + (/' --- FINAL WEIGHTED SUMS OF SQUARES = ',17X,1P,D17.8) + 2110 FORMAT + + ( ' SUM OF SQUARED WEIGHTED DELTAS = ',1P,D17.8/ + + ' SUM OF SQUARED WEIGHTED EPSILONS = ',1P,D17.8) + 2200 FORMAT + + (/' --- RESIDUAL STANDARD DEVIATION = ', + + 17X,1P,D17.8/ + + ' DEGREES OF FREEDOM =',I5) + 3000 FORMAT + + (/' --- ESTIMATED BETA(J), J = 1, ..., NP:') + 4100 FORMAT + + (/' --- ESTIMATED DELTA(I,*), I = 1, ..., N:') + 4110 FORMAT + + (/' --- ESTIMATED EPSILON(I) AND DELTA(I,*), I = 1, ..., N:') + 4120 FORMAT + + (/' --- ESTIMATED EPSILON(I), I = 1, ..., N:') + 4130 FORMAT(5X,I5,1P,5D16.8) + 4200 FORMAT + + (/' --- ESTIMATED EPSILON(I,',I3,'), I = 1, ..., N:') + 4300 FORMAT + + (/' --- ESTIMATED DELTA(I,',I3,'), I = 1, ..., N:') + 7100 FORMAT + + (/' INDEX VALUE'/) + 7200 FORMAT + + (/' INDEX VALUE -------------->'/) + 7300 FORMAT + + (/' BETA S.D. BETA', + + ' ---- 95% CONFIDENCE INTERVAL ----'/) + 7310 FORMAT + + (/' N.B. STANDARD ERRORS AND CONFIDENCE INTERVALS ARE', + + ' COMPUTED USING'/ + + ' DERIVATIVES CALCULATED AT THE BEGINNING', + + ' OF THE LAST ITERATION,'/ + + ' AND NOT USING DERIVATIVES RE-EVALUATED AT THE', + + ' FINAL SOLUTION.') + 7410 FORMAT + + (/' N.B. THE STANDARD ERRORS OF THE ESTIMATED BETAS WERE', + + ' NOT COMPUTED BECAUSE'/ + + ' THE DERIVATIVES WERE NOT AVAILABLE. EITHER MAXIT', + + ' IS 0 AND THE THIRD'/ + + ' DIGIT OF JOB IS GREATER THAN 1, OR THE MOST', + + ' RECENTLY TRIED VALUES OF'/ + + ' BETA AND/OR X+DELTA WERE IDENTIFIED AS', + + ' UNACCEPTABLE BY USER SUPPLIED'/ + + ' SUBROUTINE FCN.') + 7420 FORMAT + + (/' N.B. THE STANDARD ERRORS OF THE ESTIMATED BETAS WERE', + + ' NOT COMPUTED.'/ + + ' (SEE INFO ABOVE.)') + 7500 FORMAT + + (/' BETA STATUS') + 8100 FORMAT + + (11X,I5,1P,D16.8) + 8200 FORMAT + + (3X,I5,' TO',I5,1P,7D16.8) + 8400 FORMAT + + (3X,I5,1X,1P,D16.8,3X,D12.4,3X,D16.8,1X,'TO',D16.8) + 8500 FORMAT + + (3X,I5,1X,1P,D16.8,6X,'ESTIMATED') + 8600 FORMAT + + (3X,I5,1X,1P,D16.8,6X,' FIXED') + 8700 FORMAT + + (3X,I5,1X,1P,D16.8,6X,' DROPPED') + 8800 FORMAT + + (/' N.B. NO PARAMETERS WERE FIXED BY THE USER OR', + + ' DROPPED AT THE LAST'/ + + ' ITERATION BECAUSE THEY CAUSED THE MODEL TO BE', + + ' RANK DEFICIENT.') + 8900 FORMAT + + (/' N.B. NO CHANGE WAS MADE TO THE USER SUPPLIED PARAMETER', + + ' VALUES BECAUSE'/ + + ' MAXIT=0.') + 9110 FORMAT + + ('(/'' I'',', + + I2,'('' DELTA(I,'',I1,'')'')/)') + 9120 FORMAT + + ('(/'' I'',', + + I2,'('' EPSILON(I,'',I1,'')''),', + + I2,'('' DELTA(I,'',I1,'')'')/)') + 9130 FORMAT + + ('(/'' I'',', + + I2,'('' EPSILON(I,'',I1,'')'')/)') + + END +*DODPCR + SUBROUTINE DODPCR + + (IPR,LUNRPT, + + HEAD,PRTPEN,FSTITR,DIDVCV,IFLAG, + + N,M,NP,NQ,NPP,NNZW, + + MSGB,MSGD, BETA,Y,LDY,X,LDX,DELTA, + + WE,LDWE,LD2WE,WD,LDWD,LD2WD, + + IFIXB,IFIXX,LDIFX, + + SSF,TT,LDTT,STPB,STPD,LDSTPD, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS,RVAR,IDF,SDBETA, + + NITER,NFEV,NJEV,ACTRED,PRERED, + + TAU,PNORM,ALPHA,F,RCOND,IRANK,INFO,ISTOP) +C***BEGIN PROLOGUE DODPCR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE COMPUTATION REPORTS +C***END PROLOGUE DODPCR + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ACTRED,ALPHA,PARTOL,PNORM,PRERED,RCOND,RVAR, + + SSTOL,TAU,TAUFAC + INTEGER + + IDF,IFLAG,INFO,IPR,IRANK,ISTOP,JOB,LDIFX,LDSTPD,LDTT,LDWD,LDWE, + + LDX,LDY,LD2WD,LD2WE,LUNRPT,M,MAXIT,N,NETA,NFEV, + + NITER,NJEV,NNZW,NP,NPP,NQ + LOGICAL + + DIDVCV,FSTITR,HEAD,PRTPEN + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),DELTA(N,M),F(N,NQ),SDBETA(NP),SSF(NP), + + STPB(NP),STPD(LDSTPD,M),TT(LDTT,M), + + WD(LDWD,LD2WD,M),WE(LDWE,LD2WE,NQ),WSS(3),X(LDX,M),Y(LDY,NQ) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M),MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...LOCAL SCALARS + DOUBLE PRECISION + + PNLTY + LOGICAL + + ANAJAC,CDJAC,CHKJAC,DOVCV,IMPLCT,INITD,ISODR,REDOJ,RESTRT + CHARACTER TYP*3 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DFLAGS,DODPC1,DODPC2,DODPC3,DODPHD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRED: THE ACTUAL RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C ANAJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY FINITE DIFFERENCES (ANAJAC=FALSE) OR NOT (ANAJAC=TRUE). +C BETA: THE FUNCTION PARAMETERS. +C CDJAC: THE VARIABLE DESIGNATING WHETHER THE JACOBIANS ARE COMPUTED +C BY CENTRAL DIFFERENCES (CDJAC=TRUE) OR BY FORWARD +C DIFFERENCES (CDJAC=FALSE). +C CHKJAC: THE VARIABLE DESIGNATING WHETHER THE USER SUPPLIED +C JACOBIANS ARE TO BE CHECKED (CHKJAC=TRUE) OR NOT +C (CHKJAC=FALSE). +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DIDVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX WAS +C COMPUTED (DIDVCV=TRUE) OR NOT (DIDVCV=FALSE). +C DOVCV: THE VARIABLE DESIGNATING WHETHER THE COVARIANCE MATRIX IS +C TO BE COMPUTED (DOVCV=TRUE) OR NOT (DOVCV=FALSE). +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FSTITR: THE VARIABLE DESIGNATING WHETHER THIS IS THE FIRST +C ITERATION (FSTITR=TRUE) OR NOT (FSTITR=FALSE). +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=TRUE) OR NOT (HEAD=FALSE). +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFLAG: THE VARIABLE DESIGNATING WHAT IS TO BE PRINTED. +C IMPLCT: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY +C IMPLICIT ODR (IMPLCT=TRUE) OR EXPLICIT ODR (IMPLCT=FALSE). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C INITD: THE VARIABLE DESIGNATING WHETHER DELTA IS INITIALIZED TO +C ZERO (INITD=TRUE) OR TO THE VALUES IN THE FIRST N BY M +C ELEMENTS OF ARRAY WORK (INITD=FALSE). +C IPR: THE VALUE INDICATING THE REPORT TO BE PRINTED. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C JOB: THE VARIABLE CONTROLING PROBLEM INITIALIZATION AND +C COMPUTATIONAL METHOD. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LUNRPT: THE LOGICAL UNIT NUMBER FOR COMPUTATION REPORTS. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF ACCURATE DIGITS IN THE FUNCTION RESULTS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NITER: THE NUMBER OF ITERATIONS. +C NJEV: THE NUMBER OF JACOBIAN EVALUATIONS. +C NNZW: THE NUMBER OF NONZERO WEIGHTED OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C PARTOL: THE PARAMETER CONVERGENCE STOPPING TOLERANCE. +C PNLTY: THE PENALTY PARAMETER FOR AN IMPLICIT MODEL. +C PNORM: THE NORM OF THE SCALED ESTIMATED PARAMETERS. +C PRERED: THE PREDICTED RELATIVE REDUCTION IN THE SUM-OF-SQUARES. +C PRTPEN: THE VARIABLE DESIGNATING WHETHER THE PENALTY PARAMETER IS +C TO BE PRINTED IN THE ITERATION REPORT (PRTPEN=TRUE) OR NOT +C (PRTPEN=FALSE). +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION NUMBER OF TFJACB. +C REDOJ: THE VARIABLE DESIGNATING WHETHER THE JACOBIAN MATRIX IS TO +C BE RECOMPUTED FOR THE COMPUTATION OF THE COVARIANCE MATRIX +C (REDOJ=TRUE) OR NOT (REDOJ=FALSE). +C RESTRT: THE VARIABLE DESIGNATING WHETHER THE CALL IS A RESTART +C (RESTRT=TRUE) OR NOT (RESTRT=FALSE). +C RVAR: THE RESIDUAL VARIANCE. +C SDBETA: THE STANDARD DEVIATIONS OF THE ESTIMATED BETA'S. +C SSF: THE SCALING VALUES FOR BETA. +C SSTOL: THE SUM-OF-SQUARES CONVERGENCE STOPPING TOLERANCE. +C STPB: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO BETA. +C STPD: THE RELATIVE STEP FOR COMPUTING FINITE DIFFERENCE +C DERIVATIVES WITH RESPECT TO DELTA. +C TAU: THE TRUST REGION DIAMETER. +C TAUFAC: THE FACTOR USED TO COMPUTE THE INITIAL TRUST REGION +C DIAMETER. +C TT: THE SCALING VALUES FOR DELTA. +C TYP: THE CHARACTER*3 STRING "ODR" OR "OLS". +C WE: THE EPSILON WEIGHTS. +C WD: THE DELTA WEIGHTS. +C WSS: THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS AND DELTAS, +C THE SUM-OF-SQUARES OF THE WEIGHTED DELTAS, AND +C THE SUM-OF-SQUARES OF THE WEIGHTED EPSILONS. +C X: THE EXPLANATORY VARIABLE. +C Y: THE DEPENDENT VARIABLE. UNUSED WHEN THE MODEL IS IMPLICIT. + + +C***FIRST EXECUTABLE STATEMENT DODPCR + + + CALL DFLAGS(JOB,RESTRT,INITD,DOVCV,REDOJ, + + ANAJAC,CDJAC,CHKJAC,ISODR,IMPLCT) + PNLTY = ABS(WE(1,1,1)) + + IF (HEAD) THEN + CALL DODPHD(HEAD,LUNRPT) + END IF + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + +C PRINT INITIAL SUMMARY + + IF (IFLAG.EQ.1) THEN + WRITE (LUNRPT,1200) TYP + CALL DODPC1 + + (IPR,LUNRPT, + + ANAJAC,CDJAC,CHKJAC,INITD,RESTRT,ISODR,IMPLCT,DOVCV,REDOJ, + + MSGB(1),MSGB(2),MSGD(1),MSGD(2), + + N,M,NP,NQ,NPP,NNZW, + + X,LDX,IFIXX,LDIFX,DELTA,WD,LDWD,LD2WD,TT,LDTT,STPD,LDSTPD, + + Y,LDY,WE,LDWE,LD2WE,PNLTY, + + BETA,IFIXB,SSF,STPB, + + JOB,NETA,TAUFAC,SSTOL,PARTOL,MAXIT, + + WSS(1),WSS(2),WSS(3)) + +C PRINT ITERATION REPORTS + + ELSE IF (IFLAG.EQ.2) THEN + + IF (FSTITR) THEN + WRITE (LUNRPT,1300) TYP + END IF + CALL DODPC2 + + (IPR,LUNRPT, FSTITR,IMPLCT,PRTPEN, + + PNLTY, + + NITER,NFEV,WSS(1),ACTRED,PRERED,ALPHA,TAU,PNORM,NP,BETA) + +C PRINT FINAL SUMMARY + + ELSE IF (IFLAG.EQ.3) THEN + + WRITE (LUNRPT,1400) TYP + CALL DODPC3 + + (IPR,LUNRPT, + + ISODR,IMPLCT,DIDVCV,DOVCV,REDOJ,ANAJAC, + + N,M,NP,NQ,NPP, + + INFO,NITER,NFEV,NJEV,IRANK,RCOND,ISTOP, + + WSS(1),WSS(2),WSS(3),PNLTY,RVAR,IDF, + + BETA,SDBETA,IFIXB,F,DELTA) + END IF + + RETURN + +C FORMAT STATEMENTS + + 1200 FORMAT + + (/' *** INITIAL SUMMARY FOR FIT BY METHOD OF ',A3, ' ***') + 1300 FORMAT + + (/' *** ITERATION REPORTS FOR FIT BY METHOD OF ',A3, ' ***') + 1400 FORMAT + + (/' *** FINAL SUMMARY FOR FIT BY METHOD OF ',A3, ' ***') + + END +*DODPE1 + SUBROUTINE DODPE1 + + (UNIT,D1,D2,D3,D4,D5, + + N,M,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN) +C***BEGIN PROLOGUE DODPE1 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ERROR REPORTS +C***END PROLOGUE DODPE1 + +C...SCALAR ARGUMENTS + INTEGER + + D1,D2,D3,D4,D5,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE, + + LIWKMN,LWKMN,M,N,NQ,UNIT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D1: THE 1ST DIGIT (FROM THE LEFT) OF INFO. +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C D4: THE 4TH DIGIT (FROM THE LEFT) OF INFO. +C D5: THE 5TH DIGIT (FROM THE LEFT) OF INFO. +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. + + +C***FIRST EXECUTABLE STATEMENT DODPE1 + + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN PROBLEM SPECIFICATION +C PARAMETERS + + IF (D1.EQ.1) THEN + IF (D2.NE.0) THEN + WRITE(UNIT,1100) + END IF + IF (D3.NE.0) THEN + WRITE(UNIT,1200) + END IF + IF (D4.NE.0) THEN + WRITE(UNIT,1300) + END IF + IF (D5.NE.0) THEN + WRITE(UNIT,1400) + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DIMENSION SPECIFICATION +C PARAMETERS + + ELSE IF (D1.EQ.2) THEN + + IF (D2.NE.0) THEN + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + WRITE(UNIT,2110) + END IF + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + WRITE(UNIT,2120) + END IF + END IF + + IF (D3.NE.0) THEN + IF (D3.EQ.1 .OR. D3.EQ.3 .OR. D3.EQ.5 .OR. D3.EQ.7) THEN + WRITE(UNIT,2210) + END IF + IF (D3.EQ.2 .OR. D3.EQ.3 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2220) + END IF + IF (D3.EQ.4 .OR. D3.EQ.5 .OR. D3.EQ.6 .OR. D3.EQ.7) THEN + WRITE(UNIT,2230) + END IF + END IF + + IF (D4.NE.0) THEN + IF (D4.EQ.1 .OR. D4.EQ.3) THEN + WRITE(UNIT,2310) + END IF + IF (D4.EQ.2 .OR. D4.EQ.3) THEN + WRITE(UNIT,2320) + END IF + END IF + + IF (D5.NE.0) THEN + IF (D5.EQ.1 .OR. D5.EQ.3) THEN + WRITE(UNIT,2410) LWKMN + END IF + IF (D5.EQ.2 .OR. D5.EQ.3) THEN + WRITE(UNIT,2420) LIWKMN + END IF + END IF + + ELSE IF (D1.EQ.3) THEN + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN SCALE VALUES + + IF (D2.NE.0) THEN + IF (D2.EQ.1 .OR. D2.EQ.3) THEN + IF (LDSCLD.GE.N) THEN + WRITE(UNIT,3110) + ELSE + WRITE(UNIT,3120) + END IF + END IF + IF (D2.EQ.2 .OR. D2.EQ.3) THEN + WRITE(UNIT,3130) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DERIVATIVE STEP VALUES + + IF (D3.NE.0) THEN + IF (D3.EQ.1 .OR. D3.EQ.3) THEN + IF (LDSTPD.GE.N) THEN + WRITE(UNIT,3210) + ELSE + WRITE(UNIT,3220) + END IF + END IF + IF (D3.EQ.2 .OR. D3.EQ.3) THEN + WRITE(UNIT,3230) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN OBSERVATIONAL ERROR WEIGHTS + + IF (D4.NE.0) THEN + IF (D4.EQ.1) THEN + IF (LDWE.GE.N) THEN + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3310) + ELSE + WRITE(UNIT,3320) + END IF + ELSE + IF (LD2WE.GE.NQ) THEN + WRITE(UNIT,3410) + ELSE + WRITE(UNIT,3420) + END IF + END IF + END IF + IF (D4.EQ.2) THEN + WRITE(UNIT,3500) + END IF + END IF + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN DELTA WEIGHTS + + IF (D5.NE.0) THEN + IF (LDWD.GE.N) THEN + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4310) + ELSE + WRITE(UNIT,4320) + END IF + ELSE + IF (LD2WD.GE.M) THEN + WRITE(UNIT,4410) + ELSE + WRITE(UNIT,4420) + END IF + END IF + END IF + + END IF + +C FORMAT STATEMENTS + + 1100 FORMAT + + (/' ERROR : N IS LESS THAN ONE.') + 1200 FORMAT + + (/' ERROR : M IS LESS THAN ONE.') + 1300 FORMAT + + (/' ERROR : NP IS LESS THAN ONE'/ + + ' OR NP IS GREATER THAN N.') + 1400 FORMAT + + (/' ERROR : NQ IS LESS THAN ONE.') + 2110 FORMAT + + (/' ERROR : LDX IS LESS THAN N.') + 2120 FORMAT + + (/' ERROR : LDY IS LESS THAN N.') + 2210 FORMAT + + (/' ERROR : LDIFX IS LESS THAN N'/ + + ' AND LDIFX IS NOT EQUAL TO ONE.') + 2220 FORMAT + + (/' ERROR : LDSCLD IS LESS THAN N'/ + + ' AND LDSCLD IS NOT EQUAL TO ONE.') + 2230 FORMAT + + (/' ERROR : LDSTPD IS LESS THAN N'/ + + ' AND LDSTPD IS NOT EQUAL TO ONE.') + 2310 FORMAT + + (/' ERROR : LDWE IS LESS THAN N'/ + + ' AND LDWE IS NOT EQUAL TO ONE OR'/ + + ' OR'/ + + ' LD2WE IS LESS THAN NQ'/ + + ' AND LD2WE IS NOT EQUAL TO ONE.') + 2320 FORMAT + + (/' ERROR : LDWD IS LESS THAN N'/ + + ' AND LDWD IS NOT EQUAL TO ONE.') + 2410 FORMAT + + (/' ERROR : LWORK IS LESS THAN ',I7, ','/ + + ' THE SMALLEST ACCEPTABLE DIMENSION OF ARRAY WORK.') + 2420 FORMAT + + (/' ERROR : LIWORK IS LESS THAN ',I7, ','/ + + ' THE SMALLEST ACCEPTABLE DIMENSION OF ARRAY', + + ' IWORK.') + 3110 FORMAT + + (/' ERROR : SCLD(I,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME I = 1, ..., N AND J = 1, ..., M.'// + + ' WHEN SCLD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSCLD IS GREATER THAN OR EQUAL TO N THEN'/ + + ' EACH OF THE N BY M ELEMENTS OF'/ + + ' SCLD MUST BE GREATER THAN ZERO.') + 3120 FORMAT + + (/' ERROR : SCLD(1,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME J = 1, ..., M.'// + + ' WHEN SCLD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSCLD IS EQUAL TO ONE THEN'/ + + ' EACH OF THE 1 BY M ELEMENTS OF'/ + + ' SCLD MUST BE GREATER THAN ZERO.') + 3130 FORMAT + + (/' ERROR : SCLB(K) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME K = 1, ..., NP.'// + + ' ALL NP ELEMENTS OF', + + ' SCLB MUST BE GREATER THAN ZERO.') + 3210 FORMAT + + (/' ERROR : STPD(I,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME I = 1, ..., N AND J = 1, ..., M.'// + + ' WHEN STPD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSTPD IS GREATER THAN OR EQUAL TO N THEN'/ + + ' EACH OF THE N BY M ELEMENTS OF'/ + + ' STPD MUST BE GREATER THAN ZERO.') + 3220 FORMAT + + (/' ERROR : STPD(1,J) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME J = 1, ..., M.'// + + ' WHEN STPD(1,1) IS GREATER THAN ZERO'/ + + ' AND LDSTPD IS EQUAL TO ONE THEN'/ + + ' EACH OF THE 1 BY M ELEMENTS OF'/ + + ' STPD MUST BE GREATER THAN ZERO.') + 3230 FORMAT + + (/' ERROR : STPB(K) IS LESS THAN OR EQUAL TO ZERO'/ + + ' FOR SOME K = 1, ..., NP.'// + + ' ALL NP ELEMENTS OF', + + ' STPB MUST BE GREATER THAN ZERO.') + 3310 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (NQ BY NQ) ARRAYS STARTING'/ + + ' IN WE(I,1,1), I = 1, ..., N, IS NOT POSITIVE'/ + + ' SEMIDEFINITE. WHEN WE(1,1,1) IS GREATER THAN'/ + + ' OR EQUAL TO ZERO, AND LDWE IS GREATER THAN OR'/ + + ' EQUAL TO N, AND LD2WE IS GREATER THAN OR EQUAL'/ + + ' TO NQ, THEN EACH OF THE (NQ BY NQ) ARRAYS IN WE'/ + + ' MUST BE POSITIVE SEMIDEFINITE.') + 3320 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (1 BY NQ) ARRAYS STARTING'/ + + ' IN WE(I,1,1), I = 1, ..., N, HAS A NEGATIVE'/ + + ' ELEMENT. WHEN WE(1,1,1) IS GREATER THAN OR'/ + + ' EQUAL TO ZERO, AND LDWE IS GREATER THAN OR EQUAL'/ + + ' TO N, AND LD2WE IS EQUAL TO 1, THEN EACH OF THE'/ + + ' (1 BY NQ) ARRAYS IN WE MUST HAVE ONLY NON-'/ + + ' NEGATIVE ELEMENTS.') + 3410 FORMAT + + (/' ERROR : THE (NQ BY NQ) ARRAY STARTING IN WE(1,1,1) IS'/ + + ' NOT POSITIVE SEMIDEFINITE. WHEN WE(1,1,1) IS'/ + + ' GREATER THAN OR EQUAL TO ZERO, AND LDWE IS EQUAL'/ + + ' TO 1, AND LD2WE IS GREATER THAN OR EQUAL TO NQ,'/ + + ' THEN THE (NQ BY NQ) ARRAY IN WE MUST BE POSITIVE'/ + + ' SEMIDEFINITE.') + 3420 FORMAT + + (/' ERROR : THE (1 BY NQ) ARRAY STARTING IN WE(1,1,1) HAS'/ + + ' A NEGATIVE ELEMENT. WHEN WE(1,1,1) IS GREATER'/ + + ' THAN OR EQUAL TO ZERO, AND LDWE IS EQUAL TO 1,'/ + + ' AND LD2WE IS EQUAL TO 1, THEN THE (1 BY NQ)'/ + + ' ARRAY IN WE MUST HAVE ONLY NONNEGATIVE ELEMENTS.') + 3500 FORMAT + + (/' ERROR : THE NUMBER OF NONZERO ARRAYS IN ARRAY WE IS'/ + + ' LESS THAN NP.') + 4310 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (M BY M) ARRAYS STARTING'/ + + ' IN WD(I,1,1), I = 1, ..., N, IS NOT POSITIVE'/ + + ' DEFINITE. WHEN WD(1,1,1) IS GREATER THAN ZERO,'/ + + ' AND LDWD IS GREATER THAN OR EQUAL TO N, AND'/ + + ' LD2WD IS GREATER THAN OR EQUAL TO M, THEN EACH'/ + + ' OF THE (M BY M) ARRAYS IN WD MUST BE POSITIVE'/ + + ' DEFINITE.') + 4320 FORMAT + + (/' ERROR : AT LEAST ONE OF THE (1 BY M) ARRAYS STARTING'/ + + ' IN WD(I,1,1), I = 1, ..., N, HAS A NONPOSITIVE'/ + + ' ELEMENT. WHEN WD(1,1,1) IS GREATER THAN ZERO,'/ + + ' AND LDWD IS GREATER THAN OR EQUAL TO N, AND'/ + + ' LD2WD IS EQUAL TO 1, THEN EACH OF THE (1 BY M)'/ + + ' ARRAYS IN WD MUST HAVE ONLY POSITIVE ELEMENTS.') + 4410 FORMAT + + (/' ERROR : THE (M BY M) ARRAY STARTING IN WD(1,1,1) IS'/ + + ' NOT POSITIVE DEFINITE. WHEN WD(1,1,1) IS'/ + + ' GREATER THAN ZERO, AND LDWD IS EQUAL TO 1, AND'/ + + ' LD2WD IS GREATER THAN OR EQUAL TO M, THEN THE'/ + + ' (M BY M) ARRAY IN WD MUST BE POSITIVE DEFINITE.') + 4420 FORMAT + + (/' ERROR : THE (1 BY M) ARRAY STARTING IN WD(1,1,1) HAS A'/ + + ' NONPOSITIVE ELEMENT. WHEN WD(1,1,1) IS GREATER'/ + + ' THAN ZERO, AND LDWD IS EQUAL TO 1, AND LD2WD IS'/ + + ' EQUAL TO 1, THEN THE (1 BY M) ARRAY IN WD MUST'/ + + ' HAVE ONLY POSITIVE ELEMENTS.') + END +*DODPE2 + SUBROUTINE DODPE2 + + (UNIT, + + N,M,NP,NQ, + + FJACB,FJACD, + + DIFF,MSGB1,MSGB,ISODR,MSGD1,MSGD, + + XPLUSD,NROW,NETA,NTOL) +C***BEGIN PROLOGUE DODPE2 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE GENERATE THE DERIVATIVE CHECKING REPORT +C***END PROLOGUE DODPE2 + +C...SCALAR ARGUMENTS + INTEGER + + M,MSGB1,MSGD1,N,NETA,NP,NQ,NROW,NTOL,UNIT + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + + MSGB(NQ,NP),MSGD(NQ,M) + +C...LOCAL SCALARS + INTEGER + + I,J,K,L + CHARACTER FLAG*1,TYP*3 + +C...LOCAL ARRAYS + LOGICAL + + FTNOTE(0:7) + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FLAG: THE CHARACTER STRING INDICATING HIGHLY QUESTIONABLE RESULTS. +C FTNOTE: THE ARRAY CONTROLING FOOTNOTES. +C I: AN INDEX VARIABLE. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C J: AN INDEX VARIABLE. +C K: AN INDEX VARIABLE. +C L: AN INDEX VARIABLE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGB1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C MSGD1: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C FINITE DIFFERENCE AND THE USER SUPPLIED DERIVATIVES. +C TYP: THE CHARACTER STRING INDICATING SOLUTION TYPE, ODR OR OLS. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODPE2 + + +C SET UP FOR FOOTNOTES + + DO 10 I=0,7 + FTNOTE(I) = .FALSE. + 10 CONTINUE + + DO 40 L=1,NQ + IF (MSGB1.GE.1) THEN + DO 20 I=1,NP + IF (MSGB(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGB(L,I)) = .TRUE. + END IF + 20 CONTINUE + END IF + + IF (MSGD1.GE.1) THEN + DO 30 I=1,M + IF (MSGD(L,I).GE.1) THEN + FTNOTE(0) = .TRUE. + FTNOTE(MSGD(L,I)) = .TRUE. + END IF + 30 CONTINUE + END IF + 40 CONTINUE + +C PRINT REPORT + + IF (ISODR) THEN + TYP = 'ODR' + ELSE + TYP = 'OLS' + END IF + WRITE (UNIT,1000) TYP + + DO 70 L=1,NQ + + WRITE (UNIT,2100) L,NROW + WRITE (UNIT,2200) + + DO 50 I=1,NP + K = MSGB(L,I) + IF (K.GE.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,3100) I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,3200) I,FJACB(NROW,I,L),DIFF(L,I),FLAG + ELSE IF (K.GE.1) THEN + WRITE (UNIT,3300) I,FJACB(NROW,I,L),DIFF(L,I),FLAG,K + END IF + 50 CONTINUE + IF (ISODR) THEN + DO 60 I=1,M + K = MSGD(L,I) + IF (K.GE.7) THEN + FLAG = '*' + ELSE + FLAG = ' ' + END IF + IF (K.LE.-1) THEN + WRITE (UNIT,4100) NROW,I + ELSE IF (K.EQ.0) THEN + WRITE (UNIT,4200) NROW,I, + + FJACD(NROW,I,L),DIFF(L,NP+I),FLAG + ELSE IF (K.GE.1) THEN + WRITE (UNIT,4300) NROW,I, + + FJACD(NROW,I,L),DIFF(L,NP+I),FLAG,K + END IF + 60 CONTINUE + END IF + 70 CONTINUE + +C PRINT FOOTNOTES + + IF (FTNOTE(0)) THEN + + WRITE (UNIT,5000) + IF (FTNOTE(1)) WRITE (UNIT,5100) + IF (FTNOTE(2)) WRITE (UNIT,5200) + IF (FTNOTE(3)) WRITE (UNIT,5300) + IF (FTNOTE(4)) WRITE (UNIT,5400) + IF (FTNOTE(5)) WRITE (UNIT,5500) + IF (FTNOTE(6)) WRITE (UNIT,5600) + IF (FTNOTE(7)) WRITE (UNIT,5700) + END IF + + IF (NETA.LT.0) THEN + WRITE (UNIT,6000) -NETA + ELSE + WRITE (UNIT,6100) NETA + END IF + WRITE (UNIT,7000) NTOL + +C PRINT OUT ROW OF EXPLANATORY VARIABLE WHICH WAS CHECKED. + + WRITE (UNIT,8100) NROW + + DO 80 J=1,M + WRITE (UNIT,8110) NROW,J,XPLUSD(NROW,J) + 80 CONTINUE + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT + + (//' *** DERIVATIVE CHECKING REPORT FOR FIT BY METHOD OF ',A3, + + ' ***'/) + 2100 FORMAT (/' FOR RESPONSE ',I2,' OF OBSERVATION ', I5/) + 2200 FORMAT (' ',' USER', + + ' ',' '/ + + ' ',' SUPPLIED', + + ' RELATIVE',' DERIVATIVE '/ + + ' DERIVATIVE WRT',' VALUE', + + ' DIFFERENCE',' ASSESSMENT '/) + 3100 FORMAT (' BETA(',I3,')', ' --- ', + + ' --- ',' UNCHECKED') + 3200 FORMAT (' BETA(',I3,')', 1P,2D13.2,3X,A1, + + 'VERIFIED') + 3300 FORMAT (' BETA(',I3,')', 1P,2D13.2,3X,A1, + + 'QUESTIONABLE (SEE NOTE ',I1,')') + 4100 FORMAT (' DELTA(',I2,',',I2,')', ' --- ', + + ' --- ',' UNCHECKED') + 4200 FORMAT (' DELTA(',I2,',',I2,')', 1P,2D13.2,3X,A1, + + 'VERIFIED') + 4300 FORMAT (' DELTA(',I2,',',I2,')', 1P,2D13.2,3X,A1, + + 'QUESTIONABLE (SEE NOTE ',I1,')') + 5000 FORMAT + + (/' NOTES:') + 5100 FORMAT + + (/' (1) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' AGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE BOTH ARE ZERO.') + 5200 FORMAT + + (/' (2) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' AGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE ONE IS', + + ' IDENTICALLY ZERO'/ + + ' AND THE OTHER IS ONLY APPROXIMATELY ZERO.') + 5300 FORMAT + + (/' (3) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' RESULTS ARE QUESTIONABLE BECAUSE ONE IS', + + ' IDENTICALLY ZERO'/ + + ' AND THE OTHER IS NOT.') + 5400 FORMAT + + (/' (4) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' FINITE DIFFERENCE DERIVATIVE IS QUESTIONABLE', + + ' BECAUSE EITHER'/ + + ' THE RATIO OF RELATIVE CURVATURE TO RELATIVE', + + ' SLOPE IS TOO HIGH'/ + + ' OR THE SCALE IS WRONG.') + 5500 FORMAT + + (/' (5) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' FINITE DIFFERENCE DERIVATIVE IS QUESTIONABLE', + + ' BECAUSE THE'/ + + ' RATIO OF RELATIVE CURVATURE TO RELATIVE SLOPE IS', + + ' TOO HIGH.') + 5600 FORMAT + + (/' (6) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, BUT'/ + + ' HAVE AT LEAST 2 DIGITS IN COMMON.') + 5700 FORMAT + + (/' (7) USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVES', + + ' DISAGREE, AND'/ + + ' HAVE FEWER THAN 2 DIGITS IN COMMON. DERIVATIVE', + + ' CHECKING MUST'/ + + ' BE TURNED OFF IN ORDER TO PROCEED.') + 6000 FORMAT + + (/' NUMBER OF RELIABLE DIGITS IN FUNCTION RESULTS ', + + I5/ + + ' (ESTIMATED BY ODRPACK)') + 6100 FORMAT + + (/' NUMBER OF RELIABLE DIGITS IN FUNCTION RESULTS ', + + I5/ + + ' (SUPPLIED BY USER)') + 7000 FORMAT + + (/' NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN '/ + + ' USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVE FOR '/ + + ' USER SUPPLIED DERIVATIVE TO BE CONSIDERED VERIFIED ', + + I5) + 8100 FORMAT + + (/' ROW NUMBER AT WHICH DERIVATIVES WERE CHECKED ', + + I5// + + ' -VALUES OF THE EXPLANATORY VARIABLES AT THIS ROW'/) + 8110 FORMAT + + (10X,'X(',I2,',',I2,')',1X,1P,3D16.8) + END +*DODPE3 + SUBROUTINE DODPE3 + + (UNIT,D2,D3) +C***BEGIN PROLOGUE DODPE3 +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ERROR REPORTS INDICATING THAT COMPUTATIONS WERE +C STOPPED IN USER SUPPLIED SUBROUTINES FCN +C***END PROLOGUE DODPE3 + +C...SCALAR ARGUMENTS + INTEGER + + D2,D3,UNIT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C UNIT: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. + + +C***FIRST EXECUTABLE STATEMENT DODPE3 + + +C PRINT APPROPRIATE MESSAGES TO INDICATE WHERE COMPUTATIONS WERE +C STOPPED + + IF (D2.EQ.2) THEN + WRITE(UNIT,1100) + ELSE IF (D2.EQ.3) THEN + WRITE(UNIT,1200) + ELSE IF (D2.EQ.4) THEN + WRITE(UNIT,1300) + END IF + IF (D3.EQ.2) THEN + WRITE(UNIT,1400) + END IF + +C FORMAT STATEMENTS + + 1100 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN WHEN INVOKED USING THE'/ + + ' INITIAL ESTIMATES OF BETA AND DELTA SUPPLIED BY THE '/ + + ' USER. THE INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW '/ + + ' PROPER EVALUATION OF SUBROUTINE FCN BEFORE THE '/ + + ' REGRESSION PROCEDURE CAN CONTINUE.') + 1200 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN. THIS OCCURRED DURING'/ + + ' THE COMPUTATION OF THE NUMBER OF RELIABLE DIGITS IN THE '/ + + ' PREDICTED VALUES (F) RETURNED FROM SUBROUTINE FCN, INDI-'/ + + ' CATING THAT CHANGES IN THE INITIAL ESTIMATES OF BETA(K),'/ + + ' K=1,NP, AS SMALL AS 2*BETA(K)*SQRT(MACHINE PRECISION), '/ + + ' WHERE MACHINE PRECISION IS DEFINED AS THE SMALLEST VALUE'/ + + ' E SUCH THAT 1+E>1 ON THE COMPUTER BEING USED, PREVENT '/ + + ' SUBROUTINE FCN FROM BEING PROPERLY EVALUATED. THE '/ + + ' INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER '/ + + ' EVALUATION OF SUBROUTINE FCN DURING THESE COMPUTATIONS '/ + + ' BEFORE THE REGRESSION PROCEDURE CAN CONTINUE.') + 1300 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN. THIS OCCURRED DURING'/ + + ' THE DERIVATIVE CHECKING PROCEDURE, INDICATING THAT '/ + + ' CHANGES IN THE INITIAL ESTIMATES OF BETA(K), K=1,NP, AS '/ + + ' SMALL AS MAX[BETA(K),1/SCLB(K)]*10**(-NETA/2), AND/OR '/ + + ' OF DELTA(I,J), I=1,N AND J=1,M, AS SMALL AS '/ + + ' MAX[DELTA(I,J),1/SCLD(I,J)]*10**(-NETA/2), WHERE NETA '/ + + ' IS DEFINED TO BE THE NUMBER OF RELIABLE DIGITS IN '/ + + ' PREDICTED VALUES (F) RETURNED FROM SUBROUTINE FCN, '/ + + ' PREVENT SUBROUTINE FCN FROM BEING PROPERLY EVALUATED. '/ + + ' THE INITIAL ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER '/ + + ' EVALUATION OF SUBROUTINE FCN DURING THESE COMPUTATIONS '/ + + ' BEFORE THE REGRESSION PROCEDURE CAN CONTINUE.') + 1400 FORMAT + + (//' VARIABLE ISTOP HAS BEEN RETURNED WITH A NONZERO VALUE '/ + + ' FROM USER SUPPLIED SUBROUTINE FCN WHEN INVOKED FOR '/ + + ' DERIVATIVE EVALUATIONS USING THE INITIAL ESTIMATES OF '/ + + ' BETA AND DELTA SUPPLIED BY THE USER. THE INITIAL '/ + + ' ESTIMATES MUST BE ADJUSTED TO ALLOW PROPER EVALUATION '/ + + ' OF SUBROUTINE FCN BEFORE THE REGRESSION PROCEDURE CAN '/ + + ' CONTINUE.') + END +*DODPER + SUBROUTINE DODPER + + (INFO,LUNERR,SHORT, + + N,M,NP,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN, + + FJACB,FJACD, + + DIFF,MSGB,ISODR,MSGD, + + XPLUSD,NROW,NETA,NTOL) +C***BEGIN PROLOGUE DODPER +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DODPE1,DODPE2,DODPE3,DODPHD +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE CONTROLLING ROUTINE FOR PRINTING ERROR REPORTS +C***END PROLOGUE DODPER + +C...SCALAR ARGUMENTS + INTEGER + + INFO,LDSCLD,LDSTPD,LDWD,LDWE,LD2WD,LD2WE,LIWKMN,LUNERR,LWKMN, + + M,N,NETA,NP,NQ,NROW,NTOL + LOGICAL + + ISODR,SHORT + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DIFF(NQ,NP+M),FJACB(N,NP,NQ),FJACD(N,M,NQ),XPLUSD(N,M) + INTEGER + + MSGB(NQ*NP+1),MSGD(NQ*M+1) + +C...LOCAL SCALARS + INTEGER + + D1,D2,D3,D4,D5,UNIT + LOGICAL + + HEAD + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DODPE1,DODPE2,DODPE3,DODPHD + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C D1: THE 1ST DIGIT (FROM THE LEFT) OF INFO. +C D2: THE 2ND DIGIT (FROM THE LEFT) OF INFO. +C D3: THE 3RD DIGIT (FROM THE LEFT) OF INFO. +C D4: THE 4TH DIGIT (FROM THE LEFT) OF INFO. +C D5: THE 5TH DIGIT (FROM THE LEFT) OF INFO. +C DIFF: THE RELATIVE DIFFERENCES BETWEEN THE USER SUPPLIED AND +C FINITE DIFFERENCE DERIVATIVES FOR EACH DERIVATIVE CHECKED. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=.TRUE.) OR NOT (HEAD=.FALSE.). +C INFO: THE VARIABLE DESIGNATING WHY THE COMPUTATIONS WERE STOPPED. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=.TRUE.) OR BY OLS (ISODR=.FALSE.). +C LDSCLD: THE LEADING DIMENSION OF ARRAY SCLD. +C LDSTPD: THE LEADING DIMENSION OF ARRAY STPD. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LIWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY IWORK. +C LUNERR: THE LOGICAL UNIT NUMBER USED FOR ERROR MESSAGES. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF ARRAY WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C MSGB: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT BETA. +C MSGD: THE ERROR CHECKING RESULTS FOR THE JACOBIAN WRT DELTA. +C N: THE NUMBER OF OBSERVATIONS. +C NETA: THE NUMBER OF RELIABLE DIGITS IN THE MODEL. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE EXPLANATORY VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C NTOL: THE NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN THE +C FINITE DIFFERENCE AND THE USER SUPPLIED DERIVATIVES. +C SHORT: THE VARIABLE DESIGNATING WHETHER THE USER HAS INVOKED +C ODRPACK BY THE SHORT-CALL (SHORT=.TRUE.) OR THE LONG-CALL +C (SHORT=.FALSE.). +C UNIT: THE LOGICAL UNIT NUMBER FOR ERROR MESSAGES. +C XPLUSD: THE VALUES X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DODPER + + +C SET LOGICAL UNIT NUMBER FOR ERROR REPORT + + IF (LUNERR.EQ.0) THEN + RETURN + ELSE IF (LUNERR.LT.0) THEN + UNIT = 6 + ELSE + UNIT = LUNERR + END IF + +C PRINT HEADING + + HEAD = .TRUE. + CALL DODPHD(HEAD,UNIT) + +C EXTRACT INDIVIDUAL DIGITS FROM VARIABLE INFO + + D1 = MOD(INFO,100000)/10000 + D2 = MOD(INFO,10000)/1000 + D3 = MOD(INFO,1000)/100 + D4 = MOD(INFO,100)/10 + D5 = MOD(INFO,10) + +C PRINT APPROPRIATE ERROR MESSAGES FOR ODRPACK INVOKED STOP + + IF (D1.GE.1 .AND. D1.LE.3) THEN + +C PRINT APPROPRIATE MESSAGES FOR ERRORS IN +C PROBLEM SPECIFICATION PARAMETERS +C DIMENSION SPECIFICATION PARAMETERS +C NUMBER OF GOOD DIGITS IN X +C WEIGHTS + + CALL DODPE1(UNIT,D1,D2,D3,D4,D5, + + N,M,NQ, + + LDSCLD,LDSTPD,LDWE,LD2WE,LDWD,LD2WD, + + LWKMN,LIWKMN) + + ELSE IF ((D1.EQ.4) .OR. (MSGB(1).GE.0)) THEN + +C PRINT APPROPRIATE MESSAGES FOR DERIVATIVE CHECKING + + CALL DODPE2(UNIT, + + N,M,NP,NQ, + + FJACB,FJACD, + + DIFF,MSGB(1),MSGB(2),ISODR,MSGD(1),MSGD(2), + + XPLUSD,NROW,NETA,NTOL) + + ELSE IF (D1.EQ.5) THEN + +C PRINT APPROPRIATE ERROR MESSAGE FOR USER INVOKED STOP FROM FCN + + CALL DODPE3(UNIT,D2,D3) + + END IF + +C PRINT CORRECT FORM OF CALL STATEMENT + + IF ((D1.GE.1 .AND. D1.LE.3) .OR. + + (D1.EQ.4 .AND. (D2.EQ.2 .OR. D3.EQ.2)) .OR. + + (D1.EQ.5)) THEN + IF (SHORT) THEN + WRITE (UNIT,1100) + ELSE + WRITE (UNIT,1200) + END IF + END IF + + RETURN + +C FORMAT STATEMENTS + + 1100 FORMAT + + (//' THE CORRECT FORM OF THE CALL STATEMENT IS '// + + ' CALL DODR'/ + + ' + (FCN,'/ + + ' + N,M,NP,NQ,'/ + + ' + BETA,'/ + + ' + Y,LDY,X,LDX,'/ + + ' + WE,LDWE,LD2WE,WD,LDWD,LD2WD,'/ + + ' + JOB,'/ + + ' + IPRINT,LUNERR,LUNRPT,'/ + + ' + WORK,LWORK,IWORK,LIWORK,'/ + + ' + INFO)') + 1200 FORMAT + + (//' THE CORRECT FORM OF THE CALL STATEMENT IS '// + + ' CALL DODRC'/ + + ' + (FCN,'/ + + ' + N,M,NP,NQ,'/ + + ' + BETA,'/ + + ' + Y,LDY,X,LDX,'/ + + ' + WE,LDWE,LD2WE,WD,LDWD,LD2WD,'/ + + ' + IFIXB,IFIXX,LDIFX,'/ + + ' + JOB,NDIGIT,TAUFAC,'/ + + ' + SSTOL,PARTOL,MAXIT,'/ + + ' + IPRINT,LUNERR,LUNRPT,'/ + + ' + STPB,STPD,LDSTPD,'/ + + ' + SCLB,SCLD,LDSCLD,'/ + + ' + WORK,LWORK,IWORK,LIWORK,'/ + + ' + INFO)') + + END +*DODPHD + SUBROUTINE DODPHD + + (HEAD,UNIT) +C***BEGIN PROLOGUE DODPHD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE PRINT ODRPACK HEADING +C***END PROLOGUE DODPHD + +C...SCALAR ARGUMENTS + INTEGER + + UNIT + LOGICAL + + HEAD + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C HEAD: THE VARIABLE DESIGNATING WHETHER THE HEADING IS TO BE +C PRINTED (HEAD=.TRUE.) OR NOT (HEAD=.FALSE.). +C UNIT: THE LOGICAL UNIT NUMBER TO WHICH THE HEADING IS WRITTEN. + + +C***FIRST EXECUTABLE STATEMENT DODPHD + + + IF (HEAD) THEN + WRITE(UNIT,1000) + HEAD = .FALSE. + END IF + + RETURN + +C FORMAT STATEMENTS + + 1000 FORMAT ( + + ' ******************************************************* '/ + + ' * ODRPACK VERSION 2.01 OF 06-19-92 (DOUBLE PRECISION) * '/ + + ' ******************************************************* '/) + END +*DODSTP + SUBROUTINE DODSTP + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ALPHA,EPSFCN,ISODR, + + TFJACB,OMEGA,U,QRAUX,KPVT, + + S,T,PHI,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODSTP +C***REFER TO DODR,DODRC +C***ROUTINES CALLED IDAMAX,DCHEX,DESUBI,DFCTR,DNRM2_odr,DQRDC,DQRSL,DROT, +C DROTG,DSOLVE,DTRCO,DTRSL_odr,DVEVTR,DWGHT,DZERO +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE LOCALLY CONSTRAINED STEPS S AND T, AND PHI(ALPHA) +C***END PROLOGUE DODSTP + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + ALPHA,EPSFCN,PHI,RCOND + INTEGER + + IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ),FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SS(NP), + + T(N,M),TFJACB(N,NQ,NP),TT(LDTT,M),U(NP),WD(LDWD,LD2WD,M), + + WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M),WRK(LWRK) + INTEGER + + KPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + CO,ONE,SI,TEMP,ZERO + INTEGER + + I,IMAX,INF,IPVT,J,K,K1,K2,KP,L + LOGICAL + + ELIM,FORVCV + +C...LOCAL ARRAYS + DOUBLE PRECISION + + DUM(2) + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DNRM2_odr + INTEGER + + IDAMAX + EXTERNAL + + DNRM2_odr,IDAMAX + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCHEX,DESUBI,DFCTR,DQRDC,DQRSL,DROT,DROTG, + + DSOLVE,DTRCO,DTRSL_odr,DVEVTR,DWGHT,DZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE + + /0.0D0,1.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ALPHA: THE LEVENBERG-MARQUARDT PARAMETER. +C CO: THE COSINE FROM THE PLANE ROTATION. +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C DUM: A DUMMY ARRAY. +C ELIM: THE VARIABLE DESIGNATING WHETHER COLUMNS OF THE JACOBIAN +C WRT BETA HAVE BEEN ELIMINATED (ELIM=TRUE) OR NOT +C (ELIM=FALSE). +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER THIS SUBROUTINE WAS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IMAX: THE INDEX OF THE ELEMENT OF U HAVING THE LARGEST ABSOLUTE +C VALUE. +C INF: THE RETURN CODE FROM LINPACK ROUTINES. +C IPVT: THE VARIABLE DESIGNATING WHETHER PIVOTING IS TO BE DONE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO A NUMERICAL ERROR WITHIN SUBROUTINE DODSTP. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C K1: AN INDEXING VARIABLE. +C K2: AN INDEXING VARIABLE. +C KP: THE RANK OF THE JACOBIAN WRT BETA. +C KPVT: THE PIVOT VECTOR. +C L: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C OMEGA: THE ARRAY DEFINED S.T. +C OMEGA*TRANS(OMEGA) = INV(I+FJACD*INV(E)*TRANS(FJACD)) +C = (I-FJACD*INV(P)*TRANS(FJACD)) +C WHERE E = D**2 + ALPHA*TT**2 +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C ONE: THE VALUE 1.0D0. +C PHI: THE DIFFERENCE BETWEEN THE NORM OF THE SCALED STEP +C AND THE TRUST REGION DIAMETER. +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION NUMBER OF TFJACB. +C S: THE STEP FOR BETA. +C SI: THE SINE FROM THE PLANE ROTATION. +C SS: THE SCALING VALUES FOR THE UNFIXED BETAS. +C T: THE STEP FOR DELTA. +C TEMP: A TEMPORARY STORAGE LOCATION. +C TFJACB: THE ARRAY OMEGA*FJACB. +C TT: THE SCALING VALUES FOR DELTA. +C U: THE APPROXIMATE NULL VECTOR FOR TFJACB. +C WD: THE (SQUARED) DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODSTP + + +C COMPUTE LOOP PARAMETERS WHICH DEPEND ON WEIGHT STRUCTURE + +C SET UP KPVT IF ALPHA = 0 + + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + DO 10 K=1,NP + KPVT(K) = K + 10 CONTINUE + ELSE + IF (NPP.GE.1) THEN + KP = NPP-IRANK + ELSE + KP = NPP + END IF + END IF + + IF (ISODR) THEN + +C T = WD * DELTA = D*G2 + CALL DWGHT(N,M,WD,LDWD,LD2WD,DELTA,N,T,N) + + DO 300 I=1,N + +C COMPUTE WRK4, SUCH THAT +C TRANS(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE OMEGA, SUCH THAT +C TRANS(OMEGA)*OMEGA = I+FJACD*INV(E)*TRANS(FJACD) +C INV(TRANS(OMEGA)*OMEGA) = I-FJACD*INV(P)*TRANS(FJACD) + CALL DVEVTR(M,NQ,I, + + FJACD,N,M, WRK4,M, WRK1,N,NQ, OMEGA,NQ, WRK5) + DO 110 L=1,NQ + OMEGA(L,L) = ONE + OMEGA(L,L) + 110 CONTINUE + CALL DFCTR(.FALSE.,OMEGA,NQ,NQ,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE WRK1 = TRANS(FJACD)*(I-FJACD*INV(P)*TRANS(JFACD)) +C = TRANS(FJACD)*INV(TRANS(OMEGA)*OMEGA) + DO 130 J=1,M + DO 120 L=1,NQ + WRK1(I,L,J) = FJACD(I,J,L) + 120 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1,J),N,4) + CALL DSOLVE(NQ,OMEGA,NQ,WRK1(I,1,J),N,2) + 130 CONTINUE + +C COMPUTE WRK5 = INV(E)*D*G2 + DO 140 J=1,M + WRK5(J) = T(I,J) + 140 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,1,4) + CALL DSOLVE(M,WRK4,M,WRK5,1,2) + +C COMPUTE TFJACB = INV(TRANS(OMEGA))*FJACB + DO 170 K=1,KP + DO 150 L=1,NQ + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + 150 CONTINUE + CALL DSOLVE(NQ,OMEGA,NQ,TFJACB(I,1,K),N,4) + DO 160 L=1,NQ + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 160 CONTINUE + 170 CONTINUE + +C COMPUTE WRK2 = (V*INV(E)*D**2*G2 - G1) + DO 190 L=1,NQ + WRK2(I,L) = ZERO + DO 180 J=1,M + WRK2(I,L) = WRK2(I,L) + FJACD(I,J,L)*WRK5(J) + 180 CONTINUE + WRK2(I,L) = WRK2(I,L) - F(I,L) + 190 CONTINUE + +C COMPUTE WRK2 = INV(TRANS(OMEGA))*(V*INV(E)*D**2*G2 - G1) + CALL DSOLVE(NQ,OMEGA,NQ,WRK2(I,1),N,4) + 300 CONTINUE + + ELSE + DO 360 I=1,N + DO 350 L=1,NQ + DO 340 K=1,KP + TFJACB(I,L,K) = FJACB(I,KPVT(K),L) + IF (SS(1).GT.ZERO) THEN + TFJACB(I,L,K) = TFJACB(I,L,K)/SS(KPVT(K)) + ELSE + TFJACB(I,L,K) = TFJACB(I,L,K)/ABS(SS(1)) + END IF + 340 CONTINUE + WRK2(I,L) = -F(I,L) + 350 CONTINUE + 360 CONTINUE + END IF + +C COMPUTE S + +C DO QR FACTORIZATION (WITH COLUMN PIVOTING OF TRJACB IF ALPHA = 0) + + IF (ALPHA.EQ.ZERO) THEN + IPVT = 1 + DO 410 K=1,NP + KPVT(K) = 0 + 410 CONTINUE + ELSE + IPVT = 0 + END IF + + CALL DQRDC(TFJACB,N*NQ,N*NQ,KP,QRAUX,KPVT,WRK3,IPVT) + CALL DQRSL(TFJACB,N*NQ,N*NQ,KP, + + QRAUX,WRK2,DUM,WRK2,DUM,DUM,DUM,1000,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C ELIMINATE ALPHA PART USING GIVENS ROTATIONS + + IF (ALPHA.NE.ZERO) THEN + CALL DZERO(NPP,1,S,NPP) + DO 430 K1=1,KP + CALL DZERO(KP,1,WRK3,KP) + WRK3(K1) = SQRT(ALPHA) + DO 420 K2=K1,KP + CALL DROTG(TFJACB(K2,1,K2),WRK3(K2),CO,SI) + IF (KP-K2.GE.1) THEN + CALL DROT(KP-K2,TFJACB(K2,1,K2+1),N*NQ, + + WRK3(K2+1),1,CO,SI) + END IF + TEMP = CO*WRK2(K2,1) + SI*S(KPVT(K1)) + S(KPVT(K1)) = -SI*WRK2(K2,1) + CO*S(KPVT(K1)) + WRK2(K2,1) = TEMP + 420 CONTINUE + 430 CONTINUE + END IF + +C COMPUTE SOLUTION - ELIMINATE VARIABLES IF NECESSARY + + IF (NPP.GE.1) THEN + IF (ALPHA.EQ.ZERO) THEN + KP = NPP + +C ESTIMATE RCOND - U WILL CONTAIN APPROX NULL VECTOR + + 440 CALL DTRCO(TFJACB,N*NQ,KP,RCOND,U,1) + IF (RCOND.LE.EPSFCN) THEN + ELIM = .TRUE. + IMAX = IDAMAX(KP,U,1) + +C IMAX IS THE COLUMN TO REMOVE - USE DCHEX AND FIX KPVT + + IF (IMAX.NE.KP) THEN + CALL DCHEX(TFJACB,N*NQ,KP,IMAX,KP,WRK2,N*NQ,1, + + QRAUX,WRK3,2) + K = KPVT(IMAX) + DO 450 I=IMAX,KP-1 + KPVT(I) = KPVT(I+1) + 450 CONTINUE + KPVT(KP) = K + END IF + KP = KP-1 + ELSE + ELIM = .FALSE. + END IF + IF (ELIM .AND. KP.GE.1) THEN + GO TO 440 + ELSE + IRANK = NPP-KP + END IF + END IF + END IF + + IF (FORVCV) RETURN + +C BACKSOLVE AND UNSCRAMBLE + + IF (NPP.GE.1) THEN + DO 510 I=KP+1,NPP + WRK2(I,1) = ZERO + 510 CONTINUE + IF (KP.GE.1) THEN + CALL DTRSL_odr(TFJACB,N*NQ,KP,WRK2,01,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + END IF + DO 520 I=1,NPP + IF (SS(1).GT.ZERO) THEN + S(KPVT(I)) = WRK2(I,1)/SS(KPVT(I)) + ELSE + S(KPVT(I)) = WRK2(I,1)/ABS(SS(1)) + END IF + 520 CONTINUE + END IF + + IF (ISODR) THEN + +C NOTE: T AND WRK1 HAVE BEEN INITIALIZED ABOVE, +C WHERE T = WD * DELTA = D*G2 +C WRK1 = TRANS(FJACD)*(I-FJACD*INV(P)*TRANS(JFACD)) + + DO 670 I=1,N + +C COMPUTE WRK4, SUCH THAT +C TRANS(WRK4)*WRK4 = E = (D**2 + ALPHA*TT**2) + CALL DESUBI(N,M,WD,LDWD,LD2WD,ALPHA,TT,LDTT,I,WRK4) + CALL DFCTR(.FALSE.,WRK4,M,M,INF) + IF (INF.NE.0) THEN + ISTOPC = 60000 + RETURN + END IF + +C COMPUTE WRK5 = INV(E)*D*G2 + DO 610 J=1,M + WRK5(J) = T(I,J) + 610 CONTINUE + CALL DSOLVE(M,WRK4,M,WRK5,1,4) + CALL DSOLVE(M,WRK4,M,WRK5,1,2) + + DO 640 L=1,NQ + WRK2(I,L) = F(I,L) + DO 620 K=1,NPP + WRK2(I,L) = WRK2(I,L) + FJACB(I,K,L)*S(K) + 620 CONTINUE + DO 630 J=1,M + WRK2(I,L) = WRK2(I,L) - FJACD(I,J,L)*WRK5(J) + 630 CONTINUE + 640 CONTINUE + + DO 660 J=1,M + WRK5(J) = ZERO + DO 650 L=1,NQ + WRK5(J) = WRK5(J) + WRK1(I,L,J)*WRK2(I,L) + 650 CONTINUE + T(I,J) = -(WRK5(J) + T(I,J)) + 660 CONTINUE + CALL DSOLVE(M,WRK4,M,T(I,1),N,4) + CALL DSOLVE(M,WRK4,M,T(I,1),N,2) + 670 CONTINUE + + END IF + +C COMPUTE PHI(ALPHA) FROM SCALED S AND T + + CALL DWGHT(NPP,1,SS,NPP,1,S,NPP,WRK,NPP) + IF (ISODR) THEN + CALL DWGHT(N,M,TT,LDTT,1,T,N,WRK(NPP+1),N) + PHI = DNRM2_odr(NPP+N*M,WRK,1) + ELSE + PHI = DNRM2_odr(NPP,WRK,1) + END IF + + RETURN + END +*DODVCV + SUBROUTINE DODVCV + + (N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SSF,SS,TT,LDTT,DELTA, + + EPSFCN,ISODR, + + VCV,SD, + + WRK6,OMEGA,U,QRAUX,JPVT, + + S,T,IRANK,RCOND,RSS,IDF,RVAR,IFIXB, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) +C***BEGIN PROLOGUE DODVCV +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPODI,DODSTP +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE COMPUTE COVARIANCE MATRIX OF ESTIMATED PARAMETERS +C***END PROLOGUE DODVCV + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + EPSFCN,RCOND,RSS,RVAR + INTEGER + + IDF,IRANK,ISTOPC,LDTT,LDWD,LD2WD,LWRK,M,N,NP,NPP,NQ + LOGICAL + + ISODR + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DELTA(N,M),F(N,NQ), + + FJACB(N,NP,NQ),FJACD(N,M,NQ), + + OMEGA(NQ,NQ),QRAUX(NP),S(NP),SD(NP),SS(NP),SSF(NP), + + T(N,M),TT(LDTT,M),U(NP),VCV(NP,NP),WD(LDWD,LD2WD,M), + + WRK1(N,NQ,M),WRK2(N,NQ),WRK3(NP),WRK4(M,M),WRK5(M), + + WRK6(N*NQ,NP),WRK(LWRK) + INTEGER + + IFIXB(NP),JPVT(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + I,IUNFIX,J,JUNFIX,KP,L + LOGICAL + + FORVCV + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DPODI,DODSTP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,SQRT + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C DELTA: THE ESTIMATED ERRORS IN THE EXPLANATORY VARIABLES. +C EPSFCN: THE FUNCTION'S PRECISION. +C F: THE (WEIGHTED) ESTIMATED VALUES OF EPSILON. +C FJACB: THE JACOBIAN WITH RESPECT TO BETA. +C FJACD: THE JACOBIAN WITH RESPECT TO DELTA. +C FORVCV: THE VARIABLE DESIGNATING WHETHER SUBROUTINE DODSTP IS +C CALLED TO SET UP FOR THE COVARIANCE MATRIX COMPUTATIONS +C (FORVCV=TRUE) OR NOT (FORVCV=FALSE). +C I: AN INDEXING VARIABLE. +C IDF: THE DEGREES OF FREEDOM OF THE FIT, EQUAL TO THE NUMBER OF +C OBSERVATIONS WITH NONZERO WEIGHTED DERIVATIVES MINUS THE +C NUMBER OF PARAMETERS BEING ESTIMATED. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IMAX: THE INDEX OF THE ELEMENT OF U HAVING THE LARGEST ABSOLUTE +C VALUE. +C IRANK: THE RANK DEFICIENCY OF THE JACOBIAN WRT BETA. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C ISTOPC: THE VARIABLE DESIGNATING WHETHER THE COMPUTATIONS WERE +C STOPED DUE TO A NUMERICAL ERROR WITHIN SUBROUTINE DODSTP. +C IUNFIX: THE INDEX OF THE NEXT UNFIXED PARAMETER. +C J: AN INDEXING VARIABLE. +C JPVT: THE PIVOT VECTOR. +C JUNFIX: THE INDEX OF THE NEXT UNFIXED PARAMETER. +C KP: THE RANK OF THE JACOBIAN WRT BETA. +C L: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDWD: THE LEADING DIMENSION OF ARRAY WD. +C LD2WD: THE SECOND DIMENSION OF ARRAY WD. +C LWRK: THE LENGTH OF VECTOR WRK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NPP: THE NUMBER OF FUNCTION PARAMETERS BEING ESTIMATED. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OMEGA: THE ARRAY DEFINED S.T. +C OMEGA*TRANS(OMEGA) = INV(I+FJACD*INV(E)*TRANS(FJACD)) +C = (I-FJACD*INV(P)*TRANS(FJACD)) +C WHERE E = D**2 + ALPHA*TT**2 +C P = TRANS(FJACD)*FJACD + D**2 + ALPHA*TT**2 +C QRAUX: THE ARRAY REQUIRED TO RECOVER THE ORTHOGONAL PART OF THE +C Q-R DECOMPOSITION. +C RCOND: THE APPROXIMATE RECIPROCAL CONDITION OF FJACB. +C RSS: THE RESIDUAL SUM OF SQUARES. +C RVAR: THE RESIDUAL VARIANCE. +C S: THE STEP FOR BETA. +C SD: THE STANDARD DEVIATIONS OF THE ESTIMATED BETAS. +C SS: THE SCALING VALUES FOR THE UNFIXED BETAS. +C SSF: THE SCALING VALUES USED FOR BETA. +C T: THE STEP FOR DELTA. +C TEMP: A TEMPORARY STORAGE LOCATION +C TT: THE SCALING VALUES FOR DELTA. +C U: THE APPROXIMATE NULL VECTOR FOR FJACB. +C VCV: THE COVARIANCE MATRIX OF THE ESTIMATED BETAS. +C WD: THE DELTA WEIGHTS. +C WRK: A WORK ARRAY OF (LWRK) ELEMENTS, +C EQUIVALENCED TO WRK1 AND WRK2. +C WRK1: A WORK ARRAY OF (N BY NQ BY M) ELEMENTS. +C WRK2: A WORK ARRAY OF (N BY NQ) ELEMENTS. +C WRK3: A WORK ARRAY OF (NP) ELEMENTS. +C WRK4: A WORK ARRAY OF (M BY M) ELEMENTS. +C WRK5: A WORK ARRAY OF (M) ELEMENTS. +C WRK6: A WORK ARRAY OF (N*NQ BY P) ELEMENTS. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DODVCV + + + FORVCV = .TRUE. + ISTOPC = 0 + + CALL DODSTP(N,M,NP,NQ,NPP, + + F,FJACB,FJACD, + + WD,LDWD,LD2WD,SS,TT,LDTT,DELTA, + + ZERO,EPSFCN,ISODR, + + WRK6,OMEGA,U,QRAUX,JPVT, + + S,T,TEMP,IRANK,RCOND,FORVCV, + + WRK1,WRK2,WRK3,WRK4,WRK5,WRK,LWRK,ISTOPC) + IF (ISTOPC.NE.0) THEN + RETURN + END IF + KP = NPP - IRANK + CALL DPODI (WRK6,N*NQ,KP,WRK3,1) + + IDF = 0 + DO 150 I=1,N + DO 120 J=1,NPP + DO 110 L=1,NQ + IF (FJACB(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 110 CONTINUE + 120 CONTINUE + IF (ISODR) THEN + DO 140 J=1,M + DO 130 L=1,NQ + IF (FJACD(I,J,L).NE.ZERO) THEN + IDF = IDF + 1 + GO TO 150 + END IF + 130 CONTINUE + 140 CONTINUE + END IF + 150 CONTINUE + + IF (IDF.GT.KP) THEN + IDF = IDF - KP + RVAR = RSS/IDF + ELSE + IDF = 0 + RVAR = RSS + END IF + +C STORE VARIANCES IN SD, RESTORING ORIGINAL ORDER + + DO 200 I=1,NP + SD(I) = ZERO + 200 CONTINUE + DO 210 I=1,KP + SD(JPVT(I)) = WRK6(I,I) + 210 CONTINUE + IF (NP.GT.NPP) THEN + JUNFIX = NPP + DO 220 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + SD(J) = ZERO + ELSE + SD(J) = SD(JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 220 CONTINUE + END IF + +C STORE COVARIANCE MATRIX IN VCV, RESTORING ORIGINAL ORDER + + DO 310 I=1,NP + DO 300 J=1,I + VCV(I,J) = ZERO + 300 CONTINUE + 310 CONTINUE + DO 330 I=1,KP + DO 320 J=I+1,KP + IF (JPVT(I).GT.JPVT(J)) THEN + VCV(JPVT(I),JPVT(J))=WRK6(I,J) + ELSE + VCV(JPVT(J),JPVT(I))=WRK6(I,J) + END IF + 320 CONTINUE + 330 CONTINUE + IF (NP.GT.NPP) THEN + IUNFIX = NPP + DO 360 I=NP,1,-1 + IF (IFIXB(I).EQ.0) THEN + DO 340 J=I,1,-1 + VCV(I,J) = ZERO + 340 CONTINUE + ELSE + JUNFIX = NPP + DO 350 J=NP,1,-1 + IF (IFIXB(J).EQ.0) THEN + VCV(I,J) = ZERO + ELSE + VCV(I,J) = VCV(IUNFIX,JUNFIX) + JUNFIX = JUNFIX - 1 + END IF + 350 CONTINUE + IUNFIX = IUNFIX - 1 + END IF + 360 CONTINUE + END IF + + DO 380 I=1,NP + VCV(I,I) = SD(I) + SD(I) = SQRT(RVAR*SD(I)) + DO 370 J=1,I + VCV(J,I) = VCV(I,J) + 370 CONTINUE + 380 CONTINUE + +C UNSCALE STANDARD ERRORS AND COVARIANCE MATRIX + DO 410 I=1,NP + IF (SSF(1).GT.ZERO) THEN + SD(I) = SD(I)/SSF(I) + ELSE + SD(I) = SD(I)/ABS(SSF(1)) + END IF + DO 400 J=1,NP + IF (SSF(1).GT.ZERO) THEN + VCV(I,J) = VCV(I,J)/(SSF(I)*SSF(J)) + ELSE + VCV(I,J) = VCV(I,J)/(SSF(1)*SSF(1)) + END IF + 400 CONTINUE + 410 CONTINUE + + RETURN + END +*DPACK + SUBROUTINE DPACK + + (N2,N1,V1,V2,IFIX) +C***BEGIN PROLOGUE DPACK +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DCOPY_odr +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT THE UNFIXED ELEMENTS OF V2 AND RETURN THEM IN V1 +C***END PROLOGUE DPACK + +C...SCALAR ARGUMENTS + INTEGER + + N1,N2 + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + V1(N2),V2(N2) + INTEGER + + IFIX(N2) + +C...LOCAL SCALARS + INTEGER + + I + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY_odr + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF V2 ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C N1: THE NUMBER OF ITEMS IN V1. +C N2: THE NUMBER OF ITEMS IN V2. +C V1: THE VECTOR OF THE UNFIXED ITEMS FROM V2. +C V2: THE VECTOR OF THE FIXED AND UNFIXED ITEMS FROM WHICH THE +C UNFIXED ELEMENTS ARE TO BE EXTRACTED. + + +C***FIRST EXECUTABLE STATEMENT DPACK + + + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I=1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1+1 + V1(N1) = V2(I) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY_odr(N2,V2,1,V1,1) + END IF + + RETURN + END +*DPPNML + DOUBLE PRECISION FUNCTION DPPNML + + (P) +C***BEGIN PROLOGUE DPPNML +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***AUTHOR FILLIBEN, JAMES J., +C STATISTICAL ENGINEERING DIVISION +C NATIONAL BUREAU OF STANDARDS +C WASHINGTON, D. C. 20234 +C (ORIGINAL VERSION--JUNE 1972. +C (UPDATED --SEPTEMBER 1975, +C NOVEMBER 1975, AND +C OCTOBER 1976. +C***PURPOSE COMPUTE THE PERCENT POINT FUNCTION VALUE FOR THE +C NORMAL (GAUSSIAN) DISTRIBUTION WITH MEAN 0 AND STANDARD +C DEVIATION 1, AND WITH PROBABILITY DENSITY FUNCTION +C F(X) = (1/SQRT(2*PI))*EXP(-X*X/2). +C (ADAPTED FROM DATAPAC SUBROUTINE TPPF, WITH MODIFICATIONS +C TO FACILITATE CONVERSION TO DOUBLE PRECISION AUTOMATICALLY) +C***DESCRIPTION +C --THE CODING AS PRESENTED BELOW IS ESSENTIALLY +C IDENTICAL TO THAT PRESENTED BY ODEH AND EVANS +C AS ALGORTIHM 70 OF APPLIED STATISTICS. +C --AS POINTED OUT BY ODEH AND EVANS IN APPLIED +C STATISTICS, THEIR ALGORITHM REPRESENTES A +C SUBSTANTIAL IMPROVEMENT OVER THE PREVIOUSLY EMPLOYED +C HASTINGS APPROXIMATION FOR THE NORMAL PERCENT POINT +C FUNCTION, WITH ACCURACY IMPROVING FROM 4.5*(10**-4) +C TO 1.5*(10**-8). +C***REFERENCES ODEH AND EVANS, THE PERCENTAGE POINTS OF THE NORMAL +C DISTRIBUTION, ALGORTIHM 70, APPLIED STATISTICS, 1974, +C PAGES 96-97. +C EVANS, ALGORITHMS FOR MINIMAL DEGREE POLYNOMIAL AND +C RATIONAL APPROXIMATION, M. SC. THESIS, 1972, +C UNIVERSITY OF VICTORIA, B. C., CANADA. +C HASTINGS, APPROXIMATIONS FOR DIGITAL COMPUTERS, 1955, +C PAGES 113, 191, 192. +C NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS +C SERIES 55, 1964, PAGE 933, FORMULA 26.2.23. +C FILLIBEN, SIMPLE AND ROBUST LINEAR ESTIMATION OF THE +C LOCATION PARAMETER OF A SYMMETRIC DISTRIBUTION +C (UNPUBLISHED PH.D. DISSERTATION, PRINCETON +C UNIVERSITY), 1969, PAGES 21-44, 229-231. +C FILLIBEN, "THE PERCENT POINT FUNCTION", +C (UNPUBLISHED MANUSCRIPT), 1970, PAGES 28-31. +C JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE DISTRIBUTIONS, +C VOLUME 1, 1970, PAGES 40-111. +C KELLEY STATISTICAL TABLES, 1948. +C OWEN, HANDBOOK OF STATISTICAL TABLES, 1962, PAGES 3-16. +C PEARSON AND HARTLEY, BIOMETRIKA TABLES FOR +C STATISTICIANS, VOLUME 1, 1954, PAGES 104-113. +C***END PROLOGUE DPPNML + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + P + +C...LOCAL SCALARS + DOUBLE PRECISION + + ADEN,ANUM,HALF,ONE,P0,P1,P2,P3,P4,Q0,Q1,Q2,Q3,Q4,R,T,TWO,ZERO + +C...INTRINSIC FUNCTIONS + INTRINSIC + + LOG,SQRT + +C...DATA STATEMENTS + DATA + + P0,P1,P2,P3,P4 + + /-0.322232431088D0,-1.0D0,-0.342242088547D0, + + -0.204231210245D-1,-0.453642210148D-4/ + DATA + + Q0,Q1,Q2,Q3,Q4 + + /0.993484626060D-1,0.588581570495D0, + + 0.531103462366D0,0.103537752850D0,0.38560700634D-2/ + DATA + + ZERO,HALF,ONE,TWO + + /0.0D0,0.5D0,1.0D0,2.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ADEN: A VALUE USED IN THE APPROXIMATION. +C ANUM: A VALUE USED IN THE APPROXIMATION. +C HALF: THE VALUE 0.5D0. +C ONE: THE VALUE 1.0D0. +C P: THE PROBABILITY AT WHICH THE PERCENT POINT IS TO BE +C EVALUATED. P MUST BE BETWEEN 0.0D0 AND 1.0D0, EXCLUSIVE. +C P0: A PARAMETER USED IN THE APPROXIMATION. +C P1: A PARAMETER USED IN THE APPROXIMATION. +C P2: A PARAMETER USED IN THE APPROXIMATION. +C P3: A PARAMETER USED IN THE APPROXIMATION. +C P4: A PARAMETER USED IN THE APPROXIMATION. +C Q0: A PARAMETER USED IN THE APPROXIMATION. +C Q1: A PARAMETER USED IN THE APPROXIMATION. +C Q2: A PARAMETER USED IN THE APPROXIMATION. +C Q3: A PARAMETER USED IN THE APPROXIMATION. +C Q4: A PARAMETER USED IN THE APPROXIMATION. +C R: THE PROBABILITY AT WHICH THE PERCENT POINT IS EVALUATED. +C T: A VALUE USED IN THE APPROXIMATION. +C TWO: THE VALUE 2.0D0. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DPPT + + + IF (P.EQ.HALF) THEN + DPPNML = ZERO + + ELSE + R = P + IF (P.GT.HALF) R = ONE - R + T = SQRT(-TWO*LOG(R)) + ANUM = ((((T*P4+P3)*T+P2)*T+P1)*T+P0) + ADEN = ((((T*Q4+Q3)*T+Q2)*T+Q1)*T+Q0) + DPPNML = T + (ANUM/ADEN) + + IF (P.LT.HALF) DPPNML = -DPPNML + END IF + + RETURN + + END +*DPPT + DOUBLE PRECISION FUNCTION DPPT + + (P, IDF) +C***BEGIN PROLOGUE DPPT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DPPNML +C***DATE WRITTEN 901207 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***AUTHOR FILLIBEN, JAMES J., +C STATISTICAL ENGINEERING DIVISION +C NATIONAL BUREAU OF STANDARDS +C WASHINGTON, D. C. 20234 +C (ORIGINAL VERSION--OCTOBER 1975.) +C (UPDATED --NOVEMBER 1975.) +C***PURPOSE COMPUTE THE PERCENT POINT FUNCTION VALUE FOR THE +C STUDENT'S T DISTRIBUTION WITH IDF DEGREES OF FREEDOM. +C (ADAPTED FROM DATAPAC SUBROUTINE TPPF, WITH MODIFICATIONS +C TO FACILITATE CONVERSION TO DOUBLE PRECISION AUTOMATICALLY) +C***DESCRIPTION +C --FOR IDF = 1 AND IDF = 2, THE PERCENT POINT FUNCTION +C FOR THE T DISTRIBUTION EXISTS IN SIMPLE CLOSED FORM +C AND SO THE COMPUTED PERCENT POINTS ARE EXACT. +C --FOR IDF BETWEEN 3 AND 6, INCLUSIVELY, THE APPROXIMATION +C IS AUGMENTED BY 3 ITERATIONS OF NEWTON'S METHOD TO +C IMPROVE THE ACCURACY, ESPECIALLY FOR P NEAR 0 OR 1. +C***REFERENCES NATIONAL BUREAU OF STANDARDS APPLIED MATHMATICS +C SERIES 55, 1964, PAGE 949, FORMULA 26.7.5. +C JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE DISTRIBUTIONS, +C VOLUME 2, 1970, PAGE 102, FORMULA 11. +C FEDERIGHI, "EXTENDED TABLES OF THE PERCENTAGE POINTS +C OF STUDENT"S T DISTRIBUTION, JOURNAL OF THE AMERICAN +C STATISTICAL ASSOCIATION, 1969, PAGES 683-688. +C HASTINGS AND PEACOCK, STATISTICAL DISTRIBUTIONS, A +C HANDBOOK FOR STUDENTS AND PRACTITIONERS, 1975, +C PAGES 120-123. +C***END PROLOGUE DPPT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + P + INTEGER + + IDF + +C...LOCAL SCALARS + DOUBLE PRECISION + + ARG,B21,B31,B32,B33,B34,B41,B42,B43,B44,B45, + + B51,B52,B53,B54,B55,B56,C,CON,D1,D3,D5,D7,D9,DF,EIGHT,FIFTN, + + HALF,ONE,PI,PPFN,S,TERM1,TERM2,TERM3,TERM4,TERM5,THREE,TWO, + + Z,ZERO + INTEGER + + IPASS,MAXIT + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DPPNML + EXTERNAL + + DPPNML + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ATAN,COS,SIN,SQRT + +C...DATA STATEMENTS + DATA + + B21 + + /4.0D0/ + DATA + + B31, B32, B33, B34 + + /96.0D0,5.0D0,16.0D0,3.0D0/ + DATA + + B41, B42, B43, B44, B45 + + /384.0D0,3.0D0,19.0D0,17.0D0,-15.0D0/ + DATA + + B51,B52,B53,B54,B55,B56 + + /9216.0D0,79.0D0,776.0D0,1482.0D0,-1920.0D0,-945.0D0/ + DATA + + ZERO,HALF,ONE,TWO,THREE,EIGHT,FIFTN + + /0.0D0,0.5D0,1.0D0,2.0D0,3.0D0,8.0D0,15.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ARG: A VALUE USED IN THE APPROXIMATION. +C B21: A PARAMETER USED IN THE APPROXIMATION. +C B31: A PARAMETER USED IN THE APPROXIMATION. +C B32: A PARAMETER USED IN THE APPROXIMATION. +C B33: A PARAMETER USED IN THE APPROXIMATION. +C B34: A PARAMETER USED IN THE APPROXIMATION. +C B41: A PARAMETER USED IN THE APPROXIMATION. +C B42: A PARAMETER USED IN THE APPROXIMATION. +C B43: A PARAMETER USED IN THE APPROXIMATION. +C B44: A PARAMETER USED IN THE APPROXIMATION. +C B45: A PARAMETER USED IN THE APPROXIMATION. +C B51: A PARAMETER USED IN THE APPROXIMATION. +C B52: A PARAMETER USED IN THE APPROXIMATION. +C B53: A PARAMETER USED IN THE APPROXIMATION. +C B54: A PARAMETER USED IN THE APPROXIMATION. +C B55: A PARAMETER USED IN THE APPROXIMATION. +C B56: A PARAMETER USED IN THE APPROXIMATION. +C C: A VALUE USED IN THE APPROXIMATION. +C CON: A VALUE USED IN THE APPROXIMATION. +C DF: THE DEGREES OF FREEDOM. +C D1: A VALUE USED IN THE APPROXIMATION. +C D3: A VALUE USED IN THE APPROXIMATION. +C D5: A VALUE USED IN THE APPROXIMATION. +C D7: A VALUE USED IN THE APPROXIMATION. +C D9: A VALUE USED IN THE APPROXIMATION. +C EIGHT: THE VALUE 8.0D0. +C FIFTN: THE VALUE 15.0D0. +C HALF: THE VALUE 0.5D0. +C IDF: THE (POSITIVE INTEGER) DEGREES OF FREEDOM. +C IPASS: A VALUE USED IN THE APPROXIMATION. +C MAXIT: THE MAXIMUM NUMBER OF ITERATIONS ALLOWED FOR THE APPROX. +C ONE: THE VALUE 1.0D0. +C P: THE PROBABILITY AT WHICH THE PERCENT POINT IS TO BE +C EVALUATED. P MUST LIE BETWEEN 0.0DO AND 1.0D0, EXCLUSIVE. +C PI: THE VALUE OF PI. +C PPFN: THE NORMAL PERCENT POINT VALUE. +C S: A VALUE USED IN THE APPROXIMATION. +C TERM1: A VALUE USED IN THE APPROXIMATION. +C TERM2: A VALUE USED IN THE APPROXIMATION. +C TERM3: A VALUE USED IN THE APPROXIMATION. +C TERM4: A VALUE USED IN THE APPROXIMATION. +C TERM5: A VALUE USED IN THE APPROXIMATION. +C THREE: THE VALUE 3.0D0. +C TWO: THE VALUE 2.0D0. +C Z: A VALUE USED IN THE APPROXIMATION. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DPPT + + + PI = 3.141592653589793238462643383279D0 + DF = IDF + MAXIT = 5 + + IF (IDF.LE.0) THEN + +C TREAT THE IDF < 1 CASE + DPPT = ZERO + + ELSE IF (IDF.EQ.1) THEN + +C TREAT THE IDF = 1 (CAUCHY) CASE + ARG = PI*P + DPPT = -COS(ARG)/SIN(ARG) + + ELSE IF (IDF.EQ.2) THEN + +C TREAT THE IDF = 2 CASE + TERM1 = SQRT(TWO)/TWO + TERM2 = TWO*P - ONE + TERM3 = SQRT(P*(ONE-P)) + DPPT = TERM1*TERM2/TERM3 + + ELSE IF (IDF.GE.3) THEN + +C TREAT THE IDF GREATER THAN OR EQUAL TO 3 CASE + PPFN = DPPNML(P) + D1 = PPFN + D3 = PPFN**3 + D5 = PPFN**5 + D7 = PPFN**7 + D9 = PPFN**9 + TERM1 = D1 + TERM2 = (ONE/B21)*(D3+D1)/DF + TERM3 = (ONE/B31)*(B32*D5+B33*D3+B34*D1)/(DF**2) + TERM4 = (ONE/B41)*(B42*D7+B43*D5+B44*D3+B45*D1)/(DF**3) + TERM5 = (ONE/B51)*(B52*D9+B53*D7+B54*D5+B55*D3+B56*D1)/(DF**4) + DPPT = TERM1 + TERM2 + TERM3 + TERM4 + TERM5 + + IF (IDF.EQ.3) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 3 CASE + CON = PI*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 70 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+S*C-CON)/(TWO*C**2) + 70 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.4) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 4 CASE + CON = TWO*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 90 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2)*S-CON)/((ONE+HALF)*C**3) + 90 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.5) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 5 CASE + + CON = PI*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 110 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - (Z+(C+(TWO/THREE)*C**3)*S-CON)/ + + ((EIGHT/THREE)*C**4) + 110 CONTINUE + DPPT = SQRT(DF)*S/C + + ELSE IF (IDF.EQ.6) THEN + +C AUGMENT THE RESULTS FOR THE IDF = 6 CASE + CON = TWO*(P-HALF) + ARG = DPPT/SQRT(DF) + Z = ATAN(ARG) + DO 130 IPASS=1,MAXIT + S = SIN(Z) + C = COS(Z) + Z = Z - ((ONE+HALF*C**2 + (THREE/EIGHT)*C**4)*S-CON)/ + + ((FIFTN/EIGHT)*C**5) + 130 CONTINUE + DPPT = SQRT(DF)*S/C + END IF + END IF + + RETURN + + END +*DPVB + SUBROUTINE DPVB + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVB, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DPVB +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE THE NROW-TH FUNCTION VALUE USING BETA(J) + STP +C***END PROLOGUE DPVB + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PVB,STP + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + BETAJ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BETAJ: THE CURRENT ESTIMATE OF THE JTH PARAMETER. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE INDEPENDENT VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C PVB: THE FUNCTION VALUE FOR THE SELECTED OBSERVATION & RESPONSE. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DPVB + + +C COMPUTE PREDICTED VALUES + + BETAJ = BETA(J) + BETA(J) = BETA(J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + BETA(J) = BETAJ + + PVB = WRK2(NROW,LQ) + + RETURN + END +*DPVD + SUBROUTINE DPVD + + (FCN, + + N,M,NP,NQ, + + BETA,XPLUSD,IFIXB,IFIXX,LDIFX, + + NROW,J,LQ,STP, + + ISTOP,NFEV,PVD, + + WRK1,WRK2,WRK6) +C***BEGIN PROLOGUE DPVD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED FCN +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE NROW-TH FUNCTION VALUE USING +C X(NROW,J) + DELTA(NROW,J) + STP +C***END PROLOGUE DPVD + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + PVD,STP + INTEGER + + ISTOP,J,LDIFX,LQ,M,N,NFEV,NP,NQ,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),WRK1(N,M,NQ),WRK2(N,NQ),WRK6(N,NP,NQ),XPLUSD(N,M) + INTEGER + + IFIXB(NP),IFIXX(LDIFX,M) + +C...SUBROUTINE ARGUMENTS + EXTERNAL + + FCN + +C...LOCAL SCALARS + DOUBLE PRECISION + + XPDJ + +C...ROUTINE NAMES USED AS SUBPROGRAM ARGUMENTS +C FCN: THE USER-SUPPLIED SUBROUTINE FOR EVALUATING THE MODEL. + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C IFIXB: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF BETA ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C IFIXX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF X ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ISTOP: THE VARIABLE DESIGNATING WHETHER THERE ARE PROBLEMS +C COMPUTING THE FUNCTION AT THE CURRENT BETA AND DELTA. +C J: THE INDEX OF THE PARTIAL DERIVATIVE BEING EXAMINED. +C LDIFX: THE LEADING DIMENSION OF ARRAY IFIXX. +C LQ: THE RESPONSE CURRENTLY BEING EXAMINED. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NFEV: THE NUMBER OF FUNCTION EVALUATIONS. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C NROW: THE ROW NUMBER OF THE INDEPENDENT VARIABLE ARRAY AT +C WHICH THE DERIVATIVE IS TO BE CHECKED. +C PVD: THE FUNCTION VALUE FOR THE SELECTED OBSERVATION & RESPONSE. +C STP: THE STEP SIZE FOR THE FINITE DIFFERENCE DERIVATIVE. +C XPDJ: THE (NROW,J)TH ELEMENT OF XPLUSD. +C XPLUSD: THE VALUES OF X + DELTA. + + +C***FIRST EXECUTABLE STATEMENT DPVD + + +C COMPUTE PREDICTED VALUES + + XPDJ = XPLUSD(NROW,J) + XPLUSD(NROW,J) = XPLUSD(NROW,J) + STP + ISTOP = 0 + CALL FCN(N,M,NP,NQ, + + N,M,NP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + 003,WRK2,WRK6,WRK1, + + ISTOP) + IF (ISTOP.EQ.0) THEN + NFEV = NFEV + 1 + ELSE + RETURN + END IF + XPLUSD(NROW,J) = XPDJ + + PVD = WRK2(NROW,LQ) + + RETURN + END +*DSCALE + SUBROUTINE DSCALE + + (N,M,SCL,LDSCL,T,LDT,SCLT,LDSCLT) +C***BEGIN PROLOGUE DSCALE +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SCALE T BY THE INVERSE OF SCL, I.E., COMPUTE T/SCL +C***END PROLOGUE DSCALE + +C...SCALAR ARGUMENTS + INTEGER + + LDT,LDSCL,LDSCLT,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),SCL(LDSCL,M),SCLT(LDSCLT,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,TEMP,ZERO + INTEGER + + I,J + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ONE,ZERO + + /1.0D0,0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDSCL: THE LEADING DIMENSION OF ARRAY SCL. +C LDSCLT: THE LEADING DIMENSION OF ARRAY SCLT. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C M: THE NUMBER OF COLUMNS OF DATA IN T. +C N: THE NUMBER OF ROWS OF DATA IN T. +C ONE: THE VALUE 1.0D0. +C SCL: THE SCALE VALUES. +C SCLT: THE INVERSELY SCALED MATRIX. +C T: THE ARRAY TO BE INVERSELY SCALED BY SCL. +C TEMP: A TEMPORARY SCALAR. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCALE + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (SCL(1,1).GE.ZERO) THEN + IF (LDSCL.GE.N) THEN + DO 80 J=1,M + DO 70 I=1,N + SCLT(I,J) = T(I,J)/SCL(I,J) + 70 CONTINUE + 80 CONTINUE + ELSE + DO 100 J=1,M + TEMP = ONE/SCL(1,J) + DO 90 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 90 CONTINUE + 100 CONTINUE + END IF + ELSE + TEMP = ONE/ABS(SCL(1,1)) + DO 120 J=1,M + DO 110 I=1,N + SCLT(I,J) = T(I,J)*TEMP + 110 CONTINUE + 120 CONTINUE + END IF + + RETURN + END +*DSCLB + SUBROUTINE DSCLB + + (NP,BETA,SSF) +C***BEGIN PROLOGUE DSCLB +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT SCALING VALUES FOR BETA ACCORDING TO THE +C ALGORITHM GIVEN IN THE ODRPACK REFERENCE GUIDE +C***END PROLOGUE DSCLB + +C...SCALAR ARGUMENTS + INTEGER + + NP + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + BETA(NP),SSF(NP) + +C...LOCAL SCALARS + DOUBLE PRECISION + + BMAX,BMIN,ONE,TEN,ZERO + INTEGER + + K + LOGICAL + + BIGDIF + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,LOG10,MAX,MIN,SQRT + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TEN + + /0.0D0,1.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BETA: THE FUNCTION PARAMETERS. +C BIGDIF: THE VARIABLE DESIGNATING WHETHER THERE IS A SIGNIFICANT +C DIFFERENCE IN THE MAGNITUDES OF THE NONZERO ELEMENTS OF +C BETA (BIGDIF=.TRUE.) OR NOT (BIGDIF=.FALSE.). +C BMAX: THE LARGEST NONZERO MAGNITUDE. +C BMIN: THE SMALLEST NONZERO MAGNITUDE. +C K: AN INDEXING VARIABLE. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C ONE: THE VALUE 1.0D0. +C SSF: THE SCALING VALUES FOR BETA. +C TEN: THE VALUE 10.0D0. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCLB + + + BMAX = ABS(BETA(1)) + DO 10 K=2,NP + BMAX = MAX(BMAX,ABS(BETA(K))) + 10 CONTINUE + + IF (BMAX.EQ.ZERO) THEN + +C ALL INPUT VALUES OF BETA ARE ZERO + + DO 20 K=1,NP + SSF(K) = ONE + 20 CONTINUE + + ELSE + +C SOME OF THE INPUT VALUES ARE NONZERO + + BMIN = BMAX + DO 30 K=1,NP + IF (BETA(K).NE.ZERO) THEN + BMIN = MIN(BMIN,ABS(BETA(K))) + END IF + 30 CONTINUE + BIGDIF = LOG10(BMAX)-LOG10(BMIN).GE.ONE + DO 40 K=1,NP + IF (BETA(K).EQ.ZERO) THEN + SSF(K) = TEN/BMIN + ELSE + IF (BIGDIF) THEN + SSF(K) = ONE/ABS(BETA(K)) + ELSE + SSF(K) = ONE/BMAX + END IF + END IF + 40 CONTINUE + + END IF + + RETURN + END +*DSCLD + SUBROUTINE DSCLD + + (N,M,X,LDX,TT,LDTT) +C***BEGIN PROLOGUE DSCLD +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT SCALING VALUES FOR DELTA ACCORDING TO THE +C ALGORITHM GIVEN IN THE ODRPACK REFERENCE GUIDE +C***END PROLOGUE DSCLD + +C...SCALAR ARGUMENTS + INTEGER + + LDTT,LDX,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + TT(LDTT,M),X(LDX,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,TEN,XMAX,XMIN,ZERO + INTEGER + + I,J + LOGICAL + + BIGDIF + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS,LOG10,MAX,MIN + +C...DATA STATEMENTS + DATA + + ZERO,ONE,TEN + + /0.0D0,1.0D0,10.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C BIGDIF: THE VARIABLE DESIGNATING WHETHER THERE IS A SIGNIFICANT +C DIFFERENCE IN THE MAGNITUDES OF THE NONZERO ELEMENTS OF +C X (BIGDIF=.TRUE.) OR NOT (BIGDIF=.FALSE.). +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDTT: THE LEADING DIMENSION OF ARRAY TT. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C ONE: THE VALUE 1.0D0. +C TT: THE SCALING VALUES FOR DELTA. +C X: THE INDEPENDENT VARIABLE. +C XMAX: THE LARGEST NONZERO MAGNITUDE. +C XMIN: THE SMALLEST NONZERO MAGNITUDE. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSCLD + + + DO 50 J=1,M + XMAX = ABS(X(1,J)) + DO 10 I=2,N + XMAX = MAX(XMAX,ABS(X(I,J))) + 10 CONTINUE + + IF (XMAX.EQ.ZERO) THEN + +C ALL INPUT VALUES OF X(I,J), I=1,...,N, ARE ZERO + + DO 20 I=1,N + TT(I,J) = ONE + 20 CONTINUE + + ELSE + +C SOME OF THE INPUT VALUES ARE NONZERO + + XMIN = XMAX + DO 30 I=1,N + IF (X(I,J).NE.ZERO) THEN + XMIN = MIN(XMIN,ABS(X(I,J))) + END IF + 30 CONTINUE + BIGDIF = LOG10(XMAX)-LOG10(XMIN).GE.ONE + DO 40 I=1,N + IF (X(I,J).NE.ZERO) THEN + IF (BIGDIF) THEN + TT(I,J) = ONE/ABS(X(I,J)) + ELSE + TT(I,J) = ONE/XMAX + END IF + ELSE + TT(I,J) = TEN/XMIN + END IF + 40 CONTINUE + END IF + 50 CONTINUE + + RETURN + END +*DSETN + SUBROUTINE DSETN + + (N,M,X,LDX,NROW) +C***BEGIN PROLOGUE DSETN +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SELECT THE ROW AT WHICH THE DERIVATIVE WILL BE CHECKED +C***END PROLOGUE DSETN + +C...SCALAR ARGUMENTS + INTEGER + + LDX,M,N,NROW + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEX VARIABLE. +C J: AN INDEX VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NROW: THE SELECTED ROW NUMBER OF THE INDEPENDENT VARIABLE. +C X: THE INDEPENDENT VARIABLE. + + +C***FIRST EXECUTABLE STATEMENT DSETN + + + IF ((NROW.GE.1) .AND. (NROW.LE.N)) RETURN + +C SELECT FIRST ROW OF INDEPENDENT VARIABLES WHICH CONTAINS NO ZEROS +C IF THERE IS ONE, OTHERWISE FIRST ROW IS USED. + + DO 20 I = 1, N + DO 10 J = 1, M + IF (X(I,J).EQ.0.0) GO TO 20 + 10 CONTINUE + NROW = I + RETURN + 20 CONTINUE + + NROW = 1 + + RETURN + END +*DSOLVE + SUBROUTINE DSOLVE(N,T,LDT,B,LDB,JOB) +C***BEGIN PROLOGUE DSOLVE +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DAXPY_odr,DDOT_odr +C***DATE WRITTEN 920220 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE SOLVE SYSTEMS OF THE FORM +C T * X = B OR TRANS(T) * X = B +C WHERE T IS AN UPPER OR LOWER TRIANGULAR MATRIX OF ORDER N, +C AND THE SOLUTION X OVERWRITES THE RHS B. +C (ADAPTED FROM LINPACK SUBROUTINE DTRSL_odr) +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***END PROLOGUE DSOLVE + +C...SCALAR ARGUMENTS + INTEGER + + JOB,LDB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(LDB,N),T(LDT,N) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + J1,J,JN + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr + EXTERNAL + + DDOT_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY_odr + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C B: ON INPUT: THE RIGHT HAND SIDE; ON EXIT: THE SOLUTION +C J1: THE FIRST NONZERO ENTRY IN T. +C J: AN INDEXING VARIABLE. +C JN: THE LAST NONZERO ENTRY IN T. +C JOB: WHAT KIND OF SYSTEM IS TO BE SOLVED, WHERE IF JOB IS +C 1 SOLVE T*X=B, T LOWER TRIANGULAR, +C 2 SOLVE T*X=B, T UPPER TRIANGULAR, +C 3 SOLVE TRANS(T)*X=B, T LOWER TRIANGULAR, +C 4 SOLVE TRANS(T)*X=B, T UPPER TRIANGULAR. +C LDB: THE LEADING DIMENSION OF ARRAY B. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C N: THE NUMBER OF ROWS AND COLUMNS OF DATA IN ARRAY T. +C T: THE UPPER OR LOWER TRIDIAGONAL SYSTEM. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DSOLVE + + +C FIND FIRST NONZERO DIAGONAL ENTRY IN T + J1 = 0 + DO 10 J=1,N + IF (J1.EQ.0 .AND. T(J,J).NE.ZERO) THEN + J1 = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(1,J) = ZERO + END IF + 10 CONTINUE + IF (J1.EQ.0) RETURN + +C FIND LAST NONZERO DIAGONAL ENTRY IN T + JN = 0 + DO 20 J=N,J1,-1 + IF (JN.EQ.0 .AND. T(J,J).NE.ZERO) THEN + JN = J + ELSE IF (T(J,J).EQ.ZERO) THEN + B(1,J) = ZERO + END IF + 20 CONTINUE + + IF (JOB.EQ.1) THEN + +C SOLVE T*X=B FOR T LOWER TRIANGULAR + B(1,J1) = B(1,J1)/T(J1,J1) + DO 30 J = J1+1, JN + TEMP = -B(1,J-1) + CALL DAXPY_odr(JN-J+1,TEMP,T(J,J-1),1,B(1,J),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 30 CONTINUE + + ELSE IF (JOB.EQ.2) THEN + +C SOLVE T*X=B FOR T UPPER TRIANGULAR. + B(1,JN) = B(1,JN)/T(JN,JN) + DO 40 J = JN-1,J1,-1 + TEMP = -B(1,J+1) + CALL DAXPY_odr(J,TEMP,T(1,J+1),1,B(1,1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 40 CONTINUE + + ELSE IF (JOB.EQ.3) THEN + +C SOLVE TRANS(T)*X=B FOR T LOWER TRIANGULAR. + B(1,JN) = B(1,JN)/T(JN,JN) + DO 50 J = JN-1,J1,-1 + B(1,J) = B(1,J) - + + DDOT_odr(JN-J+1,T(J+1,J),1,B(1,J+1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 50 CONTINUE + + ELSE IF (JOB.EQ.4) THEN + +C SOLVE TRANS(T)*X=B FOR T UPPER TRIANGULAR. + B(1,J1) = B(1,J1)/T(J1,J1) + DO 60 J = J1+1,JN + B(1,J) = B(1,J) - DDOT_odr(J-1,T(1,J),1,B(1,1),LDB) + IF (T(J,J).NE.ZERO) THEN + B(1,J) = B(1,J)/T(J,J) + ELSE + B(1,J) = ZERO + END IF + 60 CONTINUE + END IF + + RETURN + END +*DUNPAC + SUBROUTINE DUNPAC + + (N2,V1,V2,IFIX) +C***BEGIN PROLOGUE DUNPAC +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DCOPY_odr +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COPY THE ELEMENTS OF V1 INTO THE LOCATIONS OF V2 WHICH ARE +C UNFIXED +C***END PROLOGUE DUNPAC + +C...SCALAR ARGUMENTS + INTEGER + + N2 + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + V1(N2),V2(N2) + INTEGER + + IFIX(N2) + +C...LOCAL SCALARS + INTEGER + + I,N1 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DCOPY_odr + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C IFIX: THE VALUES DESIGNATING WHETHER THE ELEMENTS OF V2 ARE +C FIXED AT THEIR INPUT VALUES OR NOT. +C ODRPACK REFERENCE GUIDE.) +C N1: THE NUMBER OF ITEMS IN V1. +C N2: THE NUMBER OF ITEMS IN V2. +C V1: THE VECTOR OF THE UNFIXED ITEMS. +C V2: THE VECTOR OF THE FIXED AND UNFIXED ITEMS INTO WHICH THE +C ELEMENTS OF V1 ARE TO BE INSERTED. + + +C***FIRST EXECUTABLE STATEMENT DUNPAC + N1 = 0 + IF (IFIX(1).GE.0) THEN + DO 10 I = 1,N2 + IF (IFIX(I).NE.0) THEN + N1 = N1 + 1 + V2(I) = V1(N1) + END IF + 10 CONTINUE + ELSE + N1 = N2 + CALL DCOPY_odr(N2,V1,1,V2,1) + END IF + RETURN + END +*DVEVTR + SUBROUTINE DVEVTR + + (M,NQ,INDX, + + V,LDV,LD2V, E,LDE, VE,LDVE,LD2VE, VEV,LDVEV, + + WRK5) +C***BEGIN PROLOGUE DVEVTR +C***REFER TO DODR,DODRC +C***ROUTINES CALLED DSOLVE +C***DATE WRITTEN 910613 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE V*E*TRANS(V) FOR THE (INDX)TH M BY NQ ARRAY IN V +C***END PROLOGUE DVEVTR + +C...SCALAR ARGUMENTS + INTEGER + + INDX,LDE,LDV,LDVE,LDVEV,LD2V,LD2VE,M,NQ + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + E(LDE,M),V(LDV,LD2V,NQ),VE(LDVE,LD2VE,M),VEV(LDVEV,NQ),WRK5(M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + J,L1,L2 + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DSOLVE + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C INDX: THE ROW IN V IN WHICH THE M BY NQ ARRAY IS STORED. +C J: AN INDEXING VARIABLE. +C LDE: THE LEADING DIMENSION OF ARRAY E. +C LDV: THE LEADING DIMENSION OF ARRAY V. +C LDVE: THE LEADING DIMENSION OF ARRAY VE. +C LDVEV: THE LEADING DIMENSION OF ARRAY VEV. +C LD2V: THE SECOND DIMENSION OF ARRAY V. +C L1: AN INDEXING VARIABLE. +C L2: AN INDEXING VARIABLE. +C M: THE NUMBER OF COLUMNS OF DATA IN THE INDEPENDENT VARIABLE. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C E: THE M BY M MATRIX OF THE FACTORS SO ETE = (D**2 + ALPHA*T**2). +C V: AN ARRAY OF NQ BY M MATRICES. +C VE: THE NQ BY M ARRAY VE = V * INV(E) +C VEV: THE NQ BY NQ ARRAY VEV = V * INV(ETE) * TRANS(V). +C WRK5: AN M WORK VECTOR. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DVEVTR + + + IF (NQ.EQ.0 .OR. M.EQ.0) RETURN + + DO 140 L1 = 1,NQ + DO 110 J = 1,M + WRK5(J) = V(INDX,J,L1) + 110 CONTINUE + CALL DSOLVE(M,E,LDE,WRK5,1,4) + DO 120 J = 1,M + VE(INDX,L1,J) = WRK5(J) + 120 CONTINUE + 140 CONTINUE + + DO 230 L1 = 1,NQ + DO 220 L2 = 1,L1 + VEV(L1,L2) = ZERO + DO 210 J = 1,M + VEV(L1,L2) = VEV(L1,L2) + VE(INDX,L1,J)*VE(INDX,L2,J) + 210 CONTINUE + VEV(L2,L1) = VEV(L1,L2) + 220 CONTINUE + 230 CONTINUE + + RETURN + END +*DWGHT + SUBROUTINE DWGHT + + (N,M,WT,LDWT,LD2WT,T,LDT,WTT,LDWTT) +C***BEGIN PROLOGUE DWGHT +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SCALE MATRIX T USING WT, I.E., COMPUTE WTT = WT*T +C***END PROLOGUE DWGHT + +C...SCALAR ARGUMENTS + INTEGER + + LDT,LDWT,LDWTT,LD2WT,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,M),WT(LDWT,LD2WT,M),WTT(LDWTT,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP,ZERO + INTEGER + + I,J,K + +C...INTRINSIC FUNCTIONS + INTRINSIC + + ABS + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C K: AN INDEXING VARIABLE. +C LDT: THE LEADING DIMENSION OF ARRAY T. +C LDWT: THE LEADING DIMENSION OF ARRAY WT. +C LDWTT: THE LEADING DIMENSION OF ARRAY WTT. +C LD2WT: THE SECOND DIMENSION OF ARRAY WT. +C M: THE NUMBER OF COLUMNS OF DATA IN T. +C N: THE NUMBER OF ROWS OF DATA IN T. +C T: THE ARRAY BEING SCALED BY WT. +C TEMP: A TEMPORARY SCALAR. +C WT: THE WEIGHTS. +C WTT: THE RESULTS OF WEIGHTING ARRAY T BY WT. +C ARRAY WTT CAN BE THE SAME AS T ONLY IF THE ARRAYS IN WT +C ARE UPPER TRIANGULAR WITH ZEROS BELOW THE DIAGONAL. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DWGHT + + + IF (N.EQ.0 .OR. M.EQ.0) RETURN + + IF (WT(1,1,1).GE.ZERO) THEN + IF (LDWT.GE.N) THEN + IF (LD2WT.GE.M) THEN +C WT IS AN N-ARRAY OF M BY M MATRICES + DO 130 I=1,N + DO 120 J=1,M + TEMP = ZERO + DO 110 K=1,M + TEMP = TEMP + WT(I,J,K)*T(I,K) + 110 CONTINUE + WTT(I,J) = TEMP + 120 CONTINUE + 130 CONTINUE + ELSE +C WT IS AN N-ARRAY OF DIAGONAL MATRICES + DO 230 I=1,N + DO 220 J=1,M + WTT(I,J) = WT(I,1,J)*T(I,J) + 220 CONTINUE + 230 CONTINUE + END IF + ELSE + IF (LD2WT.GE.M) THEN +C WT IS AN M BY M MATRIX + DO 330 I=1,N + DO 320 J=1,M + TEMP = ZERO + DO 310 K=1,M + TEMP = TEMP + WT(1,J,K)*T(I,K) + 310 CONTINUE + WTT(I,J) = TEMP + 320 CONTINUE + 330 CONTINUE + ELSE +C WT IS A DIAGONAL MATRICE + DO 430 I=1,N + DO 420 J=1,M + WTT(I,J) = WT(1,1,J)*T(I,J) + 420 CONTINUE + 430 CONTINUE + END IF + END IF + ELSE +C WT IS A SCALAR + DO 520 J=1,M + DO 510 I=1,N + WTT(I,J) = ABS(WT(1,1,1))*T(I,J) + 510 CONTINUE + 520 CONTINUE + END IF + + RETURN + END +*DWINF + SUBROUTINE DWINF + + (N,M,NP,NQ,LDWE,LD2WE,ISODR, + + DELTAI,EPSI,XPLUSI,FNI,SDI,VCVI, + + RVARI,WSSI,WSSDEI,WSSEPI,RCONDI,ETAI, + + OLMAVI,TAUI,ALPHAI,ACTRSI,PNORMI,RNORSI,PRERSI, + + PARTLI,SSTOLI,TAUFCI,EPSMAI, + + BETA0I,BETACI,BETASI,BETANI,SI,SSI,SSFI,QRAUXI,UI, + + FSI,FJACBI,WE1I,DIFFI, + + DELTSI,DELTNI,TI,TTI,OMEGAI,FJACDI, + + WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + LWKMN) +C***BEGIN PROLOGUE DWINF +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920619 (YYMMDD) +C***PURPOSE SET STORAGE LOCATIONS WITHIN DOUBLE PRECISION WORK SPACE +C***END PROLOGUE DWINF + +C...SCALAR ARGUMENTS + INTEGER + + ACTRSI,ALPHAI,BETACI,BETANI,BETASI,BETA0I,DELTAI,DELTNI,DELTSI, + + DIFFI,EPSI,EPSMAI,ETAI,FJACBI,FJACDI,FNI,FSI,LDWE,LD2WE,LWKMN, + + M,N,NP,NQ,OLMAVI,OMEGAI,PARTLI,PNORMI,PRERSI,QRAUXI,RCONDI, + + RNORSI,RVARI,SDI,SI,SSFI,SSI,SSTOLI,TAUFCI,TAUI,TI,TTI,UI,VCVI, + + WE1I,WRK1I,WRK2I,WRK3I,WRK4I,WRK5I,WRK6I,WRK7I, + + WSSI,WSSDEI,WSSEPI,XPLUSI + LOGICAL + + ISODR + +C...LOCAL SCALARS + INTEGER + + NEXT + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C ACTRSI: THE LOCATION IN ARRAY WORK OF VARIABLE ACTRS. +C ALPHAI: THE LOCATION IN ARRAY WORK OF VARIABLE ALPHA. +C BETACI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAC. +C BETANI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAN. +C BETASI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETAS. +C BETA0I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY BETA0. +C DELTAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTA. +C DELTNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAN. +C DELTSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DELTAS. +C DIFFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY DIFF. +C EPSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY EPS. +C EPSMAI: THE LOCATION IN ARRAY WORK OF VARIABLE EPSMAC. +C ETAI: THE LOCATION IN ARRAY WORK OF VARIABLE ETA. +C FJACBI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACB. +C FJACDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FJACD. +C FNI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FN. +C FSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY FS. +C ISODR: THE VARIABLE DESIGNATING WHETHER THE SOLUTION IS BY ODR +C (ISODR=TRUE) OR BY OLS (ISODR=FALSE). +C LDWE: THE LEADING DIMENSION OF ARRAY WE. +C LD2WE: THE SECOND DIMENSION OF ARRAY WE. +C LWKMN: THE MINIMUM ACCEPTABLE LENGTH OF VECTOR WORK. +C M: THE NUMBER OF COLUMNS OF DATA IN THE EXPLANATORY VARIABLE. +C N: THE NUMBER OF OBSERVATIONS. +C NEXT: THE NEXT AVAILABLE LOCATION WITH WORK. +C NP: THE NUMBER OF FUNCTION PARAMETERS. +C NQ: THE NUMBER OF RESPONSES PER OBSERVATION. +C OLMAVI: THE LOCATION IN ARRAY WORK OF VARIABLE OLMAVG. +C OMEGAI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY OMEGA. +C PARTLI: THE LOCATION IN ARRAY WORK OF VARIABLE PARTOL. +C PNORMI: THE LOCATION IN ARRAY WORK OF VARIABLE PNORM. +C PRERSI: THE LOCATION IN ARRAY WORK OF VARIABLE PRERS. +C QRAUXI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY QRAUX. +C RCONDI: THE LOCATION IN ARRAY WORK OF VARIABLE RCONDI. +C RNORSI: THE LOCATION IN ARRAY WORK OF VARIABLE RNORMS. +C RVARI: THE LOCATION IN ARRAY WORK OF VARIABLE RVAR. +C SDI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SD. +C SI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY S. +C SSFI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SSF. +C SSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY SS. +C SSTOLI: THE LOCATION IN ARRAY WORK OF VARIABLE SSTOL. +C TAUFCI: THE LOCATION IN ARRAY WORK OF VARIABLE TAUFAC. +C TAUI: THE LOCATION IN ARRAY WORK OF VARIABLE TAU. +C TI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY T. +C TTI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY TT. +C UI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY U. +C VCVI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY VCV. +C WE1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WE1. +C WRK1I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK1. +C WRK2I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK2. +C WRK3I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK3. +C WRK4I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK4. +C WRK5I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK5. +C WRK6I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK6. +C WRK7I: THE STARTING LOCATION IN ARRAY WORK OF ARRAY WRK7. +C WSSI: THE LOCATION IN ARRAY WORK OF VARIABLE WSS. +C WSSDEI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSDEL. +C WSSEPI: THE LOCATION IN ARRAY WORK OF VARIABLE WSSEPS. +C XPLUSI: THE STARTING LOCATION IN ARRAY WORK OF ARRAY XPLUSD. + + +C***FIRST EXECUTABLE STATEMENT DWINF + + + IF (N.GE.1 .AND. M.GE.1 .AND. NP.GE.1 .AND. NQ.GE.1 .AND. + + LDWE.GE.1 .AND. LD2WE.GE.1) THEN + + DELTAI = 1 + EPSI = DELTAI + N*M + XPLUSI = EPSI + N*NQ + FNI = XPLUSI + N*M + SDI = FNI + N*NQ + VCVI = SDI + NP + RVARI = VCVI + NP*NP + + WSSI = RVARI + 1 + WSSDEI = WSSI + 1 + WSSEPI = WSSDEI + 1 + RCONDI = WSSEPI + 1 + ETAI = RCONDI + 1 + OLMAVI = ETAI + 1 + + TAUI = OLMAVI + 1 + ALPHAI = TAUI + 1 + ACTRSI = ALPHAI + 1 + PNORMI = ACTRSI + 1 + RNORSI = PNORMI + 1 + PRERSI = RNORSI + 1 + PARTLI = PRERSI + 1 + SSTOLI = PARTLI + 1 + TAUFCI = SSTOLI + 1 + EPSMAI = TAUFCI + 1 + BETA0I = EPSMAI + 1 + + BETACI = BETA0I + NP + BETASI = BETACI + NP + BETANI = BETASI + NP + SI = BETANI + NP + SSI = SI + NP + SSFI = SSI + NP + QRAUXI = SSFI + NP + UI = QRAUXI + NP + FSI = UI + NP + + FJACBI = FSI + N*NQ + + WE1I = FJACBI + N*NP*NQ + + DIFFI = WE1I + LDWE*LD2WE*NQ + + NEXT = DIFFI + NQ*(NP+M) + + IF (ISODR) THEN + DELTSI = NEXT + DELTNI = DELTSI + N*M + TI = DELTNI + N*M + TTI = TI + N*M + OMEGAI = TTI + N*M + FJACDI = OMEGAI + NQ*NQ + WRK1I = FJACDI + N*M*NQ + NEXT = WRK1I + N*M*NQ + ELSE + DELTSI = DELTAI + DELTNI = DELTAI + TI = DELTAI + TTI = DELTAI + OMEGAI = DELTAI + FJACDI = DELTAI + WRK1I = DELTAI + END IF + + WRK2I = NEXT + WRK3I = WRK2I + N*NQ + WRK4I = WRK3I + NP + WRK5I = WRK4I + M*M + WRK6I = WRK5I + M + WRK7I = WRK6I + N*NQ*NP + NEXT = WRK7I + 5*NQ + + LWKMN = NEXT + ELSE + DELTAI = 1 + EPSI = 1 + XPLUSI = 1 + FNI = 1 + SDI = 1 + VCVI = 1 + RVARI = 1 + WSSI = 1 + WSSDEI = 1 + WSSEPI = 1 + RCONDI = 1 + ETAI = 1 + OLMAVI = 1 + TAUI = 1 + ALPHAI = 1 + ACTRSI = 1 + PNORMI = 1 + RNORSI = 1 + PRERSI = 1 + PARTLI = 1 + SSTOLI = 1 + TAUFCI = 1 + EPSMAI = 1 + BETA0I = 1 + BETACI = 1 + BETASI = 1 + BETANI = 1 + SI = 1 + SSI = 1 + SSFI = 1 + QRAUXI = 1 + FSI = 1 + UI = 1 + FJACBI = 1 + WE1I = 1 + DIFFI = 1 + DELTSI = 1 + DELTNI = 1 + TI = 1 + TTI = 1 + FJACDI = 1 + OMEGAI = 1 + WRK1I = 1 + WRK2I = 1 + WRK3I = 1 + WRK4I = 1 + WRK5I = 1 + WRK6I = 1 + WRK7I = 1 + LWKMN = 1 + END IF + + RETURN + END +*DXMY + SUBROUTINE DXMY + + (N,M,X,LDX,Y,LDY,XMY,LDXMY) +C***BEGIN PROLOGUE DXMY +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE XMY = X - Y +C***END PROLOGUE DXMY + +C...SCALAR ARGUMENTS + INTEGER + + LDX,LDXMY,LDY,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M),XMY(LDXMY,M),Y(LDY,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDXMY: THE LEADING DIMENSION OF ARRAY XMY. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C M: THE NUMBER OF COLUMNS OF DATA IN ARRAYS X AND Y. +C N: THE NUMBER OF ROWS OF DATA IN ARRAYS X AND Y. +C X: THE FIRST OF THE TWO ARRAYS. +C XMY: THE VALUES OF X-Y. +C Y: THE SECOND OF THE TWO ARRAYS. + + +C***FIRST EXECUTABLE STATEMENT DXMY + + + DO 20 J=1,M + DO 10 I=1,N + XMY(I,J) = X(I,J) - Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END +*DXPY + SUBROUTINE DXPY + + (N,M,X,LDX,Y,LDY,XPY,LDXPY) +C***BEGIN PROLOGUE DXPY +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE COMPUTE XPY = X + Y +C***END PROLOGUE DXPY + +C...SCALAR ARGUMENTS + INTEGER + + LDX,LDXPY,LDY,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + X(LDX,M),XPY(LDXPY,M),Y(LDY,M) + +C...LOCAL SCALARS + INTEGER + + I,J + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDX: THE LEADING DIMENSION OF ARRAY X. +C LDXPY: THE LEADING DIMENSION OF ARRAY XPY. +C LDY: THE LEADING DIMENSION OF ARRAY Y. +C M: THE NUMBER OF COLUMNS OF DATA IN ARRAYS X AND Y. +C N: THE NUMBER OF ROWS OF DATA IN ARRAYS X AND Y. +C X: THE FIRST OF THE TWO ARRAYS TO BE ADDED TOGETHER. +C XPY: THE VALUES OF X+Y. +C Y: THE SECOND OF THE TWO ARRAYS TO BE ADDED TOGETHER. + + +C***FIRST EXECUTABLE STATEMENT DXPY + + + DO 20 J=1,M + DO 10 I=1,N + XPY(I,J) = X(I,J) + Y(I,J) + 10 CONTINUE + 20 CONTINUE + + RETURN + END +*DZERO + SUBROUTINE DZERO + + (N,M,A,LDA) +C***BEGIN PROLOGUE DZERO +C***REFER TO DODR,DODRC +C***ROUTINES CALLED (NONE) +C***DATE WRITTEN 860529 (YYMMDD) +C***REVISION DATE 920304 (YYMMDD) +C***PURPOSE SET A = ZERO +C***END PROLOGUE DZERO + +C...SCALAR ARGUMENTS + INTEGER + + LDA,M,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + A(LDA,M) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ZERO + INTEGER + + I,J + +C...DATA STATEMENTS + DATA + + ZERO + + /0.0D0/ + +C...VARIABLE DEFINITIONS (ALPHABETICALLY) +C A: THE ARRAY TO BE SET TO ZERO. +C I: AN INDEXING VARIABLE. +C J: AN INDEXING VARIABLE. +C LDA: THE LEADING DIMENSION OF ARRAY A. +C M: THE NUMBER OF COLUMNS TO BE SET TO ZERO. +C N: THE NUMBER OF ROWS TO BE SET TO ZERO. +C ZERO: THE VALUE 0.0D0. + + +C***FIRST EXECUTABLE STATEMENT DZERO + + + DO 20 J=1,M + DO 10 I=1,N + A(I,J) = ZERO + 10 CONTINUE + 20 CONTINUE + + RETURN + END + +*DASUM + DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX) +C***BEGIN PROLOGUE DASUM +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A3A +C***KEYWORDS ADD,BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,MAGNITUDE,SUM, +C VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE SUM OF MAGNITUDES OF D.P. VECTOR COMPONENTS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DASUM DOUBLE PRECISION RESULT (ZERO IF N .LE. 0) +C RETURNS SUM OF MAGNITUDES OF DOUBLE PRECISION DX. +C DASUM = SUM FROM 0 TO N-1 OF DABS(DX(1+I*INCX)) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DASUM + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + INTEGER + + I,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,MOD + + +C***FIRST EXECUTABLE STATEMENT DASUM + + + DASUM = 0.D0 + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + NS = N*INCX + DO 10 I=1,NS,INCX + DASUM = DASUM + DABS(DX(I)) + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 6. + + 20 M = MOD(N,6) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DASUM = DASUM + DABS(DX(I)) + 30 CONTINUE + IF( N .LT. 6 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,6 + DASUM = DASUM + DABS(DX(I)) + DABS(DX(I+1)) + DABS(DX(I+2)) + 1 + DABS(DX(I+3)) + DABS(DX(I+4)) + DABS(DX(I+5)) + 50 CONTINUE + RETURN + END +*DAXPY_odr + SUBROUTINE DAXPY_odr(N,DA,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DAXPY_odr +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A7 +C***KEYWORDS BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,TRIAD,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P COMPUTATION Y = A*X + Y +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DA DOUBLE PRECISION SCALAR MULTIPLIER +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DY DOUBLE PRECISION RESULT (UNCHANGED IF N .LE. 0) +C OVERWRITE DOUBLE PRECISION DY WITH DOUBLE PRECISION DA*DX + DY. +C FOR I = 0 TO N-1, REPLACE DY(LY+I*INCY) WITH DA*DX(LX+I*INCX) + +C DY(LY+I*INCY), WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N +C AND LY IS DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DAXPY_odr + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DAXPY_odr + + + IF(N.LE.0.OR.DA.EQ.0.D0) RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR NONEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DY(IY) + DA*DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 4. + + 20 M = MOD(N,4) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DY(I) + DA*DX(I) + 30 CONTINUE + IF( N .LT. 4 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,4 + DY(I) = DY(I) + DA*DX(I) + DY(I + 1) = DY(I + 1) + DA*DX(I + 1) + DY(I + 2) = DY(I + 2) + DA*DX(I + 2) + DY(I + 3) = DY(I + 3) + DA*DX(I + 3) + 50 CONTINUE + RETURN + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DY(I) = DA*DX(I) + DY(I) + 70 CONTINUE + RETURN + END +*DCHEX + SUBROUTINE DCHEX(R,LDR,P,K,L,Z,LDZ,NZ,C,S,JOB) +C***BEGIN PROLOGUE DCHEX +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D7B +C***KEYWORDS CHOLESKY DECOMPOSITION,DOUBLE PRECISION,EXCHANGE, +C LINEAR ALGEBRA,LINPACK,MATRIX,POSITIVE DEFINITE +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE UPDATES THE CHOLESKY FACTORIZATION A=TRANS(R)*R OF A +C POSITIVE DEFINITE MATRIX A OF ORDER P UNDER DIAGONAL +C PERMUTATIONS OF THE FORM TRANS(E)*A*E WHERE E IS A +C PERMUTATION MATRIX. +C***DESCRIPTION +C DCHEX UPDATES THE CHOLESKY FACTORIZATION +C A = TRANS(R)*R +C OF A POSITIVE DEFINITE MATRIX A OF ORDER P UNDER DIAGONAL +C PERMUTATIONS OF THE FORM +C TRANS(E)*A*E +C WHERE E IS A PERMUTATION MATRIX. SPECIFICALLY, GIVEN +C AN UPPER TRIANGULAR MATRIX R AND A PERMUTATION MATRIX +C E (WHICH IS SPECIFIED BY K, L, AND JOB), DCHEX DETERMINES +C AN ORTHOGONAL MATRIX U SUCH THAT +C U*R*E = RR, +C WHERE RR IS UPPER TRIANGULAR. AT THE USERS OPTION, THE +C TRANSFORMATION U WILL BE MULTIPLIED INTO THE ARRAY Z. +C IF A = TRANS(X)*X, SO THAT R IS THE TRIANGULAR PART OF THE +C QR FACTORIZATION OF X, THEN RR IS THE TRIANGULAR PART OF THE +C QR FACTORIZATION OF X*E, I.E. X WITH ITS COLUMNS PERMUTED. +C FOR A LESS TERSE DESCRIPTION OF WHAT DCHEX DOES AND HOW +C IT MAY BE APPLIED, SEE THE LINPACK GUIDE. +C THE MATRIX Q IS DETERMINED AS THE PRODUCT U(L-K)*...*U(1) +C OF PLANE ROTATIONS OF THE FORM +C ( C(I) S(I) ) +C ( ) , +C ( -S(I) C(I) ) +C WHERE C(I) IS DOUBLE PRECISION. THE ROWS THESE ROTATIONS OPERATE +C ON ARE DESCRIBED BELOW. +C THERE ARE TWO TYPES OF PERMUTATIONS, WHICH ARE DETERMINED +C BY THE VALUE OF JOB. +C 1. RIGHT CIRCULAR SHIFT (JOB = 1). +C THE COLUMNS ARE REARRANGED IN THE FOLLOWING ORDER. +C 1,...,K-1,L,K,K+1,...,L-1,L+1,...,P. +C U IS THE PRODUCT OF L-K ROTATIONS U(I), WHERE U(I) +C ACTS IN THE (L-I,L-I+1)-PLANE. +C 2. LEFT CIRCULAR SHIFT (JOB = 2). +C THE COLUMNS ARE REARRANGED IN THE FOLLOWING ORDER +C 1,...,K-1,K+1,K+2,...,L,K,L+1,...,P. +C U IS THE PRODUCT OF L-K ROTATIONS U(I), WHERE U(I) +C ACTS IN THE (K+I-1,K+I)-PLANE. +C ON ENTRY +C R DOUBLE PRECISION(LDR,P), WHERE LDR .GE. P. +C R CONTAINS THE UPPER TRIANGULAR FACTOR +C THAT IS TO BE UPDATED. ELEMENTS OF R +C BELOW THE DIAGONAL ARE NOT REFERENCED. +C LDR INTEGER. +C LDR IS THE LEADING DIMENSION OF THE ARRAY R. +C P INTEGER. +C P IS THE ORDER OF THE MATRIX R. +C K INTEGER. +C K IS THE FIRST COLUMN TO BE PERMUTED. +C L INTEGER. +C L IS THE LAST COLUMN TO BE PERMUTED. +C L MUST BE STRICTLY GREATER THAN K. +C Z DOUBLE PRECISION(LDZ,N)Z), WHERE LDZ .GE. P. +C Z IS AN ARRAY OF NZ P-VECTORS INTO WHICH THE +C TRANSFORMATION U IS MULTIPLIED. Z IS +C NOT REFERENCED IF NZ = 0. +C LDZ INTEGER. +C LDZ IS THE LEADING DIMENSION OF THE ARRAY Z. +C NZ INTEGER. +C NZ IS THE NUMBER OF COLUMNS OF THE MATRIX Z. +C JOB INTEGER. +C JOB DETERMINES THE TYPE OF PERMUTATION. +C JOB = 1 RIGHT CIRCULAR SHIFT. +C JOB = 2 LEFT CIRCULAR SHIFT. +C ON RETURN +C R CONTAINS THE UPDATED FACTOR. +C Z CONTAINS THE UPDATED MATRIX Z. +C C DOUBLE PRECISION(P). +C C CONTAINS THE COSINES OF THE TRANSFORMING ROTATIONS. +C S DOUBLE PRECISION(P). +C S CONTAINS THE SINES OF THE TRANSFORMING ROTATIONS. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DROTG +C***END PROLOGUE DCHEX + +C...SCALAR ARGUMENTS + INTEGER + + JOB,K,L,LDR,LDZ,NZ,P + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + C(*),R(LDR,*),S(*),Z(LDZ,*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + T,T1 + INTEGER + + I,II,IL,IU,J,JJ,KM1,KP1,LM1,LMK + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DROTG + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MAX0,MIN0 + + +C***FIRST EXECUTABLE STATEMENT DCHEX + + + KM1 = K - 1 + KP1 = K + 1 + LMK = L - K + LM1 = L - 1 + +C PERFORM THE APPROPRIATE TASK. + + GO TO (10,130), JOB + +C RIGHT CIRCULAR SHIFT. + + 10 CONTINUE + +C REORDER THE COLUMNS. + + DO 20 I = 1, L + II = L - I + 1 + S(I) = R(II,L) + 20 CONTINUE + DO 40 JJ = K, LM1 + J = LM1 - JJ + K + DO 30 I = 1, J + R(I,J+1) = R(I,J) + 30 CONTINUE + R(J+1,J+1) = 0.0D0 + 40 CONTINUE + IF (K .EQ. 1) GO TO 60 + DO 50 I = 1, KM1 + II = L - I + 1 + R(I,K) = S(II) + 50 CONTINUE + 60 CONTINUE + +C CALCULATE THE ROTATIONS. + + T = S(1) + DO 70 I = 1, LMK + T1 = S(I) + CALL DROTG(S(I+1),T,C(I),T1) + S(I) = T1 + T = S(I+1) + 70 CONTINUE + R(K,K) = T + DO 90 J = KP1, P + IL = MAX0(1,L-J+1) + DO 80 II = IL, LMK + I = L - II + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 80 CONTINUE + 90 CONTINUE + +C IF REQUIRED, APPLY THE TRANSFORMATIONS TO Z. + + IF (NZ .LT. 1) GO TO 120 + DO 110 J = 1, NZ + DO 100 II = 1, LMK + I = L - II + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE + GO TO 260 + +C LEFT CIRCULAR SHIFT + + 130 CONTINUE + +C REORDER THE COLUMNS + + DO 140 I = 1, K + II = LMK + I + S(II) = R(I,K) + 140 CONTINUE + DO 160 J = K, LM1 + DO 150 I = 1, J + R(I,J) = R(I,J+1) + 150 CONTINUE + JJ = J - KM1 + S(JJ) = R(J+1,J+1) + 160 CONTINUE + DO 170 I = 1, K + II = LMK + I + R(I,L) = S(II) + 170 CONTINUE + DO 180 I = KP1, L + R(I,L) = 0.0D0 + 180 CONTINUE + +C REDUCTION LOOP. + + DO 220 J = K, P + IF (J .EQ. K) GO TO 200 + +C APPLY THE ROTATIONS. + + IU = MIN0(J-1,L-1) + DO 190 I = K, IU + II = I - K + 1 + T = C(II)*R(I,J) + S(II)*R(I+1,J) + R(I+1,J) = C(II)*R(I+1,J) - S(II)*R(I,J) + R(I,J) = T + 190 CONTINUE + 200 CONTINUE + IF (J .GE. L) GO TO 210 + JJ = J - K + 1 + T = S(JJ) + CALL DROTG(R(J,J),T,C(JJ),S(JJ)) + 210 CONTINUE + 220 CONTINUE + +C APPLY THE ROTATIONS TO Z. + + IF (NZ .LT. 1) GO TO 250 + DO 240 J = 1, NZ + DO 230 I = K, LM1 + II = I - KM1 + T = C(II)*Z(I,J) + S(II)*Z(I+1,J) + Z(I+1,J) = C(II)*Z(I+1,J) - S(II)*Z(I,J) + Z(I,J) = T + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + 260 CONTINUE + RETURN + END +*DCOPY_odr + SUBROUTINE DCOPY_odr(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DCOPY_odr +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A5 +C***KEYWORDS BLAS,COPY,DOUBLE PRECISION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. VECTOR COPY Y = X +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DY COPY OF VECTOR DX (UNCHANGED IF N .LE. 0) +C COPY DOUBLE PRECISION DX TO DOUBLE PRECISION DY. +C FOR I = 0 TO N-1, COPY DX(LX+I*INCX) TO DY(LY+I*INCY), +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DCOPY_odr + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DCOPY_odr + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DY(IY) = DX(IX) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 7. + + 20 M = MOD(N,7) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DY(I) = DX(I) + 30 CONTINUE + IF( N .LT. 7 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,7 + DY(I) = DX(I) + DY(I + 1) = DX(I + 1) + DY(I + 2) = DX(I + 2) + DY(I + 3) = DX(I + 3) + DY(I + 4) = DX(I + 4) + DY(I + 5) = DX(I + 5) + DY(I + 6) = DX(I + 6) + 50 CONTINUE + RETURN + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + 60 CONTINUE + NS=N*INCX + DO 70 I=1,NS,INCX + DY(I) = DX(I) + 70 CONTINUE + RETURN + END +*DDOT_odr + DOUBLE PRECISION FUNCTION DDOT_odr(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DDOT_odr +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A4 +C***KEYWORDS BLAS,DOUBLE PRECISION,INNER PRODUCT,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. INNER PRODUCT OF D.P. VECTORS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DDOT_odr DOUBLE PRECISION DOT PRODUCT (ZERO IF N .LE. 0) +C RETURNS THE DOT PRODUCT OF DOUBLE PRECISION DX AND DY. +C DDOT_odr = SUM FOR I = 0 TO N-1 OF DX(LX+I*INCX) * DY(LY+I*INCY) +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DDOT_odr + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DDOT_odr + + + DDOT_odr = 0.D0 + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DDOT_odr = DDOT_odr + DX(IX)*DY(IY) + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1. + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DDOT_odr = DDOT_odr + DX(I)*DY(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DDOT_odr = DDOT_odr + DX(I)*DY(I) + DX(I+1)*DY(I+1) + + 1 DX(I + 2)*DY(I + 2) + DX(I + 3)*DY(I + 3) + DX(I + 4)*DY(I + 4) + 50 CONTINUE + RETURN + +C CODE FOR POSITIVE EQUAL INCREMENTS .NE.1. + + 60 CONTINUE + NS = N*INCX + DO 70 I=1,NS,INCX + DDOT_odr = DDOT_odr + DX(I)*DY(I) + 70 CONTINUE + RETURN + END +*DNRM2_odr + DOUBLE PRECISION FUNCTION DNRM2_odr(N,DX,INCX) +C***BEGIN PROLOGUE DNRM2_odr +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A3B +C***KEYWORDS BLAS,DOUBLE PRECISION,EUCLIDEAN,L2,LENGTH,LINEAR ALGEBRA, +C NORM,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE EUCLIDEAN LENGTH (L2 NORM) OF D.P. VECTOR +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DNRM2_odr DOUBLE PRECISION RESULT (ZERO IF N .LE. 0) +C EUCLIDEAN NORM OF THE N-VECTOR STORED IN DX() WITH STORAGE +C INCREMENT INCX . +C IF N .LE. 0 RETURN WITH RESULT = 0. +C IF N .GE. 1 THEN INCX MUST BE .GE. 1 +C C.L. LAWSON, 1978 JAN 08 +C FOUR PHASE METHOD USING TWO BUILT-IN CONSTANTS THAT ARE +C HOPEFULLY APPLICABLE TO ALL MACHINES. +C CUTLO = MAXIMUM OF DSQRT(U/EPS) OVER ALL KNOWN MACHINES. +C CUTHI = MINIMUM OF DSQRT(V) OVER ALL KNOWN MACHINES. +C WHERE +C EPS = SMALLEST NO. SUCH THAT EPS + 1. .GT. 1. +C U = SMALLEST POSITIVE NO. (UNDERFLOW LIMIT) +C V = LARGEST NO. (OVERFLOW LIMIT) +C BRIEF OUTLINE OF ALGORITHM.. +C PHASE 1 SCANS ZERO COMPONENTS. +C MOVE TO PHASE 2 WHEN A COMPONENT IS NONZERO AND .LE. CUTLO +C MOVE TO PHASE 3 WHEN A COMPONENT IS .GT. CUTLO +C MOVE TO PHASE 4 WHEN A COMPONENT IS .GE. CUTHI/M +C WHERE M = N FOR X() REAL AND M = 2*N FOR COMPLEX. + +C VALUES FOR CUTLO AND CUTHI.. +C FROM THE ENVIRONMENTAL PARAMETERS LISTED IN THE IMSL CONVERTER +C DOCUMENT THE LIMITING VALUES ARE AS FOLLOWS.. +C CUTLO, S.P. U/EPS = 2**(-102) FOR HONEYWELL. CLOSE SECONDS ARE +C UNIVAC AND DEC AT 2**(-103) +C THUS CUTLO = 2**(-51) = 4.44089E-16 +C CUTHI, S.P. V = 2**127 FOR UNIVAC, HONEYWELL, AND DEC. +C THUS CUTHI = 2**(63.5) = 1.30438E19 +C CUTLO, D.P. U/EPS = 2**(-67) FOR HONEYWELL AND DEC. +C THUS CUTLO = 2**(-33.5) = 8.23181D-11 +C CUTHI, D.P. SAME AS S.P. CUTHI = 1.30438D19 +C DATA CUTLO, CUTHI / 8.232D-11, 1.304D19 / +C DATA CUTLO, CUTHI / 4.441E-16, 1.304E19 / +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DNRM2_odr + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + CUTHI,CUTLO,HITEST,ONE,SUM,XMAX,ZERO + INTEGER + + I,J,NEXT,NN + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DSQRT,FLOAT + +C...DATA STATEMENTS + DATA + + ZERO,ONE/0.0D0,1.0D0/ + DATA + + CUTLO,CUTHI/8.232D-11,1.304D19/ + + +C***FIRST EXECUTABLE STATEMENT DNRM2_odr + + + XMAX = ZERO + IF(N .GT. 0) GO TO 10 + DNRM2_odr = ZERO + GO TO 300 + +! 10 ASSIGN 30 TO NEXT + 10 NEXT=30 + SUM = ZERO + NN = N * INCX +C BEGIN MAIN LOOP + I = 1 +C 20 GO TO NEXT,(30, 50, 70, 110) +! 20 GO TO NEXT +!------------------------------ +20 IF(NEXT.EQ.30) goto 30 + IF(NEXT.EQ.50) goto 50 + IF(NEXT.EQ.70) goto 70 + IF(NEXT.EQ.110) goto 110 + + 30 IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 +! ASSIGN 50 TO NEXT + NEXT=50 + XMAX = ZERO + +C PHASE 1. SUM IS ZERO + + 50 IF( DX(I) .EQ. ZERO) GO TO 200 + IF( DABS(DX(I)) .GT. CUTLO) GO TO 85 + +C PREPARE FOR PHASE 2. +! ASSIGN 70 TO NEXT + NEXT=70 + GO TO 105 + +C PREPARE FOR PHASE 4. + + 100 I = J +! ASSIGN 110 TO NEXT + NEXT=110 + SUM = (SUM / DX(I)) / DX(I) + 105 XMAX = DABS(DX(I)) + GO TO 115 + +C PHASE 2. SUM IS SMALL. +C SCALE TO AVOID DESTRUCTIVE UNDERFLOW. + + 70 IF( DABS(DX(I)) .GT. CUTLO ) GO TO 75 + +C COMMON CODE FOR PHASES 2 AND 4. +C IN PHASE 4 SUM IS LARGE. SCALE TO AVOID OVERFLOW. + + 110 IF( DABS(DX(I)) .LE. XMAX ) GO TO 115 + SUM = ONE + SUM * (XMAX / DX(I))**2 + XMAX = DABS(DX(I)) + GO TO 200 + + 115 SUM = SUM + (DX(I)/XMAX)**2 + GO TO 200 + + +C PREPARE FOR PHASE 3. + + 75 SUM = (SUM * XMAX) * XMAX + + +C FOR REAL OR D.P. SET HITEST = CUTHI/N +C FOR COMPLEX SET HITEST = CUTHI/(2*N) + + 85 HITEST = CUTHI/FLOAT( N ) + +C PHASE 3. SUM IS MID-RANGE. NO SCALING. + + DO 95 J =I,NN,INCX + IF(DABS(DX(J)) .GE. HITEST) GO TO 100 + 95 SUM = SUM + DX(J)**2 + DNRM2_odr = DSQRT( SUM ) + GO TO 300 + + 200 CONTINUE + I = I + INCX + IF ( I .LE. NN ) GO TO 20 + +C END OF MAIN LOOP. + +C COMPUTE SQUARE ROOT AND ADJUST FOR SCALING. + + DNRM2_odr = XMAX * DSQRT(SUM) + 300 CONTINUE + RETURN + END +*DPODI + SUBROUTINE DPODI(A,LDA,N,DET,JOB) +C***BEGIN PROLOGUE DPODI +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2B1B,D3B1B +C***KEYWORDS DETERMINANT,DOUBLE PRECISION,FACTOR,INVERSE, +C LINEAR ALGEBRA,LINPACK,MATRIX,POSITIVE DEFINITE +C***AUTHOR MOLER, C. B., (U. OF NEW MEXICO) +C***PURPOSE COMPUTES THE DETERMINANT AND INVERSE OF A CERTAIN DOUBLE +C PRECISION SYMMETRIC POSITIVE DEFINITE MATRIX (SEE ABSTRACT) +C USING THE FACTORS COMPUTED BY DPOCO, DPOFA OR DQRDC. +C***DESCRIPTION +C DPODI COMPUTES THE DETERMINANT AND INVERSE OF A CERTAIN +C DOUBLE PRECISION SYMMETRIC POSITIVE DEFINITE MATRIX (SEE BELOW) +C USING THE FACTORS COMPUTED BY DPOCO, DPOFA OR DQRDC. +C ON ENTRY +C A DOUBLE PRECISION(LDA, N) +C THE OUTPUT A FROM DPOCO OR DPOFA +C OR THE OUTPUT X FROM DQRDC. +C LDA INTEGER +C THE LEADING DIMENSION OF THE ARRAY A . +C N INTEGER +C THE ORDER OF THE MATRIX A . +C JOB INTEGER +C = 11 BOTH DETERMINANT AND INVERSE. +C = 01 INVERSE ONLY. +C = 10 DETERMINANT ONLY. +C ON RETURN +C A IF DPOCO OR DPOFA WAS USED TO FACTOR A , THEN +C DPODI PRODUCES THE UPPER HALF OF INVERSE(A) . +C IF DQRDC WAS USED TO DECOMPOSE X , THEN +C DPODI PRODUCES THE UPPER HALF OF INVERSE(TRANS(X)*X) +C WHERE TRANS(X) IS THE TRANSPOSE. +C ELEMENTS OF A BELOW THE DIAGONAL ARE UNCHANGED. +C IF THE UNITS DIGIT OF JOB IS ZERO, A IS UNCHANGED. +C DET DOUBLE PRECISION(2) +C DETERMINANT OF A OR OF TRANS(X)*X IF REQUESTED. +C OTHERWISE NOT REFERENCED. +C DETERMINANT = DET(1) * 10.0**DET(2) +C WITH 1.0 .LE. DET(1) .LT. 10.0 +C OR DET(1) .EQ. 0.0 . +C ERROR CONDITION +C A DIVISION BY ZERO WILL OCCUR IF THE INPUT FACTOR CONTAINS +C A ZERO ON THE DIAGONAL AND THE INVERSE IS REQUESTED. +C IT WILL NOT OCCUR IF THE SUBROUTINES ARE CALLED CORRECTLY +C AND IF DPOCO OR DPOFA HAS SET INFO .EQ. 0 . +C LINPACK. THIS VERSION DATED 08/14/78 . +C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY_odr,DSCAL_odr +C***END PROLOGUE DPODI + +C...SCALAR ARGUMENTS + INTEGER JOB,LDA,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION A(LDA,*),DET(*) + +C...LOCAL SCALARS + DOUBLE PRECISION S,T + INTEGER I,J,JM1,K,KP1 + +C...EXTERNAL SUBROUTINES + EXTERNAL DAXPY_odr,DSCAL_odr + +C...INTRINSIC FUNCTIONS + INTRINSIC MOD + + +C***FIRST EXECUTABLE STATEMENT DPODI + + + IF (JOB/10 .EQ. 0) GO TO 70 + DET(1) = 1.0D0 + DET(2) = 0.0D0 + S = 10.0D0 + DO 50 I = 1, N + DET(1) = A(I,I)**2*DET(1) +C ...EXIT + IF (DET(1) .EQ. 0.0D0) GO TO 60 + 10 IF (DET(1) .GE. 1.0D0) GO TO 20 + DET(1) = S*DET(1) + DET(2) = DET(2) - 1.0D0 + GO TO 10 + 20 CONTINUE + 30 IF (DET(1) .LT. S) GO TO 40 + DET(1) = DET(1)/S + DET(2) = DET(2) + 1.0D0 + GO TO 30 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + +C COMPUTE INVERSE(R) + + IF (MOD(JOB,10) .EQ. 0) GO TO 140 + DO 100 K = 1, N + A(K,K) = 1.0D0/A(K,K) + T = -A(K,K) + CALL DSCAL_odr(K-1,T,A(1,K),1) + KP1 = K + 1 + IF (N .LT. KP1) GO TO 90 + DO 80 J = KP1, N + T = A(K,J) + A(K,J) = 0.0D0 + CALL DAXPY_odr(K,T,A(1,K),1,A(1,J),1) + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C FORM INVERSE(R) * TRANS(INVERSE(R)) + + DO 130 J = 1, N + JM1 = J - 1 + IF (JM1 .LT. 1) GO TO 120 + DO 110 K = 1, JM1 + T = A(K,J) + CALL DAXPY_odr(K,T,A(1,J),1,A(1,K),1) + 110 CONTINUE + 120 CONTINUE + T = A(J,J) + CALL DSCAL_odr(J,T,A(1,J),1) + 130 CONTINUE + 140 CONTINUE + RETURN + END +*DQRDC + SUBROUTINE DQRDC(X,LDX,N,P,QRAUX,JPVT,WORK,JOB) +C***BEGIN PROLOGUE DQRDC +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D5 +C***KEYWORDS DECOMPOSITION,DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK, +C MATRIX,ORTHOGONAL TRIANGULAR +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE USES HOUSEHOLDER TRANSFORMATIONS TO COMPUTE THE QR FACTORI- +C ZATION OF N BY P MATRIX X. COLUMN PIVOTING IS OPTIONAL. +C***DESCRIPTION +C DQRDC USES HOUSEHOLDER TRANSFORMATIONS TO COMPUTE THE QR +C FACTORIZATION OF AN N BY P MATRIX X. COLUMN PIVOTING +C BASED ON THE 2-NORMS OF THE REDUCED COLUMNS MAY BE +C PERFORMED AT THE USER'S OPTION. +C ON ENTRY +C X DOUBLE PRECISION(LDX,P), WHERE LDX .GE. N. +C X CONTAINS THE MATRIX WHOSE DECOMPOSITION IS TO BE +C COMPUTED. +C LDX INTEGER. +C LDX IS THE LEADING DIMENSION OF THE ARRAY X. +C N INTEGER. +C N IS THE NUMBER OF ROWS OF THE MATRIX X. +C P INTEGER. +C P IS THE NUMBER OF COLUMNS OF THE MATRIX X. +C JPVT INTEGER(P). +C JPVT CONTAINS INTEGERS THAT CONTROL THE SELECTION +C OF THE PIVOT COLUMNS. THE K-TH COLUMN X(K) OF X +C IS PLACED IN ONE OF THREE CLASSES ACCORDING TO THE +C VALUE OF JPVT(K). +C IF JPVT(K) .GT. 0, THEN X(K) IS AN INITIAL +C COLUMN. +C IF JPVT(K) .EQ. 0, THEN X(K) IS A FREE COLUMN. +C IF JPVT(K) .LT. 0, THEN X(K) IS A FINAL COLUMN. +C BEFORE THE DECOMPOSITION IS COMPUTED, INITIAL COLUMNS +C ARE MOVED TO THE BEGINNING OF THE ARRAY X AND FINAL +C COLUMNS TO THE END. BOTH INITIAL AND FINAL COLUMNS +C ARE FROZEN IN PLACE DURING THE COMPUTATION AND ONLY +C FREE COLUMNS ARE MOVED. AT THE K-TH STAGE OF THE +C REDUCTION, IF X(K) IS OCCUPIED BY A FREE COLUMN +C IT IS INTERCHANGED WITH THE FREE COLUMN OF LARGEST +C REDUCED NORM. JPVT IS NOT REFERENCED IF +C JOB .EQ. 0. +C WORK DOUBLE PRECISION(P). +C WORK IS A WORK ARRAY. WORK IS NOT REFERENCED IF +C JOB .EQ. 0. +C JOB INTEGER. +C JOB IS AN INTEGER THAT INITIATES COLUMN PIVOTING. +C IF JOB .EQ. 0, NO PIVOTING IS DONE. +C IF JOB .NE. 0, PIVOTING IS DONE. +C ON RETURN +C X X CONTAINS IN ITS UPPER TRIANGLE THE UPPER +C TRIANGULAR MATRIX R OF THE QR FACTORIZATION. +C BELOW ITS DIAGONAL X CONTAINS INFORMATION FROM +C WHICH THE ORTHOGONAL PART OF THE DECOMPOSITION +C CAN BE RECOVERED. NOTE THAT IF PIVOTING HAS +C BEEN REQUESTED, THE DECOMPOSITION IS NOT THAT +C OF THE ORIGINAL MATRIX X BUT THAT OF X +C WITH ITS COLUMNS PERMUTED AS DESCRIBED BY JPVT. +C QRAUX DOUBLE PRECISION(P). +C QRAUX CONTAINS FURTHER INFORMATION REQUIRED TO RECOVER +C THE ORTHOGONAL PART OF THE DECOMPOSITION. +C JPVT JPVT(K) CONTAINS THE INDEX OF THE COLUMN OF THE +C ORIGINAL MATRIX THAT HAS BEEN INTERCHANGED INTO +C THE K-TH COLUMN, IF PIVOTING WAS REQUESTED. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY_odr,DDOT_odr,DNRM2_odr,DSCAL_odr,DSWAP +C***END PROLOGUE DQRDC + +C...SCALAR ARGUMENTS + INTEGER + + JOB,LDX,N,P + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + QRAUX(*),WORK(*),X(LDX,*) + INTEGER + + JPVT(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + MAXNRM,NRMXL,T,TT + INTEGER + + J,JJ,JP,L,LP1,LUP,MAXJ,PL,PU + LOGICAL + + NEGJ,SWAPJ + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr,DNRM2_odr + EXTERNAL + + DDOT_odr,DNRM2_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY_odr,DSCAL_odr,DSWAP + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DMAX1,DSIGN,DSQRT,MIN0 + + +C***FIRST EXECUTABLE STATEMENT DQRDC + + + PL = 1 + PU = 0 + IF (JOB .EQ. 0) GO TO 60 + +C PIVOTING HAS BEEN REQUESTED. REARRANGE THE COLUMNS +C ACCORDING TO JPVT. + + DO 20 J = 1, P + SWAPJ = JPVT(J) .GT. 0 + NEGJ = JPVT(J) .LT. 0 + JPVT(J) = J + IF (NEGJ) JPVT(J) = -J + IF (.NOT.SWAPJ) GO TO 10 + IF (J .NE. PL) CALL DSWAP(N,X(1,PL),1,X(1,J),1) + JPVT(J) = JPVT(PL) + JPVT(PL) = J + PL = PL + 1 + 10 CONTINUE + 20 CONTINUE + PU = P + DO 50 JJ = 1, P + J = P - JJ + 1 + IF (JPVT(J) .GE. 0) GO TO 40 + JPVT(J) = -JPVT(J) + IF (J .EQ. PU) GO TO 30 + CALL DSWAP(N,X(1,PU),1,X(1,J),1) + JP = JPVT(PU) + JPVT(PU) = JPVT(J) + JPVT(J) = JP + 30 CONTINUE + PU = PU - 1 + 40 CONTINUE + 50 CONTINUE + 60 CONTINUE + +C COMPUTE THE NORMS OF THE FREE COLUMNS. + + IF (PU .LT. PL) GO TO 80 + DO 70 J = PL, PU + QRAUX(J) = DNRM2_odr(N,X(1,J),1) + WORK(J) = QRAUX(J) + 70 CONTINUE + 80 CONTINUE + +C PERFORM THE HOUSEHOLDER REDUCTION OF X. + + LUP = MIN0(N,P) + DO 200 L = 1, LUP + IF (L .LT. PL .OR. L .GE. PU) GO TO 120 + +C LOCATE THE COLUMN OF LARGEST NORM AND BRING IT +C INTO THE PIVOT POSITION. + + MAXNRM = 0.0D0 + MAXJ = L + DO 100 J = L, PU + IF (QRAUX(J) .LE. MAXNRM) GO TO 90 + MAXNRM = QRAUX(J) + MAXJ = J + 90 CONTINUE + 100 CONTINUE + IF (MAXJ .EQ. L) GO TO 110 + CALL DSWAP(N,X(1,L),1,X(1,MAXJ),1) + QRAUX(MAXJ) = QRAUX(L) + WORK(MAXJ) = WORK(L) + JP = JPVT(MAXJ) + JPVT(MAXJ) = JPVT(L) + JPVT(L) = JP + 110 CONTINUE + 120 CONTINUE + QRAUX(L) = 0.0D0 + IF (L .EQ. N) GO TO 190 + +C COMPUTE THE HOUSEHOLDER TRANSFORMATION FOR COLUMN L. + + NRMXL = DNRM2_odr(N-L+1,X(L,L),1) + IF (NRMXL .EQ. 0.0D0) GO TO 180 + IF (X(L,L) .NE. 0.0D0) NRMXL = DSIGN(NRMXL,X(L,L)) + CALL DSCAL_odr(N-L+1,1.0D0/NRMXL,X(L,L),1) + X(L,L) = 1.0D0 + X(L,L) + +C APPLY THE TRANSFORMATION TO THE REMAINING COLUMNS, +C UPDATING THE NORMS. + + LP1 = L + 1 + IF (P .LT. LP1) GO TO 170 + DO 160 J = LP1, P + T = -DDOT_odr(N-L+1,X(L,L),1,X(L,J),1)/X(L,L) + CALL DAXPY_odr(N-L+1,T,X(L,L),1,X(L,J),1) + IF (J .LT. PL .OR. J .GT. PU) GO TO 150 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 150 + TT = 1.0D0 - (DABS(X(L,J))/QRAUX(J))**2 + TT = DMAX1(TT,0.0D0) + T = TT + TT = 1.0D0 + 0.05D0*TT*(QRAUX(J)/WORK(J))**2 + IF (TT .EQ. 1.0D0) GO TO 130 + QRAUX(J) = QRAUX(J)*DSQRT(T) + GO TO 140 + 130 CONTINUE + QRAUX(J) = DNRM2_odr(N-L,X(L+1,J),1) + WORK(J) = QRAUX(J) + 140 CONTINUE + 150 CONTINUE + 160 CONTINUE + 170 CONTINUE + +C SAVE THE TRANSFORMATION. + + QRAUX(L) = X(L,L) + X(L,L) = -NRMXL + 180 CONTINUE + 190 CONTINUE + 200 CONTINUE + RETURN + END +*DQRSL + SUBROUTINE DQRSL(X,LDX,N,K,QRAUX,Y,QY,QTY,B,RSD,XB,JOB,INFO) +C***BEGIN PROLOGUE DQRSL +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D9,D2A1 +C***KEYWORDS DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK,MATRIX, +C ORTHOGONAL TRIANGULAR,SOLVE +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE APPLIES THE OUTPUT OF DQRDC TO COMPUTE COORDINATE +C TRANSFORMATIONS, PROJECTIONS, AND LEAST SQUARES SOLUTIONS. +C***DESCRIPTION +C DQRSL APPLIES THE OUTPUT OF DQRDC TO COMPUTE COORDINATE +C TRANSFORMATIONS, PROJECTIONS, AND LEAST SQUARES SOLUTIONS. +C FOR K .LE. MIN(N,P), LET XK BE THE MATRIX +C XK = (X(JPVT(1)),X(JPVT(2)), ... ,X(JPVT(K))) +C FORMED FROM COLUMNNS JPVT(1), ... ,JPVT(K) OF THE ORIGINAL +C N X P MATRIX X THAT WAS INPUT TO DQRDC (IF NO PIVOTING WAS +C DONE, XK CONSISTS OF THE FIRST K COLUMNS OF X IN THEIR +C ORIGINAL ORDER). DQRDC PRODUCES A FACTORED ORTHOGONAL MATRIX Q +C AND AN UPPER TRIANGULAR MATRIX R SUCH THAT +C XK = Q * (R) +C (0) +C THIS INFORMATION IS CONTAINED IN CODED FORM IN THE ARRAYS +C X AND QRAUX. +C ON ENTRY +C X DOUBLE PRECISION(LDX,P). +C X CONTAINS THE OUTPUT OF DQRDC. +C LDX INTEGER. +C LDX IS THE LEADING DIMENSION OF THE ARRAY X. +C N INTEGER. +C N IS THE NUMBER OF ROWS OF THE MATRIX XK. IT MUST +C HAVE THE SAME VALUE AS N IN DQRDC. +C K INTEGER. +C K IS THE NUMBER OF COLUMNS OF THE MATRIX XK. K +C MUST NOT BE GREATER THAN MIN(N,P), WHERE P IS THE +C SAME AS IN THE CALLING SEQUENCE TO DQRDC. +C QRAUX DOUBLE PRECISION(P). +C QRAUX CONTAINS THE AUXILIARY OUTPUT FROM DQRDC. +C Y DOUBLE PRECISION(N) +C Y CONTAINS AN N-VECTOR THAT IS TO BE MANIPULATED +C BY DQRSL. +C JOB INTEGER. +C JOB SPECIFIES WHAT IS TO BE COMPUTED. JOB HAS +C THE DECIMAL EXPANSION ABCDE, WITH THE FOLLOWING +C MEANING. +C IF A .NE. 0, COMPUTE QY. +C IF B,C,D, OR E .NE. 0, COMPUTE QTY. +C IF C .NE. 0, COMPUTE B. +C IF D .NE. 0, COMPUTE RSD. +C IF E .NE. 0, COMPUTE XB. +C NOTE THAT A REQUEST TO COMPUTE B, RSD, OR XB +C AUTOMATICALLY TRIGGERS THE COMPUTATION OF QTY, FOR +C WHICH AN ARRAY MUST BE PROVIDED IN THE CALLING +C SEQUENCE. +C ON RETURN +C QY DOUBLE PRECISION(N). +C QY CONTAINS Q*Y, IF ITS COMPUTATION HAS BEEN +C REQUESTED. +C QTY DOUBLE PRECISION(N). +C QTY CONTAINS TRANS(Q)*Y, IF ITS COMPUTATION HAS +C BEEN REQUESTED. HERE TRANS(Q) IS THE +C TRANSPOSE OF THE MATRIX Q. +C B DOUBLE PRECISION(K) +C B CONTAINS THE SOLUTION OF THE LEAST SQUARES PROBLEM +C MINIMIZE NORM2(Y - XK*B), +C IF ITS COMPUTATION HAS BEEN REQUESTED. (NOTE THAT +C IF PIVOTING WAS REQUESTED IN DQRDC, THE J-TH +C COMPONENT OF B WILL BE ASSOCIATED WITH COLUMN JPVT(J) +C OF THE ORIGINAL MATRIX X THAT WAS INPUT INTO DQRDC.) +C RSD DOUBLE PRECISION(N). +C RSD CONTAINS THE LEAST SQUARES RESIDUAL Y - XK*B, +C IF ITS COMPUTATION HAS BEEN REQUESTED. RSD IS +C ALSO THE ORTHOGONAL PROJECTION OF Y ONTO THE +C ORTHOGONAL COMPLEMENT OF THE COLUMN SPACE OF XK. +C XB DOUBLE PRECISION(N). +C XB CONTAINS THE LEAST SQUARES APPROXIMATION XK*B, +C IF ITS COMPUTATION HAS BEEN REQUESTED. XB IS ALSO +C THE ORTHOGONAL PROJECTION OF Y ONTO THE COLUMN SPACE +C OF X. +C INFO INTEGER. +C INFO IS ZERO UNLESS THE COMPUTATION OF B HAS +C BEEN REQUESTED AND R IS EXACTLY SINGULAR. IN +C THIS CASE, INFO IS THE INDEX OF THE FIRST ZERO +C DIAGONAL ELEMENT OF R AND B IS LEFT UNALTERED. +C THE PARAMETERS QY, QTY, B, RSD, AND XB ARE NOT REFERENCED +C IF THEIR COMPUTATION IS NOT REQUESTED AND IN THIS CASE +C CAN BE REPLACED BY DUMMY VARIABLES IN THE CALLING PROGRAM. +C TO SAVE STORAGE, THE USER MAY IN SOME CASES USE THE SAME +C ARRAY FOR DIFFERENT PARAMETERS IN THE CALLING SEQUENCE. A +C FREQUENTLY OCCURING EXAMPLE IS WHEN ONE WISHES TO COMPUTE +C ANY OF B, RSD, OR XB AND DOES NOT NEED Y OR QTY. IN THIS +C CASE ONE MAY IDENTIFY Y, QTY, AND ONE OF B, RSD, OR XB, WHILE +C PROVIDING SEPARATE ARRAYS FOR ANYTHING ELSE THAT IS TO BE +C COMPUTED. THUS THE CALLING SEQUENCE +C CALL DQRSL(X,LDX,N,K,QRAUX,Y,DUM,Y,B,Y,DUM,110,INFO) +C WILL RESULT IN THE COMPUTATION OF B AND RSD, WITH RSD +C OVERWRITING Y. MORE GENERALLY, EACH ITEM IN THE FOLLOWING +C LIST CONTAINS GROUPS OF PERMISSIBLE IDENTIFICATIONS FOR +C A SINGLE CALLING SEQUENCE. +C 1. (Y,QTY,B) (RSD) (XB) (QY) +C 2. (Y,QTY,RSD) (B) (XB) (QY) +C 3. (Y,QTY,XB) (B) (RSD) (QY) +C 4. (Y,QY) (QTY,B) (RSD) (XB) +C 5. (Y,QY) (QTY,RSD) (B) (XB) +C 6. (Y,QY) (QTY,XB) (B) (RSD) +C IN ANY GROUP THE VALUE RETURNED IN THE ARRAY ALLOCATED TO +C THE GROUP CORRESPONDS TO THE LAST MEMBER OF THE GROUP. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY_odr,DCOPY_odr,DDOT_odr +C***END PROLOGUE DQRSL + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,K,LDX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(*),QRAUX(*),QTY(*),QY(*),RSD(*),X(LDX,*),XB(*), + + Y(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + T,TEMP + INTEGER + + I,J,JJ,JU,KP1 + LOGICAL + + CB,CQTY,CQY,CR,CXB + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr + EXTERNAL + + DDOT_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY_odr,DCOPY_odr + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MIN0,MOD + + +C***FIRST EXECUTABLE STATEMENT DQRSL + + + INFO = 0 + +C DETERMINE WHAT IS TO BE COMPUTED. + + CQY = JOB/10000 .NE. 0 + CQTY = MOD(JOB,10000) .NE. 0 + CB = MOD(JOB,1000)/100 .NE. 0 + CR = MOD(JOB,100)/10 .NE. 0 + CXB = MOD(JOB,10) .NE. 0 + JU = MIN0(K,N-1) + +C SPECIAL ACTION WHEN N=1. + + IF (JU .NE. 0) GO TO 40 + IF (CQY) QY(1) = Y(1) + IF (CQTY) QTY(1) = Y(1) + IF (CXB) XB(1) = Y(1) + IF (.NOT.CB) GO TO 30 + IF (X(1,1) .NE. 0.0D0) GO TO 10 + INFO = 1 + GO TO 20 + 10 CONTINUE + B(1) = Y(1)/X(1,1) + 20 CONTINUE + 30 CONTINUE + IF (CR) RSD(1) = 0.0D0 + GO TO 250 + 40 CONTINUE + +C SET UP TO COMPUTE QY OR QTY. + + IF (CQY) CALL DCOPY_odr(N,Y,1,QY,1) + IF (CQTY) CALL DCOPY_odr(N,Y,1,QTY,1) + IF (.NOT.CQY) GO TO 70 + +C COMPUTE QY. + + DO 60 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 50 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT_odr(N-J+1,X(J,J),1,QY(J),1)/X(J,J) + CALL DAXPY_odr(N-J+1,T,X(J,J),1,QY(J),1) + X(J,J) = TEMP + 50 CONTINUE + 60 CONTINUE + 70 CONTINUE + IF (.NOT.CQTY) GO TO 100 + +C COMPUTE TRANS(Q)*Y. + + DO 90 J = 1, JU + IF (QRAUX(J) .EQ. 0.0D0) GO TO 80 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + T = -DDOT_odr(N-J+1,X(J,J),1,QTY(J),1)/X(J,J) + CALL DAXPY_odr(N-J+1,T,X(J,J),1,QTY(J),1) + X(J,J) = TEMP + 80 CONTINUE + 90 CONTINUE + 100 CONTINUE + +C SET UP TO COMPUTE B, RSD, OR XB. + + IF (CB) CALL DCOPY_odr(K,QTY,1,B,1) + KP1 = K + 1 + IF (CXB) CALL DCOPY_odr(K,QTY,1,XB,1) + IF (CR .AND. K .LT. N) + + CALL DCOPY_odr(N-K,QTY(KP1),1,RSD(KP1),1) + IF (.NOT.CXB .OR. KP1 .GT. N) GO TO 120 + DO 110 I = KP1, N + XB(I) = 0.0D0 + 110 CONTINUE + 120 CONTINUE + IF (.NOT.CR) GO TO 140 + DO 130 I = 1, K + RSD(I) = 0.0D0 + 130 CONTINUE + 140 CONTINUE + IF (.NOT.CB) GO TO 190 + +C COMPUTE B. + + DO 170 JJ = 1, K + J = K - JJ + 1 + IF (X(J,J) .NE. 0.0D0) GO TO 150 + INFO = J +C ......EXIT + GO TO 180 + 150 CONTINUE + B(J) = B(J)/X(J,J) + IF (J .EQ. 1) GO TO 160 + T = -B(J) + CALL DAXPY_odr(J-1,T,X(1,J),1,B,1) + 160 CONTINUE + 170 CONTINUE + 180 CONTINUE + 190 CONTINUE + IF (.NOT.CR .AND. .NOT.CXB) GO TO 240 + +C COMPUTE RSD OR XB AS REQUIRED. + + DO 230 JJ = 1, JU + J = JU - JJ + 1 + IF (QRAUX(J) .EQ. 0.0D0) GO TO 220 + TEMP = X(J,J) + X(J,J) = QRAUX(J) + IF (.NOT.CR) GO TO 200 + T = -DDOT_odr(N-J+1,X(J,J),1,RSD(J),1)/X(J,J) + CALL DAXPY_odr(N-J+1,T,X(J,J),1,RSD(J),1) + 200 CONTINUE + IF (.NOT.CXB) GO TO 210 + T = -DDOT_odr(N-J+1,X(J,J),1,XB(J),1)/X(J,J) + CALL DAXPY_odr(N-J+1,T,X(J,J),1,XB(J),1) + 210 CONTINUE + X(J,J) = TEMP + 220 CONTINUE + 230 CONTINUE + 240 CONTINUE + 250 CONTINUE + RETURN + END +*DROT + SUBROUTINE DROT(N,DX,INCX,DY,INCY,DC,DS) +C***BEGIN PROLOGUE DROT +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A8 +C***KEYWORDS BLAS,GIVENS ROTATION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE APPLY D.P. GIVENS ROTATION +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C DC D.P. ELEMENT OF ROTATION MATRIX +C DS D.P. ELEMENT OF ROTATION MATRIX +C --OUTPUT-- +C DX ROTATED VECTOR (UNCHANGED IF N .LE. 0) +C DY ROTATED VECTOR (UNCHANGED IF N .LE. 0) +C MULTIPLY THE 2 X 2 MATRIX ( DC DS) TIMES THE 2 X N MATRIX (DX**T) +C (-DS DC) (DY**T) +C WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN +C DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE +C LX = (-INCX)*N, AND SIMILARLY FOR DY USING LY AND INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DROT + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DC,DS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + ONE,W,Z,ZERO + INTEGER + + I,KX,KY,NSTEPS + +C...DATA STATEMENTS + DATA + + ZERO,ONE/0.D0,1.D0/ + + +C***FIRST EXECUTABLE STATEMENT DROT + + + IF(N .LE. 0 .OR. (DS .EQ. ZERO .AND. DC .EQ. ONE)) GO TO 40 + IF(.NOT. (INCX .EQ. INCY .AND. INCX .GT. 0)) GO TO 20 + + NSTEPS=INCX*N + DO 10 I=1,NSTEPS,INCX + W=DX(I) + Z=DY(I) + DX(I)=DC*W+DS*Z + DY(I)=-DS*W+DC*Z + 10 CONTINUE + GO TO 40 + + 20 CONTINUE + KX=1 + KY=1 + + IF(INCX .LT. 0) KX=1-(N-1)*INCX + IF(INCY .LT. 0) KY=1-(N-1)*INCY + + DO 30 I=1,N + W=DX(KX) + Z=DY(KY) + DX(KX)=DC*W+DS*Z + DY(KY)=-DS*W+DC*Z + KX=KX+INCX + KY=KY+INCY + 30 CONTINUE + 40 CONTINUE + + RETURN + END +*DROTG + SUBROUTINE DROTG(DA,DB,DC,DS) +C***BEGIN PROLOGUE DROTG +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1B10 +C***KEYWORDS BLAS,GIVENS ROTATION,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE CONSTRUCT D.P. PLANE GIVENS ROTATION +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C DA DOUBLE PRECISION SCALAR +C DB DOUBLE PRECISION SCALAR +C --OUTPUT-- +C DA DOUBLE PRECISION RESULT R +C DB DOUBLE PRECISION RESULT Z +C DC DOUBLE PRECISION RESULT +C DS DOUBLE PRECISION RESULT +C DESIGNED BY C. L. LAWSON, JPL, 1977 SEPT 08 +C CONSTRUCT THE GIVENS TRANSFORMATION +C ( DC DS ) +C G = ( ) , DC**2 + DS**2 = 1 , +C (-DS DC ) +C WHICH ZEROS THE SECOND ENTRY OF THE 2-VECTOR (DA,DB)**T . +C THE QUANTITY R = (+/-)DSQRT(DA**2 + DB**2) OVERWRITES DA IN +C STORAGE. THE VALUE OF DB IS OVERWRITTEN BY A VALUE Z WHICH +C ALLOWS DC AND DS TO BE RECOVERED BY THE FOLLOWING ALGORITHM. +C IF Z=1 SET DC=0.D0 AND DS=1.D0 +C IF DABS(Z) .LT. 1 SET DC=DSQRT(1-Z**2) AND DS=Z +C IF DABS(Z) .GT. 1 SET DC=1/Z AND DS=DSQRT(1-DC**2) +C NORMALLY, THE SUBPROGRAM DROT(N,DX,INCX,DY,INCY,DC,DS) WILL +C NEXT BE CALLED TO APPLY THE TRANSFORMATION TO A 2 BY N MATRIX. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DROTG + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA,DB,DC,DS + +C...LOCAL SCALARS + DOUBLE PRECISION + + R,U,V + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DSQRT + + +C***FIRST EXECUTABLE STATEMENT DROTG + + + IF (DABS(DA) .LE. DABS(DB)) GO TO 10 + +C *** HERE DABS(DA) .GT. DABS(DB) *** + + U = DA + DA + V = DB / U + +C NOTE THAT U AND R HAVE THE SIGN OF DA + + R = DSQRT(.25D0 + V**2) * U + +C NOTE THAT DC IS POSITIVE + + DC = DA / R + DS = V * (DC + DC) + DB = DS + DA = R + RETURN + +C *** HERE DABS(DA) .LE. DABS(DB) *** + + 10 IF (DB .EQ. 0.D0) GO TO 20 + U = DB + DB + V = DA / U + +C NOTE THAT U AND R HAVE THE SIGN OF DB +C (R IS IMMEDIATELY STORED IN DA) + + DA = DSQRT(.25D0 + V**2) * U + +C NOTE THAT DS IS POSITIVE + + DS = DB / DA + DC = V * (DS + DS) + IF (DC .EQ. 0.D0) GO TO 15 + DB = 1.D0 / DC + RETURN + 15 DB = 1.D0 + RETURN + +C *** HERE DA = DB = 0.D0 *** + + 20 DC = 1.D0 + DS = 0.D0 + RETURN + + END +*DSCAL_odr + SUBROUTINE DSCAL_odr(N,DA,DX,INCX) +C***BEGIN PROLOGUE DSCAL_odr +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A6 +C***KEYWORDS BLAS,LINEAR ALGEBRA,SCALE,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE D.P. VECTOR SCALE X = A*X +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DA DOUBLE PRECISION SCALE FACTOR +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C DX DOUBLE PRECISION RESULT (UNCHANGED IF N.LE.0) +C REPLACE DOUBLE PRECISION DX BY DOUBLE PRECISION DA*DX. +C FOR I = 0 TO N-1, REPLACE DX(1+I*INCX) WITH DA * DX(1+I*INCX) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DSCAL_odr + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + DA + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + INTEGER + + I,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DSCAL_odr + + + IF(N.LE.0)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + NS = N*INCX + DO 10 I = 1,NS,INCX + DX(I) = DA*DX(I) + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 5. + + 20 M = MOD(N,5) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DX(I) = DA*DX(I) + 30 CONTINUE + IF( N .LT. 5 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,5 + DX(I) = DA*DX(I) + DX(I + 1) = DA*DX(I + 1) + DX(I + 2) = DA*DX(I + 2) + DX(I + 3) = DA*DX(I + 3) + DX(I + 4) = DA*DX(I + 4) + 50 CONTINUE + RETURN + END +*DSWAP + SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) +C***BEGIN PROLOGUE DSWAP +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A5 +C***KEYWORDS BLAS,DOUBLE PRECISION,INTERCHANGE,LINEAR ALGEBRA,VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE INTERCHANGE D.P. VECTORS +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C DY DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCY STORAGE SPACING BETWEEN ELEMENTS OF DY +C --OUTPUT-- +C DX INPUT VECTOR DY (UNCHANGED IF N .LE. 0) +C DY INPUT VECTOR DX (UNCHANGED IF N .LE. 0) +C INTERCHANGE DOUBLE PRECISION DX AND DOUBLE PRECISION DY. +C FOR I = 0 TO N-1, INTERCHANGE DX(LX+I*INCX) AND DY(LY+I*INCY), +C WHERE LX = 1 IF INCX .GE. 0, ELSE LX = (-INCX)*N, AND LY IS +C DEFINED IN A SIMILAR WAY USING INCY. +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE DSWAP + +C...SCALAR ARGUMENTS + INTEGER + + INCX,INCY,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*),DY(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + DTEMP1,DTEMP2,DTEMP3 + INTEGER + + I,IX,IY,M,MP1,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DSWAP + + + IF(N.LE.0)RETURN + IF(INCX.EQ.INCY) IF(INCX-1) 5,20,60 + 5 CONTINUE + +C CODE FOR UNEQUAL OR NONPOSITIVE INCREMENTS. + + IX = 1 + IY = 1 + IF(INCX.LT.0)IX = (-N+1)*INCX + 1 + IF(INCY.LT.0)IY = (-N+1)*INCY + 1 + DO 10 I = 1,N + DTEMP1 = DX(IX) + DX(IX) = DY(IY) + DY(IY) = DTEMP1 + IX = IX + INCX + IY = IY + INCY + 10 CONTINUE + RETURN + +C CODE FOR BOTH INCREMENTS EQUAL TO 1 + + +C CLEAN-UP LOOP SO REMAINING VECTOR LENGTH IS A MULTIPLE OF 3. + + 20 M = MOD(N,3) + IF( M .EQ. 0 ) GO TO 40 + DO 30 I = 1,M + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 30 CONTINUE + IF( N .LT. 3 ) RETURN + 40 MP1 = M + 1 + DO 50 I = MP1,N,3 + DTEMP1 = DX(I) + DTEMP2 = DX(I+1) + DTEMP3 = DX(I+2) + DX(I) = DY(I) + DX(I+1) = DY(I+1) + DX(I+2) = DY(I+2) + DY(I) = DTEMP1 + DY(I+1) = DTEMP2 + DY(I+2) = DTEMP3 + 50 CONTINUE + RETURN + 60 CONTINUE + +C CODE FOR EQUAL, POSITIVE, NONUNIT INCREMENTS. + + NS = N*INCX + DO 70 I=1,NS,INCX + DTEMP1 = DX(I) + DX(I) = DY(I) + DY(I) = DTEMP1 + 70 CONTINUE + RETURN + END +*DTRCO + SUBROUTINE DTRCO(T,LDT,N,RCOND,Z,JOB) +C***BEGIN PROLOGUE DTRCO +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2A3 +C***KEYWORDS CONDITION,DOUBLE PRECISION,FACTOR,LINEAR ALGEBRA,LINPACK, +C MATRIX,TRIANGULAR +C***AUTHOR MOLER, C. B., (U. OF NEW MEXICO) +C***PURPOSE ESTIMATES THE CONDITION OF A DOUBLE PRECISION TRIANGULAR +C MATRIX. +C***DESCRIPTION +C DTRCO ESTIMATES THE CONDITION OF A DOUBLE PRECISION TRIANGULAR +C MATRIX. +C ON ENTRY +C T DOUBLE PRECISION(LDT,N) +C T CONTAINS THE TRIANGULAR MATRIX. THE ZERO +C ELEMENTS OF THE MATRIX ARE NOT REFERENCED, AND +C THE CORRESPONDING ELEMENTS OF THE ARRAY CAN BE +C USED TO STORE OTHER INFORMATION. +C LDT INTEGER +C LDT IS THE LEADING DIMENSION OF THE ARRAY T. +C N INTEGER +C N IS THE ORDER OF THE SYSTEM. +C JOB INTEGER +C = 0 T IS LOWER TRIANGULAR. +C = NONZERO T IS UPPER TRIANGULAR. +C ON RETURN +C RCOND DOUBLE PRECISION +C AN ESTIMATE OF THE RECIPROCAL CONDITION OF T . +C FOR THE SYSTEM T*X = B , RELATIVE PERTURBATIONS +C IN T AND B OF SIZE EPSILON MAY CAUSE +C RELATIVE PERTURBATIONS IN X OF SIZE EPSILON/RCOND . +C IF RCOND IS SO SMALL THAT THE LOGICAL EXPRESSION +C 1.0 + RCOND .EQ. 1.0 +C IS TRUE, THEN T MAY BE SINGULAR TO WORKING +C PRECISION. IN PARTICULAR, RCOND IS ZERO IF +C EXACT SINGULARITY IS DETECTED OR THE ESTIMATE +C UNDERFLOWS. +C Z DOUBLE PRECISION(N) +C A WORK VECTOR WHOSE CONTENTS ARE USUALLY UNIMPORTANT. +C IF T IS CLOSE TO A SINGULAR MATRIX, THEN Z IS +C AN APPROXIMATE NULL VECTOR IN THE SENSE THAT +C NORM(A*Z) = RCOND*NORM(A)*NORM(Z) . +C LINPACK. THIS VERSION DATED 08/14/78 . +C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DASUM,DAXPY_odr,DSCAL_odr +C***END PROLOGUE DTRCO + +C...SCALAR ARGUMENTS + DOUBLE PRECISION + + RCOND + INTEGER + + JOB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + T(LDT,*),Z(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + EK,S,SM,TNORM,W,WK,WKM,YNORM + INTEGER + + I1,J,J1,J2,K,KK,L + LOGICAL + + LOWER + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DASUM + EXTERNAL + + DASUM + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY_odr,DSCAL_odr + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS,DMAX1,DSIGN + + +C***FIRST EXECUTABLE STATEMENT DTRCO + + + LOWER = JOB .EQ. 0 + +C COMPUTE 1-NORM OF T + + TNORM = 0.0D0 + DO 10 J = 1, N + L = J + IF (LOWER) L = N + 1 - J + I1 = 1 + IF (LOWER) I1 = J + TNORM = DMAX1(TNORM,DASUM(L,T(I1,J),1)) + 10 CONTINUE + +C RCOND = 1/(NORM(T)*(ESTIMATE OF NORM(INVERSE(T)))) . +C ESTIMATE = NORM(Z)/NORM(Y) WHERE T*Z = Y AND TRANS(T)*Y = E . +C TRANS(T) IS THE TRANSPOSE OF T . +C THE COMPONENTS OF E ARE CHOSEN TO CAUSE MAXIMUM LOCAL +C GROWTH IN THE ELEMENTS OF Y . +C THE VECTORS ARE FREQUENTLY RESCALED TO AVOID OVERFLOW. + +C SOLVE TRANS(T)*Y = E + + EK = 1.0D0 + DO 20 J = 1, N + Z(J) = 0.0D0 + 20 CONTINUE + DO 100 KK = 1, N + K = KK + IF (LOWER) K = N + 1 - KK + IF (Z(K) .NE. 0.0D0) EK = DSIGN(EK,-Z(K)) + IF (DABS(EK-Z(K)) .LE. DABS(T(K,K))) GO TO 30 + S = DABS(T(K,K))/DABS(EK-Z(K)) + CALL DSCAL_odr(N,S,Z,1) + EK = S*EK + 30 CONTINUE + WK = EK - Z(K) + WKM = -EK - Z(K) + S = DABS(WK) + SM = DABS(WKM) + IF (T(K,K) .EQ. 0.0D0) GO TO 40 + WK = WK/T(K,K) + WKM = WKM/T(K,K) + GO TO 50 + 40 CONTINUE + WK = 1.0D0 + WKM = 1.0D0 + 50 CONTINUE + IF (KK .EQ. N) GO TO 90 + J1 = K + 1 + IF (LOWER) J1 = 1 + J2 = N + IF (LOWER) J2 = K - 1 + DO 60 J = J1, J2 + SM = SM + DABS(Z(J)+WKM*T(K,J)) + Z(J) = Z(J) + WK*T(K,J) + S = S + DABS(Z(J)) + 60 CONTINUE + IF (S .GE. SM) GO TO 80 + W = WKM - WK + WK = WKM + DO 70 J = J1, J2 + Z(J) = Z(J) + W*T(K,J) + 70 CONTINUE + 80 CONTINUE + 90 CONTINUE + Z(K) = WK + 100 CONTINUE + S = 1.0D0/DASUM(N,Z,1) + CALL DSCAL_odr(N,S,Z,1) + + YNORM = 1.0D0 + +C SOLVE T*Z = Y + + DO 130 KK = 1, N + K = N + 1 - KK + IF (LOWER) K = KK + IF (DABS(Z(K)) .LE. DABS(T(K,K))) GO TO 110 + S = DABS(T(K,K))/DABS(Z(K)) + CALL DSCAL_odr(N,S,Z,1) + YNORM = S*YNORM + 110 CONTINUE + IF (T(K,K) .NE. 0.0D0) Z(K) = Z(K)/T(K,K) + IF (T(K,K) .EQ. 0.0D0) Z(K) = 1.0D0 + I1 = 1 + IF (LOWER) I1 = K + 1 + IF (KK .GE. N) GO TO 120 + W = -Z(K) + CALL DAXPY_odr(N-KK,W,T(I1,K),1,Z(I1),1) + 120 CONTINUE + 130 CONTINUE +C MAKE ZNORM = 1.0 + S = 1.0D0/DASUM(N,Z,1) + CALL DSCAL_odr(N,S,Z,1) + YNORM = S*YNORM + + IF (TNORM .NE. 0.0D0) RCOND = YNORM/TNORM + IF (TNORM .EQ. 0.0D0) RCOND = 0.0D0 + RETURN + END +*DTRSL_odr + SUBROUTINE DTRSL_odr(T,LDT,N,B,JOB,INFO) +C***BEGIN PROLOGUE DTRSL_odr +C***DATE WRITTEN 780814 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D2A3 +C***KEYWORDS DOUBLE PRECISION,LINEAR ALGEBRA,LINPACK,MATRIX,SOLVE, +C TRIANGULAR +C***AUTHOR STEWART, G. W., (U. OF MARYLAND) +C***PURPOSE SOLVES SYSTEMS OF THE FORM T*X=B OR TRANS(T)*X=B WHERE T +C IS A TRIANGULAR MATRIX OF ORDER N. +C***DESCRIPTION +C DTRSL_odr SOLVES SYSTEMS OF THE FORM +C T * X = B +C OR +C TRANS(T) * X = B +C WHERE T IS A TRIANGULAR MATRIX OF ORDER N. HERE TRANS(T) +C DENOTES THE TRANSPOSE OF THE MATRIX T. +C ON ENTRY +C T DOUBLE PRECISION(LDT,N) +C T CONTAINS THE MATRIX OF THE SYSTEM. THE ZERO +C ELEMENTS OF THE MATRIX ARE NOT REFERENCED, AND +C THE CORRESPONDING ELEMENTS OF THE ARRAY CAN BE +C USED TO STORE OTHER INFORMATION. +C LDT INTEGER +C LDT IS THE LEADING DIMENSION OF THE ARRAY T. +C N INTEGER +C N IS THE ORDER OF THE SYSTEM. +C B DOUBLE PRECISION(N). +C B CONTAINS THE RIGHT HAND SIDE OF THE SYSTEM. +C JOB INTEGER +C JOB SPECIFIES WHAT KIND OF SYSTEM IS TO BE SOLVED. +C IF JOB IS +C 00 SOLVE T*X=B, T LOWER TRIANGULAR, +C 01 SOLVE T*X=B, T UPPER TRIANGULAR, +C 10 SOLVE TRANS(T)*X=B, T LOWER TRIANGULAR, +C 11 SOLVE TRANS(T)*X=B, T UPPER TRIANGULAR. +C ON RETURN +C B B CONTAINS THE SOLUTION, IF INFO .EQ. 0. +C OTHERWISE B IS UNALTERED. +C INFO INTEGER +C INFO CONTAINS ZERO IF THE SYSTEM IS NONSINGULAR. +C OTHERWISE INFO CONTAINS THE INDEX OF +C THE FIRST ZERO DIAGONAL ELEMENT OF T. +C LINPACK. THIS VERSION DATED 08/14/78 . +C G. W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB. +C***REFERENCES DONGARRA J.J., BUNCH J.R., MOLER C.B., STEWART G.W., +C *LINPACK USERS GUIDE*, SIAM, 1979. +C***ROUTINES CALLED DAXPY_odr,DDOT_odr +C***END PROLOGUE DTRSL_odr + +C...SCALAR ARGUMENTS + INTEGER + + INFO,JOB,LDT,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + B(*),T(LDT,*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + TEMP + INTEGER + + CASE,J,JJ + +C...EXTERNAL FUNCTIONS + DOUBLE PRECISION + + DDOT_odr + EXTERNAL + + DDOT_odr + +C...EXTERNAL SUBROUTINES + EXTERNAL + + DAXPY_odr + +C...INTRINSIC FUNCTIONS + INTRINSIC + + MOD + + +C***FIRST EXECUTABLE STATEMENT DTRSL_odr + + +C BEGIN BLOCK PERMITTING ...EXITS TO 150 + +C CHECK FOR ZERO DIAGONAL ELEMENTS. + + DO 10 INFO = 1, N +C ......EXIT + IF (T(INFO,INFO) .EQ. 0.0D0) GO TO 150 + 10 CONTINUE + INFO = 0 + +C DETERMINE THE TASK AND GO TO IT. + + CASE = 1 + IF (MOD(JOB,10) .NE. 0) CASE = 2 + IF (MOD(JOB,100)/10 .NE. 0) CASE = CASE + 2 + GO TO (20,50,80,110), CASE + +C SOLVE T*X=B FOR T LOWER TRIANGULAR + + 20 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 40 + DO 30 J = 2, N + TEMP = -B(J-1) + CALL DAXPY_odr(N-J+1,TEMP,T(J,J-1),1,B(J),1) + B(J) = B(J)/T(J,J) + 30 CONTINUE + 40 CONTINUE + GO TO 140 + +C SOLVE T*X=B FOR T UPPER TRIANGULAR. + + 50 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 70 + DO 60 JJ = 2, N + J = N - JJ + 1 + TEMP = -B(J+1) + CALL DAXPY_odr(J,TEMP,T(1,J+1),1,B(1),1) + B(J) = B(J)/T(J,J) + 60 CONTINUE + 70 CONTINUE + GO TO 140 + +C SOLVE TRANS(T)*X=B FOR T LOWER TRIANGULAR. + + 80 CONTINUE + B(N) = B(N)/T(N,N) + IF (N .LT. 2) GO TO 100 + DO 90 JJ = 2, N + J = N - JJ + 1 + B(J) = B(J) - DDOT_odr(JJ-1,T(J+1,J),1,B(J+1),1) + B(J) = B(J)/T(J,J) + 90 CONTINUE + 100 CONTINUE + GO TO 140 + +C SOLVE TRANS(T)*X=B FOR T UPPER TRIANGULAR. + + 110 CONTINUE + B(1) = B(1)/T(1,1) + IF (N .LT. 2) GO TO 130 + DO 120 J = 2, N + B(J) = B(J) - DDOT_odr(J-1,T(1,J),1,B(1),1) + B(J) = B(J)/T(J,J) + 120 CONTINUE + 130 CONTINUE + 140 CONTINUE + 150 CONTINUE + RETURN + END +*IDAMAX + INTEGER FUNCTION IDAMAX(N,DX,INCX) +C***BEGIN PROLOGUE IDAMAX +C***DATE WRITTEN 791001 (YYMMDD) +C***REVISION DATE 820801 (YYMMDD) +C***CATEGORY NO. D1A2 +C***KEYWORDS BLAS,DOUBLE PRECISION,LINEAR ALGEBRA,MAXIMUM COMPONENT, +C VECTOR +C***AUTHOR LAWSON, C. L., (JPL) +C HANSON, R. J., (SNLA) +C KINCAID, D. R., (U. OF TEXAS) +C KROGH, F. T., (JPL) +C***PURPOSE FIND LARGEST COMPONENT OF D.P. VECTOR +C***DESCRIPTION +C B L A S SUBPROGRAM +C DESCRIPTION OF PARAMETERS +C --INPUT-- +C N NUMBER OF ELEMENTS IN INPUT VECTOR(S) +C DX DOUBLE PRECISION VECTOR WITH N ELEMENTS +C INCX STORAGE SPACING BETWEEN ELEMENTS OF DX +C --OUTPUT-- +C IDAMAX SMALLEST INDEX (ZERO IF N .LE. 0) +C FIND SMALLEST INDEX OF MAXIMUM MAGNITUDE OF DOUBLE PRECISION DX. +C IDAMAX = FIRST I, I = 1 TO N, TO MINIMIZE ABS(DX(1-INCX+I*INCX) +C***REFERENCES LAWSON C.L., HANSON R.J., KINCAID D.R., KROGH F.T., +C *BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE*, +C ALGORITHM NO. 539, TRANSACTIONS ON MATHEMATICAL +C SOFTWARE, VOLUME 5, NUMBER 3, SEPTEMBER 1979, 308-323 +C***ROUTINES CALLED (NONE) +C***END PROLOGUE IDAMAX + +C...SCALAR ARGUMENTS + INTEGER + + INCX,N + +C...ARRAY ARGUMENTS + DOUBLE PRECISION + + DX(*) + +C...LOCAL SCALARS + DOUBLE PRECISION + + DMAX,XMAG + INTEGER + + I,II,NS + +C...INTRINSIC FUNCTIONS + INTRINSIC + + DABS + + +C***FIRST EXECUTABLE STATEMENT IDAMAX + + + IDAMAX = 0 + IF(N.LE.0) RETURN + IDAMAX = 1 + IF(N.LE.1)RETURN + IF(INCX.EQ.1)GOTO 20 + +C CODE FOR INCREMENTS NOT EQUAL TO 1. + + DMAX = DABS(DX(1)) + NS = N*INCX + II = 1 + DO 10 I = 1,NS,INCX + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 5 + IDAMAX = II + DMAX = XMAG + 5 II = II + 1 + 10 CONTINUE + RETURN + +C CODE FOR INCREMENTS EQUAL TO 1. + + 20 DMAX = DABS(DX(1)) + DO 30 I = 2,N + XMAG = DABS(DX(I)) + IF(XMAG.LE.DMAX) GO TO 30 + IDAMAX = I + DMAX = XMAG + 30 CONTINUE + RETURN + END + diff --git a/dataassim/math/optimization/powell.f b/dataassim/math/optimization/powell.f index bfab820..54d38f8 100644 --- a/dataassim/math/optimization/powell.f +++ b/dataassim/math/optimization/powell.f @@ -4,7 +4,7 @@ implicit none INTEGER iter,n,np,NMAX,ITMAX double precision fret,ftol,p(np),xi(np,np),TINY, - & pmin(np),pmax(np) + & pmin(np),pmax(np),f1dim PARAMETER (NMAX=1000,TINY=1.0d-25) CU USES funkmin,linmin INTEGER i,ibig,j @@ -58,7 +58,7 @@ C (C) Copr. 1986-92 Numerical Recipes Software v%1jw#<0(9p#3. SUBROUTINE linmin(p,pmin,pmax,xi,n,f1dim,fret) implicit none INTEGER n - double precision fret,p(n),xi(n),TOL,pmin(n),pmax(n) + double precision fret,p(n),xi(n),TOL,pmin(n),pmax(n),f1dim PARAMETER (TOL=1.0d-8) CU USES brent,f1dim,mnbrak INTEGER j,k,ierr diff --git a/dataassim/math/optimization/qpso.f90 b/dataassim/math/optimization/qpso.f90 new file mode 100644 index 0000000..b0fec75 --- /dev/null +++ b/dataassim/math/optimization/qpso.f90 @@ -0,0 +1,291 @@ +program qpso + +implicit none +include "mpif.h" + +integer maxiter, maxpop, maxparms +parameter (maxiter = 10000) +parameter (maxpop = 2048) +parameter (maxparms = 512) + +integer i, j,k, npop, nparms, niter, gInx, nfunc(maxpop) +integer nfuncall(maxpop) +integer ntries, np, myid, ierr, start_iter +integer pft(maxparms) +double precision gbest(maxparms) +double precision mbest(maxparms) +double precision feval, beta_l, beta_u, beta +double precision betapro(maxparms), pupdate(maxparms) +double precision pbest(maxpop, maxparms) +double precision pbestall(maxpop, maxparms) +double precision f_x(maxpop), x(maxpop, maxparms) +double precision xall(maxpop, maxparms) +double precision f_pbest(maxpop), f_pbestall(maxpop), f_gbest +double precision gpar(maxiter,maxparms) +double precision gobj(maxiter) +double precision pmin(maxparms), pmax(maxparms) +double precision fi(maxparms), u(maxparms), v(maxparms) +logical isvalid, restart +character(len=4) popst +character(len=100) mymachine, dummy, parm_name(maxparms), case_name, thisfmt +character(len=100) parm_list, constraints, qpso_in(4) + +!------- user-tunable QPSO algorithm parameters ---------------- + +open(unit = 8, file='qpso_input.txt') +do i = 1,100 + read(8,*, end=5), qpso_in + if (trim(qpso_in(1)) == 'npop') read(qpso_in(3),*) npop + if (trim(qpso_in(1)) == 'niter') read(qpso_in(3),*) niter + if (trim(qpso_in(1)) == 'beta_l') read(qpso_in(3),*) beta_l + if (trim(qpso_in(1)) == 'beta_u') read(qpso_in(3),*) beta_u + if (trim(qpso_in(1)) == 'restart') read(qpso_in(3),*) restart + if (trim(qpso_in(1)) == 'machine') mymachine=trim(qpso_in(3)) + if (trim(qpso_in(1)) == 'case') case_name=trim(qpso_in(3)) + if (trim(qpso_in(1)) == 'parm_list') parm_list=trim(qpso_in(3)) + if (trim(qpso_in(1)) == 'constraints') constraints=trim(qpso_in(3)) +end do + +5 continue +close(8) +print*, '# of particles: ', npop +print*, '# of iterations: ', niter +print*, 'beta_l: ', beta_l +print*, 'beta_u: ', beta_u +print*, 'Is a restart run:', restart +print*, 'Machine: ', mymachine +print*, 'Case: ', case_name +print*, 'Parameter file: ', parm_list +print*, 'Constraints dir: ', constraints +!--------------------------------------------------------------- + +call mpi_init(ierr) +call mpi_comm_size(mpi_comm_world, np, ierr) +call mpi_comm_rank(mpi_comm_world, myid, ierr) + +!get parameter information from the parm_list file +if (myid .eq. 0) then + open(unit = 8, status='old', file = trim(parm_list)) + nparms=0 + do i=1,maxparms + read(8,*, end=10) parm_name(i), pft(i), pmin(i), pmax(i) + nparms = nparms+1 + end do +end if + +10 continue +if (myid .eq. 0) then + close(8) + print*, nparms, ' Parameters optimized' +end if + +!broadcast parameter info to other procs +call mpi_bcast(nparms, 1, mpi_integer, 0, mpi_comm_world, ierr) +call mpi_bcast(pmin, maxparms, mpi_double, 0, mpi_comm_world, ierr) +call mpi_bcast(pmax, maxparms, mpi_double, 0, mpi_comm_world, ierr) + + +nfunc(:) = 0 !keep track of total function evaluations + +x(:,:) = 0d0 +f_x(:) = 0d0 +f_pbest(:) = 0d0 + +if (restart .eqv. .false.) then + do i=myid+1,npop,np + !randomize starting locations + call init_random_seed + call random_number(u) + x(i,:) = pmin + (pmax-pmin) * u + f_x(i) = feval(x(i,:), nparms, i, mymachine, parm_list, constraints, & + case_name) + nfunc(i) = nfunc(i)+1 + f_pbest(i) = f_x(i) + end do + + call mpi_allreduce(x, xall, maxparms*maxpop, mpi_double, mpi_sum, & + mpi_comm_world, ierr) + call mpi_allreduce(f_pbest, f_pbestall, maxpop, mpi_double, mpi_sum, & + mpi_comm_world, ierr) + pbestall = xall + + !initialize pbest and gbest + if (myid .eq. 0) then + gInx = 1 + do i=2,npop + if (f_pbestall(i) .lt. f_pbestall(gInx)) gInx = i + end do + gbest = pbestall(gInx,:) + f_gbest = f_pbestall(gInx) + end if + call mpi_bcast(gbest, maxparms, mpi_double, 0, mpi_comm_world, ierr) + call mpi_bcast(f_gbest, 1, mpi_double, 0, mpi_comm_world, ierr) + start_iter = 1 +else + !load restart information + if (myid .eq. 0) then + open(unit=8, file='./qpso_restart_' // trim(case_name) // '.txt') + read(8,*) start_iter + do j=1,npop + read(8,*) xall(j,1:nparms) + read(8,*) pbestall(j,1:nparms) + read(8,*) f_pbestall(j) + end do + read(8,*) gbest(1:nparms) + read(8,*) f_gbest + end if + xall=pbestall + call mpi_bcast(xall, maxparms*maxpop, mpi_double, 0, mpi_comm_world, ierr) + call mpi_bcast(pbestall, maxparms*maxpop, mpi_double, 0, mpi_comm_world, ierr) + call mpi_bcast(f_pbestall, maxpop, mpi_double, 0, mpi_comm_world, ierr) + call mpi_bcast(gbest, maxparms, mpi_double, 0, mpi_comm_world, ierr) + call mpi_bcast(f_gbest, 1, mpi_double, 0, mpi_comm_world, ierr) +end if + + + +!QPSO algorithm +do i=start_iter,niter + if (myid .eq. 0) print*, 'Iteration', i + beta = beta_u - (beta_u-beta_l)*i/niter + !compute mean of best parameters (all procs) + do k=1, nparms + mbest(k) = sum(pbestall(1:npop,k))/npop + end do + !print*, mbest(1:nparms) + !MPI over population + x(:,:) = 0d0 + pbest(:,:) = 0d0 + f_pbest(:) = 0d0 + do j = myid+1,npop,np + isvalid = .false. + ntries = 0 + do while (isvalid .eqv. .false.) + call random_number(fi) + call random_number(u) + call random_number(v) + + isvalid=.true. + do k=1,nparms + pupdate = fi(k)*pbestall(j,k) + (1-fi(k))*gbest(k) + betapro = beta * abs(mbest(k)-xall(j,k)) + + x(j,k) = pupdate(k)+((-1d0)**ceiling(0.5+v(k)))*betapro(k)*(-log(u(k))) + + if (ntries .le. 1e5) then + if (x(j,k) .lt. pmin(k) .or. x(j,k) .gt. pmax(k)) isvalid=.false. + else + if (x(j,k) .lt. pmin(k)) x(j,k) = pmin(k) + if (x(j,k) .gt. pmax(k)) x(j,k) = pmax(k) + end if + end do + ntries = ntries+1 + end do + + !run the model to get the cost function + f_x(j) = feval(x(j,:),nparms, j, mymachine, parm_list, constraints, case_name) + nfunc(j) = nfunc(j)+1 + + if (f_x(j) .lt. f_pbestall(j)) then + pbest(j,:) = x(j,:) + f_pbest(j) = f_x(j) + else + pbest(j,:) = pbestall(j,:) + f_pbest(j) = f_pbestall(j) + end if + end do + + call mpi_allreduce(pbest, pbestall, maxparms*maxpop, mpi_double, mpi_sum, & + mpi_comm_world, ierr) + call mpi_allreduce(x, xall, maxpop, mpi_double, mpi_sum, & + mpi_comm_world, ierr) + call mpi_allreduce(f_pbest, f_pbestall, maxpop, mpi_double, mpi_sum, & + mpi_comm_world, ierr) + + !update overall best (all procs) + do j=1,npop + if (f_pbestall(j) .lt. f_gbest) then + gbest = pbestall(j,:) + f_gbest = f_pbestall(j) + end if + end do + + !save info from this iteration + gpar(i,:) = gbest + gobj(i) = f_gbest + call mpi_allreduce(nfunc,nfuncall, maxpop, mpi_integer, mpi_sum, & + mpi_comm_world, ierr) + if (myid .eq. 0) then + open(unit=8, file='qpso_best_' // trim(case_name) // '.txt') + write(8,*), 'Iteration', i + write(8,*), 'Objective function:', gobj(i) + do k=1,nparms + write(8,'(A,1x,I2,1x,g13.6)') trim(parm_name(k)), pft(k), gpar(i,k) + end do + close(8) + if (i .eq. 1) then + open(unit=10, file='qpso_costfunc_' // trim(case_name) // '.txt') + else + open(unit=10, file='qpso_costfunc_' // trim(case_name) // '.txt', & + status='old', position='append', action='write') + end if + write(10,*) i, sum(nfuncall) , gobj(i) + close(10) + + !write the restart file + write(popst, '(I4)') nparms + thisfmt = '(' // trim(popst) // '(g13.6,1x))' + open(unit=11, file = 'qpso_restart_' // trim(case_name) // '.txt') + write(11,'(I4)') i !current iteration number + do j=1,npop + write(11,fmt=trim(thisfmt)) xall(j,1:nparms) !current parameters for each population + write(11,fmt=trim(thisfmt)) pbestall(j,1:nparms) !best parameters for each population + write(11,'(g13.6)') f_pbestall(j) !best objective function for each population + end do + write(11,fmt=trim(thisfmt)) gbest(1:nparms) !overall best parameters + write(11,'(g13.6)') f_gbest !overall best objectivefunction + close(11) + end if +end do +call mpi_finalize(ierr) + +end program qpso + + +!Function to evaluate the CLM/ALM model +double precision function feval(parms, nparms, thispop, mymachine, parm_list, & + constraints, case_name) + +integer nparms, i, thispop +double precision parms(500), trueparms(4) +double precision mydata(1000), model(1000), sse(1000) +double precision temp(1000), par(1000) +character(len=6) thispopst +character(len=100) mymachine, parm_list, constraints, case_name, thisline + + +write(thispopst, '(I6)') 100000+thispop + +!write the parameters to file +open(unit=9, file='./parm_data_files/parm_data_' // thispopst(2:6)) +do i=1,nparms + write(9,*) parms(i) +end do +close(9) + +!Call python workflow to set up and launch model simulation +call system('sleep ' // thispopst(2:6)) !do not start all at once +call system('python UQ_runens.py --ens_num ' // thispopst(2:6) // & + ' --parm_list ' // trim(parm_list) // ' --parm_data ./parm_data_files/' // & + 'parm_data_' // thispopst(2:6) // ' --constraints ' // trim(constraints) // & + ' --machine ' // trim(mymachine) // ' --case ' // trim(case_name)) + +!get the sum of squared errors +open(unit=9, file='./ssedata/mysse_' // thispopst(2:6) // '.txt') +read(9,*) feval +close(9) +call system('sleep 20') + +return + +end function feval diff --git a/dataassim/math/othersupmath/charfloatlineparser.f b/dataassim/math/othersupmath/charfloatlineparser.f new file mode 100644 index 0000000..ca82710 --- /dev/null +++ b/dataassim/math/othersupmath/charfloatlineparser.f @@ -0,0 +1,99 @@ + subroutine charfloatlineparser(longchar,nmax,charvars, + &nchars,floatvars,nfloats) + implicit none +!7 Sept 2013, revised version +!parse a long line of chars into char and/or float variables with the following assumptions: +!1. Each cell is separated by a separating character which can be either a ',', blank space(s) or anything +!with the ASCII code less than and including 032 or larger than and including 127 +!2. Any separating characters at the end of the line are discarded, i.e. +! '1,2,3,4,a,b,c,,,,,,,,,, ,'='1,2,3,4,a,b,c' +!3. If there is no entry between two non-comma separating characters,these two separating characters are treated as one. +! i.e. '1 2 3 4 a b c'='1,2,3,4,a,b,c' +!4. If there is no entry between two commas that are not positioned in the end of the line, a missing value is assumed to +!exist between these two commas and this missing value is denoted with -9999, i.e. +! i.e. '1,,3,4,a,b,c'='1,-9999,3,4,a,b,c' +!5. Comma has priotity as a separating characer. E.g commas and blank spaces are not used simultaneously as +! separating characters in a single line. When both commas and blank spaces appear in the line, comma is +! the saparating character and blank spaces are repalced with '_' + integer nmax,nchars,nfloats + character(*)::longchar + character charvars(nmax+100)*50,achar*50,stringvars(nmax+100)*50 + double precision floatvars(nmax) + integer i,j,k,m,n,ndot,nplus,nminus,nd,ne,nCapD,nCapE,leng +! + call charlineparser(longchar,nmax,stringvars,n) + nchars=0 + nfloats=0 + do j=1,n + ndot=0 + nplus=0 + nminus=0 + nd=0 + ne=0 + nCapD=0 + nCapE=0 + leng=LEN_TRIM(stringvars(j)) + achar=stringvars(j)(1:leng) + i=leng +5 k=ichar(achar(i:i)) + if(k.le.47.or.k.ge.58)then + m=0 + if(k.eq.46)then + ndot=ndot+1 + m=1 + endif + if(k.eq.43)then + nplus=nplus+1 + m=1 + endif + if(k.eq.45)then + nminus=nminus+1 + m=1 + endif + if(k.eq.100)then + nd=nd+1 + m=1 + endif + if(k.eq.101)then + ne=ne+1 + m=1 + endif + if(k.eq.68)then + nCapD=nCapD+1 + m=1 + endif + if(k.eq.69)then + nCapE=nCapE+1 + m=1 + endif + if(m.eq.0)then + nchars=nchars+1 + charvars(nchars)=achar(1:leng) + goto 10 + endif + endif + i=i-1 + if(i.ge.1)goto 5 + m=0 + if(ndot.gt.1)m=1 + if(nplus.gt.1)m=1 + if(nminus.gt.1)m=1 + if(nd.gt.1)m=1 + if(ne.gt.1)m=1 + if(nCapD.gt.1)m=1 + if(nCapE.gt.1)m=1 + if((nplus*nminus).gt.0)m=1 + if((nd+ne+nCapD+nCapE).gt.1)m=1 + if((nd+ne+nCapD+nCapE).eq.leng)m=1 + if(m.eq.1)then + nchars=nchars+1 + charvars(nchars)=achar(1:leng) + else + nfloats=nfloats+1 + m=len(trim(achar)) + call extCharToFloatNum(m,achar,floatvars(nfloats),k) + endif +10 continue + enddo + return + end subroutine charfloatlineparser diff --git a/dataassim/math/othersupmath/charlineparser.f b/dataassim/math/othersupmath/charlineparser.f index d8c3ef6..145a41a 100644 --- a/dataassim/math/othersupmath/charlineparser.f +++ b/dataassim/math/othersupmath/charlineparser.f @@ -15,7 +15,8 @@ ! separating characters in a single line. When both commas and blank spaces appear in the line, comma is ! the saparating character and blank spaces are repalced with '_' integer nmax,n - character longchar*(*),charvars(nmax+100)*50 + character(*)::longchar + character charvars(nmax+100)*50 integer i,k,pos1,pos2,leng,posindex(0:nmax+100),itiscomma ! leng=LEN_TRIM(longchar) @@ -35,6 +36,10 @@ do i=1,leng if(ichar(longchar(i:i)).eq.44)itiscomma=itiscomma+1 enddo + if(itiscomma.ge.nmax)then + n=0 + return + endif if(itiscomma.gt.0)then !If the line contains at least one comma, it is assumed a comma separated line n=0 diff --git a/dataassim/math/othersupmath/doytotime.f b/dataassim/math/othersupmath/doytotime.f new file mode 100644 index 0000000..3534fc9 --- /dev/null +++ b/dataassim/math/othersupmath/doytotime.f @@ -0,0 +1,147 @@ + subroutine doytotime(dayfract,fday,fhour,fmin,fsecond) + implicit none + double precision dayfract,fday,fhour,fmin,fsecond,term + fday=dint(dayfract) + term=(dayfract-fday)*24.0d0 + fhour=dint(term) + term=(term-fhour)*60.0d0 + fmin=dint(term) + fsecond=(term-fmin)*60.0d0 + if(dabs(fsecond-60.0d0).lt.1.0d-8)then + fsecond=0.0d0 + fmin=fmin+1.0d0 + endif + if(dabs(fmin-60.0d0).lt.(1.0d-8/60.0d0))then + fmin=0.0d0 + fhour=fhour+1.0d0 + endif + if(dabs(fhour).lt.1.0d-8.and.dabs(fmin).lt.1.0d-8.and. + &dabs(fsecond).lt.1.0d-8)then + if(dabs(fday-1.0d0).gt.1.0d-8)then + fday=fday-1.0d0 + fhour=24.0d0 + fmin=0.0d0 + fsecond=0.0d0 + endif + endif + return + end + + subroutine doy_to_monthday(month,monthday,year,idoy) +!extract month,day of month from year and day of year + implicit none + integer month,monthday,year,idoy,isitaleapyear, + &i,j,k,ndays(12) + ndays(1)=31 + ndays(2)=28+isitaleapyear(year) + ndays(3)=31 + ndays(4)=30 + ndays(5)=31 + ndays(6)=30 + ndays(7)=31 + ndays(8)=31 + ndays(9)=30 + ndays(10)=31 + ndays(11)=30 + ndays(12)=31 + k=0 + do i=1,12 + do j=1,ndays(i) + k=k+1 + if(k.eq.idoy)then + month=i + monthday=j + return + endif + enddo + enddo + month=99 + monthday=99 + return + end + + subroutine timestamp(iyear,dayfract,month,monthday,idoy,ihour, + &imin,isecond,chartimestamp) + implicit none + integer iyear,month,monthday,idoy,ihour,imin,isecond,itimestamp + double precision dayfract,fday,fhour,fmin,fsecond + character charyear*4,charmonth*2,charmonthday*2,charhour*2, + &charmin*2,charsecond*2,chartimestamp*14 + if(dayfract.lt.1.0d0)dayfract=1.0d0 + call doytotime(dayfract,fday,fhour,fmin,fsecond) + idoy=idnint(fday) + ihour=idnint(fhour) + imin=idnint(fmin) + isecond=idnint(fsecond) + call doy_to_monthday(month,monthday,iyear,idoy) + call NumberToChar(iyear,4,charyear) + call NumberToChar(month,2,charmonth) + call NumberToChar(monthday,2,charmonthday) + call NumberToChar(ihour,2,charhour) + call NumberToChar(imin,2,charmin) + call NumberToChar(isecond,2,charsecond) + chartimestamp= + &charyear//charmonth//charmonthday//charhour//charmin//charsecond + return + end + + subroutine mnmdyeardoy(tenletters,month,monthday, + &year,idoy,yearfract) +!extract month,day of month, year, day of year, and year fraction (e.g. 2007.15) from +!a string of 10 characters in the exact form as 08-21-2010 (mn-md-year) + implicit none + character tenletters*(*),c*1 + integer month,monthday,year,idoy,izero,isitaleapyear, + & i,j,k,n,ndays(12),ntotdays,itime(3) + double precision yearfract + + do j=1,3 + itime(j)=0 + enddo + n=len(tenletters) + k=0 + j=1 + do i=n,1,-1 + c=tenletters(i:i) + if(ichar(c).ge.48.and.ichar(c).le.57)then + itime(j)=itime(j)+(ichar(c)-48)*(10**k) + k=k+1 + else + if(k.ne.0)j=j+1 + k=0 + endif + enddo + year=itime(1) + monthday=itime(2) + month=itime(3) + +! izero=48 +! month=(ichar(tenletters(1:1))-izero)*10 +! month=month+(ichar(tenletters(2:2))-izero) +! monthday=(ichar(tenletters(4:4))-izero)*10 +! monthday=monthday+(ichar(tenletters(5:5))-izero) +! year=(ichar(tenletters(7:7))-izero)*1000 +! year=year+(ichar(tenletters(8:8))-izero)*100 +! year=year+(ichar(tenletters(9:9))-izero)*10 +! year=year+(ichar(tenletters(10:10))-izero) + + ndays(1)=31 + ndays(2)=28+isitaleapyear(year) + ndays(3)=31 + ndays(4)=30 + ndays(5)=31 + ndays(6)=30 + ndays(7)=31 + ndays(8)=31 + ndays(9)=30 + ndays(10)=31 + ndays(11)=30 + ndays(12)=31 + ntotdays=365+isitaleapyear(year) + idoy=monthday + do i=1,month-1 + idoy=idoy+ndays(i) + enddo + yearfract=dble(year)+dble(idoy)/dble(ntotdays) + return + end diff --git a/dataassim/math/othersupmath/extCharToFloatNum.f b/dataassim/math/othersupmath/extCharToFloatNum.f index 1c40dbf..fc32d2c 100644 --- a/dataassim/math/othersupmath/extCharToFloatNum.f +++ b/dataassim/math/othersupmath/extCharToFloatNum.f @@ -5,7 +5,8 @@ !number. !ierr=0, successful conversion ! =1, conversion failed - character astring*50,cpastring*(*),c*1,d*1 + character(*)::cpastring + character astring*50,c*1,d*1 double precision f,fsign,factor integer ipos1,ipos2,ideci,k,j,i,m,numchar0, & numchar,ierr,ispartnum,nlength diff --git a/dataassim/math/othersupmath/fort.2 b/dataassim/math/othersupmath/fort.2 new file mode 100644 index 0000000..6924a21 --- /dev/null +++ b/dataassim/math/othersupmath/fort.2 @@ -0,0 +1,1996 @@ + 5 0.7584741326 -0.3437358393 0.9123953688 0.1233299063 + 6 0.9802417969 -0.0850690167 0.7479482022 0.6602518984 + 7 1.3601292236 -0.2803733684 1.0161933920 -0.1028005553 + 8 1.0554796571 -0.7580182086 0.8723907362 -0.2120288478 + 9 0.8006682511 -0.1781213752 0.8245652686 0.0670366760 + 10 0.8709157464 0.1790145034 0.8569700491 -0.1308427105 + 11 1.4017033380 0.3233870153 1.1785621111 -0.3139659239 + 12 1.0193005286 -0.5636369065 0.9578221774 1.1388132457 + 13 1.0596760058 0.2631358085 1.2366061191 -0.1313140065 + 14 0.9854108379 0.2843458781 1.0451670996 0.1052074942 + 15 1.0052968014 0.1304220935 0.8791524793 -0.7574819394 + 16 1.1151461063 -0.1329093328 1.2498226287 0.2258610885 + 17 1.1443710832 -0.0185565263 0.9497754552 0.5763011628 + 18 1.1937929795 0.2565784007 0.6952519286 0.2682279451 + 19 1.0118634272 0.0226859660 0.9365539071 0.2133915830 + 20 0.9526397265 0.4283245310 1.1095703301 -0.1452120660 + 21 1.1117748750 0.2247777398 0.8716042771 -0.2159660851 + 22 1.1595265108 0.2678961458 1.0386122305 -0.2407905197 + 23 1.1152318573 0.0100923530 1.2746122454 0.3494823149 + 24 0.8615725232 -0.0831596882 0.8419366947 0.3676418050 + 25 1.0030324321 0.0800566602 0.9742145968 -0.1676260561 + 26 1.0079651337 -0.0170836133 0.8745620745 -0.0296015070 + 27 1.1584930960 0.2657476300 1.2536031613 0.0022703801 + 28 0.8705633021 -0.2238300329 1.0859222260 -0.2167220184 + 29 0.8453507026 -0.1265270697 0.9947323718 -0.0825193641 + 30 1.0546988006 -0.1168440018 1.0954922908 -0.3155858317 + 31 0.9476374740 -0.0969872370 1.1309604783 0.1392148507 + 32 0.9686945493 0.0268526446 1.0783636008 0.1744939889 + 33 1.0009476870 -0.0527588878 0.9903134661 0.4285068026 + 34 1.1142043445 0.3394861748 1.2524206691 -0.0236339399 + 35 0.9312894648 0.2511032501 1.0011225384 0.3022817167 + 36 0.9924345880 -0.1296871680 1.1087435960 0.0411773255 + 37 0.9216515016 0.1730465713 1.0584671230 -0.3714770737 + 38 1.1291267706 -0.2705180364 0.9821204361 0.0228259049 + 39 1.0065929743 0.1678014970 0.9843215001 0.2171757248 + 40 1.0452406807 0.0063185604 0.9482782231 0.0795532599 + 41 0.7450371948 -0.1674869527 0.9999764041 -0.0014066002 + 42 0.8752626025 -0.1647885285 0.9387598714 -0.1544740629 + 43 0.7816286777 -0.0231909461 0.8341693194 -0.1092049920 + 44 1.0737330008 0.0482345169 0.9668647605 -0.1742375271 + 45 0.9519263798 -0.0073992706 1.1245487318 0.0380143435 + 46 0.9488801509 -0.3208376067 1.1159251844 -0.1705473272 + 47 0.9297458029 -0.1025337870 0.9546859000 0.0435212068 + 48 0.9013092237 0.0458166038 1.1562275996 -0.1692192677 + 49 1.0270749938 0.0415699993 0.8364407143 -0.2076705737 + 50 1.1780918190 0.0428094707 0.9571255804 0.2149438360 + 51 0.9951344512 0.0546664259 0.8587971631 -0.2717117201 + 52 0.8708593577 -0.1207207551 1.2511977806 -0.0714710137 + 53 1.0667132580 -0.0068625989 0.8636714640 0.0819141315 + 54 0.8653113372 -0.1427676002 0.9031547654 0.2501013086 + 55 0.9327141350 -0.0469420607 1.0237036543 0.0811048361 + 56 1.0852696671 -0.0483604771 0.9529128822 -0.2894128370 + 57 0.8633051509 -0.0385201617 1.2315187623 0.0664223282 + 58 0.9931736886 -0.0038969969 0.9294354761 0.2655350600 + 59 0.9116435326 -0.0199860369 0.8880418631 -0.1739396840 + 60 0.9535744285 0.0743949654 0.9764079703 -0.0675485967 + 61 0.9245484207 0.1315665197 1.0864674695 0.1591512008 + 62 0.9652654347 0.0959848785 1.0034967640 0.0371540443 + 63 1.0781402841 -0.1106319188 1.0950726390 -0.0147616147 + 64 0.9719407305 -0.0184168426 0.9337735323 0.0057975649 + 65 1.0488426450 -0.2675818087 1.0134352480 0.0045886504 + 66 1.0092728275 -0.0271632912 0.9115867094 0.0616550618 + 67 0.9567006023 -0.0855729924 0.8269836283 -0.1229289072 + 68 1.0291171301 0.1633516585 1.1204907324 -0.0058154728 + 69 0.9876200818 -0.0502180806 1.0131800748 0.0215647377 + 70 1.0682734398 0.0539671627 1.2765475457 0.0084936272 + 71 1.0967164551 -0.0297901518 1.0320972589 -0.0187951612 + 72 1.0895999077 0.0449134717 0.9492868518 0.0453583203 + 73 1.0037794188 -0.0070806925 1.0809918192 -0.0246191779 + 74 1.0650014001 0.0539894513 0.9661075679 -0.1003597431 + 75 0.9929049652 -0.0787193001 0.9675646907 -0.0272305650 + 76 1.0144217430 0.0707995218 1.0274292667 0.1293977593 + 77 0.8783986422 -0.0413346034 1.2215213287 -0.0379786652 + 78 0.9973263368 0.0779369504 0.9672273008 -0.0203419956 + 79 1.0060564564 -0.0090794509 1.0890079845 -0.1432904830 + 80 1.0722561118 0.0602200021 1.1264926306 -0.0017501716 + 81 1.1180854998 -0.0303223488 0.8737811694 -0.0594177922 + 82 0.9384028142 0.2482165032 0.8980774544 -0.0763886964 + 83 1.1110479265 0.0388436694 1.0057188555 -0.1126777992 + 84 0.9336248124 -0.0429345018 0.9440916753 0.1157254278 + 85 1.0274952298 -0.0838986470 0.8910404861 -0.0206885857 + 86 1.0519942865 0.0035101273 1.0568082705 0.1543616720 + 87 0.9936897701 0.1281947118 1.1328024721 0.0048494599 + 88 0.9208947381 -0.0920368930 0.9877563648 -0.0884149385 + 89 0.9451553473 0.1584041425 0.9835242302 0.1729027287 + 90 1.0984807873 -0.0496872464 0.9753921662 0.0273840241 + 91 1.0185560654 -0.0285456701 1.0014277003 0.0446434387 + 92 0.9480261983 -0.0591261198 0.9215892040 -0.2243135092 + 93 1.0748074839 -0.0426456350 1.0844111299 0.1725997159 + 94 0.9450551909 0.0825138378 1.0201566562 0.1463442820 + 95 0.9153391509 0.0396825854 1.0184753870 -0.0787797833 + 96 1.0188265169 0.0587335652 1.0836279863 0.0151389475 + 97 0.8777377179 -0.0865603523 1.0005040101 0.0933130855 + 98 1.0966714650 0.1636803399 1.0079589358 0.0964235013 + 99 1.0113621559 -0.0697513125 1.0487242804 -0.0026058459 + 100 1.0317855316 0.0881991951 0.9311027594 -0.0669877451 + 101 1.0321342392 -0.0278536997 1.0752551688 0.1073718181 + 102 0.9721350800 -0.2068854480 1.0559143950 0.0455956519 + 103 1.0413132125 0.0793666109 0.9927249009 0.0575322729 + 104 1.0154983727 0.0667040489 0.8810941572 0.0254690712 + 105 1.0543521852 -0.0140076271 0.9849404697 -0.2284763744 + 106 1.0714553101 -0.0517578906 0.9061338587 0.1079471842 + 107 0.8951980847 -0.0362644086 0.8614612280 -0.0614257117 + 108 1.1263678056 0.1338959703 0.9061409550 0.0460610809 + 109 0.9099982293 -0.1398050524 0.9788097301 0.0699909081 + 110 0.9470547860 0.0095841651 1.0095601783 0.0069201916 + 111 1.0187319035 -0.0285407730 0.9979002209 0.0640445960 + 112 1.0379684230 -0.0221573176 0.9537791807 0.1001786482 + 113 0.9828460551 0.1977940466 1.0442539992 0.0048712713 + 114 1.0588155107 -0.0176262783 0.8818951242 0.0040702646 + 115 1.0565009848 -0.1830368528 0.9346243638 0.0931378662 + 116 0.8751931581 -0.0528378381 0.9361141037 0.0246149295 + 117 0.9870516144 -0.0213428740 0.9104664638 -0.0236519545 + 118 0.9484216562 0.1491468255 0.8666669287 0.1347589822 + 119 0.9433469507 0.0735185059 1.0049049220 0.1944160302 + 120 0.9971938380 0.0260052939 0.9219831985 0.0662699284 + 121 0.9940357728 -0.0188235101 1.0068126859 0.0595250832 + 122 1.0361074706 -0.1854167715 1.0479005340 -0.0656787562 + 123 0.9604243303 0.0640849240 1.0142250370 0.1492572686 + 124 1.1405047056 -0.1984454879 0.9592868637 -0.1802215422 + 125 1.0101432693 0.1456973256 0.9315648075 -0.0404637187 + 126 0.8934636096 0.0725311501 1.0653333172 0.0677430207 + 127 0.9983379240 0.0545008842 0.9160150869 0.2013387307 + 128 0.9605280611 -0.1243687172 0.9494372099 -0.0244831781 + 129 0.9009816542 -0.2116296318 1.0288706640 0.1282942656 + 130 1.0280230820 0.1040484840 1.0109412511 -0.1443861745 + 131 0.9056262412 -0.1143642495 1.0110425749 -0.0354566924 + 132 1.1071490058 0.0988187861 0.9276945623 -0.0173892822 + 133 0.9568699693 0.0051289884 0.9913528466 -0.0110656974 + 134 0.9788384535 0.0094004982 1.0152982285 0.0754588858 + 135 1.0999808619 -0.0091086827 0.9407499354 0.0529761038 + 136 1.0680149834 -0.0269872037 1.0268021438 0.0967378784 + 137 0.9604394081 0.0774810190 1.0221704329 -0.0374618361 + 138 1.1065969816 0.0015986298 0.9665633201 -0.0833448883 + 139 0.9645257133 0.1483941891 0.9412823493 0.0361003920 + 140 1.0107125927 -0.0474989269 0.9835409209 0.0701585747 + 141 1.0149809730 -0.0295354859 1.0048834788 -0.0866937056 + 142 0.9835596324 0.1117782708 0.8421250735 -0.0483283144 + 143 0.9832939350 0.0575306122 1.0376721818 -0.0311064166 + 144 0.9778127405 -0.1207436764 0.9322340631 -0.0965406860 + 145 1.0045091529 0.1118116410 0.9663599981 0.1788484797 + 146 1.0468710181 -0.0381126576 0.9862869871 0.0378274043 + 147 0.9824246628 -0.0182906754 1.1080475088 -0.1498422211 + 148 0.9415145650 -0.0723322564 0.9112154495 -0.0368701187 + 149 1.0150654896 -0.0527884290 0.9726940131 -0.0393464790 + 150 0.9969370171 -0.0385871254 0.9914618282 0.0026246908 + 151 1.0624430149 0.0108868789 0.9762574077 0.0048107302 + 152 1.0426570869 0.1186125453 1.0571880976 0.0825509719 + 153 0.9176134497 0.0221903388 1.1005926166 0.0141368753 + 154 0.9077663464 0.0779982896 1.0305132120 -0.1373808942 + 155 0.9387290631 0.0099283912 0.9857430803 0.0958069954 + 156 1.0246486625 0.0899421033 1.0040026931 0.0047857069 + 157 1.0578359817 -0.1466524441 0.9749497433 -0.0581135098 + 158 0.9706542483 0.0273666009 1.0663476920 0.1326101621 + 159 0.9622678679 0.0528341684 1.0483837940 -0.0626605158 + 160 0.9659079985 0.1146900087 1.0056125394 -0.1265437100 + 161 0.9800540882 0.1119178351 0.9768898600 -0.2394795677 + 162 1.0641511329 0.0433810912 1.0421768750 -0.1110251749 + 163 1.0338105715 -0.0147049680 0.9306822813 -0.0919653849 + 164 0.9963403246 -0.0065535810 0.9734796636 -0.0289720141 + 165 0.9767871227 -0.0704148960 1.0714571970 0.0198633461 + 166 1.0246041826 0.0813362392 0.8844043952 -0.0002180809 + 167 0.9647306542 -0.0406302694 0.9298938675 0.0793038777 + 168 1.0102910304 -0.0868108809 1.0424985453 0.0278291004 + 169 1.0234049194 -0.0426201083 1.0445198949 -0.1822682721 + 170 1.0001413468 0.0489231005 0.9639678271 0.0634891487 + 171 0.9328036169 0.1050602658 1.0454728216 -0.0339505038 + 172 1.0054180543 -0.0274738422 1.0079576195 0.0875994225 + 173 1.0650303659 -0.0230740185 1.0356012720 0.1005057370 + 174 1.0078751573 0.0774855904 1.0994778516 -0.0404270353 + 175 0.9776310052 0.0134160267 1.0062345355 0.1190587377 + 176 1.0513878007 0.0529083671 0.9576348958 -0.0311760733 + 177 0.9850025711 -0.0415658824 1.0280070393 -0.0613315349 + 178 0.9328541353 0.1860382755 0.9834610652 -0.0380333984 + 179 0.9724596340 -0.0049618317 0.9476013775 -0.0932590533 + 180 1.0236788746 0.1117056520 0.9404707944 0.0021960210 + 181 0.9482313376 0.0766331590 0.9712074125 0.1350308342 + 182 1.0015829763 0.0963223016 0.9349989083 0.0841296694 + 183 1.0537217384 -0.0433982828 1.1070939597 0.0611726187 + 184 0.9681140472 0.1141435813 0.9905407537 0.0644533518 + 185 0.9948662261 -0.0169474346 0.9998939595 -0.1391165750 + 186 1.0365520316 0.1811290419 0.9929285231 -0.0421298362 + 187 0.9364563109 -0.0822260064 1.0090961878 -0.0410948480 + 188 0.9340921369 0.0792576115 0.9633984178 0.0618671725 + 189 1.0451082338 -0.0125306953 1.0183685735 -0.0461839464 + 190 1.0112925849 0.0451190562 0.9729720714 0.0501327322 + 191 1.0556311850 -0.0172087914 1.0157923949 0.0773386255 + 192 0.9906367023 -0.0342272976 1.0063852575 -0.0714464725 + 193 0.9940864339 0.0623612004 1.0629475702 -0.0074607989 + 194 0.9626840321 0.0028611375 1.0171462677 -0.0930017135 + 195 1.0444384282 -0.0254962753 1.0435760705 0.0219345719 + 196 1.0435188999 -0.0530288363 1.0274292091 -0.0038522318 + 197 0.9807309796 -0.0570846573 0.9871393015 0.0082701922 + 198 0.9255994919 -0.0394884024 1.1046030649 0.0228027345 + 199 0.8504819299 -0.0109204621 0.9580243106 0.0348253007 + 200 0.9943053883 0.0401248874 1.0284751070 0.0415187295 + 201 0.9902662383 -0.0442759727 0.9563023363 -0.0434045633 + 202 1.0130409871 0.0422875996 1.0123162884 -0.0124024071 + 203 1.0322335432 -0.0377941634 1.0994854290 0.0590188264 + 204 1.1202777841 -0.1588389836 1.0500253388 0.0070054562 + 205 0.9770747085 -0.0543226582 1.0060183237 0.0631722885 + 206 1.0664926394 0.2347883328 1.0561793859 -0.0375659068 + 207 0.9632099475 0.0096789132 1.0213968113 -0.0414589212 + 208 0.9114960644 0.0449590295 1.0416633046 0.0073427320 + 209 0.9644034274 0.0440571212 1.0048887562 0.1523338961 + 210 1.0422358688 -0.0799783777 1.0014108494 0.0436840779 + 211 1.0318072316 0.0464758223 1.1021955186 0.0805300783 + 212 0.9861569005 -0.0931670923 1.0146233396 0.0086396886 + 213 0.9784571885 0.0618244657 0.9743767347 -0.1307794456 + 214 1.0198804438 0.0245606751 1.0350691714 0.0196265570 + 215 0.9659045965 -0.1147570793 1.0320151988 -0.0028144994 + 216 1.0564923447 -0.0470725453 1.0005633644 -0.0061709089 + 217 1.0162624828 0.0619741692 1.0277740878 -0.0495414751 + 218 0.8983890897 -0.0086388227 0.9759825029 0.0244324594 + 219 1.0639350670 -0.0591727984 1.0062787678 0.0458597713 + 220 1.0604056153 0.0327777233 1.0004356901 -0.0072487994 + 221 1.1292647069 0.1278984382 1.0333159737 0.0348266090 + 222 1.0399003829 -0.1054283896 1.0036184142 -0.0550080835 + 223 1.0176789898 0.0107538081 0.9630151380 0.0848449978 + 224 0.9576463992 0.0629802112 0.9656337726 0.0553629240 + 225 0.9619183124 -0.0628333537 1.0036417866 -0.1214331864 + 226 0.9920532969 -0.0292924871 1.0143885737 0.0070171776 + 227 1.0735963320 0.0286280990 0.9688478787 0.0565192562 + 228 0.9559535428 0.0348765711 1.1206753385 0.0453531905 + 229 1.0527560192 -0.0950707649 1.0197581891 0.0442128043 + 230 0.9556376401 -0.0808487656 1.0587433772 0.0690772303 + 231 1.0225055705 -0.0045136406 1.0213829026 -0.0223966169 + 232 1.0745856883 -0.2338739348 1.0411552147 -0.0348164596 + 233 1.0307094632 -0.0273164590 1.0175152388 0.0036302972 + 234 0.9922219143 -0.0806378253 1.0606576678 -0.0184470514 + 235 0.9041475250 -0.0453497561 1.0166491048 0.1200325723 + 236 1.0037095802 0.0557410837 1.0111054425 0.0948701932 + 237 1.0187649455 0.0097593132 1.0728959831 0.0272834890 + 238 0.9085402561 -0.0000569837 1.0548363637 0.0501327767 + 239 0.9773265237 0.1050224552 1.0208505182 -0.0293413533 + 240 0.9321861742 0.0424340514 0.9505385083 0.0195232922 + 241 1.0235587587 -0.0335160669 0.9320908001 -0.0349310811 + 242 1.0205943363 -0.0400181327 0.9318055184 0.0861336379 + 243 1.0309715871 -0.0255463225 1.0313346895 -0.2033183996 + 244 0.9922251142 0.0664473706 1.0385521131 -0.0325270258 + 245 1.1024849668 0.0383454500 1.0524590568 -0.0100407622 + 246 1.0157856509 0.0665999884 0.9854851652 0.0930929619 + 247 1.0171582738 0.0190916060 0.9938193187 -0.0604383382 + 248 1.0347917220 0.1131573184 0.9690234121 -0.0343371391 + 249 1.0463736159 -0.0422774885 0.8956830057 0.0852507275 + 250 1.0502871157 -0.0315910104 1.0398626619 0.0590936684 + 251 0.9585531577 0.0353078420 1.0016716449 0.0710562246 + 252 0.9955261788 0.0223306493 0.9347898329 -0.0397318458 + 253 1.0233484030 0.0054274352 1.0102299209 0.0211172919 + 254 0.9337619075 -0.0223313611 1.0809263751 0.0435445482 + 255 0.9861916291 -0.0961098752 1.0115399693 0.0422676053 + 256 1.0746106180 0.0619510898 1.0306383347 0.0222543338 + 257 0.9726925654 0.0163313561 0.9638786923 0.0140739536 + 258 1.0053731124 0.0979431578 0.9780915263 0.0018841849 + 259 0.9087172532 -0.0481250148 0.9436658612 0.1044797075 + 260 0.9921230385 -0.0225585215 1.0496267599 0.0375562302 + 261 0.9687346602 -0.0155757786 0.9891296321 0.0169901388 + 262 1.0170839808 0.0346311409 0.9816575316 -0.0551285378 + 263 0.9819176041 0.0714674251 1.0214576676 -0.0352187323 + 264 1.0177489274 -0.0189209760 0.9402691195 0.0681863834 + 265 1.0274137880 -0.0455687627 1.0758107705 -0.0918228380 + 266 1.0299903106 0.1384676734 0.9730557875 -0.0975327275 + 267 1.1124311505 -0.0068494892 1.0179340979 -0.0248018809 + 268 1.0121831675 -0.0864510950 1.1245194832 0.0531515258 + 269 1.0355903744 -0.1046870949 1.0318831230 0.0688980769 + 270 0.9609855320 0.0642552175 0.9923314194 0.0476763125 + 271 0.8971990481 -0.1092829042 0.9875324587 0.0947712756 + 272 1.0663719179 0.1574012271 1.0200833294 0.0404750013 + 273 0.9416880501 -0.0180036172 0.9545861400 0.0092609653 + 274 0.9956280463 0.0573032765 0.9504609192 0.1126604335 + 275 0.9920389487 0.1092972178 0.9844221610 -0.0027790787 + 276 0.9977675235 -0.0710384928 1.0758486187 -0.0276176611 + 277 1.0391107984 0.0597930443 1.0696024087 0.0724631372 + 278 0.9682294977 -0.0414037096 1.0769628719 -0.0385745931 + 279 1.0250345449 0.0934421428 0.9624955679 0.0260696488 + 280 1.0608350638 0.0072815867 1.0455310398 -0.0404896203 + 281 0.9837642057 -0.0044405300 1.0018664645 0.0718972006 + 282 1.0231595585 0.0416697601 0.9972915111 0.0036664398 + 283 1.0401489580 -0.0241408821 0.9291373227 -0.0205156578 + 284 0.9462881308 -0.0211595011 0.9317097277 0.0365485850 + 285 1.0677375646 0.0416788476 1.0083232602 -0.1069854906 + 286 0.9602666221 -0.0159901383 1.0161309324 -0.0949317303 + 287 1.0096735031 -0.1428228759 1.0128000065 0.0577424753 + 288 0.9449290078 -0.0490188936 0.9797391223 0.0204960114 + 289 1.0098633609 -0.1493935200 1.0070458917 -0.0862311686 + 290 0.9591022546 -0.0172397138 0.9571898566 0.0076401239 + 291 1.0165045593 -0.0865730756 1.0362504914 -0.0895665356 + 292 1.0196338436 -0.0607692047 1.0687581808 0.0453057838 + 293 0.9788415844 -0.0785542887 0.9742376345 0.0321824155 + 294 0.9799681313 0.0842160441 1.1162097265 0.0495754359 + 295 1.0481133604 0.0098809654 1.0443749772 -0.0771568063 + 296 1.0092421260 0.0151808868 0.9501935121 0.0018418454 + 297 0.9729431699 0.1075084425 0.9859447808 0.0596087664 + 298 1.0294556274 -0.0267791028 1.0325355873 -0.0053373158 + 299 0.9665681961 0.0138913971 1.0269509460 -0.0562122278 + 300 1.0253884901 0.0231657528 1.0039329331 -0.0064160651 + 301 1.0185450485 0.0775491513 0.9673982430 -0.1116770716 + 302 1.0076224549 -0.0249691756 0.9706185349 0.0641596269 + 303 1.0386982973 0.0612904485 0.9121772239 0.1174579479 + 304 0.9771512828 0.0000062825 0.9639389073 0.0254538722 + 305 0.9957340729 -0.0677704975 1.0211278546 -0.0232958262 + 306 1.0862113966 0.0375106979 0.9934303824 0.1206411320 + 307 0.9976050279 -0.0096626652 0.9782786931 -0.0738829016 + 308 0.9871569961 -0.0512688484 0.9860207460 -0.0781138030 + 309 1.0048202209 0.0325427260 1.0056129067 -0.0046886819 + 310 0.9417941033 -0.0978355404 1.0202208384 0.0260870538 + 311 1.0115078968 0.1185256798 0.9809938563 0.0307809140 + 312 0.9653093579 -0.1199821792 0.9672402308 0.0644044185 + 313 1.0302997626 -0.0813079435 1.0314892662 -0.0139450224 + 314 0.9518311989 0.0255446522 0.9828284056 0.0859567895 + 315 0.9807132657 0.0138395737 0.9494125993 0.0305249056 + 316 1.1211310998 0.0643107072 1.0146142201 0.0555500125 + 317 0.9647616910 -0.0638274287 1.0302732057 0.0469139562 + 318 0.9301754558 0.1049517511 1.0437078369 0.0139256752 + 319 0.9225048205 0.0194104116 1.0154220529 0.0236763560 + 320 1.0446176673 0.0906303792 1.0700420969 0.0302621927 + 321 1.0438705164 -0.0301891799 0.9803907486 -0.0208830641 + 322 0.9663163454 -0.0830005684 1.0591221331 -0.0536786242 + 323 1.0143784363 -0.0251025348 0.9256452321 0.0015684474 + 324 1.0320370036 -0.0161384821 1.0294737291 0.1054216643 + 325 1.0294620555 0.0289166551 1.0206870512 0.0521494584 + 326 0.9736231258 0.0225586923 1.0535517018 0.0231005050 + 327 1.0236132707 0.0618041251 1.0654366212 0.0056129630 + 328 0.9557657357 -0.0738452090 1.0170340951 0.0978629775 + 329 1.0054185335 -0.1039218081 1.0316970329 -0.0508348798 + 330 1.0522537350 -0.0099214612 0.9718020856 -0.0247188791 + 331 1.0549884659 0.0738668477 1.0093504229 -0.0676723277 + 332 0.9975089475 0.0030453475 0.9875675325 0.0312119274 + 333 1.0507630835 0.0778098198 0.9907457603 0.0289785573 + 334 1.0485182554 -0.0322966462 1.0015131470 0.0659641626 + 335 0.9750489243 0.0187200499 0.9751004497 -0.0234309370 + 336 1.0180036544 -0.0177549145 1.0259603257 0.0140335058 + 337 0.9961247855 -0.0257414901 1.0242282862 0.0442639586 + 338 0.9361539384 -0.0373357624 1.0320556428 -0.0467309547 + 339 0.9725690625 0.0213310157 1.0681926647 0.0491379532 + 340 1.0328634193 -0.0277811620 0.9779788625 0.0751749400 + 341 0.9903251805 -0.0008748240 0.9964430193 -0.0300465193 + 342 1.0055755977 -0.0191657951 0.9938292926 0.0762053549 + 343 1.0662426855 0.1213731858 1.0332030059 0.0015550903 + 344 1.0304790286 -0.0031648695 0.9997995968 0.0605877456 + 345 0.9657650244 -0.0967111593 0.9806860293 0.0509189199 + 346 1.0164609679 -0.0383077688 0.9987928440 -0.0186130933 + 347 0.9691203906 0.1008457806 0.9943129073 0.0329122604 + 348 1.0275936225 0.0116983524 0.9731333340 0.0070085613 + 349 0.9647985259 -0.0310592248 0.9676396451 -0.1221222258 + 350 1.0026209592 0.0002593703 0.9654213505 0.0400554883 + 351 0.9624638834 0.0010728076 1.0048357856 0.0324089335 + 352 0.9826735626 -0.0168748456 0.9876698664 0.0032724498 + 353 1.0142132070 -0.0421978681 0.9820709926 0.0345506820 + 354 1.0675931656 -0.0245601701 0.9974003579 0.0193347130 + 355 0.9198302895 0.0014057086 1.0120620206 -0.1057881839 + 356 0.9649220391 0.0215978013 0.9495297001 0.0037474863 + 357 1.0606847621 -0.0615541940 0.9160278818 0.0230417344 + 358 1.0094232819 -0.0750243443 0.9384941983 -0.0339124425 + 359 1.0953885632 0.0259721563 0.9351427002 -0.0870422026 + 360 1.0037723322 0.0019255595 0.9889072254 0.0285054679 + 361 1.0666916571 -0.0343550358 1.0196928782 0.0766150756 + 362 0.9998681969 0.0327659051 1.0061561030 -0.1021720555 + 363 1.0057439665 0.0132140687 1.0275856061 0.0512127141 + 364 1.0429409095 0.0194255183 1.0093832601 -0.0573729247 + 365 1.0651226457 0.0450108197 1.0013552747 -0.0713800810 + 366 0.9172108063 0.0181852754 0.9441222645 0.0653714551 + 367 0.9098166656 -0.0302134241 1.0009099557 0.0895010310 + 368 0.9762136464 -0.0148117955 0.9755468517 0.0738802886 + 369 0.9327397602 0.0183966524 0.9291044910 -0.0362565355 + 370 1.0298871073 0.0331882003 1.0293570247 -0.0143560685 + 371 0.9361625393 0.1020945615 0.9630990527 0.0562559020 + 372 1.0117310053 0.0218208282 1.0087514583 0.0310005463 + 373 1.0652629759 -0.0157522257 0.9909793934 -0.0333058064 + 374 0.9817407713 0.0473015196 1.0073508034 0.0450995510 + 375 0.9769724598 0.0198740828 1.0266747609 0.0964176340 + 376 0.9325907787 0.0137226471 0.9937410948 0.0127118345 + 377 1.0107053734 -0.0307494536 1.0898399457 -0.0504859118 + 378 1.0470725852 0.0847893882 0.9771128922 -0.0966310268 + 379 1.0519346789 0.0847764288 1.0065258206 -0.0869839336 + 380 0.9995841403 -0.0669055137 1.0388192394 0.0338755846 + 381 0.9458410994 0.0013042893 0.9361874329 -0.0025401381 + 382 1.0385184812 -0.0335070529 1.0249620335 0.0410192756 + 383 0.9776057701 -0.0362878525 1.0189937137 -0.0709785108 + 384 0.9438397974 0.0187164015 1.0443504266 -0.0012051454 + 385 0.9872634159 -0.0303307517 0.9297131439 0.0648512481 + 386 0.9956948941 0.0013449377 0.9775991207 -0.0014713962 + 387 0.9890522103 0.0030389235 1.0206489454 -0.0456131859 + 388 1.0135011840 0.0409721198 1.0133883329 -0.0191897124 + 389 1.0750598944 -0.0282196459 1.0257033950 0.0661094748 + 390 0.9984934338 0.0980289891 0.9812179431 0.0230998202 + 391 0.9954085875 0.0504320864 1.0010297425 -0.0338678346 + 392 1.0043316115 -0.0489981358 1.0426910275 -0.1182807296 + 393 0.9845778728 -0.0265191574 0.9805244880 0.0503389531 + 394 1.0620438820 -0.0151609381 1.0186136276 -0.0708673092 + 395 0.9949620929 -0.0371877452 1.0536349444 0.0075181311 + 396 0.9567218596 -0.0024745809 1.0125294308 0.0019538818 + 397 0.9761101528 -0.0063978706 1.0036577108 -0.0194371916 + 398 1.0121092864 0.0435467880 1.0270166834 0.0044163567 + 399 0.9862587829 0.0170930178 0.9819546434 0.0378642696 + 400 1.0479406877 -0.0413744060 0.9493346154 0.0098630226 + 401 1.0060730167 0.0652348635 0.9726975966 -0.0474348187 + 402 1.0638118322 0.1678413289 1.0248406485 -0.0822197344 + 403 0.9781747532 -0.0275658442 0.9861144885 0.0055224391 + 404 0.9841570856 0.0623412822 0.9696432187 -0.0044496561 + 405 0.9659749542 0.0481733986 0.9742593923 -0.0066849481 + 406 1.0252400949 -0.0433855299 0.9859642538 -0.0271765526 + 407 1.0136742583 -0.0402647176 0.9875830089 0.0555573140 + 408 0.9930593398 -0.0694670569 1.0246351521 0.0243862381 + 409 0.9447434933 -0.0168434240 1.0964367601 0.0211885992 + 410 0.9837545057 0.0461796624 0.9685377194 0.0096855097 + 411 0.9770281924 -0.0055585390 0.9754165145 0.0015081514 + 412 1.0189963301 0.0285116765 0.9927640092 -0.0131887567 + 413 1.0349693265 0.0400785844 0.9881184418 0.0163179018 + 414 0.9705425526 -0.0104047612 1.0757660733 0.0001518293 + 415 0.9581366442 0.0451725901 1.0123348976 0.1221957075 + 416 0.9685155435 -0.0299418415 0.9851718578 -0.0671515312 + 417 1.0263085515 0.0119448531 1.0299177568 -0.0461507341 + 418 0.9790874186 -0.0339784159 0.9573938035 -0.0113590014 + 419 1.1102887036 -0.0453856119 0.9713279993 -0.0058778210 + 420 0.9936479030 0.1138694098 1.0290676926 0.0586714738 + 421 0.9869375401 0.0738805649 1.0440333860 0.0464900721 + 422 1.0410041791 -0.0488414314 1.0368469287 0.0617506552 + 423 1.0235699262 0.0459123944 1.0442535967 -0.0176530205 + 424 1.0052647586 -0.0581362024 1.0481243359 0.0308817250 + 425 0.9991188789 -0.0058551979 1.0402661910 0.1081584142 + 426 1.0246171980 0.0604518913 1.0260849747 -0.0177844602 + 427 1.0230848879 -0.0262789101 0.9853660902 0.0002913164 + 428 0.9950002105 -0.0864101902 0.9813656008 0.0555957124 + 429 0.9981569339 0.0607726966 1.0299232911 -0.0375508158 + 430 1.0545644500 -0.0666663935 0.9684349139 0.0977452317 + 431 1.0244836095 -0.0453160542 0.9792367878 0.0799518946 + 432 0.9504173538 0.0444194175 0.9725797525 0.0436078515 + 433 1.0081467616 -0.0080208350 1.0134699482 -0.0145719020 + 434 1.0501718057 0.0083638508 1.0652812144 -0.0206405059 + 435 0.9702181945 0.0439576230 0.9457408680 -0.0297470692 + 436 0.9844333671 0.0688045502 0.9875456127 -0.0358979299 + 437 1.0278197550 0.0307950112 1.0159563345 0.0044427805 + 438 0.9490765328 0.0276806217 0.9776657879 0.0937008816 + 439 1.0545892490 0.0875198144 1.0246234929 -0.0087951152 + 440 0.9737038584 -0.0028231742 1.0002363136 -0.0477480947 + 441 1.0034403245 -0.0222515027 0.9660990742 0.0261729873 + 442 1.0234497156 0.0634492670 0.9987766367 -0.0095074356 + 443 0.9601480789 -0.0011099899 1.0025027939 -0.0050999147 + 444 1.0169621887 -0.0680474230 0.9438729035 -0.0003491744 + 445 0.9839967520 -0.0982407546 0.9908365436 -0.0590371809 + 446 1.0162754909 -0.0508056304 0.9971992935 0.0072910105 + 447 1.0131858356 -0.0752134237 1.0620192278 0.0357718852 + 448 0.9881318787 0.0180833720 0.9496760542 0.0297890954 + 449 0.9993396115 -0.0213587886 1.0299535759 -0.0218366041 + 450 0.9555383982 -0.0519563052 1.0044903108 0.0272985730 + 451 1.0200426366 -0.0077259714 0.9511521250 0.0083759621 + 452 0.9659108521 0.0549304738 1.0338981775 -0.0034864579 + 453 1.0198566635 0.0539766916 1.0508788602 0.0128040409 + 454 1.0575558061 -0.0109676468 1.0361344591 0.0327396601 + 455 1.0126924415 -0.1017909212 1.0249738304 0.0558869782 + 456 0.9673139494 0.0148636194 1.0087665016 -0.0281657603 + 457 1.0222187265 -0.0472081774 1.0180462686 0.0085935231 + 458 1.0214079757 -0.0555502490 1.0470442811 -0.0748369392 + 459 1.0277720345 -0.0848961990 0.9694128399 -0.0051227848 + 460 1.0163973693 -0.0029798305 0.9438286839 0.0303086907 + 461 1.0352249443 0.0423278680 0.9718400866 0.0285709249 + 462 0.9641081724 0.0347852479 0.9896876153 0.0879052054 + 463 0.9935241991 -0.0179056036 0.9929174457 0.1035007269 + 464 1.0483888165 -0.0418119305 1.0285868588 -0.0246157936 + 465 0.9431113182 -0.0461776838 0.9842792465 -0.0881782828 + 466 0.9614215944 -0.0308363649 0.9640704059 -0.0348064251 + 467 1.0153436265 0.0034709363 0.9822924872 -0.0072843170 + 468 0.9818174301 -0.0537340699 0.9839601918 0.0301370244 + 469 1.0134306953 -0.0112304058 0.9683490622 0.0081103919 + 470 1.0121553989 -0.0340665875 0.9956154959 0.0094363633 + 471 0.9994367544 0.0065074979 1.0037154493 0.0067956510 + 472 0.9675610588 0.0028058542 1.0283668923 -0.0576637827 + 473 1.0003216312 0.0209366495 1.0025839180 -0.0592071510 + 474 1.0099792922 -0.0767112966 0.9176692247 -0.0355315485 + 475 0.9954320470 -0.0145555795 1.0469157619 -0.0470937942 + 476 0.9668166163 -0.0334676776 1.0038436085 -0.0339326971 + 477 0.9698237843 -0.0120473394 1.0401856151 0.0136478639 + 478 1.0072974848 0.0780895974 0.9755106265 0.0496595647 + 479 0.9480068013 -0.0425643908 0.9647063221 0.0507694390 + 480 0.9703990067 0.0615847994 0.9837652236 0.0511467632 + 481 0.9651439542 -0.0145519295 1.0045936926 0.0362099232 + 482 0.9745422801 0.0579014654 1.0747648468 0.0182854694 + 483 0.9923756617 -0.0690124369 1.0532977011 -0.0561771314 + 484 0.9872022033 0.0172853868 1.0015249814 0.0433984620 + 485 1.0919427819 0.0133680872 1.0412657894 -0.0092626635 + 486 0.9684791457 -0.0276449059 1.0025754869 -0.0155811545 + 487 0.9836529863 -0.0093971036 1.0043254318 -0.0212692690 + 488 1.0140931668 -0.0186470829 0.9798009379 0.0468592112 + 489 1.0415639447 0.0377836644 0.9978933899 0.0014777063 + 490 0.9960701729 0.0578486513 1.0002445745 -0.0428678542 + 491 0.9857861843 0.0687963610 1.0129356262 0.0267703314 + 492 1.0263996203 -0.0300817444 0.9873273230 -0.0118486604 + 493 1.0170841800 0.0189157006 0.9971603081 -0.0735264216 + 494 0.9871173409 0.0200146374 1.0192284765 -0.0353303107 + 495 1.0264248608 0.1058794416 0.9328811923 0.0022191795 + 496 1.0197898939 -0.0619977856 0.9900183400 0.0602304870 + 497 1.0183838875 -0.0568310889 1.0142459993 -0.0746292024 + 498 1.0287983479 -0.0293235502 1.0011422816 0.0333885759 + 499 1.0296630487 -0.0155382885 1.0111000166 -0.0447350930 + 500 0.9683506950 0.0612954787 1.0058906054 0.0365189762 + 501 1.0503830090 -0.0283788254 0.9647537033 -0.0470782103 + 502 0.9809574882 0.1018687908 1.0469574790 -0.0740170297 + 503 0.9888248684 -0.0070096245 1.0030916610 -0.0656782250 + 504 0.9722871739 0.0324738508 1.0037329859 0.0338019872 + 505 1.0249479829 -0.0100877191 1.0474862590 -0.0121303650 + 506 0.9939291677 -0.0033358283 0.9853946892 -0.0378556424 + 507 1.0271605782 0.0034919096 0.9972858971 0.0081455366 + 508 0.9768230374 0.0120733889 0.9655205640 -0.0028288633 + 509 0.9909990036 -0.0478850870 1.0051837058 -0.0707785911 + 510 0.9790220837 0.0110837708 1.0120365477 -0.0264836217 + 511 1.0454620096 -0.0768811215 0.9359046061 -0.0031918290 + 512 0.9745167725 -0.0295310834 1.0117424224 -0.0128170489 + 513 1.0365760997 -0.0384776507 0.9782378314 -0.0096045516 + 514 1.0182564906 0.0123585564 1.0038224787 -0.0445021184 + 515 0.9883948047 0.0262358361 1.0284312907 0.0396990068 + 516 1.0394539278 0.0193848279 1.0112675988 0.0102972461 + 517 1.0082260911 0.0201317493 0.9800465983 -0.0310424157 + 518 0.9662363299 -0.0056512484 1.0197225803 -0.0291114522 + 519 1.0611766987 0.0131083689 0.9861586978 0.0045072015 + 520 1.0003072994 0.0315523491 1.0261046547 0.0068378532 + 521 0.9836600995 0.0175459333 0.9565040066 0.0148356270 + 522 0.9797447364 0.0123311606 1.0286461127 0.0058220724 + 523 0.9776456052 0.0240117809 0.9661669112 0.0559366088 + 524 1.0065008475 0.0487356477 0.9751154321 -0.0184694393 + 525 0.9931144102 0.0113010498 0.9706392804 0.0194904153 + 526 0.9881361254 0.0062994978 1.0070178407 -0.0472420445 + 527 1.0540616348 0.0662696142 0.9568601387 0.0411756524 + 528 0.9482319696 0.0409624844 1.0036409448 0.0447819699 + 529 0.9632026130 0.0486543411 0.9768937856 -0.0339241237 + 530 1.0259660774 -0.0252868370 0.9737855206 0.0411438026 + 531 0.9969067651 -0.0064243387 0.9937427324 0.0850539322 + 532 1.0089843167 -0.0022386842 1.0024536202 -0.0091818421 + 533 1.0553486681 0.0359448801 0.9849410510 0.0430343244 + 534 0.9811373747 0.0131849532 0.9686433077 0.0234349195 + 535 0.9918202527 -0.0764914680 0.9902644947 0.0159470024 + 536 0.9777418789 0.0347838530 0.9169183943 0.0256137099 + 537 0.9992669075 -0.0394073353 0.9915439643 0.0218045224 + 538 0.9830053003 0.0874677706 1.0062558408 -0.0411934446 + 539 0.9984864147 -0.0043306780 1.0025500405 0.0025025485 + 540 0.9723356181 -0.0309537502 1.0360777870 0.0084862505 + 541 0.9198402542 -0.0891518775 1.0339192962 -0.0113839618 + 542 1.0166013529 -0.0318492335 0.9484427995 0.0446884037 + 543 0.9980818660 -0.0652095443 0.9495990264 -0.0031101791 + 544 0.9998656418 -0.0616150081 1.0044060639 -0.0267196568 + 545 1.0216729719 0.0222504643 0.9954949374 0.0743203182 + 546 0.9758858802 -0.0230278611 0.9561932285 0.0088557203 + 547 1.0123236683 -0.0053209752 1.0126267449 0.0414341149 + 548 1.0512934330 0.0184077498 1.0068131535 -0.0007487327 + 549 1.0512437759 0.0623230607 0.9664062013 -0.0059226729 + 550 0.9934242969 0.0175398969 0.9675428681 -0.0007106921 + 551 1.0102500466 0.0271139287 1.0226755026 -0.0661595370 + 552 0.9855970038 -0.0004277277 1.0515381567 0.0005605228 + 553 0.9564696474 0.0094375415 0.9746278813 0.0604933672 + 554 0.9861902579 -0.0081037271 0.9931752088 0.0378083496 + 555 1.0853632777 0.0172940396 0.9761074023 0.0031105242 + 556 1.0476061533 0.0288179322 1.0345621359 -0.0280019875 + 557 1.0710826240 0.0102667194 0.9736842206 0.0190905789 + 558 0.9886160427 0.0535677022 0.9812943264 0.0184045925 + 559 0.9803621167 -0.0529642408 0.9755071612 0.0152824488 + 560 0.9805630327 0.0396643120 0.9724975862 0.0048558176 + 561 0.9705365728 -0.0174217534 0.9749249856 -0.0323960920 + 562 1.0439578734 0.0325585514 1.0381268564 -0.0687521910 + 563 0.9497674063 0.0335281708 1.0425254529 0.0385317189 + 564 0.9859012000 0.0332996959 1.0017006048 -0.0156637045 + 565 0.9786420755 -0.0335323903 1.0179542127 -0.0429691276 + 566 1.0324132384 -0.0328736542 1.0160740679 -0.0328941916 + 567 1.0079614144 0.0602772244 1.0800357231 -0.0153621682 + 568 1.0123711242 0.0074235049 0.9996525755 -0.0058963453 + 569 1.0195348977 -0.0323234910 0.9810186243 -0.0045450680 + 570 1.0067198843 -0.0086824495 1.0667822546 -0.0143348681 + 571 1.0424787696 0.0351693801 1.0513909210 0.0346455974 + 572 0.9985202885 0.0349741154 1.0983573179 0.0505965264 + 573 0.9607180787 0.0267290981 1.0452403062 -0.0370745794 + 574 1.0146128549 -0.0186951528 0.9920395483 -0.0420618761 + 575 0.9662221335 0.0275460339 0.9964023422 0.0193596433 + 576 0.9694917971 0.0179820851 1.0118843986 -0.0339664508 + 577 1.0089974749 -0.0984898385 0.9261969211 -0.0204531380 + 578 1.0137150876 0.0818061445 0.9887325434 0.0233477066 + 579 0.9869085279 -0.0332485750 1.0165572928 0.0313869490 + 580 1.0122267418 0.0595119818 1.0300246298 -0.0395291627 + 581 1.0577754979 -0.0338386966 1.0093590377 0.0215387195 + 582 0.9756861497 0.0034410611 0.9633798664 -0.0603256089 + 583 1.0184692548 -0.0158574002 0.9812432656 -0.0228024763 + 584 1.0149705722 -0.0365104900 1.0070230501 -0.0121256613 + 585 0.9696849173 0.0218337209 0.9743854976 0.0736595923 + 586 0.9966475982 0.0494138860 0.9826600444 -0.0124903472 + 587 1.0332386025 0.0918702170 0.9671032895 -0.0110882590 + 588 1.0387348624 -0.0752792448 1.0229234864 -0.0237926522 + 589 0.9855397753 0.0046943630 1.0217623065 -0.0214827453 + 590 1.0103998468 0.0253393049 1.0327187000 0.0509659275 + 591 1.0366156806 0.0010226370 1.0246146392 0.0097031334 + 592 0.9707325205 -0.0093285580 1.0150191148 -0.0707151991 + 593 0.9513737364 0.0446990494 0.9586385750 0.0490958296 + 594 1.0002383284 -0.0567224553 1.0546025733 -0.0116066592 + 595 1.0104732575 0.0796892633 1.0212073388 -0.1023582430 + 596 0.9649512022 -0.0467063177 1.0250471960 -0.0016834115 + 597 1.0242170212 -0.0199019445 0.9744163632 0.0469591969 + 598 1.0621571387 0.0155439596 1.0386101914 0.0233632426 + 599 1.0195081114 -0.0000321293 0.9690174018 -0.0379942196 + 600 0.9881274349 0.0118161542 0.9492385839 -0.0078829023 + 601 0.9828106926 0.0666176082 0.9661399821 0.0136520602 + 602 1.0225074388 0.0681948460 0.9444137150 -0.0285651070 + 603 1.0244014797 -0.0367169700 0.9938646898 -0.0771045900 + 604 1.0110486884 0.0446895308 0.9713612682 0.0504459933 + 605 1.0248878485 0.0244693516 0.9904037051 -0.0144034648 + 606 1.0059101840 -0.0173559984 1.0771400276 0.0261333524 + 607 0.9938827465 -0.0093541307 1.0252282138 -0.0322310381 + 608 1.0146106135 -0.0078121605 1.0551183738 0.0497046972 + 609 0.9915930778 -0.0235992996 0.9750524494 0.0015239172 + 610 1.0188408355 -0.0592764987 1.0119910213 -0.0498693047 + 611 1.0190778082 0.0517200923 1.0060459607 -0.0197840438 + 612 0.9225646257 0.0064440632 0.9466709001 0.0391293967 + 613 0.9813943835 -0.0243145630 0.9995436142 -0.0119690975 + 614 1.0276758549 -0.0134454330 0.9715333885 0.0235810039 + 615 1.0317796756 -0.0016627504 1.0476813830 0.0153289757 + 616 0.9692768749 -0.0943762292 0.9979849732 -0.0393409556 + 617 0.9886081990 -0.0446261962 0.9946817308 0.0001464044 + 618 1.0102822216 -0.0169179773 0.9970357282 -0.0002215442 + 619 1.0039988004 -0.0146332787 0.9437031626 0.0363920615 + 620 1.0274264838 -0.0449454555 1.0004058485 0.0094859775 + 621 1.0223493924 0.0157724147 1.0305554523 0.0018001763 + 622 0.9932702965 0.0250305420 0.9962888784 0.0068878149 + 623 1.0301135781 0.0220801171 0.9859987044 0.0375215459 + 624 0.9560094706 0.0342472123 0.9720108042 -0.0214332676 + 625 1.0156057436 0.0014012605 0.9257516784 -0.0370768292 + 626 1.0315592404 0.0127163656 1.0256195360 0.0227017068 + 627 0.9616289844 -0.0193105139 1.0282301329 -0.0379985833 + 628 1.0099912279 0.0807588649 1.0197142112 0.0094372210 + 629 0.9706181953 -0.0328942949 0.9666632846 0.0178952692 + 630 1.0086974063 -0.0109039529 1.0342925881 0.0452909418 + 631 0.9918831423 -0.0437116784 0.9584480272 0.0064931136 + 632 0.9702697876 -0.0353555672 1.0072028691 0.0290538393 + 633 0.9626087913 0.0761482990 1.0406414074 -0.0240424943 + 634 1.0388253190 -0.0085334277 1.0202556899 0.0249993281 + 635 1.0430144894 0.0325256630 1.0314454867 0.0508473728 + 636 1.0436638079 -0.0479159960 0.9825402238 -0.0158028600 + 637 0.9778018215 -0.0044766743 1.0195456151 0.0010078732 + 638 1.0145871018 -0.0284487720 0.9625776067 0.0223224994 + 639 1.0300347997 0.0811826039 0.9914032439 -0.0049839889 + 640 0.9958342340 0.0144505138 1.0185176528 0.0062667970 + 641 0.9615956443 -0.0044769478 1.0346663550 -0.0516393144 + 642 1.0171114572 -0.0191364194 0.9568641638 -0.0294695915 + 643 0.9850977927 0.0031709860 1.0518309408 -0.0129050634 + 644 0.9942300680 0.0627439192 1.0296011947 -0.0760412624 + 645 0.9865016292 0.0187835307 0.9866671003 0.0258550126 + 646 1.0173704366 -0.0143320459 0.9901289344 0.0030566583 + 647 0.9903873533 0.0257981760 0.9572801530 -0.0345361320 + 648 0.9899545249 -0.0345907216 1.0036020106 -0.0477938281 + 649 1.0108610271 0.0077876856 1.0017018252 -0.0351227086 + 650 0.9737550561 0.0556107745 1.0563561237 0.0533411175 + 651 0.9901201016 -0.0673685914 0.9785451098 -0.0016682402 + 652 0.9648133375 0.0451403708 0.9942547079 0.0422912757 + 653 1.0211767344 0.0191632086 1.0274147755 -0.0626069310 + 654 1.0347582442 0.0665421666 0.9922926676 -0.0204776144 + 655 0.9954008121 -0.0302194695 1.0023467992 0.0480738636 + 656 1.0505519790 -0.0460676346 0.9951527381 -0.0329410775 + 657 0.9649873253 0.0742486907 0.9955142532 0.0455356680 + 658 1.0189895718 -0.0486418244 1.0509379135 0.0073998870 + 659 1.0116295635 -0.0406950396 1.0403960812 -0.0287117866 + 660 1.0385097396 -0.0284488690 0.9865072145 -0.0487240303 + 661 0.9529632126 -0.0618513054 0.9738407975 0.0487164214 + 662 1.0052988122 -0.0123217673 1.0026859341 -0.0046059580 + 663 1.0242067610 0.0132016049 1.0059060970 -0.0366953884 + 664 1.0250142321 0.0416660645 0.9668313215 0.0398711406 + 665 0.9976064720 0.0701689533 0.9738766982 -0.0277616292 + 666 1.0133078686 0.0164165982 1.0136116788 0.0862018316 + 667 0.9961258140 -0.0396963845 1.0141917431 0.0184675632 + 668 0.9688797856 0.0014274163 0.9882702671 -0.0238718221 + 669 1.0198286305 -0.0633380192 1.0022337311 -0.0309370610 + 670 1.0042218116 0.0024824809 0.9696719641 -0.0459194510 + 671 0.9892698172 -0.0191037669 1.0143717901 0.0220703568 + 672 1.0298268862 -0.0379232007 1.0037654943 -0.0545111166 + 673 1.0124779973 -0.0238298540 0.9771930350 0.0285776117 + 674 0.9700331230 0.0217417792 0.9543236030 0.0537092867 + 675 0.9941778475 -0.0190737912 0.9903561066 0.0400812844 + 676 0.9795131095 0.0400384077 0.9796724032 -0.0126171715 + 677 0.9959646282 -0.0728499287 0.9993170426 -0.0299335069 + 678 0.9781197626 -0.0249489090 0.9901491388 -0.0306596959 + 679 0.9718180566 0.0152392814 1.0634205006 -0.0197167187 + 680 0.9948183038 -0.0179538341 1.0006041808 0.0384563252 + 681 1.0214372151 -0.0342480854 1.0017311428 0.0451531522 + 682 1.0058647554 0.0080452099 0.9487265491 0.0212297468 + 683 1.0139070781 -0.0093288815 1.0318599370 -0.0565023652 + 684 0.9563993531 0.0168964270 0.9947554612 -0.0031740863 + 685 1.0068222151 -0.0132536494 0.9507747861 -0.0139709407 + 686 0.9883251168 0.0662149546 0.9610211898 0.0203590273 + 687 1.0312753645 0.0447778443 1.0083123909 0.0302532402 + 688 0.9936423048 0.0175205009 1.0250130509 0.0180011184 + 689 1.0048472098 -0.0101955693 0.9901681641 -0.0188164147 + 690 0.9893149110 0.0138784238 0.9789497311 -0.0141461593 + 691 0.9841091871 -0.0863923150 0.9620360621 0.0077369500 + 692 0.9716051306 -0.0294578121 0.9841512165 0.0197818894 + 693 0.9512105912 0.0175506543 0.9669052169 -0.0347110373 + 694 0.9334037299 -0.0068216505 0.9901817418 -0.0339425551 + 695 1.0251229664 0.0014163338 0.9577651012 0.0362249080 + 696 1.0261501302 0.0065846609 1.0360541184 -0.0553718669 + 697 1.0184249478 -0.0418873895 0.9669763342 0.0045769180 + 698 1.0025689609 0.0257951089 0.9988513115 -0.0255949885 + 699 0.9710207288 0.0212491675 1.0169332515 -0.0066675412 + 700 1.0041877144 -0.0406145298 1.0112712665 -0.0467395980 + 701 1.0428109458 -0.0220010924 0.9802987065 -0.0171780132 + 702 1.0559479630 0.0233423517 0.9731554464 0.0495651413 + 703 0.9772014172 0.0266782289 1.0124130652 0.0396891991 + 704 1.0428384836 -0.0019982483 0.9911120896 -0.0329662444 + 705 0.9828545638 0.0661686453 0.9994514304 0.0708138974 + 706 1.0064248348 -0.0229844591 0.9666696624 0.0148241443 + 707 0.9986171967 0.0409319694 1.0140860890 -0.0351035008 + 708 0.9971304389 0.0892930693 1.0514666752 -0.0256524574 + 709 0.9650447288 -0.0018112779 0.9922953148 -0.0164148440 + 710 1.0270215543 0.0341778148 0.9812652018 0.0093090601 + 711 1.0382010733 0.0027532265 0.9881410571 0.0261670211 + 712 1.0097014336 0.0221494545 1.0091528220 -0.0498472865 + 713 1.0099703675 -0.0209281129 1.0249802350 -0.0535170246 + 714 1.0183232400 0.0434411628 1.0304428271 0.0459157069 + 715 0.9517921797 -0.0607383386 0.9976166284 -0.0115825642 + 716 1.0129393524 0.0003253260 1.0203962806 -0.0295113599 + 717 0.9811009007 -0.0270895452 1.0524262131 0.0064192272 + 718 1.0368619853 0.0141397015 0.9411333731 -0.0122164532 + 719 1.0479620793 0.0332278870 0.9500611012 -0.0172618568 + 720 1.0059678011 0.0440307206 0.9567510067 -0.0024986654 + 721 0.9589599658 0.0506881902 0.9790691665 0.0167888154 + 722 0.9645150849 -0.0170369660 1.0462910248 -0.0536945634 + 723 0.9826867454 -0.0009861314 0.9660362236 -0.0355033814 + 724 0.9983562836 -0.0464972093 0.9905670043 -0.0640446232 + 725 0.9935005173 0.0297370335 1.0081430406 0.0180995483 + 726 1.0134266983 -0.0120352836 1.0095548219 0.0134648332 + 727 0.9868707996 -0.0321876294 0.9809781247 -0.0667819276 + 728 1.0070687671 -0.0480564745 0.9700812468 0.0148401805 + 729 1.0298974773 0.1010212449 1.0691934643 -0.0009480254 + 730 1.0094515473 -0.0194095654 0.9970195560 -0.0295574759 + 731 1.0387892283 0.0006451547 1.0432981784 -0.0094999822 + 732 1.0100329834 -0.0645473082 0.9549045379 -0.0675747405 + 733 0.9987553444 0.0827235631 1.0196166390 0.0362547635 + 734 0.9960860895 -0.0135121096 0.9924516537 -0.0070308228 + 735 1.0268201414 0.0263296034 1.0131163197 -0.0265268408 + 736 1.0199423267 -0.0161321485 0.9857909084 -0.0156168557 + 737 0.9898246420 -0.0185202625 1.0202204816 0.0138266641 + 738 1.0162822389 -0.0175187242 0.9450121788 -0.0518535067 + 739 0.9711311271 -0.0448855850 0.9454419260 -0.0442260503 + 740 1.0409785006 -0.0106432614 0.9062022307 0.0504144853 + 741 1.0039399394 0.0233120831 1.0036348017 0.0057811218 + 742 1.0156858093 0.0018168782 1.0373872628 0.0104623717 + 743 1.0154478879 -0.0106195307 0.9608670851 0.0481145751 + 744 1.0465440719 0.0039543589 0.9852786204 -0.0022184824 + 745 0.9731204424 -0.0493801548 0.9834208014 0.0235675100 + 746 0.9819493390 -0.0143191400 0.9852504746 0.0534342483 + 747 0.9931214076 -0.0147751072 1.0529696800 0.0392531535 + 748 1.0110833579 0.0298510271 0.9624471767 0.0036042599 + 749 0.9626208160 -0.0020032354 0.9661054959 0.0509165818 + 750 0.9807390708 0.0427582162 0.9866614390 0.0185631545 + 751 0.9864940376 0.0170068919 0.9850932758 0.0158791450 + 752 1.0133534526 -0.0234894064 1.0014656872 0.0338954820 + 753 0.9874570070 0.0028940395 0.9872961615 0.0382947311 + 754 0.9961939959 0.0656570636 0.9657713843 -0.0239368085 + 755 0.9822648731 0.0394706508 1.0120826608 -0.0005844137 + 756 1.0031843606 0.0490789922 0.9949269650 0.0036318141 + 757 1.0258208171 -0.0189936971 0.9969057173 0.0416243247 + 758 0.9976690309 0.0335868743 0.9712741833 -0.0145096384 + 759 1.0039579877 0.0062610444 1.0579865516 -0.0183062678 + 760 1.0001874367 -0.0263646876 0.9948703958 -0.0348906800 + 761 0.9892473755 -0.0160972498 0.9873946527 0.0169770010 + 762 0.9819140962 0.0157250960 1.0379703528 -0.0450258010 + 763 0.9958035851 -0.0203235636 0.9600629328 -0.0205845031 + 764 1.0065870840 -0.0143294862 0.9763713760 -0.0549561753 + 765 0.9832953279 0.0442141901 0.9639557510 0.0298025415 + 766 1.0034809620 0.0301897709 0.9631633719 0.0249519158 + 767 0.9520524580 0.0129652372 0.9560710837 -0.0736849387 + 768 1.0195029534 0.0267147423 0.9878110799 0.0174187390 + 769 1.0044552974 -0.0601580404 1.0034733841 -0.0464108533 + 770 0.9983251740 0.0164589048 1.0001358888 0.0404772646 + 771 0.9829658245 -0.0802490517 1.0280039698 0.0488917344 + 772 0.9988473202 -0.0973064167 0.9818426809 -0.0178329329 + 773 1.0038182121 0.0500347686 0.9637643279 0.0443988514 + 774 0.9665434883 -0.0097168229 1.0110082489 0.0222985975 + 775 0.9525450905 0.0331882011 0.9969681786 -0.0399379370 + 776 1.0284657895 -0.0213596323 1.0162783599 -0.0223145220 + 777 0.9822982456 0.0423505509 1.0356450167 0.0285248146 + 778 1.0267027293 0.0454583942 0.9882805154 -0.0124182656 + 779 1.0002875384 0.0121063937 1.0180954040 0.0010296686 + 780 0.9382404384 0.0389758629 0.9925036573 -0.0515870890 + 781 1.0124524627 0.0015521012 0.9631975781 0.0803519333 + 782 0.9637093428 -0.0120948536 0.9752951360 0.0125090768 + 783 1.0145414128 -0.0212199856 1.0423131426 0.0669714759 + 784 1.0027790386 0.0371333826 1.0056329246 0.0605644292 + 785 0.9882460823 0.0380550411 0.9997334624 0.0036341385 + 786 0.9538921243 -0.0643284070 0.9848631866 0.0578841141 + 787 0.9877629493 -0.0130155204 0.9825768143 -0.0042457206 + 788 0.9650337114 0.0112816478 1.0075380916 -0.0695259142 + 789 1.0254288924 0.0193779802 1.0133257294 0.0226711661 + 790 1.0056569736 -0.0120294354 0.9904925008 0.0262961756 + 791 1.0089460512 0.0227752206 1.0179518901 0.0007987800 + 792 1.0191100195 -0.0091441483 0.9948907930 -0.0459768424 + 793 0.9983124910 0.0433073533 1.0215181557 0.0114528739 + 794 1.0289320741 0.0650704136 1.0139679702 -0.0183081357 + 795 0.9896370510 -0.0491239791 1.0144304433 -0.0605080966 + 796 0.9827352087 0.0239098968 0.9559740850 -0.0409058085 + 797 0.9721625517 0.0057238536 0.9913690277 -0.0128067193 + 798 1.0077766816 -0.0218480305 1.0146995854 -0.0010484345 + 799 0.9693846287 0.0315664009 1.0314215087 -0.0018183157 + 800 1.0331427213 -0.0407379925 0.9850759311 -0.0020411776 + 801 0.9872243795 -0.0385958106 1.0443807672 -0.0139089693 + 802 1.0343445020 0.0395104473 0.9583849856 0.0024649226 + 803 1.0005538534 0.0480954160 0.9952543925 0.0337059038 + 804 0.9672042626 0.0171132877 1.0097339539 0.0178865959 + 805 0.9932008795 0.0048336150 1.0579585335 0.0174239316 + 806 1.0424945436 0.0281593426 1.0048488427 0.0515129508 + 807 0.9301719628 0.0449097470 1.0071420095 0.0349682278 + 808 1.0066689133 -0.0535887739 1.0152241717 0.0315363578 + 809 1.0135147851 0.0482167520 1.0295305385 0.0000755731 + 810 1.0148800513 -0.0237232561 0.9831329508 0.0255859051 + 811 1.0155698420 0.0576107921 1.0061848818 0.0123404399 + 812 1.0272968125 0.0471233337 1.0009616024 -0.0087416894 + 813 1.0227113799 0.0376325589 0.9870147439 0.0377530405 + 814 1.0164736919 -0.0164938778 0.9648262268 0.0204576201 + 815 0.9860939150 0.0072886473 0.9726619572 -0.0044660850 + 816 1.0100070979 0.0167437229 1.0114587621 0.0529458807 + 817 1.0031842445 -0.0142934588 0.9654830101 -0.0315801681 + 818 0.9843645110 0.0012365579 1.0246812383 0.0165512534 + 819 1.0128976201 0.0373069190 1.0150781258 0.0327725760 + 820 0.9786149507 0.0626983149 1.0017160456 0.0544669786 + 821 0.9856628262 -0.0013454652 0.9966381261 -0.0330322756 + 822 0.9688589818 -0.0300059879 1.0252008854 -0.0318491477 + 823 0.9831556181 0.0860131956 0.9745323770 -0.0125571380 + 824 1.0207281042 0.1114589883 0.9811282764 0.0227469646 + 825 0.9900206712 -0.0021922585 1.0405915687 -0.0330601036 + 826 0.9769159001 0.0338496245 1.0217517651 0.0264941161 + 827 1.0033906939 -0.0223878340 1.0436346715 0.0297857081 + 828 0.9687842759 -0.0448645492 1.0104903266 0.0127369316 + 829 1.0177220206 -0.0077881663 0.9743580973 0.0104411608 + 830 1.0166431817 0.0427297507 1.0162638037 0.0176156701 + 831 0.9792750636 0.0130000910 1.0263118819 -0.0313515026 + 832 1.0002027392 -0.0583809586 1.0191801109 0.0230342419 + 833 0.9972690636 0.0224740447 1.0228874475 0.0015369902 + 834 0.9904311491 0.0167890823 1.0167983221 -0.0161483135 + 835 0.9947170245 0.0162975314 0.9988001557 -0.0256323694 + 836 1.0134376140 -0.0277768411 0.9702463477 -0.0411086492 + 837 1.0419760885 -0.0882627442 1.0201126442 -0.0382590297 + 838 0.9972474757 -0.0332187709 0.9882633475 -0.0237828472 + 839 0.9746123166 0.0476165255 0.9921609083 -0.0434213133 + 840 1.0231310710 -0.0021508795 0.9781140925 0.0135529007 + 841 1.0030762014 0.0425641062 0.9649124653 -0.0421613075 + 842 1.0181889368 0.0223070174 0.9654425378 0.0211102615 + 843 0.9795984842 -0.0579701682 1.0303370689 -0.0082699258 + 844 0.9666112491 -0.0000404163 0.9834587983 0.0083830737 + 845 1.0558444278 0.0454385637 0.9693084668 0.0598639513 + 846 0.9928283156 -0.0377088604 0.9547194141 0.0350210548 + 847 0.9873689797 0.0410902385 0.9702512175 0.0296505593 + 848 0.9798395668 -0.0203778113 1.0203693503 -0.0104521528 + 849 1.0044461756 -0.0425592412 0.9677273718 0.0189365083 + 850 0.9534172506 -0.0223429592 1.0006423448 0.0015947834 + 851 1.0601874170 0.0292139357 0.9861240636 -0.0261667575 + 852 1.0236541324 -0.0183176538 0.9654370986 0.0083428952 + 853 0.9597580528 0.0070743457 0.9831606380 -0.0212142283 + 854 0.9889847184 -0.0374994921 1.0097888508 -0.0575426615 + 855 0.9670114735 -0.0442149717 1.0260076717 -0.0217506356 + 856 0.9987288030 -0.0010369583 1.0852246758 -0.0681587345 + 857 1.0226731060 -0.0124675220 0.9769236130 -0.0692105490 + 858 0.9579160966 -0.0480938376 0.9712371820 -0.0633442127 + 859 1.0370926810 0.0582670230 0.9989744424 -0.0250671088 + 860 0.9663266803 -0.0288184163 1.0055202481 -0.0519252810 + 861 0.9689076354 -0.0897303117 1.0080507431 -0.0140033841 + 862 0.9841300259 0.0112933660 0.9811874516 0.0280352001 + 863 0.9876162907 -0.0238585135 1.0215555463 -0.0059665515 + 864 0.9606419133 -0.0591469857 0.9825212192 -0.0288391958 + 865 0.9971826055 -0.0219725830 0.9947624627 0.0668877184 + 866 0.9995137465 0.0244179893 1.0107396086 -0.0315114616 + 867 1.0343236596 0.0003305469 1.0471062461 -0.0679287831 + 868 1.0244696010 -0.0917480542 1.0302418230 0.0025800498 + 869 0.9904278521 0.0230182645 1.0130746506 -0.0019831213 + 870 0.9930086248 -0.0490105124 0.9738844915 0.0319219699 + 871 0.9694600020 -0.0051772638 0.9617703365 -0.0084615638 + 872 0.9246591765 0.0023911340 0.9860236997 -0.0248968864 + 873 1.0370602484 -0.0245617578 1.0071453065 0.0060406508 + 874 1.0565168880 0.0119142622 1.0043923772 -0.0404573581 + 875 0.9832704489 0.0048787789 1.0061715096 -0.0371269656 + 876 1.0019785004 -0.0057944658 1.0094178049 0.0346548956 + 877 0.9514608383 0.0188745657 1.0129034408 0.0301995980 + 878 1.0700421781 0.0380369366 1.0036938623 -0.0081055844 + 879 0.9989749711 0.0242557340 1.0053369371 0.0430977485 + 880 0.9928304061 0.0091391719 0.9918189746 -0.0373189275 + 881 1.0342686686 -0.0271395031 1.0043343236 -0.0134392408 + 882 1.0007601839 -0.0224600287 0.9683080891 -0.0101949644 + 883 0.9835505758 -0.0438456274 1.0013054929 0.0232696400 + 884 0.9790540200 0.0459512975 1.0322329398 0.0824852436 + 885 0.9995178196 0.0107875570 1.0119311058 -0.0432473680 + 886 0.9936592491 0.0370219217 1.0308221709 0.0309826876 + 887 1.0114890739 0.0167562891 0.9948941761 0.0001987116 + 888 0.9372160476 0.0055741409 1.0174604171 0.0457392516 + 889 1.0070166589 -0.0009506125 1.0024656586 0.0435782450 + 890 1.0026980535 -0.0069205212 0.9730727985 0.0166234855 + 891 0.9970648816 -0.0339052368 0.9940795887 0.0339546102 + 892 1.0065360094 -0.0145109394 0.9965989300 0.0391073028 + 893 1.0255345367 -0.0650304291 0.9760694917 0.0406311610 + 894 0.9628636508 -0.0108227758 0.9907441296 -0.0574195660 + 895 1.0031772835 -0.0039045925 1.0015082720 -0.0703382868 + 896 1.0328274534 -0.0622502759 0.9815687391 -0.0164296542 + 897 0.9938237983 0.0192984965 1.0014201285 -0.0197173379 + 898 0.9972090159 0.0181319466 0.9800844899 0.0188331969 + 899 1.0196385470 -0.0008088017 1.0217964811 0.0248806562 + 900 0.9674886308 -0.0405265280 1.0319316511 0.0596406179 + 901 1.0213980347 -0.0010033866 0.9938530780 0.0170848822 + 902 0.9917322553 -0.0240683372 1.0119949187 -0.0426837403 + 903 1.0362053157 -0.0388274911 0.9911681615 -0.0819552296 + 904 1.0061098013 0.0030034057 0.9816047903 0.0421946002 + 905 1.0086571350 0.0046419874 1.0435501809 0.0218871021 + 906 1.0141796845 -0.0010710539 0.9862338500 -0.0152781153 + 907 0.9771724421 0.0086397882 0.9945651501 0.0227671483 + 908 0.9789254504 0.0413127679 0.9559675965 0.0221746521 + 909 0.9717773453 -0.0179406331 0.9740297342 0.0259593051 + 910 0.9920413345 -0.0459080681 1.0580469439 0.0027058285 + 911 0.9564428309 -0.0269978128 1.0059151885 0.0095452285 + 912 0.9847426297 0.0493797746 0.9955082363 -0.0428827830 + 913 0.9805782999 -0.0326094946 1.0270437507 -0.0554523476 + 914 0.9564383094 -0.0548673655 0.9796920037 0.0331832004 + 915 0.9835002350 0.0246040355 1.0047248412 0.0102358808 + 916 1.0395579649 0.0017976806 1.0032873533 -0.0058388903 + 917 0.9905421297 -0.0359199706 1.0140174059 0.0233733048 + 918 0.9853759918 0.0340937050 0.9920644571 -0.0150944576 + 919 0.9818191170 0.0052766620 1.0366113732 -0.0264609298 + 920 1.0038321962 -0.0164749524 1.0184506221 0.0583632723 + 921 0.9714315944 -0.0545474765 1.0384127179 -0.0054091314 + 922 0.9850831831 0.0259293135 1.0550085626 0.0308220494 + 923 1.0225014308 0.0255877043 0.9908809632 -0.0126231486 + 924 1.0098180909 -0.0319572939 0.9971069218 0.0006024364 + 925 1.0168545497 -0.0553373075 1.0174811918 -0.0588144906 + 926 0.9922018588 0.0223559193 1.0202906876 -0.0410292998 + 927 0.9863606933 -0.0264870535 0.9759187507 0.0707036862 + 928 0.9759681371 0.0345028913 0.9980917676 -0.0184661130 + 929 0.9965010929 0.0078858791 0.9895431216 0.0186338728 + 930 0.9589701074 0.0163847117 0.9800374762 0.0533283098 + 931 1.0148027273 0.0028225610 0.9648072850 -0.0322349121 + 932 1.0334470511 0.0285779124 0.9936550036 -0.0179330155 + 933 0.9865283114 -0.0052634195 1.0427191332 -0.0191900238 + 934 0.9929046731 -0.0176956075 0.9896880534 0.0172464566 + 935 1.0257929652 0.0039258218 1.0262251678 0.0190182940 + 936 0.9723456089 0.0018445293 0.9645144209 0.0188526761 + 937 0.9545381277 0.0633345605 1.0146084181 -0.0598203085 + 938 1.0083746435 -0.0397299670 1.0478986292 0.0376714154 + 939 0.9938285279 0.0077566448 1.0065920820 0.0143702873 + 940 0.9720410293 -0.0712421833 1.0298812609 -0.0190036913 + 941 0.9808761568 0.0861780958 0.9972861155 0.0105550645 + 942 1.0175148527 0.0672473181 1.0020511845 0.0402112177 + 943 1.0154464778 -0.0013778117 1.0355741850 0.0823840731 + 944 1.0069749715 -0.0011859899 1.0336825220 -0.0390792568 + 945 1.0208508874 0.0058940746 1.0070956477 -0.0031241385 + 946 1.0033814616 0.0479294061 0.9876629151 0.0170507469 + 947 0.9785783271 -0.0133440885 0.9679786813 -0.0242142132 + 948 0.9944195517 0.0174902363 0.9874222969 -0.0215238507 + 949 0.9987298430 -0.0624937839 1.0304804098 0.0097733728 + 950 1.0306040171 0.0003976635 0.9902114020 0.0447884835 + 951 1.0138282285 0.0571752703 1.0151189792 -0.0681874733 + 952 0.9923818504 -0.0375509794 1.0024972752 -0.0127243179 + 953 1.0039066825 0.0398613197 0.9891082233 -0.0153847200 + 954 0.9911821777 0.0011733136 0.9789419996 -0.0357455319 + 955 1.0392934746 0.0062237050 1.0003380423 0.0012405484 + 956 0.9486981755 0.0115065838 1.0169517426 -0.0007989386 + 957 0.9985829645 -0.0290625438 0.9841907880 0.0233015581 + 958 1.0039702807 0.0235369611 0.9812024674 -0.0321769887 + 959 1.0505241795 -0.0092211852 1.0112938247 0.0246027447 + 960 1.0069144326 0.0019768591 0.9809664716 0.0178642200 + 961 0.9817714953 0.0106890489 0.9932272685 0.0067049526 + 962 1.0320734411 -0.0000530931 0.9808932199 -0.0848024790 + 963 1.0153086766 0.0241060398 1.0352445671 0.0220746145 + 964 0.9884157084 -0.0817876354 0.9548253182 -0.0192962275 + 965 0.9984107927 -0.0535630377 0.9738224283 -0.0345506420 + 966 1.0360345422 0.0027523186 1.0206246184 0.0009769448 + 967 1.0343880246 0.0000216399 0.9979012087 0.0922683054 + 968 1.0088381379 -0.0052871480 0.9589723551 -0.0194457815 + 969 1.0436030468 -0.0285474437 1.0105700848 -0.0077799928 + 970 1.0091525607 -0.0487281231 0.9836711193 0.0489340585 + 971 1.0325023181 0.0472290348 0.9506156094 -0.0832855791 + 972 0.9885163138 0.0100624029 0.9909158763 0.0163013834 + 973 0.9560975831 0.0163147374 0.9653755464 0.0250278064 + 974 0.9830553477 -0.0108048416 1.0053545045 0.0656618426 + 975 1.0029580266 -0.0118135059 1.0113317077 -0.0185735815 + 976 1.0309761596 -0.0742857101 0.9666870750 -0.0300558338 + 977 0.9555889549 -0.0566341082 0.9656574802 0.0131391671 + 978 1.0285096690 0.0414780933 1.0188969004 -0.0202573940 + 979 1.0504185342 -0.0097999587 0.9855534065 -0.0050091958 + 980 1.0014066089 -0.0217901548 0.9930353551 0.0143048732 + 981 1.0133458139 -0.0189062190 1.0125189614 -0.0515415537 + 982 1.0125744318 0.0625406377 1.0093315591 -0.0176690428 + 983 0.9969626922 -0.0390998770 1.0205079354 0.0307236292 + 984 1.0170015725 0.0112819644 1.0209396748 0.0552329713 + 985 0.9812599614 -0.0181750346 1.0053065507 -0.0123312399 + 986 1.0129883579 0.0210724326 0.9892621700 0.0528889127 + 987 1.0134279444 0.0175964606 0.9638609654 0.0139270508 + 988 1.0134809574 -0.0233872077 1.0436031692 0.0035042862 + 989 1.0251872226 0.0045713682 0.9632691449 0.0087931281 + 990 1.0482228148 0.0305766260 0.9792102867 0.0259004562 + 991 0.9504877848 0.0150485537 0.9775219277 -0.0310600552 + 992 1.0566075809 0.0509779304 1.0144796170 0.0007929962 + 993 0.9890871506 0.0181158353 0.9792404079 0.0133652246 + 994 1.0019578263 0.0228180266 0.9893235757 0.0044069085 + 995 0.9406712459 0.0123310985 0.9730242137 -0.0001423970 + 996 0.9953177855 -0.0129913715 0.9923336531 -0.0019060061 + 997 0.9641137234 -0.0018171517 0.9907287681 -0.0178442161 + 998 1.0044265597 -0.0467383075 1.0323264024 0.0087864990 + 999 1.0029318027 -0.0202900376 0.9883115237 0.0102100971 + 1000 1.0012165294 -0.0072129095 0.9921461790 -0.0470144979 + 1001 0.9704195153 -0.0096478585 1.0028101394 -0.0179943866 + 1002 0.9873936049 0.0028894275 1.0635631958 -0.0340356418 + 1003 1.0138535972 0.0135616269 0.9946257837 -0.0391939152 + 1004 0.9924779523 0.0436928783 1.0454732219 0.0133283540 + 1005 1.0194050990 0.0419372667 1.0005805488 -0.0124980991 + 1006 1.0076652631 -0.0548921844 1.0279582475 -0.0329029452 + 1007 0.9910764717 0.0224843130 0.9933496621 -0.0467568280 + 1008 1.0092722482 -0.0209177706 0.9961955385 0.0356646437 + 1009 0.9919344403 0.0337506070 1.0233889795 -0.0152207108 + 1010 1.0186883667 -0.0082358174 0.9812639185 0.0620584733 + 1011 0.9501130691 0.0122371634 1.0103907916 -0.0369105512 + 1012 0.9848752286 -0.0166990481 0.9773307310 -0.0240365925 + 1013 1.0156739280 0.0049208399 1.0074062062 0.0181718930 + 1014 1.0075959707 -0.0013142903 0.9729015934 -0.0205121381 + 1015 0.9899493029 -0.0071022435 1.0627663220 0.0074434559 + 1016 1.0114314454 -0.0007225646 0.9833101889 0.0734954746 + 1017 0.9795941746 0.0281852459 0.9991220753 -0.0279023674 + 1018 1.0002352021 -0.0086186049 1.0117600764 -0.0437026491 + 1019 0.9732081553 -0.0309122296 1.0251412427 0.0040454323 + 1020 0.9907883546 0.0107261438 0.9802518689 0.0086719414 + 1021 0.9848854600 0.0368950560 0.9864392451 0.0354932854 + 1022 1.0004590612 -0.0018228364 1.0011456988 0.0092239976 + 1023 0.9735379394 -0.0206390643 0.9695717154 0.0285043106 + 1024 0.9813502192 0.0357834704 0.9853272765 0.0081438632 + 1025 0.9953863793 -0.0360879090 0.9973411604 0.0226708515 + 1026 1.0275162718 0.0564315610 1.0040907686 0.0551596181 + 1027 0.9794246733 0.0133241739 1.0060927272 -0.0651507221 + 1028 1.0328649354 0.0153268898 1.0115676822 -0.0154474802 + 1029 1.0142484545 0.0150675121 0.9891742213 0.0328809051 + 1030 0.9854862378 0.0157791616 1.0070913825 0.0121816029 + 1031 1.0028119356 -0.0079506998 0.9769084995 -0.0300311415 + 1032 0.9820255270 0.0653979844 0.9935119072 -0.0021545513 + 1033 1.0275209872 0.0174022726 1.0172443181 0.0698907960 + 1034 0.9995808539 0.0013468624 1.0035042234 0.0160833529 + 1035 1.0191993281 0.0187147771 0.9918179038 -0.0346471006 + 1036 1.0128946117 0.0268453697 0.9687512432 -0.0100714167 + 1037 0.9735089505 0.0574319257 0.9956050702 -0.0047904707 + 1038 1.0014928133 -0.0148548209 1.0157738134 0.0032013125 + 1039 0.9735214095 0.0730063597 0.9717631160 0.0519274577 + 1040 1.0424264176 0.0085083384 1.0406652315 -0.0101427379 + 1041 1.0181803128 0.0261448533 1.0113705086 0.0016408860 + 1042 0.9897954646 -0.0097150045 0.9955623147 -0.0263681164 + 1043 0.9901001201 -0.0018421807 0.9978733239 -0.0140895092 + 1044 1.0088520178 -0.0191261851 1.0130509524 0.0269676979 + 1045 0.9807367496 -0.0003141802 0.9775137116 0.0167702534 + 1046 0.9758489338 0.0266940395 0.9926578915 0.0214005666 + 1047 0.9743769603 0.0370277630 1.0040846103 0.0083581802 + 1048 1.0104288198 0.0593470698 1.0013436202 0.0369815759 + 1049 0.9783971157 -0.0134047724 0.9825409176 -0.0046962521 + 1050 0.9940823657 -0.0016798590 0.9906704688 0.0412037921 + 1051 0.9827971924 0.0076051475 0.9874715367 -0.0036861454 + 1052 0.9996552052 -0.0041321963 0.9804632668 0.0139082223 + 1053 0.9837663290 -0.0045772992 1.0061204824 -0.0202959517 + 1054 1.0516237475 -0.0100392546 1.0145750273 0.0310611963 + 1055 1.0470582235 0.0483259980 1.0185007483 -0.0791339282 + 1056 1.0018098179 0.0084546019 1.0169217002 -0.0090949908 + 1057 1.0164298605 0.0010309932 1.0033812786 0.0158703830 + 1058 1.0181507299 0.0029334350 1.0167052599 -0.0580523844 + 1059 1.0076333686 0.0252341659 1.0171549224 -0.0125332013 + 1060 0.9757147589 0.0002691276 0.9790426501 0.0365902965 + 1061 0.9846074606 -0.0104146251 1.0122386422 0.0021857920 + 1062 0.9896587402 -0.0117476839 1.0097693110 0.0252875213 + 1063 1.0277490232 -0.0128184068 0.9658943709 -0.0057365598 + 1064 1.0214982026 0.0000233256 0.9773953649 -0.0003568798 + 1065 0.9675273732 0.0008330701 1.0054907883 0.0226567776 + 1066 0.9994639876 -0.0278435397 0.9860898178 -0.0564763099 + 1067 1.0017347779 0.0050206221 0.9963153446 0.0610932651 + 1068 0.9948531849 0.0156738381 0.9883824334 0.0220901900 + 1069 1.0304651439 -0.0198192446 0.9950441681 0.0491875198 + 1070 0.9913349668 -0.0022770963 0.9819580535 -0.0219342614 + 1071 1.0072052160 0.0028049497 0.9922790758 0.0164211451 + 1072 1.0021293476 0.0220283797 0.9703910037 -0.0147502826 + 1073 1.0587825378 -0.0186898546 0.9882427718 -0.0341422112 + 1074 0.9888803177 -0.0244313452 1.0045768701 0.0034558518 + 1075 0.9924696728 -0.0368479131 0.9952632212 -0.0175897509 + 1076 0.9551620874 0.0094423429 1.0142398996 0.0031708084 + 1077 1.0308660461 -0.0447269176 0.9915942656 0.0049480346 + 1078 0.9780712650 -0.0339751788 0.9857060490 0.0455550546 + 1079 0.9994816231 -0.1018153291 0.9814081075 -0.0493824181 + 1080 1.0216050327 0.0044937405 0.9985644706 -0.0032958788 + 1081 0.9837813460 0.0216746941 0.9434733633 -0.0182128209 + 1082 1.0127483029 -0.0313360484 1.0168070464 0.0210897191 + 1083 1.0158765676 -0.0214662507 0.9910378111 -0.0015161617 + 1084 0.9681100055 0.0273128546 1.0096701438 -0.0291784443 + 1085 0.9871756619 -0.0284575833 1.0396652874 -0.0146124210 + 1086 0.9827211243 -0.0148933987 1.0036045471 0.0099636378 + 1087 0.9853285996 -0.0223038899 1.0220693021 -0.0361595059 + 1088 1.0226543536 0.0112803378 0.9820046252 0.0694280498 + 1089 0.9908726076 0.0346518720 0.9678812151 0.0186409102 + 1090 1.0426584415 -0.0151007195 1.0486938093 0.0436085572 + 1091 1.0218805010 0.0394097374 0.9809431789 0.0466855227 + 1092 0.9779516701 0.0040809689 0.9874126511 -0.0410387046 + 1093 1.0053345340 -0.0028727575 0.9938901066 -0.0018860204 + 1094 0.9882624884 0.0370760437 0.9749563338 -0.0198076821 + 1095 0.9854094956 0.0271539122 1.0167971530 -0.0160870187 + 1096 1.0268098464 -0.0170609897 1.0052770923 0.0353796524 + 1097 1.0201946024 0.0348291459 1.0058739566 0.0022543578 + 1098 0.9870983102 0.0441040233 1.0310869143 0.0030618596 + 1099 0.9830379493 0.0127712636 0.9600984739 0.0106027685 + 1100 1.0351850726 0.0068659493 1.0103450254 -0.0489625783 + 1101 1.0105322453 0.0447338672 1.0193500103 0.0242463181 + 1102 1.0095504116 0.0052904586 0.9897063867 -0.0175404441 + 1103 0.9858042977 -0.0109465973 1.0433175679 0.0060908810 + 1104 1.0041300983 -0.0297846699 1.0189604801 -0.0103070336 + 1105 0.9708138310 -0.0214721060 1.0316209149 0.0243877069 + 1106 1.0299609226 -0.0299163475 0.9955957779 0.0311069016 + 1107 0.9945311171 -0.0438336057 1.0078766733 0.0140042381 + 1108 0.9781070285 0.0175803458 1.0029320396 0.0267613525 + 1109 1.0025481579 -0.0209496599 0.9714149835 -0.0621894755 + 1110 0.9971163174 -0.0014275602 1.0083562106 0.0028918478 + 1111 1.0002380209 0.0752726302 0.9455860039 -0.0024400652 + 1112 1.0486505844 0.0333307444 1.0121726905 0.0128109696 + 1113 1.0323253982 -0.0284639960 1.0125546815 -0.0070368969 + 1114 1.0149480009 -0.0499251476 1.0052932870 -0.0017628835 + 1115 1.0177171528 0.0160628980 0.9938140088 0.0145763566 + 1116 1.0099322035 -0.0022799347 1.0187542908 0.0203244096 + 1117 0.9788016912 -0.0202046055 0.9656194757 0.0132752342 + 1118 1.0159388518 -0.0526770112 1.0115265474 -0.0048424561 + 1119 0.9989289297 -0.0634112849 1.0281267698 0.0229402800 + 1120 0.9942294985 0.0218808208 0.9927783322 0.0255570135 + 1121 0.9724479999 0.0020742225 0.9785420430 0.0284562515 + 1122 1.0245853639 -0.0369630231 0.9849862900 -0.0118416686 + 1123 0.9917515001 0.0380622257 1.0276193123 -0.0214181481 + 1124 0.9931018754 -0.0349607687 1.0110877783 -0.0263901202 + 1125 0.9969271161 0.0093464065 1.0037743191 -0.0274017104 + 1126 1.0189913785 0.0468269402 1.0178935473 -0.0041318493 + 1127 0.9952294765 -0.0421501025 0.9984846632 0.0049575288 + 1128 1.0015150071 -0.0502975340 0.9769614377 0.0173548723 + 1129 0.9818606910 0.0201703868 1.0018759938 0.0840154331 + 1130 0.9954741962 0.0516495479 1.0036427807 -0.0251992489 + 1131 1.0388446216 -0.0565902855 0.9992283868 -0.0367053432 + 1132 0.9764671701 -0.0192846138 1.0241155038 0.0426211696 + 1133 0.9904703395 0.0229516190 1.0183500814 0.0303918399 + 1134 0.9592682071 0.0337148989 1.0016179960 -0.0135925839 + 1135 1.0367234298 -0.0195055171 0.9834747897 -0.0165449390 + 1136 0.9890911659 0.0255707257 1.0182179955 -0.0042887608 + 1137 1.0328700558 -0.0086737472 0.9398698799 0.0108838889 + 1138 0.9664591394 0.0104579507 1.0080567047 -0.0139442421 + 1139 1.0169991128 -0.0357831488 0.9839030817 -0.0366116808 + 1140 1.0193854998 -0.0043628077 1.0363479310 -0.0503733148 + 1141 0.9901768964 0.0248653260 0.9579103512 -0.0096252171 + 1142 0.9870349157 0.0350847367 0.9931823142 0.0383627738 + 1143 1.0591798163 -0.0261223041 1.0083613107 -0.0485243905 + 1144 0.9877290874 -0.0543700927 0.9993983289 0.0102203477 + 1145 1.0020759578 -0.0414945281 0.9894978219 -0.0368153080 + 1146 1.0123794277 0.0406404196 1.0006478844 -0.0400259822 + 1147 0.9908254075 0.0184454824 1.0121549983 -0.0044573076 + 1148 1.0151720463 0.0280437437 1.0263921234 0.0495093409 + 1149 1.0297332774 -0.0082770210 0.9919734832 0.0432529090 + 1150 1.0046748281 -0.0235217366 0.9938805528 -0.0348570671 + 1151 1.0420725713 0.0146505860 0.9913246361 0.0251296511 + 1152 0.9928703591 0.0046270701 0.9951573849 -0.0101670275 + 1153 1.0077558261 0.0357807277 0.9999149045 0.0055112388 + 1154 0.9893890726 -0.0150000389 1.0643325322 0.0015816767 + 1155 1.0116784586 0.0020347490 0.9856485635 -0.0173767503 + 1156 0.9682823833 -0.0250010011 1.0180984664 0.0205889297 + 1157 1.0370694483 0.0284695350 0.9807133425 -0.0474027014 + 1158 1.0208351727 -0.0013392984 0.9985458958 -0.0519666356 + 1159 1.0115755768 -0.0080639259 1.0450299014 0.0244209110 + 1160 0.9941039213 -0.0015566791 1.0066810576 0.0411485627 + 1161 0.9862430760 0.0162776364 0.9865380850 0.0169305278 + 1162 0.9721463178 -0.0006829655 0.9637036370 -0.0075670210 + 1163 0.9824191334 0.0208390974 0.9917566107 -0.0161023172 + 1164 1.0228509974 -0.0200267255 1.0022868131 -0.0118114819 + 1165 1.0189091216 0.0345896060 0.9676285137 0.0096487683 + 1166 0.9883540729 -0.0487024525 0.9808655433 0.0365376319 + 1167 1.0183293998 0.0194622371 1.0009022732 0.0141124100 + 1168 0.9896930598 -0.0434999729 1.0097547192 0.0095833382 + 1169 1.0217713739 -0.0373229330 1.0342229846 0.0216209946 + 1170 1.0180856459 -0.0191729367 0.9839530826 0.0459958806 + 1171 0.9896173994 -0.0341431904 0.9738265247 0.0202157496 + 1172 1.0234507320 -0.0242498726 1.0271646762 -0.0015818661 + 1173 0.9714219672 0.0272987771 0.9949877199 0.0141280272 + 1174 1.0171884862 -0.0260286469 1.0050253279 0.0113128887 + 1175 0.9654547489 0.0118222181 0.9863361081 -0.0629655703 + 1176 1.0144523856 -0.0196937663 1.0066195038 0.0297657892 + 1177 0.9817991942 -0.0075725008 1.0150486583 -0.0029957704 + 1178 0.9636619562 -0.0052542574 0.9876082083 -0.0089696972 + 1179 0.9901696252 -0.0076862358 0.9702395926 0.0499319188 + 1180 0.9971995572 0.0084883488 0.9919110490 -0.0520547690 + 1181 1.0075003575 -0.0419406665 1.0185859314 -0.0428994953 + 1182 1.0231084754 -0.0089450929 1.0136784030 -0.0177098963 + 1183 0.9976219820 -0.0022527620 1.0004996785 -0.0114005270 + 1184 1.0361209126 -0.0439370700 0.9818308043 0.0374373188 + 1185 1.0043350732 -0.0256947566 1.0245399066 -0.0050398015 + 1186 0.9962604235 -0.0394058213 1.0147276652 -0.0612213574 + 1187 0.9976434607 -0.0236226487 0.9993224364 -0.0164044147 + 1188 1.0235546464 -0.0219392655 1.0020730666 -0.0145037760 + 1189 1.0283250521 -0.0097327124 0.9889325777 -0.0164259201 + 1190 1.0157583547 -0.0013119065 1.0543115257 -0.0148500314 + 1191 0.9952007443 -0.0406962271 0.9743216949 0.0350525750 + 1192 1.0167764788 -0.0017576873 1.0188483496 0.0037289959 + 1193 0.9875424926 -0.0101993989 0.9839128646 0.0361690796 + 1194 1.0098898202 0.0117948720 1.0174921072 -0.0086690071 + 1195 0.9796610406 -0.0277840647 1.0172222256 0.0252443691 + 1196 1.0052177143 0.0567738057 0.9525758213 0.0235224443 + 1197 0.9880648981 0.0012234810 0.9864342427 -0.0117432281 + 1198 1.0153741704 -0.0056202458 1.0171269499 -0.0080808903 + 1199 1.0193390301 0.0391520350 1.0422304668 0.0050301028 + 1200 0.9620503555 0.0188423457 0.9767956282 -0.0038088791 + 1201 0.9667377502 0.0016760039 0.9901687328 0.0381143126 + 1202 0.9857039530 -0.0788270317 1.0513005496 0.0155251778 + 1203 1.0034092968 -0.0064426850 1.0007331801 0.0433935317 + 1204 0.9703775952 0.0195004791 1.0119853647 -0.0365008227 + 1205 0.9655342184 0.0012661461 0.9837272688 0.0665024146 + 1206 0.9794234310 -0.0370527830 1.0117467742 -0.0052842569 + 1207 1.0224274226 -0.0081266204 0.9880733932 0.0637351981 + 1208 0.9866534441 -0.0356601137 1.0104181496 0.0078478758 + 1209 0.9965993934 0.0218200239 0.9996098243 0.0013785711 + 1210 1.0084746719 0.0349960436 1.0067324679 -0.0264051688 + 1211 0.9848861388 0.0159685251 1.0164542651 0.0107407030 + 1212 1.0301897757 -0.0586409083 0.9918887504 -0.0251525320 + 1213 1.0334248200 0.0440535260 1.0013063373 -0.0063777656 + 1214 1.0501299432 0.0334977946 1.0420942946 -0.0002072945 + 1215 0.9899212605 -0.0083086805 1.0021312196 0.0012283614 + 1216 1.0179254718 -0.0107697425 1.0427807548 -0.0592993981 + 1217 1.0186026562 0.0127493143 1.0029448074 0.0209554915 + 1218 1.0014553021 -0.0340543960 0.9772767221 -0.0294115803 + 1219 0.9820155170 -0.0302803879 0.9799702661 0.0106574366 + 1220 1.0128752567 -0.0213842674 0.9934993272 0.0492339168 + 1221 1.0096179459 -0.0106286490 1.0029389721 -0.0270667311 + 1222 1.0076018132 -0.0075004982 0.9857042705 0.0007793485 + 1223 0.9932176746 0.0458065939 1.0043880099 0.0247495837 + 1224 1.0171086027 -0.0084169166 1.0153130438 0.0087888885 + 1225 0.9922582832 -0.0206427660 0.9768572446 0.0062453995 + 1226 0.9943016197 0.0467030716 1.0213684882 0.0188977125 + 1227 0.9938485371 -0.0132892708 0.9807555150 0.0344620846 + 1228 0.9959490073 0.0563252370 0.9906690628 0.0056339247 + 1229 1.0032096306 0.0260404227 1.0074722051 -0.0190167218 + 1230 1.0174148542 0.0113788854 1.0236674493 -0.0263038599 + 1231 0.9857856256 -0.0154963017 0.9981089873 0.0228708485 + 1232 0.9734408023 0.0172094810 1.0141274278 0.0101743765 + 1233 1.0093469951 -0.0055225383 1.0263019858 -0.0278619403 + 1234 1.0232274154 -0.0332892090 1.0454581432 -0.0139083382 + 1235 1.0087847042 -0.0395801008 0.9858298427 0.0019742868 + 1236 0.9623754765 0.0248963882 0.9933471835 0.0683375065 + 1237 1.0249775289 -0.0371227409 1.0118646593 0.0125224443 + 1238 1.0169494903 -0.0196294622 0.9751755327 0.0030333308 + 1239 0.9800300086 -0.0027283020 1.0092013197 -0.0050047891 + 1240 0.9613164965 0.0175215696 1.0016122377 0.0122274975 + 1241 0.9772526484 0.0536981679 1.0370866590 -0.0098066322 + 1242 0.9843094155 -0.0073263917 0.9890327696 0.0038320626 + 1243 0.9815751759 0.0111927386 0.9989665477 -0.0088102934 + 1244 1.0000858816 -0.0227666556 1.0180548402 0.0337876189 + 1245 1.0060972660 -0.0553161857 1.0240524490 -0.0001695541 + 1246 0.9629042803 0.0157545020 0.9744535482 -0.0401721523 + 1247 0.9842215194 -0.0329441537 1.0011938691 0.0047157365 + 1248 0.9936892834 0.0154822715 0.9907056017 -0.0162090612 + 1249 1.0217678981 0.0167156827 0.9728318733 -0.0184756205 + 1250 0.9842819690 0.0463475991 0.9940025551 -0.0421063814 + 1251 1.0291457393 -0.0300073149 1.0259244013 -0.0195683600 + 1252 0.9863897263 0.0004502460 1.0159146322 0.0091849498 + 1253 1.0033741835 -0.0027637261 0.9968824097 0.0124084765 + 1254 0.9650217425 0.0419208300 0.9915739989 0.0211820972 + 1255 0.9752300823 -0.0003708872 1.0158349872 -0.0120360298 + 1256 1.0231243478 -0.0044061668 0.9748051101 -0.0052432602 + 1257 0.9697122876 -0.0679543333 1.0004046021 0.0621055906 + 1258 0.9894709532 0.0223206692 0.9925440836 -0.0310022952 + 1259 0.9820247610 -0.0237536845 0.9731593105 -0.0530455632 + 1260 0.9454589839 -0.0299769458 1.0264847229 -0.0118993185 + 1261 0.9905092939 0.0524771013 0.9814528688 0.0236003073 + 1262 0.9854204910 0.0202489827 0.9806288765 -0.0053944799 + 1263 1.0247973093 0.0264898313 1.0003334907 0.0323873664 + 1264 1.0200435450 0.0167882251 0.9940045789 0.0160529744 + 1265 1.0063531543 0.0062045806 0.9749439163 -0.0441984052 + 1266 0.9944512578 0.0239681458 0.9971898644 -0.0270795487 + 1267 1.0137225649 -0.0085483406 0.9989232054 0.0392098167 + 1268 1.0019126005 0.0399749407 1.0074706462 -0.0296253395 + 1269 1.0044154536 0.0175958103 1.0121601311 0.0048640628 + 1270 0.9954576497 0.0112721766 1.0120923780 0.0157163380 + 1271 1.0376119969 -0.0449567060 0.9945992067 -0.0293454205 + 1272 0.9584057545 -0.0004461581 1.0093174234 -0.0126281788 + 1273 1.0151371565 -0.0023514660 1.0320927614 -0.0166994842 + 1274 1.0028469933 -0.0045223056 1.0033753890 -0.0170365791 + 1275 1.0189476576 -0.0347826533 0.9984817415 -0.0123948444 + 1276 0.9775997350 0.0191620615 0.9671260682 -0.0068494203 + 1277 1.0037067950 0.0238411887 1.0248428867 -0.0158709454 + 1278 0.9682388340 0.0382148635 0.9904128423 -0.0096310913 + 1279 0.9981611275 -0.0446438432 1.0226343026 0.0211890566 + 1280 0.9572004111 0.0231997475 0.9863379856 0.0561328860 + 1281 1.0178408526 -0.0355105850 0.9651124490 -0.0239130197 + 1282 1.0187895150 -0.0328805091 0.9993820706 0.0102730657 + 1283 0.9630262133 -0.0015652321 1.0230982438 -0.0145543254 + 1284 1.0038153375 0.0324342033 0.9947532808 -0.0109523206 + 1285 1.0136486980 0.0171007312 1.0153845388 -0.0269585315 + 1286 0.9864500521 0.0382116635 0.9580422390 -0.0059127663 + 1287 1.0385691844 -0.0226899920 0.9682794293 -0.0331946557 + 1288 0.9934140331 0.0001880302 0.9995351064 -0.0040786100 + 1289 0.9700820059 -0.0025124374 1.0417551466 0.0116505741 + 1290 0.9783656932 0.0039928050 0.9998003584 0.0304641335 + 1291 1.0206120369 0.0159850388 1.0147253076 -0.0491388048 + 1292 0.9901228143 0.0400730510 1.0070667654 0.0600471965 + 1293 0.9843737354 -0.0566716889 0.9997170163 -0.0186289484 + 1294 1.0152487627 0.0047608561 0.9821588556 0.0222672165 + 1295 0.9772977289 0.0171472601 0.9941540339 -0.0029895215 + 1296 1.0040056710 0.0477076953 0.9954838993 0.0254442704 + 1297 0.9931590193 -0.0151991993 1.0161038663 0.0218714463 + 1298 1.0435930304 0.0183516888 0.9873496370 0.0411520139 + 1299 0.9714786420 0.0416389573 1.0151270775 0.0410321011 + 1300 1.0313726370 0.0599090675 0.9909911756 0.0262836879 + 1301 1.0271925722 0.0241699646 1.0157440859 0.0214285679 + 1302 1.0008217370 -0.0758573302 0.9965872547 -0.0275190776 + 1303 1.0138596181 -0.0358145910 0.9692270149 0.0019383119 + 1304 0.9956193217 0.0617100780 0.9894167708 -0.0003919603 + 1305 1.0250151412 -0.0256676316 1.0152137936 -0.0260073794 + 1306 0.9853671082 -0.0472028782 0.9875167050 0.0349110857 + 1307 1.0151062285 0.0463350639 1.0090201575 0.0174326269 + 1308 1.0083869458 0.0155888954 0.9806944621 0.0050507835 + 1309 0.9972027231 -0.0190410839 0.9837901942 0.0088498205 + 1310 1.0194366259 -0.0051958815 0.9952522303 -0.0265823473 + 1311 0.9910831890 -0.0416993581 1.0110099623 0.0205803112 + 1312 1.0255067684 -0.0114630421 1.0005861044 -0.0416218094 + 1313 1.0122063428 -0.0029202159 0.9737871148 0.0270690920 + 1314 1.0105274300 -0.0141475746 0.9654456179 0.0488880099 + 1315 0.9882230493 -0.0088748956 1.0251558709 -0.0443879508 + 1316 1.0117400463 -0.0171654500 1.0072591539 0.0008369455 + 1317 0.9826173212 -0.0313276176 0.9806887430 0.0063625118 + 1318 0.9946197402 -0.0001327871 1.0087274040 -0.0339560162 + 1319 0.9831342552 0.0015521684 1.0166180921 0.0278071023 + 1320 1.0262074804 0.0207039216 1.0168304117 -0.0751383418 + 1321 0.9622448340 0.0035464341 0.9795853719 0.0180167273 + 1322 0.9948158643 -0.0456816781 0.9877291909 0.0247731666 + 1323 1.0057594181 0.0119967249 0.9734623096 -0.0082566743 + 1324 0.9793236732 0.0046091618 1.0397141791 -0.0094630062 + 1325 1.0118703010 -0.0108166855 0.9571736994 -0.0161236756 + 1326 1.0024259876 -0.0246074538 0.9618928067 -0.0101610389 + 1327 1.0074198068 0.0017822208 1.0146168888 0.0100322575 + 1328 0.9817904571 -0.0203645372 1.0498269409 -0.0339660118 + 1329 1.0084961860 0.0104810090 1.0058128614 -0.0172848179 + 1330 0.9886732977 -0.0432614431 0.9959797422 0.0084576301 + 1331 0.9756247070 0.0225971031 0.9949482898 -0.0020695532 + 1332 0.9824498785 -0.0090006179 0.9977762683 -0.0377580701 + 1333 1.0068432600 0.0356340998 1.0095364553 0.0053649329 + 1334 0.9963864269 0.0122622962 0.9695508189 -0.0160801917 + 1335 1.0124373562 0.0048331528 1.0124370905 -0.0022576117 + 1336 0.9837755466 -0.0331773325 0.9929520738 -0.0058658396 + 1337 1.0200713121 0.0397458916 1.0370942339 0.0214821804 + 1338 0.9924364837 0.0195500610 0.9635950479 -0.0138700233 + 1339 1.0049772007 0.0378355866 0.9892420134 0.0043517431 + 1340 0.9669052489 -0.0382953102 0.9764499526 -0.0039604374 + 1341 1.0265873662 0.0674238205 0.9895915095 -0.0130723246 + 1342 0.9924321406 -0.0255754474 0.9704444400 -0.0488926244 + 1343 1.0106934600 -0.0090143769 0.9904418622 -0.0177726177 + 1344 1.0220274369 0.0129475896 0.9888431429 0.0311881535 + 1345 0.9989135799 -0.0679342352 1.0131925928 0.0215655578 + 1346 1.0056547003 -0.0010894314 1.0299410085 -0.0052357120 + 1347 0.9785112339 -0.0295951218 1.0219056578 -0.0019176806 + 1348 1.0226219805 -0.0094229277 1.0055190382 -0.0073929967 + 1349 1.0238943819 -0.0210956765 0.9931944848 0.0404661387 + 1350 1.0012041287 0.0196623211 0.9670409060 0.0427294959 + 1351 1.0275169516 0.0553093619 1.0137274187 0.0249573591 + 1352 1.0113670128 0.0177018143 1.0091589049 0.0163553657 + 1353 0.9802987599 -0.0286675322 0.9850753771 -0.0370394569 + 1354 0.9774658492 -0.0154598064 0.9879197329 -0.0147444463 + 1355 1.0267932803 0.0022032123 1.0063831981 0.0039870776 + 1356 0.9991469381 -0.0388686989 0.9680831816 -0.0299349660 + 1357 0.9808501578 0.0397274330 0.9753414529 -0.0194614911 + 1358 1.0081745468 0.0400863404 1.0321282713 0.0082582520 + 1359 0.9699295016 -0.0131615259 1.0077247828 -0.0073784091 + 1360 0.9736695971 0.0091022845 0.9902058856 -0.0214663904 + 1361 0.9880059541 -0.0132692694 0.9912751768 0.0015548538 + 1362 0.9670789118 0.0080473866 0.9918526705 -0.0015291746 + 1363 1.0280836286 0.0273078893 1.0307787771 0.0052299718 + 1364 0.9777721458 -0.0250687382 1.0314732792 0.0203045199 + 1365 1.0360409078 -0.0155160736 0.9975599098 0.0185085645 + 1366 0.9941991119 0.0086696434 0.9726722991 -0.0296458326 + 1367 1.0307946435 0.0161149195 1.0005145614 -0.0392708542 + 1368 0.9886617747 -0.0033094632 1.0001113606 0.0771841375 + 1369 0.9995322014 -0.0041533805 1.0118468333 -0.0078401240 + 1370 1.0066038545 0.0359541196 1.0103386479 0.0040127354 + 1371 0.9415588384 0.0085455122 1.0136158720 0.0156475350 + 1372 1.0092718471 -0.0335667630 0.9936022902 0.0137046342 + 1373 1.0140119305 0.0105153119 1.0425717794 -0.0081731374 + 1374 1.0298295541 -0.0216905699 1.0016711617 -0.0251904665 + 1375 1.0061517698 0.0402928873 0.9764643910 -0.0279302392 + 1376 1.0166281693 -0.0106145988 0.9723746197 -0.0091265209 + 1377 0.9933809112 -0.0397811344 0.9946302817 0.0256035688 + 1378 0.9856215423 -0.0028409903 0.9850312373 -0.0225163504 + 1379 1.0055933197 -0.0030594936 0.9761679655 0.0102013631 + 1380 0.9904078952 0.0230018263 0.9624116738 -0.0209580538 + 1381 1.0450520505 0.0074620323 0.9726840506 0.0032515306 + 1382 1.0002635802 -0.0003341236 1.0012352186 0.0410140415 + 1383 1.0095979700 0.0088087448 0.9713501111 0.0357393176 + 1384 1.0168295262 0.0045423599 0.9764296211 -0.0323175988 + 1385 1.0049447755 -0.0255534235 0.9636513523 0.0407208004 + 1386 1.0027084973 0.0119940999 0.9923303662 -0.0348470087 + 1387 1.0286184030 -0.0021828195 1.0087865853 0.0280126190 + 1388 0.9987638715 -0.0337150462 0.9831363866 -0.0024584419 + 1389 0.9864464380 -0.0335465681 0.9908404356 -0.0118113562 + 1390 0.9749671038 0.0081064175 1.0403304083 0.0196653487 + 1391 1.0196437326 -0.0172229621 0.9770449937 -0.0026320202 + 1392 0.9871922425 -0.0239427595 0.9996901309 0.0496765142 + 1393 1.0096518432 -0.0213991280 0.9846458919 0.0401505669 + 1394 0.9968092417 -0.0058380279 1.0040425674 -0.0019534433 + 1395 0.9984277693 -0.0113539264 1.0283011653 -0.0010968671 + 1396 1.0241912506 0.0054959737 1.0293108476 0.0244474057 + 1397 0.9817002954 0.0132221094 0.9801363179 -0.0202435597 + 1398 1.0412701009 0.0473030912 1.0049049043 -0.0362627094 + 1399 1.0181455876 -0.0173943674 0.9820708394 -0.0668144709 + 1400 0.9935221182 -0.0212570084 1.0087015478 0.0522111632 + 1401 1.0060144239 0.0355084169 0.9858197504 -0.0013628979 + 1402 1.0058909659 -0.0157778868 1.0194893120 -0.0053701740 + 1403 1.0038215855 0.0292451029 1.0025925306 0.0087204645 + 1404 0.9699298374 -0.0069209026 0.9969508577 0.0531265600 + 1405 1.0121559032 0.0032498275 1.0186642779 0.0284569394 + 1406 0.9982050463 0.0017672219 1.0092782441 0.0266942937 + 1407 0.9967894231 -0.0385329651 1.0019613786 0.0143858617 + 1408 0.9768361103 0.0144954596 1.0212492540 0.0017423003 + 1409 0.9993862764 -0.0437542624 1.0118770339 -0.0138328660 + 1410 0.9698298356 -0.0342190257 0.9958059919 0.0209840423 + 1411 1.0240650399 -0.0626300499 0.9999067657 0.0219419910 + 1412 1.0257844327 0.0211844072 1.0256980578 0.0308190350 + 1413 1.0268963039 -0.0174096895 0.9902483614 0.0053030039 + 1414 1.0122429059 0.0383163954 0.9860191231 -0.0159803473 + 1415 0.9879161517 0.0094703439 0.9962743919 0.0996483168 + 1416 1.0241825641 -0.0087530550 1.0119145924 0.0200492023 + 1417 0.9816046447 0.0472835091 0.9990334080 -0.0566781071 + 1418 1.0112117165 0.0094464733 0.9675477305 -0.0348676617 + 1419 0.9728076902 -0.0505416677 1.0023102850 -0.0314015759 + 1420 1.0294003358 -0.0373074861 0.9803534474 -0.0274824257 + 1421 1.0302458991 0.0161204388 0.9974169426 -0.0098778836 + 1422 1.0142596959 -0.0201788625 0.9990174693 -0.0391084180 + 1423 0.9982869850 0.0125678913 0.9898097800 -0.0196484375 + 1424 1.0034666687 0.0080233749 0.9682610534 0.0469749592 + 1425 1.0078195948 -0.0123946541 0.9982024641 -0.0153834372 + 1426 1.0105784945 -0.0160782671 1.0085159508 0.0086820012 + 1427 0.9772711059 -0.0209939628 0.9911939126 -0.0234551784 + 1428 1.0203337668 -0.0329763696 1.0074347657 0.0082794132 + 1429 0.9737908883 0.0099524617 1.0391595071 -0.0048566491 + 1430 1.0274077119 -0.0358782914 0.9939722409 -0.0025346697 + 1431 0.9763136146 0.0489750798 1.0072119933 0.0021010271 + 1432 1.0054795153 0.0055143396 0.9987017089 -0.0280311723 + 1433 0.9737226909 -0.0023955329 0.9910379524 0.0105760722 + 1434 0.9988776970 -0.0284377314 0.9955465884 0.0131365777 + 1435 0.9977335889 0.0278293547 0.9645358746 0.0089077735 + 1436 0.9893911974 0.0068800852 1.0034093952 0.0145442009 + 1437 0.9804628597 0.0215689261 1.0004256416 0.0061346643 + 1438 1.0171048239 -0.0085706687 0.9885032058 0.0219337085 + 1439 0.9856890518 0.0178824976 0.9711413739 -0.0161683660 + 1440 0.9892840233 -0.0333751689 0.9730221569 0.0113535124 + 1441 0.9957059243 -0.0351340157 1.0116185480 0.0156680344 + 1442 1.0060612122 0.0520615510 1.0259080496 0.0077892883 + 1443 0.9824788150 0.0091653596 0.9692966411 0.0120306027 + 1444 1.0053938799 0.0032368059 0.9717137529 -0.0341402715 + 1445 1.0100478742 0.0372043688 1.0134131509 0.0151697410 + 1446 1.0186296853 0.0337739278 0.9883990591 -0.0075470144 + 1447 0.9819743861 0.0200873768 1.0009899574 -0.0475839816 + 1448 0.9938092150 -0.0152810274 0.9825991700 -0.0419601350 + 1449 0.9730594169 0.0021918873 1.0125471984 0.0386179924 + 1450 0.9554668023 0.0085119255 1.0028718124 0.0133948090 + 1451 0.9841703649 -0.0065364581 1.0290060889 -0.0271901404 + 1452 0.9829459178 0.0344700307 1.0099892087 0.0263352840 + 1453 0.9741077116 -0.0333703374 0.9878632502 0.0099820716 + 1454 0.9692687386 0.0208739445 1.0154861565 -0.0117062607 + 1455 1.0328808368 0.0229692890 0.9939876042 0.0020072028 + 1456 0.9716538588 -0.0278776575 1.0197743495 -0.0115565111 + 1457 0.9947752412 -0.0755566842 0.9783633493 0.0524852449 + 1458 0.9880987930 -0.0294673230 1.0234182378 -0.0046824770 + 1459 0.9926065165 0.0022354581 1.0096225060 0.0193594695 + 1460 0.9861278412 -0.0018285302 0.9907380353 -0.0395576685 + 1461 0.9958701147 -0.0018779056 1.0107989557 0.0183715580 + 1462 0.9853862415 -0.0155194689 1.0208280284 0.0384389192 + 1463 0.9879392961 -0.0117179632 0.9896806920 0.0069514023 + 1464 0.9781571060 0.0045430655 1.0096533308 0.0164100390 + 1465 1.0043223133 0.0619680796 1.0255452591 0.0041455186 + 1466 1.0251252806 -0.0075279994 1.0126988987 -0.0374758844 + 1467 1.0365993005 0.0144079151 0.9807652323 -0.0236613109 + 1468 0.9863509758 0.0123177633 0.9744710450 -0.0160896282 + 1469 0.9785717365 -0.0238916778 0.9922863125 -0.0399282859 + 1470 1.0027131048 -0.0105318962 1.0247451760 0.0057954828 + 1471 1.0106207134 -0.0007404730 1.0255369778 -0.0220893904 + 1472 0.9760498892 -0.0480489628 1.0084828237 -0.0081008775 + 1473 0.9857736186 -0.0177487388 0.9853641102 -0.0781901004 + 1474 0.9827430227 0.0136724141 1.0395046771 0.0060466482 + 1475 1.0025101539 0.0481793811 0.9900173253 0.0081291357 + 1476 1.0099304192 0.0088507039 0.9782229651 -0.0177923830 + 1477 0.9855588537 0.0156604786 1.0053506972 0.0032290711 + 1478 1.0145986957 0.0316949814 0.9753624709 0.0375470816 + 1479 0.9881251459 -0.0236102273 0.9939562078 0.0245555623 + 1480 1.0079016451 -0.0492830248 1.0128954170 -0.0054649427 + 1481 0.9675330191 0.0239841739 1.0019762749 0.0203211522 + 1482 0.9976489863 -0.0011549756 1.0325406271 -0.0453745183 + 1483 0.9948447258 -0.0028622950 0.9990595177 0.0169873146 + 1484 1.0180961676 -0.0347925786 0.9874209768 -0.0025628974 + 1485 1.0097565767 0.0356403859 0.9512356740 0.0104523812 + 1486 1.0014213370 -0.0224050604 0.9851831517 -0.0109867749 + 1487 1.0213887344 0.0038794477 0.9902154208 0.0417872602 + 1488 0.9937596846 -0.0179451355 0.9955422392 0.0197917532 + 1489 0.9898057756 0.0158219724 0.9967446231 0.0116130442 + 1490 0.9891701020 0.0027802375 1.0137993656 0.0081072166 + 1491 1.0015324442 0.0521494420 0.9901026766 0.0142619202 + 1492 0.9829991271 0.0125572891 1.0488476717 0.0061688836 + 1493 0.9878710612 -0.0263347768 1.0051003567 0.0283256141 + 1494 0.9514084989 -0.0040085895 0.9898694017 0.0181326666 + 1495 1.0354232379 0.0053845474 1.0020905539 0.0182400145 + 1496 1.0015762813 -0.0120493709 0.9921547320 0.0014763625 + 1497 1.0209346838 -0.0380869993 0.9897211678 0.0092626066 + 1498 0.9810377381 -0.0446171233 0.9859124825 0.0549732425 + 1499 1.0350444257 0.0259758756 0.9836554125 -0.0233445282 + 1500 1.0158934170 0.0155597867 0.9773481598 0.0141663952 + 1501 1.0078208709 -0.0158066181 1.0327748310 -0.0249219503 + 1502 1.0104150629 0.0215144777 1.0009350161 0.0003905436 + 1503 0.9899824493 -0.0356226938 1.0481984139 0.0297400106 + 1504 1.0051133002 -0.0388868320 1.0015582997 0.0106514558 + 1505 1.0106215347 0.0315918445 1.0104712155 0.0142096161 + 1506 0.9718482808 0.0200512186 1.0343220300 0.0271592075 + 1507 0.9981308953 -0.0075260650 0.9974560056 -0.0137172707 + 1508 1.0073468706 -0.0027202155 0.9935474200 -0.0234043301 + 1509 1.0128628000 0.0101151244 1.0237074452 0.0087924323 + 1510 0.9981143304 -0.0055534271 0.9893038672 -0.0073180462 + 1511 1.0033991466 0.0143012598 0.9699439605 -0.0474666323 + 1512 0.9981355483 0.0043894167 1.0090826781 0.0040524820 + 1513 0.9983033246 0.0049130445 0.9814074509 -0.0350924431 + 1514 0.9991663609 -0.0034504332 0.9946379524 0.0307951743 + 1515 0.9539226920 0.0077990503 1.0005432566 -0.0088623935 + 1516 0.9627168866 -0.0133356276 0.9891499707 0.0613725904 + 1517 1.0055764113 -0.0483937010 1.0090831906 -0.0135582765 + 1518 0.9769411788 0.0101748741 1.0103668678 -0.0137744192 + 1519 1.0047421013 0.0149938142 1.0570897245 -0.0012410712 + 1520 0.9617914267 -0.0206501229 0.9685107548 -0.0095817165 + 1521 0.9896745168 0.0028555915 0.9683511129 -0.0283390229 + 1522 0.9784020262 0.0187343003 1.0007149785 0.0074560144 + 1523 1.0132889565 -0.0177099647 0.9931148147 0.0069991545 + 1524 0.9909097521 0.0156787968 1.0042081415 -0.0159510964 + 1525 1.0106987334 -0.0152353764 1.0064184713 0.0335579213 + 1526 0.9959079439 0.0364533741 1.0002388962 -0.0031685846 + 1527 1.0020842855 0.0056788169 1.0152145633 -0.0061024104 + 1528 1.0307175172 0.0009404885 0.9979948726 -0.0068090713 + 1529 0.9920250594 0.0229060345 0.9912933194 -0.0045693914 + 1530 0.9902807417 0.0128361974 0.9933978680 0.0312709669 + 1531 0.9871569715 -0.0027956579 1.0231440160 0.0164980652 + 1532 1.0317283949 -0.0170697277 1.0227814337 0.0075915969 + 1533 1.0150661620 -0.0248556303 1.0053732926 0.0197428390 + 1534 0.9557997612 0.0007626297 1.0196901164 0.0003631314 + 1535 1.0048307800 -0.0241064539 1.0184833228 0.0000587769 + 1536 0.9720370104 -0.0071714049 0.9791724611 0.0741611748 + 1537 0.9429097224 -0.0238358828 1.0152271139 -0.0279040569 + 1538 0.9854885546 -0.0497938752 1.0067642832 0.0319611369 + 1539 0.9868495469 0.0209370919 1.0229940629 0.0409034490 + 1540 1.0125796871 0.0195436669 0.9955376846 -0.0258939490 + 1541 0.9782713567 -0.0054284924 1.0071734335 -0.0164433847 + 1542 0.9965829881 -0.0093911387 1.0069284620 -0.0114543802 + 1543 0.9723270086 -0.0217359450 1.0154274416 -0.0243279039 + 1544 1.0049342912 0.0267543896 0.9831605916 -0.0004805359 + 1545 0.9879062132 -0.0044161136 0.9783210532 0.0696451895 + 1546 0.9934290808 0.0298281138 1.0165303076 -0.0035732423 + 1547 0.9913189090 -0.0115162838 1.0069732745 -0.0245097714 + 1548 0.9760618958 0.0038191999 1.0003268529 -0.0936553955 + 1549 0.9714453809 0.0217821990 0.9707794807 -0.0356563417 + 1550 1.0321271383 -0.0263805397 0.9945440453 0.0148247532 + 1551 0.9800436768 -0.0111772400 0.9916800573 0.0134875361 + 1552 1.0284803709 0.0360053367 1.0126166404 -0.0101850245 + 1553 0.9957614430 -0.0031138262 0.9821203976 -0.0108616036 + 1554 0.9791919152 0.0199323367 1.0012355457 -0.0293002507 + 1555 0.9914412436 -0.0161294645 1.0008131956 -0.0091668010 + 1556 1.0137201685 0.0091080244 1.0209590894 -0.0315030722 + 1557 1.0041624880 -0.0183337751 1.0085938244 0.0045907799 + 1558 0.9927722112 0.0030500803 0.9985855155 0.0339656765 + 1559 1.0047583966 -0.0463572834 0.9883836664 -0.0446022929 + 1560 1.0095620322 -0.0498261018 0.9747527122 0.0280540794 + 1561 1.0021696739 -0.0407576670 0.9793802259 -0.0038714062 + 1562 0.9847898924 -0.0005512408 0.9971241485 -0.0013590436 + 1563 0.9980516031 -0.0120192110 1.0105812274 0.0132874463 + 1564 0.9974060561 0.0637981025 0.9794564473 -0.0205008232 + 1565 1.0007337895 -0.0016684639 0.9938318656 -0.0293046677 + 1566 1.0145346763 -0.0344033476 0.9729963106 0.0498193872 + 1567 1.0070460356 0.0199859198 0.9939039006 -0.0052351577 + 1568 1.0214628223 0.0104890360 1.0122354406 -0.0059499613 + 1569 0.9821934218 0.0021568840 0.9967468626 0.0086245567 + 1570 0.9837978170 -0.0385847493 0.9742253063 -0.0039252078 + 1571 0.9882606567 -0.0158015797 1.0571154617 0.0154817416 + 1572 0.9934060538 -0.0133936889 1.0104675328 -0.0347277068 + 1573 1.0146390721 0.0108399418 1.0166051427 0.0431927253 + 1574 0.9985018377 0.0048465074 1.0233165197 -0.0052891426 + 1575 0.9930810810 0.0250453733 1.0199031359 0.0314490711 + 1576 1.0169928523 -0.0131157781 0.9950515887 0.0093918464 + 1577 1.0020065114 0.0247370055 1.0229238877 0.0053006311 + 1578 0.9818106550 -0.0393639021 1.0015835742 -0.0297776267 + 1579 0.9729163838 0.0329279655 0.9908599233 -0.0039783818 + 1580 0.9689859275 -0.0251350292 0.9882057038 0.0280407836 + 1581 0.9768927246 -0.0181756486 1.0045309697 0.0143364033 + 1582 1.0145543556 0.0175337313 1.0517886008 0.0121246261 + 1583 0.9784823262 -0.0025978922 0.9967947712 0.0183780194 + 1584 1.0324705220 0.0004350791 0.9890623960 -0.0142918301 + 1585 1.0040497442 -0.0038437539 1.0103179277 -0.0078819921 + 1586 0.9877494031 0.0161277632 0.9797763485 0.0280342132 + 1587 0.9872736360 0.0090160889 1.0161043154 -0.0102263234 + 1588 0.9975186968 0.0083080264 1.0095397014 0.0098980302 + 1589 1.0119152845 -0.0319780084 1.0266532958 0.0144708626 + 1590 0.9934146492 -0.0048856343 1.0011605751 0.0089585104 + 1591 1.0066248254 0.0312093864 0.9984338045 0.0412469593 + 1592 1.0049194879 0.0057114069 1.0075694723 -0.0138265398 + 1593 1.0123861806 -0.0264624907 1.0255529244 -0.0076665567 + 1594 0.9875631054 -0.0315846531 1.0229173919 0.0297788841 + 1595 0.9862143247 -0.0284014255 1.0263586277 0.0328511040 + 1596 0.9826357223 0.0025495031 1.0032031097 -0.0058899325 + 1597 0.9895997043 -0.0105220495 1.0066256008 0.0268075848 + 1598 1.0168979788 0.0166665928 1.0040887044 -0.0113669227 + 1599 0.9931419826 0.0111748360 1.0169296623 0.0630428269 + 1600 0.9870988117 -0.0012854508 0.9992122830 0.0040846641 + 1601 1.0183624953 -0.0366405758 0.9722536565 0.0119043381 + 1602 1.0131623377 -0.0075110034 0.9925604641 0.0243045209 + 1603 0.9917551488 -0.0343680063 1.0024077628 0.0075064710 + 1604 1.0092373113 -0.0047231546 1.0116075565 0.0010755589 + 1605 1.0137566479 -0.0213027127 0.9862050630 0.0084659236 + 1606 0.9776631127 -0.0099168722 1.0297944178 0.0455096844 + 1607 1.0020439442 -0.0224792211 1.0219454013 -0.0093019931 + 1608 0.9907701834 -0.0363555661 0.9909818339 0.0435091983 + 1609 1.0016981697 0.0051989612 0.9994448020 -0.0144212458 + 1610 0.9958442821 0.0337491554 1.0074693789 -0.0428281020 + 1611 0.9967296138 -0.0455052283 1.0159201553 -0.0247767245 + 1612 0.9826443425 -0.0213674964 0.9941175074 -0.0428451294 + 1613 0.9960206642 -0.0192876190 1.0016964087 0.0156848275 + 1614 0.9984895093 -0.0099789320 0.9943930779 0.0185994496 + 1615 0.9717699585 -0.0001936814 0.9768630045 0.0776203638 + 1616 0.9933417853 -0.0146662211 0.9685735685 -0.0181566982 + 1617 1.0084933763 -0.0206911915 0.9797133442 0.0223414498 + 1618 0.9799858794 -0.0155308134 1.0161178327 -0.0061471275 + 1619 1.0007871038 0.0105181770 0.9977739089 0.0166127007 + 1620 0.9950303090 0.0211500326 0.9807044774 0.0073763925 + 1621 1.0274919664 -0.0122358796 1.0062811419 0.0073714834 + 1622 0.9827959125 0.0258745687 1.0240861507 -0.0095484440 + 1623 1.0425253903 -0.0131367324 1.0030849559 -0.0117963916 + 1624 0.9864354752 -0.0197870435 1.0129411500 -0.0131225564 + 1625 1.0114759732 -0.0323911996 1.0347465105 0.0266764508 + 1626 0.9911770435 -0.0047823269 1.0033131291 0.0264148712 + 1627 0.9901843762 0.0094946064 1.0137064048 -0.0306516267 + 1628 1.0013441884 0.0378453348 0.9687843718 0.0256539056 + 1629 1.0039524317 0.0048247242 1.0299172719 0.0059217714 + 1630 0.9854564608 0.0213596642 0.9988588449 0.0019422212 + 1631 1.0005565304 -0.0019451713 0.9700747979 -0.0239527614 + 1632 0.9973238366 0.0166506026 1.0028495272 0.0360622642 + 1633 1.0160771219 -0.0225439592 0.9988808257 -0.0047073552 + 1634 1.0110876573 0.0149610045 0.9901666878 0.0369239074 + 1635 0.9800634704 -0.0174580139 0.9871451085 -0.0052841387 + 1636 0.9931351995 -0.0188266856 0.9731755895 0.0112072758 + 1637 0.9436719689 0.0043210906 0.9899007606 0.0306870933 + 1638 1.0199333140 -0.0211687986 1.0063905768 -0.0073393936 + 1639 1.0116091928 -0.0160905800 0.9740632863 -0.0147783310 + 1640 1.0120367421 0.0027816034 1.0124441652 0.0088667514 + 1641 1.0423968910 0.0087918017 1.0132979286 0.0182071635 + 1642 0.9945306314 -0.0312477602 1.0131954629 -0.0185558678 + 1643 0.9871723792 0.0052130151 0.9845216204 -0.0146913005 + 1644 0.9672348768 -0.0056974572 0.9946742021 0.0009224608 + 1645 1.0023261302 -0.0028019390 0.9811355005 0.0050829926 + 1646 0.9963632017 0.0188199691 0.9968232998 0.0157594568 + 1647 0.9904497719 -0.0310278843 1.0162358805 -0.0222726076 + 1648 1.0107068580 0.0010294656 0.9843779019 -0.0193209193 + 1649 0.9867334639 -0.0536941292 0.9681087728 0.0006857723 + 1650 0.9761378435 -0.0071483953 1.0298279362 0.0106370905 + 1651 1.0266199102 -0.0014218961 1.0081643019 -0.0057512826 + 1652 1.0126682406 -0.0037761546 1.0016260142 0.0400451233 + 1653 0.9789957502 -0.0149116348 1.0214620040 0.0122761549 + 1654 0.9975009866 -0.0565282677 0.9950376547 -0.0395159597 + 1655 0.9818856021 -0.0280139947 1.0158323831 -0.0032115129 + 1656 0.9864605644 -0.0041666908 1.0222888010 0.0101930978 + 1657 0.9937609412 -0.0156461314 0.9608932902 0.0100123726 + 1658 0.9757157311 0.0078217428 1.0129271548 0.0159443751 + 1659 1.0026103532 0.0081802981 0.9853337956 0.0029181902 + 1660 0.9947547811 0.0022534003 0.9704971297 0.0181223843 + 1661 1.0063342810 -0.0399716346 1.0187978132 -0.0483947157 + 1662 0.9958739551 -0.0615749715 1.0280202626 -0.0294128207 + 1663 1.0142513306 0.0342987411 1.0146288262 -0.0001490815 + 1664 1.0042330807 -0.0278983280 0.9737440142 -0.0171243821 + 1665 1.0198173642 -0.0422166187 1.0029532764 -0.0140357842 + 1666 0.9999847265 0.0123467205 0.9926358157 0.0330750042 + 1667 0.9745395780 -0.0114814800 1.0107795853 -0.0327842698 + 1668 0.9960089417 -0.0114891904 1.0282222353 0.0188358820 + 1669 0.9839372290 -0.0146147904 1.0035709998 0.0382405458 + 1670 0.9914925325 -0.0046137382 0.9995367809 -0.0038722714 + 1671 1.0192201558 -0.0216801958 0.9938832009 0.0217499020 + 1672 0.9727910696 0.0215586354 1.0070561014 0.0442725506 + 1673 0.9908908387 0.0599213018 1.0217979927 -0.0092961093 + 1674 1.0367595836 -0.0355258452 0.9976613042 0.0034161605 + 1675 1.0148251981 -0.0336308523 0.9778629406 0.0309676257 + 1676 0.9874176695 0.0036959424 1.0123408501 -0.0220039553 + 1677 0.9847961456 0.0290773796 1.0045590965 -0.0184917130 + 1678 1.0222798695 -0.0329392074 1.0035693445 -0.0229640544 + 1679 1.0216991871 -0.0008461374 0.9997502951 -0.0163913576 + 1680 1.0108792596 0.0109777135 0.9900727117 -0.0303125622 + 1681 1.0076545540 -0.0194480911 0.9960239273 0.0342544128 + 1682 0.9994966408 -0.0441084015 0.9826337365 0.0141275860 + 1683 0.9951866766 0.0305656623 1.0001249984 -0.0224011008 + 1684 1.0155755783 -0.0250633129 1.0129600215 -0.0244854839 + 1685 0.9736010207 -0.0319095387 0.9927308359 0.0110783583 + 1686 0.9843761550 -0.0030502403 0.9854221408 -0.0301316097 + 1687 0.9964618109 -0.0205613553 0.9953387081 -0.0131785396 + 1688 0.9908342320 0.0136014205 0.9655744643 0.0059962248 + 1689 1.0001945876 0.0033437859 0.9867507344 0.0425897101 + 1690 1.0300748664 -0.0211811119 0.9917943749 0.0054056769 + 1691 1.0027541716 -0.0366953257 0.9874645084 -0.0068276332 + 1692 0.9672997865 -0.0210873183 1.0043964591 0.0377743961 + 1693 0.9984935081 0.0348529911 0.9931187348 0.0043890194 + 1694 1.0002129945 0.0312967802 1.0095762046 0.0283869298 + 1695 0.9741715251 -0.0150155972 0.9888396687 0.0107982885 + 1696 1.0142235429 0.0344752543 1.0003825726 0.0059218222 + 1697 1.0174422723 -0.0027461113 0.9933838218 0.0325048036 + 1698 1.0168196340 0.0399477646 1.0038758505 0.0134802270 + 1699 0.9908778958 0.0134289991 1.0025694960 -0.0424649901 + 1700 1.0156772787 0.0497691515 0.9545197833 0.0024664477 + 1701 0.9979964628 0.0185168356 1.0361787416 0.0208517110 + 1702 0.9852616593 -0.0592287728 0.9802833128 -0.0396497756 + 1703 0.9985712148 -0.0027306160 0.9893150746 0.0531831810 + 1704 0.9977595867 0.0042401466 0.9788169574 0.0026052161 + 1705 1.0223690746 -0.0173091498 1.0264972514 -0.0159723584 + 1706 0.9820822527 -0.0026991449 1.0352281399 0.0164292057 + 1707 0.9900840600 -0.0086252305 1.0276181227 -0.0061892640 + 1708 1.0096645205 -0.0192701261 0.9800223802 -0.0459067659 + 1709 1.0220651891 0.0254666008 0.9776004276 0.0175449197 + 1710 1.0291290568 0.0506595539 1.0041183383 0.0246591076 + 1711 1.0054324513 -0.0163123665 0.9893600004 0.0071289787 + 1712 1.0126433439 -0.0196244752 0.9717447575 0.0436310249 + 1713 0.9820297976 0.0391240898 1.0001484278 -0.0409543336 + 1714 1.0195825691 -0.0162072942 1.0291209393 -0.0018138418 + 1715 0.9918191973 0.0137056283 0.9896206645 0.0092292023 + 1716 0.9780828145 -0.0295506336 0.9964616108 -0.0027768281 + 1717 1.0127079098 -0.0133098137 1.0271809119 0.0051561500 + 1718 1.0128815794 0.0101893534 1.0371078086 0.0009484567 + 1719 0.9938951009 0.0006016208 0.9776650666 0.0468282605 + 1720 0.9702750944 0.0224703747 1.0029661905 0.0011331443 + 1721 0.9835713433 -0.0226909161 1.0010999746 -0.0125381567 + 1722 1.0026325620 -0.0325646402 0.9903236143 -0.0234863285 + 1723 1.0111236321 -0.0139478591 0.9832132220 -0.0205225741 + 1724 1.0119388161 0.0037754285 1.0011341772 0.0313401372 + 1725 1.0124010450 0.0247853718 0.9977648789 -0.0043169687 + 1726 0.9659008580 0.0281553514 0.9939816415 0.0196627411 + 1727 1.0315803880 0.0397321711 0.9989310855 0.0189124219 + 1728 1.0155032062 0.0070743991 1.0285076088 0.0186741659 + 1729 1.0165982190 -0.0101774165 0.9594066373 0.0077220325 + 1730 0.9992223022 -0.0057661001 0.9758383948 0.0072783672 + 1731 0.9863231162 0.0030737386 1.0060153559 -0.0172380441 + 1732 1.0023674484 -0.0010577727 1.0102235166 0.0062880491 + 1733 0.9859898004 0.0026625682 0.9827579650 -0.0255628876 + 1734 1.0235604536 0.0099487210 0.9856182250 -0.0318259843 + 1735 0.9797706041 0.0367866352 1.0161497347 -0.0064656256 + 1736 0.9859182473 0.0222190773 1.0208806646 -0.0138268846 + 1737 1.0052457787 -0.0363923011 1.0006977299 0.0199886207 + 1738 1.0180210068 -0.0212213832 1.0430566406 0.0075605794 + 1739 1.0063056980 0.0076130011 0.9770307716 -0.0338286014 + 1740 0.9784719210 0.0167113205 1.0185627577 -0.0021080721 + 1741 1.0115981778 0.0044947193 1.0051967545 -0.0172392055 + 1742 1.0308844311 0.0010441450 0.9863959758 -0.0011821847 + 1743 1.0349702490 -0.0155225259 0.9800480714 -0.0074720689 + 1744 0.9947541278 0.0346910840 1.0061133800 0.0315982122 + 1745 1.0153899064 -0.0048504688 1.0008567847 0.0095785748 + 1746 0.9871505044 0.0199651028 0.9848973782 0.0318442529 + 1747 1.0214051386 0.0062997215 0.9846151287 -0.0127937411 + 1748 0.9840122757 0.0117984670 0.9570659247 -0.0276010447 + 1749 0.9812029633 -0.0199432046 0.9669802105 -0.0262718006 + 1750 1.0142998579 0.0182409835 1.0149507031 -0.0067687176 + 1751 0.9769227963 -0.0170101171 0.9769158059 -0.0085868348 + 1752 0.9980238434 0.0128992752 0.9691858510 -0.0469866204 + 1753 1.0046845280 0.0206988727 0.9875698769 0.0154040477 + 1754 1.0002862915 0.0177852411 1.0004338332 -0.0342273302 + 1755 0.9800904228 -0.0040269756 1.0072608076 -0.0279838360 + 1756 1.0095184538 0.0358814440 0.9742513588 0.0096996233 + 1757 1.0029596951 0.0265248918 1.0103469366 -0.0002011596 + 1758 0.9987157552 -0.0002725584 0.9875109724 0.0375961868 + 1759 1.0025556197 -0.0201829869 1.0057811629 0.0458127504 + 1760 1.0131190139 -0.0036315258 0.9973137894 -0.0118973551 + 1761 1.0155029919 0.0581654564 0.9883422220 -0.0405271464 + 1762 1.0010850398 0.0140584055 0.9787359455 -0.0474607049 + 1763 0.9983677208 -0.0258548230 1.0077305253 0.0343812076 + 1764 1.0166035429 -0.0311410600 1.0206661198 -0.0043905022 + 1765 0.9783841888 -0.0049563393 0.9819957572 0.0335768122 + 1766 0.9999982132 0.0012520793 1.0422513419 0.0334916897 + 1767 0.9966414126 0.0268413870 1.0046488603 0.0114540619 + 1768 1.0088184206 -0.0216376593 0.9899796070 0.0504790153 + 1769 1.0326977070 -0.0030553575 1.0067564312 -0.0294915336 + 1770 1.0042711933 -0.0458091278 1.0047482494 0.0058137336 + 1771 0.9867782419 -0.0015650968 1.0098492034 -0.0091700800 + 1772 1.0219702468 0.0133296956 0.9963650372 -0.0198644030 + 1773 0.9912012495 0.0555955901 1.0275910481 -0.0067588924 + 1774 1.0192282276 0.0218738742 1.0027404110 -0.0195125788 + 1775 1.0048500299 -0.0581507810 0.9957741546 -0.0091151261 + 1776 1.0016457102 -0.0238455009 0.9963102084 0.0458872239 + 1777 1.0207242216 0.0258582404 0.9991028157 0.0172670632 + 1778 0.9892780670 -0.0041699969 0.9904200004 -0.0114140690 + 1779 0.9978030417 -0.0086799120 1.0175788983 -0.0453573765 + 1780 1.0015721330 0.0099706010 1.0242392339 0.0037076227 + 1781 0.9838705391 0.0140584164 0.9867681886 -0.0032085961 + 1782 1.0131838361 -0.0009242198 0.9762489545 -0.0166878663 + 1783 1.0046218537 -0.0062975717 0.9995407924 -0.0082791447 + 1784 0.9954695114 0.0004481573 1.0236045730 -0.0008415129 + 1785 0.9972700867 0.0094668451 0.9851306229 0.0335048646 + 1786 1.0067456095 0.0026068168 1.0046489124 0.0263219662 + 1787 0.9859975117 0.0632194525 1.0002721675 -0.0369663065 + 1788 1.0076997623 -0.0365590931 1.0167706500 -0.0448809318 + 1789 1.0205046091 -0.0029395818 0.9992456635 -0.0088049622 + 1790 1.0046492786 0.0194455999 0.9811626796 -0.0234905063 + 1791 0.9838167444 -0.0191307917 0.9709525123 0.0317425918 + 1792 1.0067866101 0.0021207262 0.9826949945 0.0067801672 + 1793 1.0131290654 -0.0217445043 0.9722398787 0.0137818303 + 1794 0.9983469184 -0.0158534565 0.9767943372 0.0152073022 + 1795 0.9924292140 0.0246786002 0.9788018623 -0.0150044093 + 1796 0.9964116861 0.0272709076 1.0334699440 -0.0203439910 + 1797 1.0070563121 0.0152094759 1.0242728710 0.0366413242 + 1798 1.0037978179 -0.0184963371 1.0002051115 0.0288369182 + 1799 1.0206199363 0.0048374805 0.9905901728 0.0291327550 + 1800 1.0100395338 0.0162105572 1.0161198627 0.0166756401 + 1801 0.9928709403 0.0238252450 0.9984913242 0.0079048757 + 1802 0.9654922167 0.0017005884 0.9729244352 -0.0059040190 + 1803 0.9789224518 -0.0036756648 1.0116453864 -0.0179239069 + 1804 1.0235184972 -0.0242761896 1.0110164977 0.0098696204 + 1805 0.9962011808 0.0025592925 1.0025976488 -0.0281550031 + 1806 0.9920259476 -0.0549591603 1.0103335925 0.0314557083 + 1807 0.9818894088 -0.0042175623 0.9998106815 -0.0450586496 + 1808 0.9959617110 -0.0114166488 1.0280456129 -0.0220736948 + 1809 0.9906515708 -0.0255655830 0.9986720850 -0.0318415038 + 1810 0.9910713483 -0.0180655449 1.0253577758 0.0271022247 + 1811 1.0197513517 0.0013224949 1.0020957267 -0.0078208112 + 1812 0.9841033500 -0.0323172510 0.9631318792 0.0115153478 + 1813 1.0219401777 -0.0256133922 1.0083090832 -0.0255929698 + 1814 0.9977492495 0.0078665213 1.0007768364 0.0427818536 + 1815 0.9800084212 -0.0239676444 0.9959255217 0.0041158034 + 1816 1.0099767476 0.0224743689 0.9779127411 -0.0106392136 + 1817 0.9802978447 0.0125460638 1.0076060258 -0.0051347399 + 1818 1.0192521183 0.0236347708 1.0093527518 -0.0174472815 + 1819 1.0031123855 0.0178753181 0.9912964605 -0.0014057507 + 1820 1.0043295890 0.0071274886 1.0016995936 0.0229448821 + 1821 1.0011085598 -0.0201748868 1.0207379649 -0.0027020382 + 1822 0.9850726919 0.0107461346 0.9990360198 0.0199766986 + 1823 0.9950350971 -0.0360491619 1.0316503041 -0.0049107043 + 1824 1.0166091168 0.0171846793 0.9782006592 -0.0064299050 + 1825 1.0257353107 0.0119840669 0.9890452431 -0.0005362699 + 1826 0.9831535571 -0.0031936081 1.0040125550 0.0192906402 + 1827 0.9869184568 -0.0079643819 1.0158870226 0.0186781996 + 1828 0.9941801973 0.0276877858 1.0159398571 0.0137681083 + 1829 1.0137444936 -0.0099740368 0.9996170078 0.0059440470 + 1830 0.9745172467 -0.0029218450 1.0205438238 -0.0138124759 + 1831 1.0241255255 0.0455345853 1.0083854055 0.0128824764 + 1832 0.9805011901 0.0076391778 0.9911608859 0.0369078945 + 1833 1.0068244098 -0.0226406393 1.0028542581 0.0089228721 + 1834 0.9916918023 -0.0033102600 1.0143318769 0.0203167510 + 1835 0.9731092080 -0.0103379013 0.9894262311 0.0505752545 + 1836 1.0060092980 0.0062834353 1.0107337603 0.0013765640 + 1837 0.9918611384 0.0203612132 1.0173922191 -0.0079562284 + 1838 0.9940615691 0.0165875932 0.9975589318 -0.0020768289 + 1839 1.0225956199 0.0246464332 1.0007940287 0.0108151352 + 1840 0.9971250174 0.0305120168 0.9907149011 -0.0317569549 + 1841 0.9902956800 -0.0036579277 1.0076681674 -0.0087820470 + 1842 1.0258418724 -0.0249640762 0.9974293867 0.0019084949 + 1843 1.0226233263 0.0137382721 1.0057678869 -0.0176635983 + 1844 0.9837675823 -0.0357910376 1.0043413438 0.0493164710 + 1845 0.9961847076 0.0255469118 1.0061182560 -0.0078775266 + 1846 0.9999416205 0.0278391102 0.9968789563 -0.0141829916 + 1847 0.9956023533 -0.0185654338 0.9941118793 -0.0445098144 + 1848 0.9894694904 -0.0250148861 1.0039574748 0.0017324217 + 1849 0.9805143685 0.0428870335 0.9967544088 -0.0011776149 + 1850 0.9986506089 0.0336786842 0.9990665998 -0.0344634760 + 1851 0.9842326458 -0.0127709349 1.0217812610 -0.0273110408 + 1852 1.0014853235 -0.0186662084 0.9902541448 0.0506037785 + 1853 1.0144100857 -0.0282002053 0.9861351123 -0.0159178437 + 1854 1.0043644647 0.0515306595 0.9892222998 0.0081563387 + 1855 1.0171865240 0.0255675399 0.9974911858 0.0119852541 + 1856 1.0046371683 0.0167036766 1.0033404866 -0.0069403871 + 1857 0.9820321497 0.0243553579 0.9953049345 -0.0239103331 + 1858 0.9926615875 0.0086368258 0.9849409402 0.0077313537 + 1859 0.9938775603 -0.0006712162 0.9736543127 -0.0020443890 + 1860 1.0125726444 -0.0394911236 0.9897211028 0.0202576823 + 1861 0.9989455890 0.0077433001 0.9981344504 0.0112425318 + 1862 0.9964368597 -0.0345682512 1.0132380843 0.0603784410 + 1863 1.0304279394 -0.0225823990 0.9938008355 0.0012670150 + 1864 1.0172460968 -0.0263111287 0.9941409741 -0.0108011949 + 1865 1.0109062573 0.0295946491 1.0080143954 0.0146724143 + 1866 0.9852881299 0.0039614563 1.0154412977 0.0157223123 + 1867 0.9956846084 0.0425791172 0.9680468355 -0.0032543999 + 1868 0.9802729147 -0.0067459761 0.9934919272 -0.0352359659 + 1869 1.0250967431 0.0198767924 0.9972305911 -0.0201589201 + 1870 1.0066044217 0.0030946527 0.9819580580 0.0118755881 + 1871 0.9954109484 -0.0132999307 0.9993416801 -0.0402750450 + 1872 0.9961571150 0.0120590748 1.0015087550 -0.0233067787 + 1873 1.0252652765 0.0130608626 0.9924591123 0.0280797505 + 1874 0.9848653300 0.0138842132 1.0146890020 0.0260265650 + 1875 0.9879895840 0.0076681393 1.0132799605 0.0105121261 + 1876 1.0131512042 0.0355563951 0.9926603309 -0.0082605873 + 1877 0.9869785968 0.0147131266 0.9920691174 0.0077495956 + 1878 1.0090320188 -0.0173920124 0.9810110859 0.0393009307 + 1879 1.0083102190 0.0164115404 0.9984758329 0.0139724246 + 1880 0.9963076458 -0.0138968113 1.0218332055 -0.0261524509 + 1881 1.0216025004 0.0076288753 0.9766485316 -0.0325559475 + 1882 0.9907170508 0.0148000855 1.0112808520 -0.0257140543 + 1883 1.0335539614 0.0095489930 1.0225470135 -0.0031434702 + 1884 0.9812076920 0.0221378077 0.9808433362 0.0251874496 + 1885 0.9968302430 0.0456291000 1.0264325604 0.0321383054 + 1886 1.0122675822 -0.0179680181 0.9870227962 0.0501932671 + 1887 1.0035004367 0.0195414153 0.9843858920 -0.0158222349 + 1888 1.0231006219 -0.0083733177 1.0148340782 -0.0176564140 + 1889 1.0005285234 0.0000895039 1.0013160208 0.0188745990 + 1890 0.9732596107 -0.0063501638 0.9916276533 0.0245536078 + 1891 1.0094554940 -0.0201946814 1.0277873609 -0.0210553934 + 1892 1.0338245842 -0.0225605691 0.9765236755 -0.0065239739 + 1893 1.0123072130 0.0108062195 1.0168048733 0.0043463082 + 1894 0.9717942012 -0.0143715236 0.9974556796 0.0338110527 + 1895 0.9698629052 0.0041885737 0.9842471977 0.0158514240 + 1896 0.9927942821 -0.0110294232 1.0059816193 -0.0180110555 + 1897 0.9985315317 0.0121325709 1.0129592738 0.0076969765 + 1898 1.0116666750 -0.0339074875 0.9825506940 0.0427540012 + 1899 0.9982632333 -0.0151049029 0.9790717880 0.0074620381 + 1900 0.9834750707 -0.0256013738 0.9800911065 -0.0022257558 + 1901 1.0111403869 0.0231928856 1.0014048932 0.0091128978 + 1902 1.0068296825 0.0099253609 0.9689832975 0.0188354330 + 1903 0.9810056234 -0.0131371717 0.9946390024 0.0085882756 + 1904 0.9801948794 0.0224456593 0.9907026371 -0.0122303392 + 1905 0.9879911483 -0.0176368254 0.9715798500 0.0200966283 + 1906 1.0044586369 0.0138997191 1.0015773809 -0.0110968560 + 1907 0.9878494081 -0.0007303984 1.0102084257 -0.0118220252 + 1908 1.0205065255 0.0048039398 0.9869978761 0.0256796255 + 1909 1.0035080387 -0.0090518048 1.0102188097 0.0317911120 + 1910 1.0016154559 -0.0001927330 1.0154296995 -0.0022041851 + 1911 1.0153966854 -0.0310801715 1.0005947461 0.0236196050 + 1912 0.9961086209 0.0161980992 0.9889080386 -0.0058112734 + 1913 1.0003178049 -0.0065638893 1.0123362134 0.0493124912 + 1914 1.0168699641 -0.0307768031 0.9819517609 0.0210001023 + 1915 1.0080111449 -0.0071660536 1.0412907752 0.0174688767 + 1916 1.0122252676 -0.0329398915 0.9894558381 0.0337735010 + 1917 0.9858233723 0.0191677932 1.0121232947 0.0256779836 + 1918 1.0070855488 0.0203337499 0.9907618155 0.0082558252 + 1919 0.9971627647 -0.0160351160 1.0118767843 0.0010164507 + 1920 0.9943468113 -0.0144708318 1.0077122318 0.0062587207 + 1921 0.9940561485 0.0094690694 1.0094941917 -0.0453326949 + 1922 0.9760436495 -0.0109458672 0.9918981281 -0.0239648204 + 1923 0.9862966166 0.0200508242 0.9929845457 -0.0002620119 + 1924 0.9979971223 0.0176746626 1.0131183232 -0.0365276452 + 1925 0.9993359609 0.0021132218 1.0098728334 0.0067889653 + 1926 1.0158952921 -0.0134219708 1.0060284487 -0.0000787672 + 1927 0.9995476366 0.0512670334 0.9555579957 -0.0045597518 + 1928 0.9794472757 -0.0174463328 1.0107605046 0.0265105423 + 1929 0.9886471206 0.0338768653 1.0264141946 -0.0061046431 + 1930 0.9804110271 -0.0116599243 1.0182145921 0.0016270878 + 1931 1.0017387603 -0.0025048112 0.9601793204 0.0147327672 + 1932 0.9841751565 -0.0054161720 0.9994764050 -0.0183053932 + 1933 1.0049790437 -0.0156925977 0.9791947967 -0.0240203959 + 1934 0.9697142907 0.0355870862 0.9852125700 -0.0046479657 + 1935 0.9682029147 0.0188061938 1.0209066983 -0.0349022615 + 1936 0.9981312006 -0.0270110423 0.9995959028 -0.0210105333 + 1937 0.9986127214 -0.0049605068 1.0240247786 -0.0421462398 + 1938 0.9948877386 -0.0083598223 0.9956647932 -0.0038672918 + 1939 1.0148736871 0.0149309273 0.9851649462 -0.0047050123 + 1940 0.9967078422 0.0114998503 0.9968784975 0.0110954720 + 1941 0.9865800650 0.0175727409 0.9972656006 0.0395780195 + 1942 0.9947407148 0.0072469045 1.0031091524 0.0164794784 + 1943 1.0130280410 -0.0149561356 1.0087242492 0.0284926610 + 1944 1.0085918005 -0.0131826492 0.9904781277 0.0044210040 + 1945 0.9585130960 -0.0398481112 1.0014437571 -0.0017226248 + 1946 1.0194381342 -0.0346925043 1.0039485168 0.0162946979 + 1947 0.9841726822 -0.0133021421 0.9905626688 -0.0550319211 + 1948 1.0146575903 -0.0214492736 1.0066311986 -0.0274068183 + 1949 0.9838331460 0.0244550585 0.9892056984 0.0255355285 + 1950 0.9868598201 0.0171072195 1.0089239267 -0.0646475469 + 1951 0.9691407507 -0.0338928132 1.0056962008 0.0069897168 + 1952 1.0193523711 0.0252017084 0.9949647034 0.0265404433 + 1953 1.0064626183 0.0091586324 0.9984661663 0.0148310368 + 1954 0.9953982519 -0.0331824499 1.0208096957 -0.0216779286 + 1955 1.0259894711 0.0154500614 1.0164308582 0.0330662926 + 1956 1.0029813466 -0.0063964940 1.0047920739 0.0120783627 + 1957 1.0123260583 0.0239305968 0.9835470820 -0.0130686349 + 1958 1.0001889038 0.0102298032 1.0072568327 -0.0295914702 + 1959 1.0217661551 -0.0067211135 1.0012685049 0.0159544649 + 1960 1.0065628329 -0.0160012100 1.0006326917 0.0068153415 + 1961 0.9946509073 -0.0083898037 1.0094040047 0.0005280799 + 1962 1.0036535369 0.0001015808 0.9854938971 0.0055067330 + 1963 0.9635960816 -0.0250440246 1.0070599785 0.0126214849 + 1964 0.9721112819 0.0236924865 1.0030699630 -0.0448778358 + 1965 1.0162451286 -0.0070952125 1.0088868541 0.0259769745 + 1966 1.0236057302 -0.0050367935 1.0322518123 0.0205004944 + 1967 0.9713840059 0.0045032236 1.0363442178 0.0468406796 + 1968 1.0073021676 -0.0194936819 1.0009087196 -0.0036578346 + 1969 1.0006248186 0.0070692659 0.9806304469 0.0133061590 + 1970 1.0015318199 -0.0087557181 0.9928472741 0.0415979097 + 1971 1.0156256766 -0.0356949471 0.9996938357 -0.0128136760 + 1972 1.0087426252 0.0037556875 0.9865801836 -0.0093578365 + 1973 1.0323258280 0.0099423370 1.0080645996 0.0093161910 + 1974 0.9892106411 0.0089129029 1.0210934059 -0.0484575858 + 1975 0.9993139157 -0.0106150394 1.0078939356 -0.0376634361 + 1976 1.0170586329 0.0182408444 1.0123239443 0.0201856170 + 1977 1.0047778934 -0.0102996773 1.0077910953 -0.0207482315 + 1978 1.0020739235 -0.0359578104 0.9976833296 -0.0304659937 + 1979 0.9839477079 0.0046090460 1.0161559625 0.0249182622 + 1980 0.9869269226 -0.0294778644 0.9993577874 0.0183269519 + 1981 0.9884008617 -0.0094662948 0.9809684930 -0.0422382999 + 1982 1.0138097064 0.0169505096 0.9890557697 0.0058096237 + 1983 0.9865289248 -0.0182130118 1.0125621247 -0.0121396182 + 1984 1.0265175284 0.0082243441 0.9769232378 -0.0005255607 + 1985 1.0202808089 0.0000474010 0.9894026591 0.0073351898 + 1986 1.0179874418 -0.0294150723 0.9853697840 -0.0147034634 + 1987 0.9841045663 -0.0155884338 0.9836149890 -0.0234388968 + 1988 1.0043533271 -0.0053602043 0.9989008671 0.0089110778 + 1989 1.0117369054 -0.0059009710 1.0008630511 -0.0041536351 + 1990 1.0141782239 0.0246880863 0.9768221497 0.0395292963 + 1991 1.0079608834 -0.0492755254 0.9983025867 -0.0194775134 + 1992 0.9908400620 -0.0098324399 1.0010645015 0.0043656346 + 1993 0.9840242697 0.0296611691 1.0169741368 -0.0055762316 + 1994 1.0267132591 0.0198829647 0.9772320867 -0.0152374215 + 1995 0.9892956856 -0.0321338659 0.9887898800 -0.0049084362 + 1996 1.0368056516 -0.0232024821 0.9789517839 0.0099416661 + 1997 1.0023362880 0.0084215681 0.9927891316 -0.0032909617 + 1998 0.9741618047 -0.0012869341 1.0027559185 -0.0165650101 + 1999 0.9955515360 0.0092065121 0.9959389384 -0.0291439139 + 2000 1.0082303148 0.0017458978 1.0140729809 0.0260650696 diff --git a/dataassim/math/othersupmath/gasdev.f b/dataassim/math/othersupmath/gasdev.f index bb24f3c..c1b763a 100644 --- a/dataassim/math/othersupmath/gasdev.f +++ b/dataassim/math/othersupmath/gasdev.f @@ -71,13 +71,13 @@ return end - double precision function ran1(idum) - implicit none - integer idum,IA,IM,IQ,IR,NTAB,NDIV - double precision AM,EPS,RNMX - PARAMETER(IA=16807,IM=2147483647,AM=1.0d0/IM,IQ=127773, - & IR=2836,NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2d-15, - & RNMX=1.0d0-EPS) +! double precision function ran1(idum) +! implicit none +! integer idum,IA,IM,IQ,IR,NTAB,NDIV +! double precision AM,EPS,RNMX +! PARAMETER(IA=16807,IM=2147483647,AM=1.0d0/IM,IQ=127773, +! & IR=2836,NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2d-15, +! & RNMX=1.0d0-EPS) ! ! Minimal random number generator of Park and Miller with Bays-Durham shuffle and ! added safegaurds. Return a uniform random deviate between 0.0 and 1.0, exclusive @@ -85,25 +85,25 @@ ! thereafter, do not alter idum between successive deviates in a sequence. RNMX ! should approximate the largest floating value that is less than 1. ! - integer j,k,iv(NTAB),iy - save iv,iy - data iv /NTAB*0/,iy /0/ - if(idum.le.0.or.iy.eq.0)then - idum=max(-idum,1) - do j=NTAB+8,1,-1 - k=idum/IQ - idum=IA*(idum-k*IQ)-IR*k - if(idum.lt.0)idum=idum+IM - if(j.le.NTAB)iv(j)=idum - enddo - iy=iv(1) - endif - k=idum/IQ - idum=IA*(idum-k*IQ)-IR*k - if(idum.lt.0)idum=idum+IM - j=1+iy/NDIV - iy=iv(j) - iv(j)=idum - ran1=dmin1(AM*iy,RNMX) - return - end \ No newline at end of file +! integer j,k,iv(NTAB),iy +! save iv,iy +! data iv /NTAB*0/,iy /0/ +! if(idum.le.0.or.iy.eq.0)then +! idum=max(-idum,1) +! do j=NTAB+8,1,-1 +! k=idum/IQ +! idum=IA*(idum-k*IQ)-IR*k +! if(idum.lt.0)idum=idum+IM +! if(j.le.NTAB)iv(j)=idum +! enddo +! iy=iv(1) +! endif +! k=idum/IQ +! idum=IA*(idum-k*IQ)-IR*k +! if(idum.lt.0)idum=idum+IM +! j=1+iy/NDIV +! iy=iv(j) +! iv(j)=idum +! ran1=dmin1(AM*iy,RNMX) +! return +! end diff --git a/dataassim/math/othersupmath/sigmoid.f b/dataassim/math/othersupmath/sigmoid.f index 673abe0..09359ec 100644 --- a/dataassim/math/othersupmath/sigmoid.f +++ b/dataassim/math/othersupmath/sigmoid.f @@ -73,7 +73,7 @@ do i=1,6 grad(i)=grad6(i) enddo - call gradsigmoidfunc(0.0,a2,b2,c2,x02,x,grad6) + call gradsigmoidfunc(0.0d0,a2,b2,c2,x02,x,grad6) grad(6)=grad(6)-grad6(6) do i=1,4 grad(6+i)=-grad6(i) diff --git a/dataassim/math/othersupmath/supmath.f b/dataassim/math/othersupmath/supmath.f index b8efa12..9388e2c 100644 --- a/dataassim/math/othersupmath/supmath.f +++ b/dataassim/math/othersupmath/supmath.f @@ -1,3 +1,54 @@ + subroutine fgetmaxmin(n,x,xmin,imin,xmax,imax) + implicit none + integer n,imin,imax,i + double precision x(n),xmin,xmax + imin=1 + xmin=x(1) + imax=1 + xmax=x(1) + do i=2,n + if(x(i).lt.xmin)then + imin=i + xmin=x(i) + endif + if(x(i).gt.xmax)then + imax=i + xmax=x(i) + endif + enddo + return + end + + double precision function fdotsec(idotsec) + implicit none + integer idotsec,i,k,j(100),n + k=idotsec + i=1 +10 j(i)=mod(k,10) + k=k/10 + if(k.gt.0)then + i=i+1 + goto 10 + endif + fdotsec=0.0d0 + do k=1,i + n=10**(i-k+1) + fdotsec=fdotsec+dble(j(k))/dble(n) + enddo + return + end + + integer function isitnaninf(x) +!If x is NaN or INF, isitnaninf=1. Otherwise, isitnaninf=0 + implicit none + double precision x + isitnaninf=1 + if((x+1.0d0).gt.x)isitnaninf=0 + if((x+1.0d0).lt.x)isitnaninf=1 + if((x+1.0d0).eq.x)isitnaninf=1 + return + end + subroutine sort_shell(n,a,iorder) !sort array a with the Shell method (from smallest to largest). !iorder records the original position of each member. @@ -66,6 +117,41 @@ c: x^3+p*x^2+q*x+r=0 cubicroot=root2 return end + + subroutine getcubicroot(p,q,r,root1,root2,root3) +c + implicit double precision(a-h,l,o-z) + +c: x^3+p*x^2+q*x+r=0 + root1=-9999.0d0 + root2=-9999.0d0 + root3=-9999.0d0 + + capq=(p*p-3.0d0*q)/9.0d0 + capr=(2.0d0*p*p*p-9.0d0*p*q+27.0d0*r)/54.0d0 + if (capr*capr .lt. capq*capq*capq) then + rtta=dacos(capr/(dsqrt(capq*capq*capq))) + root1=-2.0d0*dsqrt(capq)*dcos(rtta/3.0d0)-p/3.0d0 + + root2=dsqrt(capq)*(dcos(rtta/3.0d0)+dsin(rtta/3.0d0)* + & dsqrt(3.0d0))-p/3.0d0 + root3=-dsqrt(capq)*(-dcos(rtta/3.0d0)+dsin(rtta/3.0d0)* + & dsqrt(3.0d0))-p/3.0d0 + else + capa=-dsign(1.0d0, capr)*(dabs(capr)+dsqrt(capr*capr- + & capq*capq*capq))**(1.0d0/3.0d0) + if (dabs(capa) .lt. 1.0d-6) then + capb=0.0 + else + capb=capq/capa + end if + root2 =(capa+capb)-p/3.0d0 + end if + cubicroot=root2 + return + end + + c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& subroutine quadraticroots(a,b,c,root1,root2) implicit none @@ -531,7 +617,31 @@ c#################################################################### std=std+(xvar(j)-fmean)*(xvar(j)-fmean) enddo std=dsqrt(std/dble(nsamp-1)) - end + end + + subroutine stdmeancv(nsamp0,xvar0,std,fmean,cv) + implicit none + integer nsamp0,nsamp,j + double precision xvar0(nsamp0),xvar(nsamp0),std,fmean,cv + nsamp=0 + do j=1,nsamp0 + if(dabs(xvar0(j)+9999.0d0).gt.1.0d-7)then + nsamp=nsamp+1 + xvar(nsamp)=xvar0(j) + endif + enddo + fmean=0.0d0 + do j=1,nsamp + fmean=fmean+xvar(j) + enddo + fmean=fmean/dble(nsamp) + std=0.0d0 + do j=1,nsamp + std=std+(xvar(j)-fmean)*(xvar(j)-fmean) + enddo + std=dsqrt(std/dble(nsamp-1)) + cv=std/fmean + end c####################################################################### subroutine reinitialization(x0min,x0likely, & x0max,x0new,minterval) diff --git a/dataassim/math/othersupmath/univparser.f b/dataassim/math/othersupmath/univparser.f index d1ba308..77ea273 100644 --- a/dataassim/math/othersupmath/univparser.f +++ b/dataassim/math/othersupmath/univparser.f @@ -4,7 +4,8 @@ implicit none integer nmax,n double precision vars(nmax+100) - character longchar*(*),astring*50,c*1 + character(*)::longchar + character astring*50,c*1 integer i,pos1,pos2,ispartnum,leng,numchar,ierr ! n=0 diff --git a/dataassim/math/othersupmath/y_aPLUSbx.f b/dataassim/math/othersupmath/y_aPLUSbx.f new file mode 100644 index 0000000..659bb85 --- /dev/null +++ b/dataassim/math/othersupmath/y_aPLUSbx.f @@ -0,0 +1,44 @@ + subroutine y_aPLUSbx(npoints0,x0,y0,a,b) + implicit none +!fit for y=a+bx + integer npoints0 + double precision x0(npoints0),y0(npoints0),a,b + integer i,npoints + double precision xmean,ymean,lxx,lyy,lxy,fn9999,tiny, + &x(npoints0),y(npoints0) + parameter(fn9999=-9999.0d0,tiny=1.0d-7) + + npoints=0 + do i=1,npoints0 + if(dabs(x0(i)-fn9999).gt.tiny.and. + &dabs(y0(i)-fn9999).gt.tiny)then + npoints=npoints+1 + x(npoints)=x0(i) + y(npoints)=y0(i) + endif + enddo + xmean=0.0d0 + ymean=0.0d0 + do i=1,npoints + xmean=xmean+x(i) + ymean=ymean+y(i) + enddo + xmean=xmean/dble(npoints) + ymean=ymean/dble(npoints) + lxx=0.0d0 + lyy=0.0d0 + lxy=0.0d0 + do i=1,npoints + lxx=lxx+(x(i)-xmean)**2 + lyy=lyy+(y(i)-ymean)**2 + lxy=lxy+(x(i)-xmean)*(y(i)-ymean) + enddo + if(lxx.ne.0.0d0)then + b=lxy/lxx + a=ymean-b*xmean + else + b=-9999.0d0 + a=-9999.0d0 + endif + return + end diff --git a/dataassim/mathrun/Makefile b/dataassim/mathrun/Makefile new file mode 100644 index 0000000..f694802 --- /dev/null +++ b/dataassim/mathrun/Makefile @@ -0,0 +1,33 @@ +# This is the makefile for the optimization of leaf A curves +# name of executable +ALL = mathtest + +# compiler options +ifeq ($(COMPILER),INTEL) # if compiler is Intel + FF = ifort + FOPTS = -g +else + # Default to PGI Compilers + FF = pgf90 + FOPTS = -g -Mbounds +endif + + +VPATH = ../math/othersupmath:../math/algebra:../math/optimization:../math/nonlinsystems + + +# Define objects + +OBJS = testexample.o fixedpoint.o nonsyssolver.o supmath.o adsor.o\ + bookkeeping.o broydn.o nongradopt.o CompassSearch.o powell.o\ + + + +$(ALL): $(OBJS) + $(FF) $(FOPTS) $(OBJS) -o $@ + +.f.o: + $(FF) -c $(FOPTS) $< + +depend: + /usr/bin/X11/makedepend -- $(CFLAGS) -- $(SRCS) diff --git a/dataassim/mathrun/fort.112 b/dataassim/mathrun/fort.112 new file mode 100644 index 0000000..69ffe3d --- /dev/null +++ b/dataassim/mathrun/fort.112 @@ -0,0 +1,14 @@ + -0.218750000000000 0.200000000000000 + -0.195555560000000 0.105905580000000 + -0.205000000000000 0.442637760000000 + -0.176500000000000 6.329114000000000E-002 + -0.176000000000000 0.122913510000000 + -0.186666670000000 0.366581420000000 + -0.173684210000000 0.223684210000000 + -0.171428570000000 0.366692130000000 + -0.167894740000000 9.287926000000001E-002 + -0.167500000000000 0.127427180000000 + -0.157391300000000 8.733624000000000E-002 + -0.156923080000000 0.116176730000000 + -0.149000000000000 -9.330629000000000E-002 + -0.146250000000000 -3.086420000000000E-002 diff --git a/dataassim/mathrun/fort.9 b/dataassim/mathrun/fort.9 new file mode 100644 index 0000000..3086497 --- /dev/null +++ b/dataassim/mathrun/fort.9 @@ -0,0 +1,117 @@ + ******************************************************* + * ODRPACK VERSION 2.01 OF 06-19-92 (DOUBLE PRECISION) * + ******************************************************* + + + + *** DERIVATIVE CHECKING REPORT FOR FIT BY METHOD OF ODR *** + + + FOR RESPONSE 1 OF OBSERVATION 1 + + USER + SUPPLIED RELATIVE DERIVATIVE + DERIVATIVE WRT VALUE DIFFERENCE ASSESSMENT + + BETA( 1) -2.19D-01 4.26D-08 VERIFIED + BETA( 2) 1.00D+00 2.24D-08 VERIFIED + DELTA( 1, 1) -2.00D+00 0.00D+00 VERIFIED + + NUMBER OF RELIABLE DIGITS IN FUNCTION RESULTS 16 + (ESTIMATED BY ODRPACK) + + NUMBER OF DIGITS OF AGREEMENT REQUIRED BETWEEN + USER SUPPLIED AND FINITE DIFFERENCE DERIVATIVE FOR + USER SUPPLIED DERIVATIVE TO BE CONSIDERED VERIFIED 4 + + ROW NUMBER AT WHICH DERIVATIVES WERE CHECKED 1 + + -VALUES OF THE EXPLANATORY VARIABLES AT THIS ROW + + X( 1, 1) -2.18750000D-01 + ******************************************************* + * ODRPACK VERSION 2.01 OF 06-19-92 (DOUBLE PRECISION) * + ******************************************************* + + + *** INITIAL SUMMARY FOR FIT BY METHOD OF ODR *** + + --- PROBLEM SIZE: + N = 111 (NUMBER WITH NONZERO WEIGHT = 111) + NQ = 1 + M = 1 + NP = 2 (NUMBER UNFIXED = 2) + + --- CONTROL VALUES: + JOB = 00020 + = ABCDE, WHERE + A=0 ==> FIT IS NOT A RESTART. + B=0 ==> DELTAS ARE INITIALIZED TO ZERO. + C=0 ==> COVARIANCE MATRIX WILL BE COMPUTED USING + DERIVATIVES RE-EVALUATED AT THE SOLUTION. + D=2 ==> DERIVATIVES ARE SUPPLIED BY USER. + DERIVATIVES WERE CHECKED. + RESULTS APPEAR CORRECT. + E=0 ==> METHOD IS EXPLICIT ODR. + NDIGIT = 16 (ESTIMATED BY ODRPACK) + TAUFAC = 1.00D+00 + + --- STOPPING CRITERIA: + SSTOL = 1.49D-08 (SUM OF SQUARES STOPPING TOLERANCE) + PARTOL = 3.67D-11 (PARAMETER STOPPING TOLERANCE) + MAXIT = ***** (MAXIMUM NUMBER OF ITERATIONS) + + --- INITIAL WEIGHTED SUM OF SQUARES = 2.13555053D+00 + SUM OF SQUARED WEIGHTED DELTAS = 0.00000000D+00 + SUM OF SQUARED WEIGHTED EPSILONS = 2.13555053D+00 + + --- FUNCTION PARAMETER SUMMARY: + + INDEX BETA(K) FIXED SCALE + + (K) (IFIXB) (SCLB) + + 1 -2.00000000D+00 NO 5.00000000D-01 + 2 0.00000000D+00 NO 5.00000000D+00 + + --- EXPLANATORY VARIABLE AND DELTA WEIGHT SUMMARY: + + INDEX X(I,J) DELTA(I,J) FIXED SCALE WEIGHT + + (I,J) (IFIXX) (SCLD) (WD) + + 1,1 -2.188D-01 0.000D+00 NO 4.57D+00 1.00D+00 + N,1 -2.077D-02 0.000D+00 NO 4.81D+01 1.00D+00 + + --- RESPONSE VARIABLE AND EPSILON ERROR WEIGHT SUMMARY: + + INDEX Y(I,L) WEIGHT + (I,L) (WE) + + 1,1 2.000D-01 1.000D+00 + N,1 1.912D-01 1.000D+00 + + *** FINAL SUMMARY FOR FIT BY METHOD OF ODR *** + + --- STOPPING CONDITIONS: + INFO = 1 ==> SUM OF SQUARES CONVERGENCE. + NITER = 21 (NUMBER OF ITERATIONS) + NFEV = 45 (NUMBER OF FUNCTION EVALUATIONS) + NJEV = 22 (NUMBER OF JACOBIAN EVALUATIONS) + IRANK = 0 (RANK DEFICIENCY) + RCOND = 5.25D-02 (INVERSE CONDITION NUMBER) + ISTOP = 0 (RETURNED BY USER FROM SUBROUTINE FCN) + + --- FINAL WEIGHTED SUMS OF SQUARES = 2.68079707D-01 + SUM OF SQUARED WEIGHTED DELTAS = 2.65699278D-01 + SUM OF SQUARED WEIGHTED EPSILONS = 2.38042850D-03 + + --- RESIDUAL STANDARD DEVIATION = 4.95928105D-02 + DEGREES OF FREEDOM = 109 + + --- ESTIMATED BETA(J), J = 1, ..., NP: + + BETA S.D. BETA ---- 95% CONFIDENCE INTERVAL ---- + + 1 -1.05684671D+01 5.2232D+00 -2.09206418D+01 TO -2.16292352D-01 + 2 -8.21207083D-01 4.7585D-01 -1.76432329D+00 TO 1.21909125D-01 diff --git a/dataassim/mathrun/mathtest b/dataassim/mathrun/mathtest new file mode 100644 index 0000000000000000000000000000000000000000..5f869609ae305d9d274339380c1eb4bef4bc13c4 GIT binary patch literal 982162 zcmcG%3t$z+**?C397F|k@Pf3pH7Y6=FQ8WOf+ot*qY_0+G*KjANCf3p2zaRx>>-wT z2uACL{ysk&t+urFlD4!>@D>D3uxO*7)@Z$?)wbspT2rMOTPy$Pd1q#K&YnHVCip)Z zc4v0>nfEsDyfZsHyCOFAoFRF6j`V;4bGe!D58aj`gKkurOPCRb@ zoMYzCTe$4{W3Hcc(lIBUcBzg>E*Nk=Bp|P^tbK8DKdZnf>zt={8{8Xd+63FlX#Cl~J$1s^ zn|*Br5{KIveVm`9uhDND(MLI6Iz?YU1IO|Dd=id(;V-7sr|ILd`gk0U=i={Zo#x>f zeZG&CXHMfd8HYdP70<-^O#Ds6AAjZeI|P4|nb5x@aXiW-avbjmgOt7bsaB`#&(0?= z{GAKM+WBv*Z092!?fg3_IQ-7{;lHV}ofSSD(#qcxzWk3>w)287|3^B13>uqV?<$>N z>8qD*jK77x@-?JzE|QY_f=~XE zz&XSj<8+_SR_LJrQ@?NepPGvj)&zEobO8DrX zp>g)}@q3ES-^+*du+IM+`J=#B%E#CBJ{)5Y^t(3wv@`ye8ceDdY5m+^*8r{U{lAN~Uxr^i?Rd7Xcuul!p& zztop+@W=abO#Yd^{IweAWgpH~r1^WnmtU>2on1KEe9<5Ccc2fSK8nAzFaJ=L?Y!d4 zH<++*~;A z_k7KVZ|vs~AC8GnX8X!-)%5(phkvckzt)HIpyq3X59dQ&{&nOZit{yx7D*2MIDa?# z@PDDQo$Gx#hW>y0${RUs@|8bI&5iZn|(N@e~kF}GXDR4UwLCcOMK%pYAN>#Ge*V7f!!dIB*jL{8fuH%xpRZt?y?x~u>-=UMZTY;5a{N7o zKRe&Z=Nmqp{WQOfDedw{q*Sat91U3!-}LF<-*^OefY+&tL0`VHtE+*-e!-cX*^l3c`wI2F_Te7T$$sD8kGzCJHl0TA zUju#+j)QU5;+nZjs%FpO;A(<1f6>CLuUW9z(U}#MxKvZ+CTG{wEU8#pRkO5acICB8 z=iTVLGH>C$8n^6%Wi?gTS1emNe^KSNZsyXe`PFVhmB_fRvIM8%{N)vwR9!u9X-(CV zv**uVy0mJkd*?Na<}Gw8Dyo(&S-7YI0JCf6En4U-y#ZwxI7{bUJ-bpez}=D>GB(kf zJ#SG3*_4x|%a$&#TBy!}v1p0DT(fM+LOH!|$vkjfQE~NxMGGsy?2?*_3d(8$!A^2! zS1wx0WTi?jURF~%clHuzY0Z+##Wy%tSJf<;KW_m<0fH(QEv&|cIg6GdIq&MK1&eEL zfB;!m)x4l;!GcB0tEBAg`SYFGHH+pGqH5uC5P)JxSIk=oAuOCd-?<8MuURs?vZ`X~ z4GXSXG=C|JE}l2X0SxP2tU#-)7F9b70Jo^pnYR>LyTMsHzp8365=$53Zl}6>{<5WW zo$8t;%N9a<$f%sZXla!*`>I7tgg8>MY~kz$RZgXX0nwT(mj$uh~t>B35wl^j7PtYY56YeiDamd?Jq%7JQx*oyNmssKkq_58(iXFE%; zS|a6Y<}CnEb7tQ_PAS0Znkq=Ea(>lp3X)Kw1D11^R?e-OLpz;aT}@j8_fQS$uNLg3 znrslvTdS!*NM_EwtD&=MrTf{Hl~qfZQXBIe5+!A-=gqHLxX2+g8%gydSdmjvbv<* z_+!7}o}X|m=Lv>jhHD5$#Y6OeOa=Yt&mSuH*(D>s`wXUc=TKdbIjXvCjA1T@cULBL zs$To5xnJ>Od}1DEQ;va;qx+?wTlVF72+1PO@8Ku;Su^3gT9zX?{p7NK05Waa0(r5&fp%4gl?7q{{$ z3-g<1<&!4!E3@*=SeDmjS@{sW`t$rQ$My_J8mmEUaTbB@&fTC99CU(IW6R=$}-Wqya1 ze>yYtuhYt(Y%+1|vhq1kYku8UKIc@;FJ>_Yt^7-@{FPSzH?92DRzAm`=GSQDo4Iga zTW958Y6|1nWaTSOtBdQc{4%S2vz1?N<+oV*_Oq2XEB^|se20~DoSmjez{wyoM$I72=<@Z|oS6TVauRQy&wDN~r`E#uNsFgq0%8w^@3{PE) zNF$Zk9C1=t{2c$ZG5HK;&>K^SHw|%8S3ZEu|9p3t6HjazzS(hhedGS`9q8;jyb1p{ z;?dUGtKZQ-6ZMdOfxJ>H%fXT z)1b;puatB()9m`vizPji>ETSzlJuoaGwexElk|m5Gu%lRN%|b78Rn!XNcs$>8Q!D| zC4Cap3~SO+NgvBJ!267nW}0D3x>M5oFwJR(bep7y zG0pHL-7M+P??jqmOS(zYA2ZExCEY0Le=yB3CB0J8e_{GSrWZ^49i|zUq-RO`_e?V! zNl%mXOH4BiNf$}_d8QdQrzc4IX{H&DqzfheYo-~7q@$94jA@1+X-CpOV)|gFd;UxQ z?`OJ@>268i!!*N^bf=`(GR<%#-6rWG{b~+o1}*^&F~=IEa}hh zK$>Aex=GR>GtF=y-6-jQFwHO^y;9PDVftjI7fbpbrrGVMXG!|^Omn!Do+jy+m}d8% zE|T=~OtafhPmuJ}OtZUB7fSlqOtYI$MXEWU_>6@8mcb#sM^m3-zO{W_ry^!g1m|iLAYNpvOrx#0l zCev}IXG!`}rq5$~nxrpen%!@@NYdvp&2Be6LDFY1&F(f`DCv`!W;dITO8Qu)*}bM6 zNgu&9yVZ2hzeWE{vpY?9OL{cZ>_*d_lHP}DcAx1sNe^S1-DbL3(w{dX&F(VYBFSkmt>&F(NgOVYn*n%!V}nxtQ1n%!TzNYc+U&2BF} zLDEk%&F(H;DCu7_&2BComGomwvwKTBNaL9Gi%uIH|9m8ZvUyuKS65dzs=vn4cw+J%Nw`P?jBX(^ z>l*P)Ve@6qdG(vO7Vmm*EBZ3?15IP%^)tqzl8>g=&lwwSpE8yml2cs&S?a|fMS$~e z>LDB_wxw47fXR2J)c-YJ|18pM`0<9D#^&REXVDPQ1)Ql#fPk+tsuDP_4v)NQ&{zLw z)LA%fTESxnjV+5OI*M?%|Jbs!iEYn(hR!;5+r2}a_Sg>gQpwnk`dF$x*2^xnuB~A0 zVL0L4@%H?&Z72+4hqHUcF-kW&u`OBK`!q{$>V5y|cx6d%ygvWMNoUL$1TP3XUN z7^(%?DK9e6>p*n^@<}X6uFM??w3T#7Z6O}-vuB6BsVmspX&@4`RcrxahSw|H)PdAS* zayAwoUF5VDp?GmiH_8^b7UJL3W7m?#Ernt@pIL@;B$$PP?SwR+UWtD;vJ*~yaLN$o z_9A2A#~W#Vtzv@ro;Ad&kL@&68B1ee*0-fGbSZ9a22kpRcC9nmR|`e`VL>$i#p^-k zGn8d&Ggc4;)G;(<9X+h$ch3jaF~+TiPS>0ZtsM=J#epy$%z7)DZlS#%>NieX*2r2q&)f{O9o{&5vOO|fY&5;eY zxU~r7Q~MYObekS1h(nOA&uJ+nV_gt31U)L&nfl)UMQ~OgIc?2>IF?1eBFAV+=Z6I| zIzW97iVg3Fc-Nji;u)N2;x9J!_Dy_F5Fvhq0a3&k4JY;8sn=d1^<{0Od>-66_$ukP zD37CDG;$fPfR$d{!=orMxg}_WBqM4F!`Zm@LJ4Nl)q;M55c#Y;mDC_2P1r zLOTc5s094NYXkI<-qS_6zR@`o9`!TCecPeMXslPl zhJOUf_m&-tDaQKR^-$?*sI(C-qGf7*Y~9rQ5?V_X>aClKh%w&q6c14HeZK+8FD=zd z&dmOe%I@)%Zc^DPUv|C9?)GIbQQ2Kdskq?rw)(pJz@$nh+Vbk_hAV=YYY3XGZt4V< zoqdGL?r4w1d#Vd?+b+XY6K-y=<7nGh)bp?nV^OofB)c@rH)QQoJ^bmf8a7wq2#`r#94a(jlJo za$8>|Nv-YK0y3?|@Wnf`1;mkKace0-UVTOjs8ZKb(x&`Vb;0z=9^VzeI0iYxs|$|p zSY7~iffaI)-ffm;D0$ zKyd$vRa_!L66WItEu0=N^h%g`Y!B zO@k7Q0+J^E#*@KD5sr5SB)m7~019WO3P|kzTm$4<*J_Ll>15z-8fxTZUA$qsoV3In z;D3r+nkfE~I~*q=CYhIbl&ujShzEF}<(P4)Zgkxf-3~7DfQ$9$mP{jl1X-Cb7!D>& zUw)>h1vcWdJwslCrQ_=aH0g1kjGC=*hU~&Q;dC)GnvAu2!QepgUd)DB0diG^m`BA_m`XxS(Xh;sA za6BuDgy+^@xkgC&pcB&mNku(nGKgiY<90kWI5Zj_&}hDg0cJcfq%{WGl4YQScdVRk z)~(0MML1*H6K+zDb?@3Q%(2drswFt7!#epeon5fODIjsIr+)!J;#fcWWiUnI>`GB2 zt@Wn{$ZY~)gOldfmSd&PVIw?bIo2}}dgXMiFKqNYTU(al48^T}cM;CwuNLiz#kc<= zSXSZujsg{k@t^TUFfoDu87kO`^nSNatgP8QdAvKW?Ca~Gz;H_5b? zA3R(Gm@nYc0DjUOET3>xDj?}VXXOA2r!fU28aprt&_E~>8+z$+&6=w*Jxi&yQw|a0 z%+(qvemU@^)&?im1)f+hF?IXwHyjfRNPO>}2FPXN3mfRFTEw6J@G-xrAP7$ALL^_n zKzE@CM)*0!)HEo;C?M%edLG>!!&N}S`;T(~g=j1F@~03E;ZB7kk8#c7C3IUwek z{5J5_pEF|l>>0;e(W0>W+)u;FtY4s;asc@|)4qVDGd;loxw9UwzZuw!V{lD3d%SP` zNigqzN8A^XIIfij$R&9Yj<~N{#Js^C@Lr~jS3Fhq?}*p4Y5(CSHf>gb8ArB8G;JQxv^nG0Ubh2@4hYek zQXF7&f8(+22JLS?!80khiteQO?EI0-VD?PPkqd)oQuwGjJp${!%s{nUyiL^dHizv? z&c+}IWwZPam$R6Oisa;#?~l$)e2|A{WAs%U*I~w2KdD-SbaCtXl;;J8P+xCvLuJf) zY?SAyB(=E3!Wn9Cw6mVq#`@xwBme#0=)8E|rg$>{#R=u5dGY$X>p{KWW7^dvCqIvS zf+=qh${R`f9S;XL4;v~c=}fQ7T#;P?q&@h1^I7{mG~$ex7H3PJd}xG#(F+dau2Xeu0x%~&|U`=Js5 zB`1SngK|Dl9qfK7~l=+I72i6)d&Edl8XvC;qvS?YQkm7wFf!{x4wiXpxO=F zg5Uc5{);UxyT86uBq09l0E_ZWLZS^c@9KhaFXP!g7OO=6mz*K}9*F!S@*bw?;QUqm zZ3e*|7>&Lh*PN^24Ii}lL>rF6yF3b);tlk{&j=|X>4m;-fLs!@dex=#{N(!k?qGqc zTBK*$@_;7SttG2hT{05uLp_pCh-b>$;eH} zPNas^*L8|3r7t#t+aGb_uCJK|kHRPYKIbv{bljiS6#iGlEKX>Iq1&e~AC5O=Y`aej zXG>GCy8Jj~pf7rE3W?(?BnLew8XSL<9RH5xQ_v*il?|i`9-eDebSsUH9E)ZCm~iS? zUYQVWZ02xTzLPVI&Xn0F{h* zfCm^xAr6VB#1;zHUWP8by{?M|Xc$6NB862XuOh2m0NAH7qW>mN`XkrVgGKI-J#u&6 z-@iV!=+IT1E^K7!RpCiD{ZI(JoSmJ8Gb0C%UmX-wmO3o{_RoQ1+bj4ZOep@g{BQsA z3d7$`2B%VV9k0xN?nE+&%|!nO=}$Zj_=UOwoo} zKta)wb5Ioay=nPA${_2dIzI2FWxy0^Rxm{#V2Y38nMCgHCzS9X^^EJ@`}!AFzrt5| zVqE8jz{@Fo3uo8=XuA3lK4L);XpUGglsFKiBZL*#u-a7HhY#*o912f-`lJweImKb& z^kDNecEOBRuBY|&BNhY%kV_u{X1E~WagmIKDGMzM%0K~X(DBk26sDxPuU0ZLx=Z)6 zZ^7J^Gc~;|H?Z+LQ`<>Uke)NO#wZ(v4YAK3f4_fwd#r^4X)IyKXSag0Krki#xR zk^L(nTkNQ3-ENR=;jGsL2p_h>_M zYgq?dP;>u!Dc$nDyzWIs#(B$zZa>KDkJvKNAMt?x=o(Cwm;kzNLx9r5Nn*2zR3tIf z(Ab9)MjM^H{r>_2YK0?h{fWDGqtRG6OLO21gfS8R*K+`cYZi(kamIhV%dbWKAiI8( ziAyRE*!Bv;>lfk;C%z`02oHDs3-2D`(YFx_x(uRzT9R{L}!sL}$%E^}mihSTw2@G07=ewHUWCz{l&sHNEb& z>NnT!j$jm!X!DLQ07!U`=Ku<)b48If$6XDYHBVLjKh@d5wil_ip6aj}p@H#$2KJOZ z)%gsG4hYeEfbxVmlczdg^BAO`Ky$H{PG3Ad_^A%Xm_7+FTN^jA zGs{hIckjWqxc7uOk^U`ff(?uHn}xGvxO@ z-s?dzt>Vdz>@ z)u1G!fW+M#`UL<9^KaDej-4us#NZnZkf*Eu-AxPK%{|x?B4HjPvpK@u@BnwS4DM!t zu4R2=cI)-GmEf3YyXZ;U%I4LsNo2d0k1y)Owftec=URHRT+2CoW)tU|$e4WD^8o>5 zkI*I)8Alr0d^Y66@jQzin_D>Vem7Y2HcoQ#*5`6P{I#I&3IUbj>~fGa)!=9wat8@# zg9>@5!DpwKlatW`pZ*rqaWCM|G|}v!95&g8kcOPq17Nz&D%q)9LcaYbEl^dEgR(aISBs z=lT{K5`1Pm5FqhbN9F(u*Rv{$#ACg)DpM%Q5E2%O~PJKOqJnTY7h5K#T7OmGe`INEL6Q&@X~ z5KLhqY|4L4EtiRokjX4OAm($o{a;hhIHCu=rrLk`o0z%&E&iU>3-b{rhFRhrZ0rB_ zY<$irBJpqEHb9=L`VR`*Wd3J5{AyGdo6wI6mS{4v3gp)SEWTD@H{K3t^Lb81~_CvxA zdK)L}ahigW##E9067-Uy{{e4s%h*d8mlsZc zR6BUa6^uC2icl~)7`Jc^G&n(wb4^T=n=A#qof(ety*!!7B`q)(c)8GH=Ub<12f!6mkMN@c=o= zW+^@{{HkKx&z_~_=W2>u#YTsCm9s47hP0}~z7@Ff*LyHZ1+=Jh(z`L8B>u^@iP{ zTmcE?$s9o8^rwJCe`gsWzX+5j`SzeEgu(GY#^N7?$e>3cewz;#qym!ABx!(Lvc2i? zF7*Vu|LO6*YLV{w@T^*34PV^bXI~b<2tQ9;w>yGSKw=n6z5pQM{irVhNLp+6a?P5j zDifOYW^J?5rMFqxBICac(Bv9QR_e`|y1Xr#rirVOEt(`(ZP7Fuuh;lZ)ITG|JF^|y z!J-M7k(%g{t7@?)yXQ;}o{`FjTT7q!B~-7UiH$%tnV}Frk>@9F58T%O9Q9Zs?maFC zy$b-0 z-{-{|`BC|s{05O3(pn)|#zWF0#2~t85Q(M1Qu6}^8-xXPY7QX3Wd-X|0f~wJ6ElQ^ zH&F{{y#dmGqq0G^;wyL@Vr?K9e7&YpZHIRhUbKmIVj&wuTiSt*abIv_L$*Z3JUk%g zxe@c+*8Y;S;AXh~9kaz54bd+y2psKaoXGuel>6R>IA8n}&RP|aSnIRj3KrKufW%sF z&_IlQSHc8iP2SrTVw}>Ei*d?U0FYQoO2sw_GsI&Y3|a92S$(#1*RH7z4P%hf9vB-oGU!PK6S1b+|^MHZ&)j$w)dN^BgAt8F|fj5m}vX%)c3l%y#B zsaUj-+R#kdY?+XFig)j-8L3YS>i9)dBh#_Clqu6N?_dYFbbcjFZ)>&3qF|Z&O}8%~ zG2N#Z?mm#jEX#5Lg_}-MtjToB(FVxXuAZ^x*eci7a24@V@ohU{!_FxnfOpzS01>LUe64_cn&x zXsfptS++`xgst)bTU~-Vl=MB84>>x^V6W%ZL5VZ&>1FdZ!BPn4Llltc<;E`nNc1u> z2T(Y@D2hZcsd;|m4xyJ$>g6A2SbCx0p%)&s4`KY$P+~fS7Id|G<60VT_Qti&x3cvV zF3jiG*7YV|U&&%d$HJWExp0DSRD`ad8`sLH=!6k`ey82uge)ssiaNagzD+z9PW|5$ z`lJi__S|4Q3a2#%Bw9P(0J*IR0#;kk?ar+3bRks+I-OSslNwGZ3P^@t-!(ukscnW- zH4mFG{Sd_t8{z>rbUSA7-4&mVNN|Y?{n}uup5ambQI*^1iSE{hs4&(%D3M(0f!|}m zeO@<|NGzNS4URD!BN6pV4L&O(0vb#$Gd*fkbCf6`1F&wSk8RuqTswr*Atd$UGH#T) zbq)ryp7;BQvw_AlOX`+qJ@a+leu?{WCb`CAt^Kxe#u}VTd2`lX&f&d#IJmQyD6f0 z-m~#~_3XSq{RMJxl_$|Tre>clhmxp;bCAX{wj9U?XLJ-F{nQp{2bDr~BVFHPvvSH!lZiy>mROduQzi)fP^3NSr|3TR3w=;sjc+g;Qv7{8F^7mybU)t(Q6d z*g+r%Rh~qDRIwWpwQy!?oDkLvs`btViAU+15gPD-&|n@u2IfW$?Duhr2V5G}YrQAJ zumP8Nz@-;IQS)uu-A_kuW=yd!hP~PGU%0SszKBY~wr|f2BdXvv0t!a@jT1w`So5;> z8UYJu$Ca8K-NVX4q0BV`ErE~9!v%p0gmDQ1zhi3Z)7F9+S1{soP74K-gK-PzqZxfL z&L)AuO6D_Zngr~H2iVI;75guvPHAsfj8}HZgTSIad?>{TR%?Irx4|C%zv8u1cHr z_hVM$`!U@Z@)Yv>F*RT;-tZI;*plk57WntIBf%6u5|o*JoyzX`hwa}Hc%lc86hQv{6oVX4MwQ`!DVi@I*oN{ATvG-15`+$KV0tG1uMlQ=4vxm@eQj6RKqbss?=~pb`6k}OvsjFtXdYs zOJAd6USv6-dXANPjvyzaOg)1Vi2^#BKpo|Nk$96|Q8SmUNMA?N*CmvG6OU5aXfiyY z$sCB`+=m4h$55y|a`vIhFp#(y%)&Z8Ecp8H4+|=|1d&B%V#69NonZ?9R7Ae4Z@_c{ zhwSp%oY<;4;I}=tlC~r^1RR;JrV+J(c+6j~GjrAB^jtNXf%=RNr>HSK9gAX$dQ9q$ zd!TN9yAb%dOd>w^^sm9BK;Opcd938!mTjIYikL+CtuE8@OUA~49V{@J9(lh|vEMZ) z@Y4kRc!G~N;65#9wxAqDDx5~*ymy&PBs_w{MX?m3?@oLy4;4@)<1$&ob-Q zXSKN+?qp9m*P41O)uM7}LbV1;>FI-IIZmu=`PF^PDMUp>`l_fD717-KQAe(7FbxJr zB>MQDOSK#aB^U)H3c17pxq^XS)clT_G@*mSlN)Nr>zJ-VE7MH@?jBEWyrxjM7$sF} zP}6dlFJdtt%h1Ct9y+R}`Zmjp{Y(?933Uj-zNSSKh=Hl?vSd0q@~|$fLu~jhSV`Srq-^DVuyx!fQC5VOHH2nWz!m?&<{F$ z8cjNlS^7p3VjI29$Co5qhcLyBPJQ(g9m5D zEi^JI!0sfML5l1w{@Ua^} z)7X!#splF7SR%W{dNA7;a*n8{LKqB7<4UlV)XleHIIG1tq0>*g& z<6PXHzz8O>U=_X#K^q%RW&Rx?a*U#PFNSW zMq6PhjTb1T>vXpgd4p^OGRn5u$WwmQ{$#PgCyP~?sJ+Q4w|rI~+Xm6pV>zI< zJtJeA+GK6#c=>9xh{+Z6Xpi8dG&I%~LK^XP9?^_*QU$m2fm&ZxP>r2FH6G~UZ#^%w zg$#g73nigZKxO@=@g;A?E4RWT7{XvJDu(FR+c>5Izj*yLj`75Mcn%tEh#Zo%P~MFj zgSBbwO-{Y-v-rCDso(hwrg>DX6D*t-duv7h_C2Z_(?w>ugb0mE? z&bJSR|HVhX8)3HYH@@}v#Am@@q%e8d1b?v}El&n;jD>LC1lot=e55mqo#6~_G#vRX zsyas0tqNm@ZG=SJO`9*7%3tJN6jA`?ypjHAJ-~2Y9{H^RlnGe72E&cfSf@e~1YC`l z5N<0>eN(}$pF;%9Vj14aKU}_eD{sWf%uT7i-^)jlQLz?g;h*xz_ko_8QqB*;U(D6c zWhl)%qa&}AdWEhO(n8m@Iu95n%`QeMF;-qdjPgjK6d|h@$ADMPCBM9XIL=3oSN8*d zRE)kw(Qp9oFVgpS7Z^DTJ>(!7*{(Bftasglqhf7oc8HBA>gPUMiZF5<-rX(7AGLFF z8~W!1&XSwUkQW_!56)9B&n5ZMk+&cLaZ;|)17;wx9E3*?xLnE$2Cj@M=|*O(n>~H+ zKBPA~vPj*C&p{&3MzEYm_X~94`qhh_=3C)kA zS2v=ic8ERJ*LJ}cF}qO;o5T#Be8ygINqD3i^ekI`V-3(zD<>L`jcjAykvATWbfg96 zxJF_K9$Bx_y-cU~ptICAs{m%Q(8weTX&dE@6iH-}ed9|Izr-u#4@Ju(adkO`b3&39 z+*S_rnjsRzKhekuCefOg1-Grnzd&t6-J*-dxVCKKjmIG!nSpa$16_*WsVW_18u??| zoe1tu|50g$oNFkhmBUe7YlRS$L}bq_2oC?!_X8qRKV2iFZh(q@NFM+^{Xh)S$YvCx zetMS+y^pASTzcm8C6}6v{Kb_oY|^cC~2iCdQRb&T4BP} zDG8%LQ!y@zWV%s_v*bb)PwAW<$vGW4C~KAZnpGw$Wkw(e0te~N_Px|OPMz&lS@)io zb??c@5gMQcJTLMpL#AlfWE!;!^4^Uoi7MG)Dtj9qWN!$M5|d+)4SKCe>1OHX}DN`APii)b4dl zq!}ka+qG*&qIPHDic8%H3!$$)Q)B|=of2VfECe+=RDJ@d2$eTp=A^2MbmS4K04VzG zo!B~mDy}3J>_oJ@16}qGF#ipV75c8{8EP-9rl-7`{&S|O>05hIR@?C}q?6*oC!JT3 z7bu-4a3Nbd4(zz2Sln%f@*;Bw@-1EkZl<4Lf{_!-lV=V=+B+>cuL?3^oPmBk;(~A3w5w`mj#A zAgKi>3JGM$Sy^PAu;pT3{4I$``0h{H$W?NUVc86EgyL)>%k>@I?Xhh#u^j85{S%Sg zMP};j?qi*9sE>`4PTC$1cBm#p4Ba?6Nrl%(oJ>< zig7S1hkJxe>m-xL@)|)5SqdH=Y~&r9rD3?Oxb=Fn^sm!2OM2vKK-k&Za#2IBY>*WM zX*M9bvteKk9mC_#z#1cl(&ZywY!O*8j#tr0W*3f~kMN zOem0Mf^0w4RW1y4#B;sK#CWM&%~M0vi3OOisC^Y$y^TXXt78S9P-l6hahR~w3%f=y zwskW^?zeyRU*DQnU9hXBATfC^PYUYpgsAbooXBVh)(hC&Tt8 z<3%vDP(F2_$J5UC{JJ&B<1Yc|#DWyKNjWR-Z;u>}n)z#w9Dy^K>@L#t{M_mS<|ZcZ z$LprY-2;it9`|2hI~n-^|JFxJ@o!d-`zqz)>r>j0=X3k2$Ne!bWcMj|AU84jHvB7n z%FQ^*?s3D*=oC*zA5BtvPezUbsP?^-RPG)(xSrr1_cX7jdbg%CBa~Gu{za$wYaV>k zc@TMl(y7OVZ0RgTZesF${43I#g%jQ5K9?`x89naLk>>+fJ?=VO$nJ5!gWSaAZ{uG9 zUxX9(xXH+;I1AU|1`8~x!=2)Z>++M`2FVVWDj6U7*HB7s1#8xgJv?^I!~Xmvqx4C_ zgoIh5^vQ=JLpt2iI58dWJ~(F!pNZ<(;i{wE-Pvv39Un=&dPkLR@2h#@wfAAb%-!A# zp9koGQ0pS&+Jq`eQriD~bjqguB2 z3*~sFKHBXaOAg(>-EHr;>}W)@Lde#PkgWwFTaymi)?r$NgW)EuuZ*oitQXlK$Xwp1 za_jgMs6DnCG|QT*Edy*o=k~Ujf>rF0BqLC**S7Pd7;&GioWF3t> zs1rblM();$6cej;qQ^*cjU~-t*3+@D2KIm_%_ol=oPj9_k=hLgLg@kmQ;T0`K!(cR z@YEEx#_eo4;49-e%UYTjmg)yRs)uD(scjl{(EQYb4#;$r_arWC9Y6Gp;lX1w+KtVY zsROFwXnTNd^C6FqGfW+Wf)MHd=a>vKwJ0EX5NtPZSd#U`Gpsxw_T+J=sc3+-Du_aQ zvx^Lb+iH!aU@mofr13waF;pYrQDZU49(e<@VKuNErP&^G(xckq8nneVXp8^G^Df-R z3D$BxQ93sAP29C?{~PyZ1G-3n)dParwvBhqr3;~8WFFoJ znKDRkLxqs8P4ZhH`7LKfy&?r`l|Z*HX6WXF!%@Te?8!U_vGf65U~R0LpXtRjDC&gr z5fyMked)f0);U~s=qx!awfzHH-i*izpNd7ml%m+XeB8_G<{42KBp%6?L15)03s8oZ zjBB(ECw(M1wlGl}KAkC&=F)jtF(0{P_QA{}ur8Zj<|LF!%@#^VMZTnNNF|-THi`f> zMZ)tpcY-h9FhTRZO@+F8^~D!1mW*+mJ{`-od}HmK4@-oNegUvqPkL zcrx-NN+^+cqP_$E7fD>ero`nV>(#l-_4X6NN@S_zmPfvgV=_{Ue_6qJDy;)|vGqXI zWy5i#tfUoTE)wruWXEf2{R^LG!=}jx+7aeJU&U)L9W?rT-^8k$dU+Hk7uztssM=D& z+Q+PDq)8j9Og&m_Vz&9((+)AzHbUPtF0=nM5dI|t!4T^Raf*ScjBSGqz=B$31Y6`5 znjkf?pbfU&20wR+3dMvAcm$UVI9AAytdEavtB-XgOSZ{e`4%pq`J7g!y|$sx&*Byz zi#;BT-#;>#ML&d}MGN9m1EE-C8)6Jv8QX$ZgtLNMxqU@{H2N#}r$^(zj&R)?WvDBF z-Nd>Fiu$34`U8VHK;c;sGYkZHC1LTTFkZS1D@R{;r%S_X4Wn&z5Hq3Ry=mA>+Gj3$W4>#dpD&H z&TD^p7n&F7agwE`pXv3;n{#;oM&pA^wCDAOxUWG}EnFz?fC$%VedjZ@1ow1zfB8s7 z*}dD{PAEvkiU53~!DT6khJSlptsSemQr;4uvkoLf2AC7u@TjFHb;awl;!l?MQCE04 zaJc2ebpJC;4>sG-|L_^S>3^E(%O0Y?yg;)Ae;bXQp%WYtNRg)Y*m~-M&D|bfb!(62 zcSq~B<{r`!!d@s)+}cHV^wYx>kH)apL%wZBv{rix3%$2MJI?_6A`7|)HcMzYdo#X5 zOt&6}+XTaHvc^}L%MJ7j0eTve8GzeyB9h?lN+qPP8zwmrisVnLT33 zj6-hYD8e$fpC_~Bhibb}JV9J0um#O3Y6U^om?vx<`+LIMH?t1N&C~(LRUP0H3!w(e z#{nK6j~$ZPYQvJLAVkO48i;IBC~ceAo>a5R@);sVYD)KyK=+S8_lwn=1H6XEa%`t4 zL?eh%_egMoS(JX>inGmnHxt{r^EvgkjO{vgY=^Ziu^v5<1NEpEmv(+2;T!5>_%?my z`$(g2!WuMw7!Y;3C0|e_L4zu}(JlEiU&$s_5=5$!jc&7J14B`zU9ygL-D- zSkjAYqre^lNqO>yz(^MO2pZW&nnC6m2quanDJPvs%jy^6AkDE&bWdVxQAJUHczPLh zZf@ex>tFv6_Q|BM|7WB#*cW(~{H-eKvj2ozQnT-td_a}#F_?F_B{loJ;%6UsXR!~e z$_@Kcuf={;vro#&5z=OHRv`Nn*YNamHg~ZjrTvfpp2_}SkXGzt2}4H7ZK@>5RDyca zE%}hI)GXv`&G%}}gEe8D8Z(;5-7f1=r^Py1q2^fwX+&CBCl1nL zL0OvL&f1A&1aE2wN>=Saa%&gUuxgL$+NluMjsm2hih;myt5(U&Q*=G;+V!hj5F{c^^; zYMd&jAm06QW_K2(s$B9^Fe1-&8U{3DI}L2}JAN;&cCRdjG~t3vJHc^2hPpG*Q)yM2 zP7ab&og74jNvnbKa*4;weufv`}V-uI#RK3MnOxK>W8)GQl4LkCKicx!+i=O>mgaQo|9c5u<64vD#B z2G3wh+Tag5;1AZrq*~wx)V8$}h}YNgZQG>e6g)18`nnNrmiULUl4Lo&m{KqM4kx9g zT%CdZc*9ds954oHq48Yxf=n84uMFO0vM*5CV)Bbp%H$i>&N8wHN%nT@#NwUyy8Uq* z1dFp1afTBo-ok$!r{_#eM?gB!$P_@Jr-?N#JtiR^gm!Kot2f2F=_~4F=!$*y&d4|I zsZNI6%=w!2?T##jeHiQebpdRDoKeH}Q`LpMW&0$BuzJ}(Z~I{yXW5tS?96*f-D7`M z4AR2cYm`S;`Etr4x2YWUE_%aLeBCScJlJI;YL~72C={^7 zd5yY*fY4qiZ;~RHBbxt0il*r_LN|1`B3R7PU=g_kHz2Q^Dvx`2Apo>jd;nLATNhKG zuZ+%g2Ejny)8ORYRC_DyDQ>ZFZZkNQ$^t7JNUGXpokpfSY%}=I$0yIHNA~)Q$WZTw zKo&7iR$n&;MceE6S|Mv7m;b`i-6bTLx?F7j&|`BuVsUxlU(Z?O0%FZtUKXDg(1QlZ z<&(EyM|tjou2|+S=!#`d?g`5sWck29ljSmD84X^J3E>sb7RflCE%E?Y!Bz@UNfESz z$ceah*{B<}eX~WSpBpt;?XUO5@+wABVZ=hlvc+NnB@Ixem?&gHbAwnqa+|;&?^7N# zwLGFFE5Rw=s!(lMc>E*Qc_x(2`*-dh>dn^FO+ZzdP2&jb@n0@gTRf3g-86pT3FkK$ z$_`#Q7SKWs1dT?PyoZ=NjF4ukNQB{?wEv@p$#M7>oq)6qd&A#>F}cBG@|AtVG0BRv zEx-b*4+#`3b_=K|Bv8K;eKJb1Mqj%cG8c=iY~X!;x7YG~cF6g7?_I>5c$Bh7wSfGJ)o5M)P_awo{hP*&FJU}*lUwLXn ztQ)hHkOx*MClPKztk}VzBUOvF-wElVF(^{a^Yko91T{}H8Vcy1E%ILxIW&{}6Abx2 zfo1}E-SbAqKDu|dV0P@YJK|J8BF-P?01BsI1tbc-+yHrcK|AGB0C`TqXY}YqC=~Ts z5eY@*vm(8^ZBq54;HFK()u$$wrBbcjqN|}4BdJ9Gzfj$n(=${K_e3x?O9V2()@Mu32xTqGKM@g#ODHsy_X+e2B_bWRZF&~W z8+f=enCM0|1qCFMY|H@^&Lt=y(e1eg$Wuu!m(Y+O&ulC737Znel~eLi84pkyUuaOR z;rpM+CVh3U6x6*B@{Fx=XR*v)?EZlGF|%psQWS^i#jT>K>-G$ma3)Z&@3vqj7#P<_ zuvMwB+VU01Ca=y`rvDEUC3*;=;fSz%x@4Ypzb;&|n+l*N9Cjs*R9H2?K@{j>N=cl@Xi zF%m=yvrz2skNPJY^zYmT%@&FV%>x?rRiDBB`}Te=jTs%ddNoWM=bMpGyarmd1@k=v zqj@F$ft`4l^w~S%b-;FH{%dM}t7}OGlAQCJ5h+6+b^z7OK$*?iWIo>I9t+U}CdqX! z9-7HazQ8>b^9tPZKy7z`g0juQfl|d| zWWh`g1rvgvp`n0+o0LV*lS4II{g`k(x&Q0*#7ALO(*EtPxl-6LR~}%l_oDxC=Xn^8 z;t~(IwCrDc52T*ddB65nM93nE-qcAds~7DJizQ>$oUpY%g3oaA?xd`b=(L{UcJP_d zBk1C~c=BX2_DI3wu_x>CtSI&fCwH;8n!bj8klLsq25Dy_Y~c7#w=SnGa9Xj}EOB{K z&zh8oMf7mQa?21SIxISuhqP)&US7FX#I&@>Hkb;>;3Rx~kLda?lKMVmeWOf${gAvt z&0dr~sYgc^#7lXZMx2Xl4}#Pew5ki+S z4BIa!8KQjcS8arlNERhiyprgE*7Z>J^#UG19pc!2#6L90V-wD zXAfw`)Rkxz{ORQ>;4%U8FR&93PNU%WHH_*fzMN=X+bPejL8L4cMlBo(#@=s_bu%i)TH&RA*O{#C z*4AQbT;kQ(gb6q`a)@<9)es9+&3Z?>^;W=>kHYiNZV2XmX!Lz&MFVA0tlO~Fe$jSC z9%#oUY`>ICC*{(DlWv}Dz>^)c-3|4zCY(vzeUfcAF)6R0?g9{I3a-b->_|#OJ{BjS zEb_wd*sJg%n?`%cYV9wgu#v>dK^er!u8~tiI7DmzV9)f%yLW?;8E|na2qYOvG zJurWw+0hIC(|bY*)sk?zofx@jn+r27ei94^MTVEGrd{@aTWu#c3ytT(v$fJ<$y_@FI^(=aXG#0R}1 z_ZB*h*;qKL-Dg{7d_Wf^!AkD?>G=aRLM?y}bPcp$ z30l-TX}de$7j2j8lLGd8sITqCHV!mCD2@>iokQgNTSq&~vCV_*@30*!T6SK!**V;b zUETEzi5;`Bn1S|*m_Xk5=|cb44KRrdFv}V1R^D4>Nhgjzu2Xg51#7!lweEY0Hf63i z8jEXO2jkyO5tF8n!D5t7z5Yq2WduV&Fx|;hbSK!MJ3$NO4uhh0HKZJLIPjYewR|pK z=^zttFCa!3`5-bOrcKL7pqnRleID9VLU!OVy%C=}B_^NyjnR2d%}DT$9%*7h-P`Q7 zA`_A8F0wKdW8PKvGto>>9*IIi@kZ-gewd*J=MFi4`{O}#u24jN_Zk%F2|OwbGR$vm z=X1_T;>6Kdqv(BPPBe>-(tSk((YqD@8;17wF?2d$vKUgknHG|v5r!0>HTZC9)w>e* zM}jPn_J4(uN>YPh!IL%y1u>p< z5h04oUPhM|#D5Ocu^N;D5&K&c5=3t_WPRMw0y)=!xcj53#)O5?MwTVp5E!FJP~YdH zKe=QJ{mJym`8cA}i2PL2SVsXDyn!-OuEm66|3`7d-_&k!mPOJtupmpR!wfsWr>@^J z`S}T>^T=yK!yDpvT9NM8@7#?-Sq6Kk$l9U7R$&@9NYsYV-m6v8I(MRp%P882lB06wzEncUoXRusbAXnr7>5pp#A!abfKm>c8 zJuR+Xuk$2EBu`>QLa&p4gUb<>BS}WyJZ5yB1Q>h^5*9DMb zLcWOjSN{k{zIJOC`3gj2u-JeEHP`Pw!{#bW@3AQvJ_C%{2oJ5Eh6enk`(>70=|oTP z|M`0`1%TVMs$MkB5vk5L&bo* zc?;xkcsn=9S7iz$+s!BlaWg+Q5P@z6Urx&YPHcF7PZWN|!JKL888E*V$iKG_j$Z{K z+W(D#2y`$Wzpi&N1NwdFUA}ESLN;Q^6n0?iJH=~#C!6|xa_~2VZ0Dgs9QIKk{!Pmv z$b=7gQcRd$WuUDuyHW%TW_(d=D)mtwf`5e~@;}+21d)FE6NYqO>wDFT4cYqqZp7d8 zvKcwuYkC{-)yAM!;|Ix(>nxB(IY2U{kv&vZ5YqIHHV`^A%#5({+I0A)m(A~Fujy?` z4VGUEWJL~;{`gf8qWaSfgyPpXqVV{YriT}}-OVf6^bp^2z5-miKkRIry+6V&I|^wZ z^|eiU3VuDN;2Svwfhn>!&OTuFUEZL=`53ej39wJus3z3A^v8y}`CxZrQ`IbIS7{W5 zBI9%cPUH*14$#!DKHkVjZ1${0^x4c=3$u&zN)>>~H~}5(Dse}Kjl~fs9 zDe=HMRL(KL@>VrT*t@*KSpA?Xc=|6nDmVZYa7q%7d{$!V9T~&3Odb$Zan`~XRMe$r z6tWBT-21bKalB7CIT~!8kyDQ?r<<4iSzu6RZ`!J4l)U>U)T>A0YLGC3Li+cgJs#j_ z`3M2iGG-cf9l2PixL~#5f(K{CZQRaWD8jV#aDJx~)PdY`oa0Lf>f1c15DH!MZxW>T zH2Xvru~Sn8tM1|QLaq9pHcJI-kForb(M$-ojuPDqTZb98v}ZLa{#_>mgriV;*eSgI zeui+GlyE2}gkKQTb+i1!4~_pZ@oO{jweW$zUg66ke^>+smTo?TgHYNNr3Fp!0DIz4 z70X1t_SHHEiY;!LwRx5!-x2#RZk*cC(2H`TmMA)T=|}szfX%k5P8GO@&u$h1LpvPqn9bnYoo`&bF`Iwe%7AKc-x_qrpUU9P|tu&@O;6`ffXMZ#;Mxe#* zmchzk&ykZijCO7uR(LE=1nnuqXi9OFZf{SN7Vo2qju$+6+b$pXBpagmx4vX0 zt#CQW7`S?hpl@ww|LP82GaPHPPwwnF+Sf2k}4ttD_5TB+W@Tr7y zaI^)OBo8pjPq3oKb>MU?xWof4{p>%yM3;f?bANS-2VB|!1<8IC!qH}78>Q$1AJk$oXqj(8UvYuG4KG5t91kn zq^NJ?^ML$OaB1mBMnLDfb1Fo>We&p!WeyjEkmA;RsD!m|h7y1_hm43_p-5;O&w*lw zjk(803S`nsc8F2iR8>9?QYU5Rw2a3I}t z+3Ufo@!ve2E~Dumj-u{*1Ec4@+AJ$C zZkf-2)#$(C|AMX32jXwDDuA+Z4$OfQs_iQrX==ZF#b{d?jbk?--Qp`tF_C~5PNMm* zDO+bS3*`nhe+mks=K-RBYf$cep~y)5(P^3{)Xf1@mV2lEP#q7bt{Bx(eUCn*)Q5#t zYU;HJ*IhN=Tr+UfTOuS$7r6dqBPP=*(EphU#ZFocp1(5sVx^#s2WQ0^L&_AJl!CQS z0eIl#Ec3|uk|D?EEqvO~=suJwS|G1t8I1(;u5S~b@FhlHq(th$6AzI0**M6Q+tW=u z-$a`#?bdU1-RLr~gc%^I`f*-so0`dcA!r;p?>7kV5*>ZjkUaq2Rr9exx_;;JZrOaE zH;2HaVI%hOaZrnx=}dNyN@+E zdWhJ!tLAf|09Q>pLD)QKSDn?L_3uRLL`Z*SfOPvdB_t|k{12!UghZatUNuYi&QvAp z9CkI9@Tce_{m?Y>{@7en{@x)~^vsoZfW=~u3g?qGS|CZvn4zxvx? z{rYe+j6~VG1#){hkiLi!Ii729>=+!<3y8th7%N(Wc}%rBd|g5re&SII3R30)QvL&^ zjP}xxoHF=RMz=wTBvcK#lB+8;xS;AkS*OmjSr4^C z!^=a-RJ*5jKr7H3&m<3m!jz~fDu|i~i2C;wbz;YacmqCgQ=dN;$7XCe?B7Tp6b3$H zXLG2*_o4JpqyiBsy#1Uf1~ z!Y87Cs0S+mR^i~S2&mZ~27zbJj2Y6KQ8ZnF>(ut=_ZpF)U8;@S%Oii3%nE*shhJ*a zEw(1p4)|J}-%$ZMpt0Fcpnr}M#jWDg|F9*v#Rh|9v{;2Aj`VJWqFQXqwAks9?e~zi zipXKY4JQm>^qdoTMJ{mnS2f6x*V|(Jk`PR9F90yZU137Dp#>hGg}rcK34UY-rS-Cs ze9HA&h;;j2-tvs}smM@CTo!3JO3i@QGL5aWdZrIhD4akuWbq7cD{d88)Nc-!X#a+( zK%{@0VnBQX9S3Weq53BZvEgpD=)Vp}O8F@{di(w7lIMa|SpU2Vk{qQZ8CfGh6eiy@ zf{{{~+YiC}NUO1^Y7I*BGg4oBTS7HlCNtZIR5$WlL70qn*Hr2E4HsiE72jvZQx|?( zxC9$j%bxOW0GBuW?!t-eQN0cu=@vZRRv*J=)$8Py=KJtzn!B)_Y!^e0&z3@%>Ro8L z&;BUE31~=0Rm~_2C+lu|YMv384>{bW7Y4m9dTJu{A2+#ee?7cE2D)lt5I$K(+mhFe zYwx05%Ofw!5jz*~3fIO&eu*4z#EFc^W7COsExdZY?Q>m3N4HD!Dq zZ=kHI-Ngj@V?4Idqx%e2XDH{A!U{HaOI=tv14mQZy9*vryVbCayzMcvTGu90^zoq8 zk9W_T&@N?(&E+`p*G3m<#|uqQvvjg_omS(!Qrm+R+m{V*K7#!a#uC=)ch4<|*D>oS z;_*TFeW0Pj7?Xl{m{i=A1H#|vgCROa{|2Hm)&zUR5;fW*&bra$aYjd(!Vq9RcGg~p z*W+K1ou5kXQyc2iSz_ZWh}C-${znK>GQS(~;%B>dZO3E>+V3qp+K`1N+=wQ;4ow*AAsZO@pcSvgl1Pw;=8Cxuj^LELAO@Sl*gK^sll`|$ zDb9aoj@ar6uZ3N>Ik4q=gQVo$tVS!In*bNLMsZK-5ZHt=YBgJl=Wa@5dMZw6fK=q@ zj*3VOIuah>(5}M)3;i;R0>qF%1})twxb;Jlt6Ap6S0*#B4w@OR8`R89e=5@i2PPE@ zXm10gCk9-ppk0rFWQM?u47)HYS1#lWa^V4TIa=frjg&TuI^`21qVaeZ`>zd}{aqgW zrBCh-`wFOsjc9}c%4T0I7!r`CWInR#@=wOVKM&x4yy5?LWzN?lZ7g6a&ND4wAIpOc zOmX?RQ(M3#PXvp==RtC`3k6ifcCn`caz%j20X2Y{9yw?&8LEiP#}TfDEk?hOJVdTY z=+LlOu`iJB)nzD$5SbEz?0A6eK7`jn(a5I_tjg@_JSw)DnL8y@ z#a?1ioP5fZX5pZvxwlAjUkV|AqJbaSfKx%tZ_A0#yDEPS%V7y?O4 zxh1Dd$qGF-O`n9dbqJlR8_(BcARRw(5)biHw|<|bS#RmoqqkgT-&ef1@4 zxDe_0xXYUVZ3>RMYS-vM+kE)$Olk3V(xv_!Z;{)cFc-vqE(GJ};uZ^Hp@FE3-G@l_ zA-&1d8nwyOdUs1Sy~)!D-=$?#@T1lEaCstzVW{uZ>&Jjc>PC!q`0CMkxXhqRXbRpRE|SrwQ9_bk{A9Dz>FUz|x~cNB+NCXu9~krs^1a zPz^V`k?tE^aD8kYoQQm6`Y!gr|HXWiUav4q?nDE13rp9(+H*QHQF(uQ@;jaBLa+#V z4^41?5JuGx=_xS_Vhdh;3)9*6LB%a0A@1_U3l;8c25scG zLk)K!oPftrdq|h(zYd#M^PAceVkWzGH3m=*asbtjOE;o1=D-Km#jVl`e)2QV9E|p1 zWHS*L&?|LiYPHeRYHAQ#E%UTGQP3(@y5dZk;;IwK%{469yA5_c@3E{Ubi;BZT zLKrm~3%4Nt^b=2wU6$hvG_dk)1B;G;fyvNj#Otc3ZG?R_!oJ49z7ny!FcFK7{?)ES z&M-{7CJ?!MA8($rvp*Yz>q@!X%^5SiQp`cT(xICEzRe*6#RT;VMO?*O>%&-t4@J3T z3*{bz0`JES;8bX@_HK0@GM=x(AD8yXpnd>U8{X*@i(7^FBYgE)o9`YQ$-4<-*AX}F zg?5Mm6vKaR0s!B8nwj5L`wg1?c0rJQPaJ#h%EwfDWzSvNY8Q{CGIrYS;iZSL5ifQQ zUSL@0K_3zH=xKxYYi7UPc|w0Tdz9)QYpJVEAmKgq0*AADvjhU7#O= z1wG`f_@3Uw3lGUQ$Uty?eXNb$%9D6b*B>EmK0+3FguMNuO!WuxlB{jBKl^Uju~6>S zC}1P#nM&myuTF{p%S2O}2B#}D>z2SGM(LHyD{WEcU$9=32Li>~FaER;p8 zkPIV=#DX?BG_$qoxtKZQd=z$Tr&Gm7j)?Wt#MZn0iVROm^_NHRF*f~V@H!D%bPL?; z9){LFghqBBaUG-T(JY894}_6eKXj}J1=1%Sr-y>bO@}n7Pw=eW4(4+;C{G@gZ*hx~ z$Di0^Z7>j({FFoqtXn^vhKDWZ%VB22cI?!SaSdm^@i1e!jJ>eYCpP(9V0NB71mThC z#_VmpuSccs`qW$``n~dvp4LYh68q7*2cfiXLA>;X{sonzwOJ^uL!e}~wk$$o8iGA) z{ZiedDk1AR5hdqZ$a%(;cFGwu*3!wAppzY;JJ}KK+>^-dUmuqRGyflX?*bo1b@q>M zLI#6?85EPUe#d^1xAXm^l`s7U_b?{ntN&Te*-4cPZ>e}6ujojK>sbDsNo&Y9<& z*^n1X_)dcfc`!n%n;4Iera6n(h>>u-nTn49M}3a~pCMQwDLcz4Mt(u0300Dwvq8K4 zF|fn#K@kd{00s8?E4e>zk5(}_Y}%B;>KH25MY-;Ybf4T7H=sM^b|j z<*Csi%DKv;IRaayDkQ2;=$aN#kK;P4wu1Ui*zrPRp%y{EE%!wx4Jf2GV0ZiQ*rp3?ZN8fvs0dn?wA|pNfG0)YM6znD?9uR-|nPLVhVMOPCac&kV znVAtK5KBnX53%x9br*bD2Ufk5yNQdlQ87{1f4^XC*d=t>>d`18)zp-I_M^| zE)hz1JMn;c=Wa**y~wCDy`6Y_OD`y_R65ooz6}Y zyGzMyEH!JSSKpP|P7f@)CdB81Gv=hmmqwvO!{S4Ezl;5Iq1MNDR*W z`FoK+znzxy%oNbf{Q26ddX#mttWlLYK`B-+y-5RuV5R!5kK4(i}a(I)xx4<-=E6?~Y1X4K>jbgbL z)4M8Y3%)Li4gQcxC$_7F?IB!xwvd-I&R3ZoJEMD>K#TnWcDO?{d1$A$$>DHg00OWw z04r@T!5Y2nedB4{T>5pA(>v_RlOdHzpabPTCtrPxDsuDHr^M}LF6;&KRIwMt$fdLw zCR>5hfTUA3B2E^2LDp5H*bA010$TC*^9SE(4jgBUJ zKy3X{qA~OaLes85_`oUK)F6}rb3(vbGB++Lg>=4v`KY6i2siizOgAGN&M2;d-q~O} zT$CJEQ)CWLUJ{;+AvRyux{}~LUS$JqtPk;cD6U89@16Le{IVV?=gh*-l)>|qb`&=? zps9VtzM|_QFz=exSE9Bml<65g3*Q?BR#;VgS&$P}UF0Cwo4}Ga%>&|~K7sHuNdXZi z{q+t<>S}S<5gC*fXQY9A8MKnV?%AK|MCyEPo%`s{R~NtUMtw-cd{pwjNd)RtE#qh_-)M=BWs<^_M)=f!v;9fLXnDY#T;fw39uP zge3`ALB*}q_Xn|r;} zIPRzP0(c{llvVn)I(9_#(CeQ4KnH6QvedW4qj^zJ(3GiAK8Y*TOb5x{bTV0?JRtHl zh~9-l%V^;s$S>hmM*?+JaIRmJgGlyF*9h-yhhBKKc)kbOq&P9`%7Jeko~1Sx}PCA$eeSB3pwaA& zUhauSEW-?gxp=!{5nXW(57&tG(IPw`UJdolB9ir?_wk4y87N*Qc$bXz-f`YNU!57@$yj?p+~I%_eZ|P=6?fu71ed}%zHofhE54P^094u6c&3%4rYO0cfD8{4#vO)u)2eg!_LX+?1_b6z# z$rvVWgLK!Q^xG4^;CCMFYnB7rl5G!wUe<0-`QgrFh4T~J6#XWwDI&T1)hgB6ho`C6U#~J5LXJXw7K=A+Yas1r_#Lw2f?mprJHHfCe zC*3*d*Y`#yKum~ou$k2V#0x=uL8RO<9)4§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

al{qJ++^hqWuoZphXPi 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 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 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
  • t&Tu@nC@dnKQsE3 zQTjbP4+9_%IfgJta~M@JTF&TFMps6l`iQ=P&nozZAU z<0H`dOt+fR9fmM1&l|$n|H0@-Mn5s~-b+)>DVphyVKkc2bVg?|I+sx)qj^V7mCSOb zp`no5>kMJu|H5b+qn(VtU=)8JEs1`N8W^o%^l=38ZJ|DgGdiA88KbKhH8FaYQQG}9 zhQ*97XY^-An;7jegrn4;2dK}%jAk0b1H-cnVab;;TEyrkMt3rLh|x|)gC3-58OP`x zMum*7GBg-cc9S7YXTetL^EXERho~-tQ5K^dLz&>S&=AHjk5P!xZbol0`iRlN2=uej zVefDEFimwYMnf1K%V-Xxiy2+d=sQMHkI?wej6lnn?lwkS8NI>iH%9TzG`>-c8X0}c z=x0VzZAwV7)OYx8VI6^tHd^a7*3jP^&MFN_Xr^G8D%d#6Wfs(UaxhS5w$ zwTv!hbb!(Kj81rr#>Z(M(={^M$Y>{{uNjHQX$<`tUC8JSMqe;$_XPD4!)T@<9M8@& zgymVsDDAJ*%UDLU85J|CW^@^&1B@m-Nn^-mRL*EQqstjx&**kWTNpjT=ru-HZl`Ja zhS3>MQQhy1o_|{FuzkL52+Q+ZM&cQ5i8?Q%K8&&=&=jUSgVAh8wGn6$)7@qW+r<5b zFrCja>hmnkLk6Q9M)`~?8NJ5nLq<{0(HPPV^@6nI8p4!aZ3s(#jUm)M%;+sfpEC08 zpz#f4G?LNrj4n2Wv0q{cW8Y>7buMuo(qqOF>7RyDfV%9YDZ8K1GmPG5bePflUDV5W zj8;8Qbst5bLrmv;frjhN=o?1gGOBoyhT}Ak=^iqa3MKKhAuOf8G5VCz@w;gZ8yIb2 zw1d$*j6P>{h>`at8bc38VMZS^y76Ti?rug;FnXKOenxSB(_V0I<_bgD&R#c!rDX5X zmPoOTE;oeXUNeN2(XY^O?HR2wgyHrW!f@8BG@OUgDU2HaMY@QE`_K^fm4k*bE&pT` z^>>=G6h_k-oyh18M)7;87fyYdZZxAAjPe+jFbXnS$>;$_^{>&i9AI?j>r}@nz;u@| zx{T2(hazq{R>t6#;}GjeTaHDQbIXcriY%+Bw6>ZYP^{L@;Sk~to!Tp*-tr7#EfzAG z$Ec1`J)^4(;cdEIhOo`PY6xR^;|PS|_A}krjDBJiy-()>efk-tFdBRW!uZB8-3&$x z8C`4$!!;Vh*l#w3x^0F~SN|qWXA`5PZ&BS^Mw=Ktz~~W1SG`TWT+is{2=uVgb%S*7 zH6(NN4)wW>QPO)--UoJ;M-Mp3G>zAuOdGAJcFj80rqXLx#{Y@e^wKKBJ~jsqPL&H+)WYoE~7h$}hAf z#(usbjC~EGw+!J(n@(xm;rHslM-EZh5@bXtf=<{_(A2Rxd(Zk=;_;xXR zgV6_!K4kO{M&CuCsPA-q*pibBVX8A2O<**ek^eum7Yx^jQ6{7DjItS>$S5}g6&oF< zy3P>BehH%{M$L?>zo)6bkkPe_HZZz}(Zh_I89mMD*`uZ|Kj@TU`^+$e`MZ=+6QhlX zbU3tpm{Hu1RF}r652LY$aGaQA2z}-=I-5~}LlIYE!@Rf>8)F@5CD!7rJ;l}4^XHe9 z1p`%c-4ozK9TA)wm=xes#;t}ht&cKlIIQ!JW7--+Xt{~eeT>R~(&5mufzjfhsjl)D zN)3!Ii9k(EcPFFmjNblL$AEb_Xb4mG3nTwOwI%A(7!73f9-~8yzWR-NIq*BB?-~7c z1j2N}>wYc#PtDvt7(K;kX9Rka>DCJBbDD=zA){O`)n!LfIz0lNX>^!}glHP>8Afk2 zdeNqqkF}$;Cj!07bbB3&*q8p19Qh(e%f3`oy|lE-?MC}`95J3=KAp@#klB%ju<_(D zn$0N4C?iIDk>MB>FbWvL!VMb2aGWk+y0wfBF>2qQ#y*Hq7NcxNxs2vBS{O@xp3kTu z0iRLt zWHgJ>*z=}vWpJv3o!oo5JJYbB$nBG8*m z_c^1e6deQljAxX==-8grau%bz89l>j52H^Rosdd>p2KJ{qaMAe}=_oF`dGaA#M>T(&)XB0bt zTHeLzDMrsT`qU8K%k&JSUZMw4>cl890;L-r_J9?P8VzCFy@yfdF*Lro!Ib(j8o_9S zA&l>MLl^_6)0yr(Miq<}Fsfk`W^^N?t&Elrp?O%tXfvaS8Et3u9HX6#UO8%domuW@ z^bbbS=`_{5869BsJtOZ>8m@yOtQEf@td&UAhgqgG%3!q45FQ|IF@!PL!)RL47-ciM znb9FeF~g~s0!B+1J()o*Ut#niqmLP7W$JM76ZD?r3}GH-GMdL|AEWy)G+aHSiy1XBdUFB|_a&pljJiyumb)44XY`jz)bcWq?PGN50vh|%Rg{9&lrCa)J)^NfYRTyeru%jwwX|v|J-}!W zqnJ8s*&_mFFkKd-217WOUuFo~U=yS7809RYv46zqYevzFsb$O(N zMq3%R57GDrG8(d!>arP)Sw?j;7@frEWQQUig}@Inz_H>eIAv=4je*s{y1;_KvZA^` zb(Lko!N}a2qEZmLry;pIni$V%=j*hMf?CQqgmqTP=zK;!m+Nq7IhN5uM!pNE<!CRlWsH^|H8n8HOCr!^OgHy>T@tuL3mU?DSj}hyqwS0? zxj}oua7~PUXViTiwd}{}2}U~^y~614jNWDRX#|SCk;cB2(b+dqT{)v_M%{0wmKhN! zhv|l{*Ws|IW*fpXTf-=0gSJH7Rg5+>D!heSZn>3Gu!+)@j8-3kuy1Z)x@JaiGx~{9 z@tqFzURKh8xUiIiv1(P|L-P)-pQr&(!j!J1L#LiP9oQ%OcPfOt*^B zYm7$RMPpdT=m4XMo2lg`jILv}h0&9Y-e9!+9_n-HUnpJ4=#vO^nCZm5)QcT~d`uS? zf#R9&Izu=vJ!}a3!!Abq8I9ROQ#ON9KBGq&CEicNr8D~L160@iAf*=~&|ao{ozX#u zBCZx^w8Pcn*rQx6PN`lHEUK+NqpYZ=q{3Y=nwa1%Xj^sC@#V}X7{WrG#i){z?;#xy zExR+yHH3rOkA~1P;b9u?8AicJsE*S`O!tr>jNuVO7{eXS+RHeg2MnQZ52N$9X-m{y z&*=6D^c2(WXY}2p)Mvuulrk9I`~=nYc#_g+MtO|t7+t!ZhP#cC?1JiAJL0e*rbO~G5f)}+8Y20p2XgS*u>Mk;by6X&~?oW)iGn)UB_KB94Mxb>} zcQ>PEMz1rv@MRjq`UrG4(`{$8m(eGTzGQUJ5SB!{ztPxxFdE7zD*~wlaaMo$ADfuM@^lWWd@_S8U5om8bjh6lom3&lu`CR zYRPFf(*@tumRM#kVUC8rrFBR@8$!!2Z&TgzhEO-#5QZye)WB%SJJiec2$aKgcR3Vs znqAour`gP-oMwa7OUf!M-T8Hkjv~hMn~59e*Q9r8njd8J9HZTg_Aq*v(MOEFWfb!s zjjuPOr1z)i7%QNQXnq2S29t9HSQ){cdO=gp2)zh8w_W2cz;&sbvGB zRgBg%dW2Ee&$JiJZQSRYFc0DjN;ac%Lm2LyFR5kjSCmd?RLCfJ)U=#gu82UZnQmPK z+QM|rjP^15g3(uutbfqlayp6WW-&USQ3IoujIN77TbOS4*EB8DzM*s`qq7)YV+bFu zHXFiL@EoJp7`@Nvb4G_4c@EOF#4$=@G?>v;Mgd047&SB6!{{I*|F<+PlNg=D=n_U7 z7;R>>mC=yzbPU)#vJGK*p2}z&qsJo93rzPWqqiA-5rKYXI{$y@bYjYSG3w3ej0jY~ zbn_W4VRRv*iy5tsKsPbnMn?BCYG$;Z(F=_BFnWj4CyYL0^j!ps`<|9(5~DOmgBguv zRLE!^qq?J})y5Lr;08lj(|0nui_v~VqrvhELm2KSM!p|tZo4xY$Y>0ssf;76SntiJ|BSP$1Q+8BWz zWV&4u=trjW9@epAdh(KBb-^pHk^h%E6Bf!vBKRHFd+w1J%Q8Yf3C@QC*<2c36o8LFQIg7Z+6ytH95} zxwUnrfocWibyb1UBh_aMvhvxL)4;c7dHaZq)^GL=_YFJX8Q<~3-#*&AIVZDW$9KMQ z`**#*ce6KUi0|azHrJNccyi)PclhS4Z}62qf6!NP&{uk)FWp!6QO%+cePzC!W?#84 z{Wo8OZCOvF*Eejw zd&l|>w=6C7?FEB`hWT~Aam_bA-!T7Bvv0@xT{XVu4K?1_*&iL)_1o_aWzDs|&ZXCs z-n!S9eoc)xe)h*TzHz?P9lpH>JmdTaJj3I?OFUDAH}0-+-q<0&UJd`@Ygq5A@vT~g z3CjD;la=6I`kJBezk|Je>7Mk?o`L=|J;(Sx!}T9err(p<#n&tI&`#gM-xhCf zSbw4SRcoOq8Y+4Y6t&07gMaxi1h!S3w5o!015nMS<^M_TT6fFlGViGTm(|q3+k_%F zmy)XTxvd+{{GzIP0Z5E&Uf7D7Z*p2uy6~m1->`mf^X6@vZ&|f|{oR{uZn?+1#~QNv zzE!@`RnS7ldnR=Dt=|EK=^Og{D$j_{p7Dw6J!3oX^-UPI+Lzw!yU4d~v#)%8&AIoK z*3|6SvBOusK^psp{+2Uh^S!=_p23}c8=6;n#&`B)#_#ow%Yt?U!PeI_prDbW_=--3DGV|t&J5KS6_wY5QScQNF)Av8 zC0M~43y3```hqoLgICe0C}6?6_FmtGWI3b1d+&4qxaU#M$!CAh+H0>}&OZB`WT+MQ zSmnFbx7F8^{@+R;mifl|dinlXmeZv^MY+woFMfB!s?Qte{K$yk>ZN~N3~@uD0mMlXmCB>tG?4# zEt*rcjCzCocdf6z{k&E_Q-VcB>z?qfUF80&iqYrdBHxit;%i@2v@Ry*S*ZSJ6ot1NPi?v0c-B(1t)Az-y`-*(yR{NsY`nDGN#xAmBz_+V&n||k8 zl+)F})i)xyk*~Y&m`ypI52k)R#gNwA5qVDhVL}0rM*>8 zuA;HqcS04FZJFwF!3C+zjLc(=;=S>XKS zAIA8n%a9v0+_3WJ=wW@C@+5qD(bUUr_UX00stvw#e9@xZ*1qptZ#dp%(y_MQ;I40x z=|!{3%jaGVW*&+)U|zkf{+^x*XI$XCw)JHM8at!Pg^uUiQl{y#Y{ zMbhMAKJUk7|L5oV$hXv;d|vzd+2`3f*mSd!)32;04mLfuiqk8smNxNM&iCKvIevB> z=SLsl^xn19gSDSr!|CTbD}S}`J;do<>c~IxFsHv*N4obYr>E=4Ke+Di(*sX)`soK4 zx9RdnU*Po1>&V}~p40EIBR#c&(;um$eqyh3`h+_C&)~-{m(-CSdz;VStJ43joqD8= zzsKj*Kg76g|8m>(#5bJ2qLzBM>0$hQm1|>UL7yMN&rO|HOS$d&Df~#$q&n;e@uNDu z*}Z-C|E^rEDX$35EAsP+;@97u7ozhr4TriDhIPt5&-MeG?)BvKC&+iZiCsxIeK>tU zquSHGqdEPiCbg%hM|1jNb)0Wb<@AMhF>EF;RCw9~RMW=H5QFWZ3$mjG0b)LHAK>&P9q*t1 zclmnO$4B_Q*J>%RO;0_}>03JfpW9tZ=Oyt7F|U?-wCO24K)R}q^e`6UL#jMB&dxp- z_1dU<{=4!9Nh^1Uo47bxakS}AT|LsJTv$i?(bsVL9_kBr+rJ*{`Tefv^l_a0m-LH} zepMam2QKFG>+quYrA5LFiNB#vja{3!}r1xIR=`=ZUo6f%v z?whVq=hsy)b#YtIX`eB2AGT51ll159cEzmpy+x` zj`VhSaC%Q=-*y*!{>exmsoKlPOS!{IITqi|c8*haBt7*H=}mAu)J~oMck%V;OB`|= zwNCkG{kQ4cSF>M+j_oG(J!U`uo$gWA?PS?Lo%P?QfAkoqzh6iC5 z^uH@#ps_J>yD+zw`m^apPt@-B-`Sl@=gHLnKmRxUNzi#R!M8)N-6Wo)Po5kY9_ZJr zZ?ArVzQJI>;DBJ?K-USyMS(E|HGy$6DrU{))Sd%|bTh>jg*64!Owo+$2;D)M{CrwU z$)8_bRT(KL!l$Y^Gb(1(m}>e(zcN!(HLIeqq^w}NsV=1jw!o~4>KW53$oPzk8nf?1 zVQE1X&MuizQItQ+8erRzSv7N9a(Thrs^UTu8a+0D)Ywz#+!;0b)$`4?n(~O8T2)+} zUs5>D(ARzDMT$*zaq-N`l9IXkHRi8tLcL{$kFzN#E2}JYCzn(dloyv3SHNh+tn&Qg zS%s#sau#`9SV@1eu9yy-%9K=9mRo5Vea$GlXhj8OR8CVGpDku$VQ6tt~Mpky@DFbaNH>;kGB82A{1H$1+Jzd zzhB=O6$AU{n`tvD3aa*%iYh(7ddB=>(|cBRRqx33s^YTVHnatWHNEE!9@x8Yuuq@f zRW-$wL`Hg-7L=D4SM@HNF|B8rZRUdq_8i#X6jjc$Wv!*f?6+`OTrs<#DxYeFj8{-| zlOWn&Kd>Ey4~mMbDP~nwHFImsjLP!r>1DLDm5^^+2U5UkO~Tr>R;)?ajMx|q6_yqk&a@uVA6Il*y6q=F=tQ^TXnmkU7gtoe z8pyYyB|EbV%1q&`D%-^O?}WvbRr!TgWhLTdRh7+`n%D6B5vNQ74;32&^Mk71!9n(W~P$hET(B9eMc4qek0ua#1416f!#+7U!22RL^uBnp12& zQWGLCY>%+sP~{iqR~Ogh+o8=S+tmER*)*oQ9{cBcE`d&~D5UX_s&l5z(3+TGmDG_c z@@t_nF4pb7`bRM%9H?1vQ1GTs5_X z4XawNkyqx|6qiS+5?wW;O%0ti)Miahmb$7eRMDKqZT5N^?9(e~UpM^!BQw3K=at)w zXfJBtyf2j_8rX}gBBobGWleFfp~J@Ztf4DsuhN3*Qq!ww9{pwIa^BN;(QA6etX}j- zmaFX-UHAWxPiZvr71$GS6e*+T>jt4-HPo6-FS^RkptQ=Of|>%;tGG13q{{ZGUNzIG zSN1BbsjQ-15%10^B!gtDpnOIlWmHM0(?7kOO+KGbs-)4>c9WvwX|ty17tp{soyL58 zjLe#5JL9yblW9zb9jzNpJ;s)=Lg)UKmWlrcOS6Lw*mbx`FlAYeKN)a=#TqiIZv9p ze6|b7G_Bir{@ey0eKKaQHA-6s_qX<=^wn9V}+FKy=0Cu2&n{`oEPcaZ+k zEdobqC2@XIoiF*z`BMIJb$+O&M}*dzTDqOth7;`hHqQF|ImB#CWIjFk2#-D)Gx!L% zbAR@jkN98lLs%6Z?0*g(T;q=YYW9Q{>-U-Z2!HK z{@*|UarcjMiR13)^P0L(fBqx+3;8!4*z+a+VVobv`Cfr2c`tqoy^ap{KR@2owkTub zO>M8D^^oOmx9=Z`zkpllz_MI%EO9y~CHQ>7qSv2qrv#h-zGkk@*Z%7KSE}>-hcg6WBTR7S<9PDeq;@8uZwtx9|ui^OZUc>Pd zoijrJNdB^aUY+lIh|l*ug!9EQ7?AU1|EfCQdz8=j9_906S7g_i2RpKRiw>+U$tHd5 zRF{-GHqY$?+fKwt=02JL@Am!s9vvY>`o|Y)8GQc4Imoz<{0}6Dv`<#LH^t|lKKSp?Z(YavlN<2@`z`;F zf5$q`&qVqBZFbPzZbRvteR80 zw7vbMW0&yxvQ8>#lJEYXW$YAY_o?N4{=zSrcBI|&)D@)sa{aQG_uBHGav6`@NB=|o z*?R5&=GxNccz;RErO{sIIr}H(k|$n{w?A^nxpak=dCC5Xxil)td?TA5U}PSV%^Mn- zA7pc%k?VdoZ$#H|Z-3;Db7?VAuG9M`=F$~juD{tl&&YK(n>R6Xz0BrKja&z_c{94M zjou%*<6J|dtXy~YOU*UZx@zSuj9h2-lT-8$GIIUM<_8=+A8d9oFXm zHFfYCiPtl&O#JOLoe>%L>~zrP8(1^U@$1~b#@t7H>u2)g)0~Ty3t?{Kbn3a#6M;A8qT zmpJz)&VJe!X3PifUt^AQ`qn1zJC3LLSyy`=)!Gb_7$S$>`heW}u)0ezDm+4>6T zqe?#;yiD;6!7CNN96X`;BI354m=n0)MUQ89mpFZ%Desx>&r0I8wdY4+f7#>N_3|`$ zSn>7XqZNN0`~bz@1>dCjN8pnc{{lRq_zrNR_)p+@ivJECSG<9n9Jite`Pt=d0v=TQ zmf!;wZwvmTs+UgSE0n$`_)5hGfS;)Nao{nF+z#mm9diq8UnMDYv2*D8J)_%_9_0e?#I8^Du_-wM84@w>oZRQ!JM&s5wV z1>dar)8PM8d_DLc#a{>CsPcUm{58ct0#7Oa1^Drb?{GZN+`BltzuWf?YwPb#+y%Fl zS)$s11K3}xxb)w!;?loDig$vYfZ{EYZ)e5Zg7;9o6L?(lp5QAL9{|2qacPHx6(0aU zJ;kNH^;KNjRZMZI-vNpr2Y(WZ^LsaW=HWZD>uU<>Ypbtmu#-`Cq`dxh+2hzb(5IEY z%JDq&!#&ygUJ89s*|`dQu;PosJ;iSUAEWr4;336VgGUvY>+)R1ABKL4;!lDH6qorx zSn(I2FID_i@QC8?IG$&&T$LTS&!Atb^k0L=6#o%?q2j-S#}&_Y3$!$!SG+NJLh*wf z&og^hXZzU|`i)8-1WzhH7<{eb9(YReG2ojO4}qr@pW=9)sdymU&noD>C$ih~`QRC4 zX92ih>8}QFt@sk~fa1#>&od9=eRzZI9`HU7W&8OM?D(F{_VWpFzv9n>w^sZW@POiP zgQu0B?}Hnq-wN(2{*B{#X8Oa~{_lZ4ru6j=umx{r<|^I@{36AhgC`X~41BHP9l#eT z-W@!lct6MUO#er-{T~W_^r`Ilp9JnHJ`p^u_?h6PiWh=M6rbrhtuw64_UC-D|8%xL zSAYi;kAZuN-vmBJ@jJjnim!G&&-kCt_U9R~|4g<&FM%7yQ{Vx`w}9_f`ECUdD*e~s zV-(*B9#Z^w$Mejb7qb0t+|bb0$}Cj+gTcd!w*`+X-r4aybHMs+`~9JhDgAN8-ThRT zuytVH3gZaad3uBAxcqY_>}*taiooNFmxCu2pAEiL@r%GyiZ66L&n$Q~+n-yY_dT0k z?<>I5%Fg}Zn-zZy+$cNGI-X~?zLA~po6!4}elzq7-pEBNQG7V`QN>RJuTp#>_-w_`1g}xN5ImvyOz>@rS390(R(z8k|BIkE$?Wzi>p~f2 z=L+b5Q2bi(fUx41IWj*i<#h-@#wBqZ*|D*Wp z;6dfjyWmTd{v+_~75@T!yW+CmzEIhhaXzH@4%mq+J3oO>QhIsr5LWzm=%*;&z^%1jqBtFTtTwRJWIPhSC?Z z$APn9C!lxS@(!2 z{vYV)D!$zDJTu_v?0D{54^jHnuoGAOVesn}e-b>Z_zU1M#a{(aD*le+d1ec~XDpR3 z>lGQLPs2`H@onIN7qi<*20W$oyTMy4y?d$E&~rM)eeS)hR%WZR<99sI{2I!Rb6egyLsFzf$o6@UY@Dz@v(v z3m#E?9(Y{wiyhB1=i__f(jFE;zf1;&+2TulNJtFDm{Rct-JO z9M3bW@V#~M|263S>$BVECh*^soe#kWEB)u-dzJnhaHI4)!GntbM%>=-$1k;S5*QQ5 zTcJ7bHAh-^!uRUM|7MQ2GBIVRHTXis+kuA_KMFjmct3DYaei%;?sF9%NqXzQw>aDX zaj-K{=_fl*<*Lc<7t^4REB#FHrHa>p->Ucp;7P@0J!+%kmpgr)+4tAo5a`9kYnu<> zfcxLjhV1rp0k~iBIQ;Pxm*+K&6qozuwDMEtS5uT;o(GLnd?oT7qqxjtcPaY`=)Y5Z zEqHxpCkg(C(#v}$VWr;){WhiN*Lho+NlL%j>GRAs{Jw**^XtT|OhobK&~H?{4ftlo+kvMQm-kGzDc;TL^Gs*_zJ
    rzdBYg*7@51i>mcGY= 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�v;&g`1b*y4<5$*Bth`2!6SI? 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'|j+3;Db$2pE>^9m^dnu%S` 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 literal 0 HcmV?d00001 diff --git a/dataassim/mathrun/sensfit b/dataassim/mathrun/sensfit new file mode 100644 index 0000000000000000000000000000000000000000..8e0fc7395b6cc370d3517739630c585998a1f7cd GIT binary patch literal 70928 zcmeFa3v^V~^*?@YGLwWyV1Nr`Ac30@H7dfO*ajtV^NoiLs-gd@!716@lc1q4i;(ar^H4MAdH9pAZYwAb4H1n zB{NMCuSTqMSYtf)%iwxgz~h$Px2j-e@lu;vlrv&2LR12{=b$k*uB3QLNpX3FBU+R< z;x<_d@OK0g8&_6XLNr)nM0q3DWGTQs2RGVZTDod^3Fw#Qjo2wm0sf9)VbpecMH#D; z<&D@P`3C$QK@sKeTgg1Jf_@`*_Z7te_Z)Q4UsOx4A#ToTf^W*VQ`6r`y-|Rd!$kOM!y>N24Xbi!Rh0f2xI#VAoF}zM0!6E z5A`?c0`ye8log=aJ#4NoGTBs^pAB;%QfhX>5_xFNLpd#(hxWZ zGAtZCjfzwz?JWTl<>V)(FfkE{=|CD)Y1_w@a}z5p9k*A@3d@!+&1XvsmXw#UrAtfk zH$R^y!hDdq6z?D>zpS9RyfDAKqM%|;IUx#N6~(2i7*8r(S$a=l{t6c|ty)pYaRtkk zg(AvCCKuI&O!*ZBOG>)4hM||1l&%0Ng_SP+EnRgN{uZw+04hI!=}K2gCE%57O7ORQ zby)>P#jEhwReG=ZTa0K~@jWFBjO8<8FP~n)V?J?ER>AUDE-hUHGh65?E2UaRyt1Hp zRX!^%t0*cdUR74OBENJ^MM-gCSqP3TU9+TkX<2D$MLq*7*XOe(g%t()Z1tLgWn~2h zvaGPYklxEz=a;Q4$4emzw78(8`2GSCTt2HPT~b(HT5?a}vV3;`k}?>5QB$#qmV)Nu za)W^D%Zry4qM8+DYnCjze`$U=Jb}`?lWqC73B>I5S<~m|+idyN8(|{O&!2`=O1yl} zgcc6;?IpzmDTUni%Fi!ZR+i5-EI*&ivkW{GuR>P~q>Pr+L|M3M8Os-c2t+rmx~I5| zw5qIZRVm9~&b^8J^5Xjo4FEB3=eG3ev+@H%7yUuu#>0+eX4C8>rg7J6R zE;JGXogl~RWye}bTA&1{x}wyTzqGWhkP~umS#bqMdf{pe|ML9Gm6F;JG^4IHY~gpr z_scZH4-=r`e@NmTnwY-?7~!w(0l%>a{F4%I`1t}<{7*@|F+UpktrBm{lLo$7;t}aI zKZ+3He^$O3{-}Z9CGm!TY~Wv#c*Acu@CPK`@FxxYVTlj;i5!mbzhUHG^vpWHbbe?a zdspJy&ZfA7@qdwc$Csh_4vBXc4iCwH#;7Oh!4P~O$-E;y6rUjRmN5J{iLcW`^V^O5 zVfcKBcb^ZXvryvoe}&@jmiV^zt3&8qE%7aHh2kqE-eV5Muao%B$WZ+MNIX+Q@wF1) z<`1Q3lf<`N48{M_!2dfGzg6PhUxnhECEk@A+P}{j^@QPfNPK4)exJk#?Q_82QT%NZ z-`>6d!SRPBz9R^qg#3TH44&$FU*bE1@)Q1;#2-!R9>0V))|o{UL-7}6eos~?KAIK` z2kz@F9#%E zdpH#T4~ch%;r}i1`ufoPL!>S8$aM$x9re4_SfB;j&p|B0pDgiM00itR;ct-mV0$+F{(Om-;^6CA!WT+BtqF_}$v>R zq4{5z_~3cdf_DET@xlF0^uK4+AJo5*;P;rsJLEnV$%y1|QsRw%r+osfJN=(Ze5%|x zG4SUlUYB^$FU;R1@%AvhnF=B}!s@X|ys^(qd5BI`;t4ha&9hhafFIif-qr(tVh{Mq zJ>b)Oz|ZahpWg$1X%G0K9`GeS;2-G$zqtqet{(7z=mCGU2mBX3;1#)%8Rg@{7_(msk2Xb*_?a*VK8zR;e_LIW8V2XE((Lt0^2I;lY#o&^$b*kL1^CSPdG zUMJs;JtVRfq%K$BSt8SDe~E4_;&eQ;uQpTSD9XfhJDzMj)9?iLt?+&uo+3OH=Hr=#XDI

    <#yaqL@VN2l6qCq9 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 literal 0 HcmV?d00001 diff --git a/dataassim/mathrun/testdata.txt b/dataassim/mathrun/testdata.txt new file mode 100644 index 0000000..e023e77 --- /dev/null +++ b/dataassim/mathrun/testdata.txt @@ -0,0 +1,111 @@ +-0.21875 0.2 +-0.205 0.44263776 +-0.19555556 0.10590558 +-0.18666667 0.36658142 +-0.1765 0.06329114 +-0.176 0.12291351 +-0.17368421 0.22368421 +-0.17142857 0.36669213 +-0.16789474 0.09287926 +-0.1675 0.12742718 +-0.1573913 0.08733624 +-0.15692308 0.11617673 +-0.15 0.22163511 +-0.149 -0.09330629 +-0.14875 0.234375 +-0.1475 0.23972603 +-0.14714286 0.34413766 +-0.14625 -0.0308642 +-0.14125 0.27777778 +-0.14 0.24025974 +-0.13863636 0.08765339 +-0.1375 0.29329609 +-0.1355 0.27157895 +-0.1337037 0.05646903 +-0.13291667 0.01709402 +-0.13090909 -0.08833272 +-0.13074074 0.00829962 +-0.13 0.31606027 +-0.13 0.15448604 +-0.13 0.10471204 +-0.12888889 0.11695906 +-0.12555556 0.14814815 +-0.12545455 0.01196172 +-0.12518519 0.05713427 +-0.12444444 0.20643594 +-0.12392857 0.08314967 +-0.12344828 0.07705644 +-0.121 0.10019268 +-0.11652174 0.23768116 +-0.11375 0.10877581 +-0.1115625 0.08479021 +-0.10757576 0.05117845 +-0.10733333 0.2659176 +-0.10647059 0.09332991 +-0.105 0.0976423 +-0.10441176 0.07311399 +-0.10294118 0.04956306 +-0.10285714 0.07193372 +-0.10269231 0.25865701 +-0.10269231 0.24972856 +-0.09722222 0.12745539 +-0.095 -0.00529661 +-0.09466667 0.09460738 +-0.09210526 0.14687882 +-0.08705882 -0.05602241 +-0.08541667 -0.03205128 +-0.0821875 0.21426616 +-0.08105263 0.00903546 +-0.07888889 0.06196581 +-0.07888889 -0.03878622 +-0.075 0.17806268 +-0.07315789 -0.02300236 +-0.07166667 0.19302153 +-0.07 0.33347404 +-0.06736842 0.16951037 +-0.06333333 0.20434227 +-0.06219512 0.16561277 +-0.06219512 0.17213638 +-0.06071429 0.16789396 +-0.05906977 0.15890265 +-0.0575 0.16435011 +-0.05678571 0.17027201 +-0.05208333 0.1582618 +-0.05194444 0.19674797 +-0.05166667 0.01883239 +-0.05148148 0.2589273 +-0.0498 0.15882353 +-0.04891892 0.1733227 +-0.04833333 0.15214385 +-0.04647059 0.17944798 +-0.0462 0.14204426 +-0.04588235 0.05317065 +-0.0440625 0.23542945 +-0.04358491 0.16895538 +-0.04339623 0.13951771 +-0.04285714 -0.08354219 +-0.04243243 0.17635673 +-0.04203704 0.14302166 +-0.04132075 0.16332383 +-0.0412963 0.15429157 +-0.04109091 0.14965035 +-0.04051282 0.10450334 +-0.03738095 0.13354616 +-0.03488372 0.17941003 +-0.0347619 0.16658253 +-0.0344186 0.19873627 +-0.03352941 0.11351909 +-0.03333333 0.00316106 +-0.03275 0.16699411 +-0.031 -0.03697479 +-0.03090909 0.14141414 +-0.03 0 +-0.029375 0.12665198 +-0.02823529 0.14436343 +-0.02571429 0.26308866 +-0.025 0.14719848 +-0.02428571 0.1073493 +-0.02384615 0.00624122 +-0.02333333 0.10115891 +-0.02136364 0.14080196 +-0.02076923 0.19122664 diff --git a/leafres/testarea/C4PhotoFit.f b/leafres/testarea/C4PhotoFit.f new file mode 100644 index 0000000..5014d74 --- /dev/null +++ b/leafres/testarea/C4PhotoFit.f @@ -0,0 +1,75 @@ +!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + subroutine C4PhotoFit() + implicit none + include '../testarea/LeafGasParams.h' + include '../testarea/LeafGasHybridFit.h' + integer i,ndim,k,j,iderivative,iwrong,jnon,n,icompete,isame,i2, + &isitnaninf,nave + double precision beta(20),sumsquare0,beta0(20),sumsquarecp, + &betacp(20),ftol,xtol,shortx(maxobs,10),shorty(maxobs,5), + &ftol_relax,term1,term2,ran2,history(2000,25),discount,upper,lower, + &f1dim_C4Fit,ff_pikaia + parameter(ftol=1.0d-7,xtol=1.0d-7) + external funkmin_C4Fit,f1dim_C4Fit,FCN_C4Fit,ff_pikaia + ndim=3 + beta(1)=vcmax25_ori + beta(2)=c4aparslope_ori + beta(3)=c4kp25_ori + betamin(1)=0.0d0 + betamax(1)=500.0d0 + betamin(2)=0.0d0 + betamax(2)=10.0d0 + betamin(3)=0.0d0 + betamax(3)=200000.0d0*betamax(1) + if(idord.eq.1)then + ndim=4 + beta(ndim)=rdlight25_ori + betamin(ndim)=0.0d0 + betamax(ndim)=15.0d0 + endif + isitbounded=1 + call funkmin_C4Fit(ndim,beta,sumsquare) + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=sumsquare + do i=1,ntotsamples + responses(i,1)=anet_obs(i) + forcings(i,1)=pco2i(i) + forcings(i,2)=aPPFDlf(i) + forcings(i,3)=templeaf(i) + forcings(i,4)=pres_air(i) + do j=1,4 + weitforcings(i,j)=1.0d0 + enddo + weitresponses(i,1)=1.0d0 + enddo + j=4 + i=1 + iderivative=0 + iwrong=0 + call odr_leastsquare(ndim,FCN_C4Fit,beta,ntotsamples, + &forcings(1:ntotsamples,1:j),j,responses(1:ntotsamples,1:i),i, + &weitforcings(1:ntotsamples,1:j),weitresponses(1:ntotsamples,1:i), + &iderivative,shortx(1:ntotsamples,1:j),shorty(1:ntotsamples,1:i), + &sumsquare,iwrong) +!after odr_leastsquare, forcing variables are destroyed. restore to the origninals + do i=1,ntotsamples + pco2i(i)=pco2i_ori(i) + aPPFDlf(i)=aPPFDlf_ori(i) + templeaf(i)=templeaf_ori(i) + pres_air(i)=pres_air_ori(i) + enddo + call funkmin_C4Fit(ndim,beta,sumsquare) + do i=1,10 + call nongradopt(ndim,funkmin_C4Fit,f1dim_C4Fit,beta,betamin, + &betamax,ftol,sumsquare) + call funkmin_C4Fit(ndim,beta,sumsquare) + call RepeatCompassSearch(ndim,beta,sumsquare, + &betamin,betamax,funkmin_C4Fit,f1dim_C4Fit,ftol) + call funkmin_C4Fit(ndim,beta,sumsquare) + enddo + call ilimittypestats(ntotsamples,Postiphotolimit, + &bestilimittype,bestnumrubis,bestnumrubp,bestnumtpu) + return + END subroutine C4PhotoFit diff --git a/leafres/testarea/C4SetUpLeafGasFit.f b/leafres/testarea/C4SetUpLeafGasFit.f new file mode 100644 index 0000000..767969a --- /dev/null +++ b/leafres/testarea/C4SetUpLeafGasFit.f @@ -0,0 +1,1578 @@ + subroutine C4SetUpLeafGasFit(icurveno_usr,curvename,ntotsamples0, + &CurveTypeID,anet_obs0,pco2i0,templeaf0,PARi0,pres_air0,po2i0, + &chlflphips20,pco2ambient0,trmmol0,gswmeas0,vpdl0,tempair0, + &eambient0,fo_pam0,fm_pam0,fs_pam0,pam_measlight0,stargamma25_usr, + &fkc25_usr,fko25_usr,rdlight25_usr,alpha25_usr,resistwp25_usr, + &resistch25_usr,isitmassbased,indexunit, + &siteID,Latitude,Longitude,Elevation,yearsampled,sampledoy, + &GrowingSeasonStart,GrowingSeasonEnd,standage,CanopyHeight, + &LeafAreaIndex,species,avetimeresolution,avetimesampled, + &SampleHeight,Needleage,specificLAI,nitrogencontent,carboncontent, + &phoscontent,woodporosity,sapwooddensity,leafratio) + implicit none + include '../testarea/LeafGasParams.h' + include '../testarea/LeafGasHybridFit.h' +!--------------------Inputs-------------------------------------------------------------- +!None of the inputs is changed by this subroutine +!icurveno_usr(int): the curve number +!curvename(char): the curve name +!ntotsamples0: the total number of data points +!CurveTypeID =1-3: Any measurements where limitation states are known: +! =1 limited by Rubisco +! =2 limited by RuBp regeneration +! =3 limited by TPU +! =11-25: ACi Curves. Each different CurveTypeID number represents a different A/Ci curve (i.e., different PAR levels). +! For example, five different PAR levels are used to measure five A/Ci curves with PAR = 200, 400, 600, 800, +! 1000.Use 11, 12, 13, 14, 15 to indentify points of each curve. Maxumum 15 A/Ci curves. +! The curves must be numbered consecutively. +! =31-45: ALight Curves. Each different CurveTypeID number represents a different A/Light curve (i.e., different ambient CO2 levels). +! For example, five different ambient levels are used to measure five A/Light curves with CO2a= 100, 200, 300, 400, 500. +! Use 31, 32, 33, 34, 35 to indentify points of each ALight curve. The curves must be ordered consecutively. +! =-9999: all other types of measurements. +!anet_obs0: Net photosynthetic rate (umol m-2 s-1) +!pco2i0: Intercellular CO2 concentration (Pa) +!templeaf0: leaf temperature (K) +!PARi0: The PAR level inside the chamber to which photosynthesis responds (umolm-2s-1) +!pres_air0: Atmospheric pressure (Pa) +!po2i0: Oxygen partial presssure (Pa) +!chlflphips20: Chlorophyll fluorescence (NA), that is, DeltaF/Fm, the fraction of +! absorbed PSII photons that are used in photochemistry +!pco2ambient0: Ambient CO2 partial pressure (Pa) +!trmmol0: Transpiration rate (mmolm-2s-1) +!gswmeas0: Stomatal conductance for water vapor (molm-2s-1) +!vpdl0: Water vapor pressure difference between the leaf and chamber air (Pa) +!tempair0: Air temperature inside the chamber (K) +!eambient0: Water vapor pressure inside the chamber (Pa). +!fo_pam0: fo (dark adapated) or fo' (actinic light turned off, far red light on to drain electrons from PSII) from pulse amplitude modulation (arbitrary unit). +!fm_pam0: fm (dark adapated with saturation pulse) or fm' (actinic light with saturation pulse) from pulse amplitude modulation (arbitrary unit). +!fs_pam0: steady state fluorescence from pulse amplitude modulation (arbitrary unit). +!pam_measlight0: the measuring light level (umolm-2s-1) +!stargamma25_usr: Chloroplastic CO2 compenstation point at 25oC provided by the user (Pa), set to -9999 if not available +!fkc25_usr: the Michaelis constant for CO2 at 25oC provided by the user (Pa), set to -9999 if not available +!fko25_usr: the Michaelis constant for O2 at 25oC provided by the user (Pa), set to -9999 if not available +!rdlight25_usr: Leaf dark respiration at 25oC provided by user (Pa), set to -9999 if not available +!alpha25_usr: The fraction of glycolate carbon not returned to the chloroplast at 25oC provided by user (NA), set to -9999 if not available +!resistwp25_usr: resistance to CO2 via cell walls and plasmalemma provided by user [umol-1msPa], set to -9999 if not available +!resistch25_usr: resistance to CO2 via chloroplastic envelope provided by user[umol-1msPa], set to -9999 if not available +!isitmassbased: = 0, area-based (typical) +! = 1. mass-based (atypical) +!paramunit: file unit number to write ouputs +!compareunit: file unit number to write ouputs +!stomwuecicaoutunit: file unit number to write ouputs +!wuecicacompunit: file unit number to write ouputs +!stomcompunit: file unit number to write ouputs +!fluorescenceunit: file unit number to write outputs for comparison from fluorescence fit +!fluoresparamunit: file unit number to write parameters from fluorescence fit +!General information,not used but recorded in the output files +! & siteID,Latitude,Longitude,Elevation,yearsampled, +! & sampledoy,GrowingSeasonStart,GrowingSeasonEnd, +! & standage,CanopyHeight,LeafAreaIndex,species, +! & avetimeresolution,avetimesampled,SampleHeight, +! & Needleage,specificLAI,nitrogencontent,carboncontent, +! & phoscontent,woodporosity,sapwooddensity,leafratio) + integer icurveno_usr,ntotsamples0,isitmassbased,indexunit(20) + character*100 curvename + character siteID*(*),species*(*),woodporosity*(*) + double precision CurveTypeID(ntotsamples0), + &anet_obs0(ntotsamples0),pco2i0(ntotsamples0), + &templeaf0(ntotsamples0),PARi0(ntotsamples0), + &pres_air0(ntotsamples0),po2i0(ntotsamples0), + &chlflphips20(ntotsamples0),pco2ambient0(ntotsamples0), + &trmmol0(ntotsamples0),gswmeas0(ntotsamples0),vpdl0(ntotsamples0), + &tempair0(ntotsamples0),eambient0(ntotsamples0), + &fo_pam0(ntotsamples0),fm_pam0(ntotsamples0), + &fs_pam0(ntotsamples0),pam_measlight0(ntotsamples0), + &stargamma25_usr,fkc25_usr,fko25_usr, + &rdlight25_usr,alpha25_usr,resistwp25_usr,resistch25_usr, +!General information,not used but recorded in the output files + &Latitude,Longitude,Elevation,yearsampled,sampledoy, + &GrowingSeasonStart,GrowingSeasonEnd,standage,CanopyHeight, + &LeafAreaIndex,avetimeresolution,avetimesampled,SampleHeight, + &Needleage,specificLAI,nitrogencontent,carboncontent, + &phoscontent,sapwooddensity,leafratio +!------------------------------------------------------------------------------------------ + character*30 modeltype,fourchars(20) + dimension modeltype(0:10) + + integer i,j,k,m,n,idorwp0,idorch0,irchoption1,irchoption2,i2ndary, + &numrubis,numrubp,numtpu,INFO,iderivative,idoalpha0, + &ioriorder(3*ntotsamples0),ibelong(3*ntotsamples0),ACiID(15), + &ALightID(15),paramunit,compareunit,stomwuecicaoutunit, + &stomcompunit,wuecicacompunit,fluorescenceunit, + &fluoresparamunit,aciempfitunit,alightempfitunit,idotempcoeff, + &idomeso,idohavjt + + double precision vcmax25_ini,fjmax25_ini,tpu25_ini,rdlight25_ini, + &stargamma25_ini,fkc25_ini,fko25_ini,alpha25_ini,resistwp25_ini, + &resistch25_ini,resiststomco20(ntotsamples0),term,term1,term2, + &aPPFDlf0(ntotsamples0),weitx(ntotsamples0),xmin(ntotsamples0), + &xmax(ntotsamples0),weity(ntotsamples0),beta(20),starco2i(15), + &der_starco2i(15),Amax_ACi(15),ACiinter(15),der_ACiinter(15), + &der_ACiend(15),starPAR(15),der_starPAR(15),Asat_ALight(15), + &ALightinter(15),der_ALightinter(15),der_ALightend(15), + &PhiPSIIzero_ACi(15),der_PhiPSIIzero_ACi(15),PhiPSIImax_ACi(15), + &PhiPSIIinter_ACi(15),der_PhiPSIIinter_ACi(15), + &der_PhiPSIIend_ACi(15),ExcessLightFactor(15), + &der_PhiPSII1000_ALight(15),PhiPSIIinter_ALight(15), + &der_PhiPSIIinter_ALight(15),amaxave,recycleratio(6,ntotsamples0), + &stargamma25fit(6),ACiavetempleaf(15),ACiaveaPPFDlf(15), + &ACiavepo2i(15),ALightavetempleaf(15),ALightaveCO2ambient(15), + &ALightavepo2i(15),co2c_Pa(4,ntotsamples0),co2imany(500), + &critdelPAR,critdelCi_Pa,rdlight,atp,resistwp,resistch,stargamma, + &ccc,ccj,cct,ac,aj,at,phifactor_ini,thetafactor_ini,betaPSII_ini, + &realizedfjelect,xvector(ntotsamples0),yvector(ntotsamples0), + &fvector(ntotsamples0),gvector(ntotsamples0),hvector(ntotsamples0), + &zvector(ntotsamples0),wvector(ntotsamples0),uvector(ntotsamples0), + &fo_dark,fm_dark,resp_dark,tempK_dark,ACimaxcurvature(15), + &ACimaxcurvpco2i(15),PhiPSIImaxcurvature_ACi(15), + &PhiPSIImaxcurv_ACi(15),ALightmaxcurvature(15), + &ALightmaxcurvPAR(15),PhiPSIImaxcurvature_ALight(15), + &PhiPSIImaxcurv_ALight(15),co2iRubismax25,co2iRuBpmax25, + &anetRubismax25,anetRuBpmax25,starco2a(15),der_starco2a(15), + &Amax_ACa(15),ACainter(15),der_ACainter(15),der_ACa400ppm(15), + &anet_ACa400ppm(15),PhiPSIImax_ACa(15),PhiPSIIinter_ACa(15), + &der_PhiPSIIinter_ACa(15),der_PhiPSIIend_ACa(15), + &ACamaxcurvature(15),ACamaxcurvpco2a(15),Aciavepres_air(15), + &PhiPSIImaxcurvature_ACa(15),PhiPSIImaxcurv_ACa(15), + &PhiPSIIzero_ACa(15),der_PhiPSIIzero_ACa(15),ha_darkresp_ini, + &ha_stargamma_ini,ha_vcmax_ini,ha_jmax_ini,ha_tpu_ini,ha_gmeso_ini + parameter(critdelPAR=-2.0d0,critdelCi_Pa=-2.0d0) +!use positive critdelCi_Pa and critdelPAR to indicate absolute distance +!use negative critdelCi_Pa and critdelPAR to indicate relative distance (percentage value) +!End of declaration======================================================================= + paramunit=indexunit(1) + compareunit=indexunit(2) + stomwuecicaoutunit=indexunit(3) + stomcompunit=indexunit(4) + wuecicacompunit=indexunit(5) + fluorescenceunit=indexunit(6) + fluoresparamunit=indexunit(7) + aciempfitunit=indexunit(8) + alightempfitunit=indexunit(9) +!----------------------------------------------------------------------------------------- + call commonparameters(stargamma25_ini,fkc25_ini,fko25_ini, + &alpha25_ini,ha_vcmax_ini,hd_vcmax,sv_vcmax,ha_jmax_ini,hd_jmax, + &sv_jmax,ha_tpu_ini,hd_tpu,sv_tpu,ha_gmeso_ini,hd_gmeso,sv_gmeso, + &ha_darkresp_ini,ha_stargamma_ini,ha_kc,ha_ko,abspt_lf_par, + &gascon,phifactor_ini,thetafactor_ini,betaPSII_ini) + ha_darkresp=ha_darkresp_ini + ha_stargamma=ha_stargamma_ini + ha_vcmax=ha_vcmax_ini + ha_jmax=ha_jmax_ini + ha_tpu=ha_tpu_ini + ha_gmeso=ha_gmeso_ini + call pam_parameters(ntotsamples0,fo_pam0,fm_pam0,fs_pam0, + &pam_measlight0,anet_obs0,PARi0,templeaf0,yield_ps2,yield_npq, + &qlake,qpuddle,kps2_norm,knpq_norm,fo_dark,fm_dark,resp_dark, + &tempK_dark) + j=0 + do i=1,ntotsamples0 +!this is needed because the calling routine passes any data that have valid PAM measurements. + k=0 + if(dabs(anet_obs0(i)+9999.0d0).lt.0.01d0)k=1 + if(dabs(pco2i0(i)+9999.0d0).lt.0.01d0)k=1 + if(dabs(templeaf0(i)+9999.0d0).lt.0.01d0)k=1 + if(k.eq.0)then + j=j+1 + anet_obs0(j)=anet_obs0(i) + pco2i0(j)=pco2i0(i) + templeaf0(j)=templeaf0(i) + PARi0(j)=PARi0(i) + pres_air0(j)=pres_air0(i) + po2i0(j)=po2i0(i) + chlflphips20(j)=chlflphips20(i) + pco2ambient0(j)=pco2ambient0(i) + trmmol0(j)=trmmol0(i) + gswmeas0(j)=gswmeas0(i) + vpdl0(j)=vpdl0(i) + tempair0(j)=tempair0(i) + eambient0(j)=eambient0(i) +! + fo_pam0(j)=fo_pam0(i) + fm_pam0(j)=fm_pam0(i) + fs_pam0(j)=fs_pam0(i) + pam_measlight0(j)=pam_measlight0(i) + yield_ps2(j)=yield_ps2(i) + yield_npq(j)=yield_npq(i) + qlake(j)=qlake(i) + qpuddle(j)=qpuddle(i) + kps2_norm(j)=kps2_norm(i) + knpq_norm(j)=knpq_norm(i) + endif + enddo + ntotsamples0=j +! + vcmax25_ini=50.0d0 + fjmax25_ini=1.1d0*vcmax25_ini + tpu25_ini=0.07d0*fjmax25_ini + rdlight25_ini=0.015d0*vcmax25_ini + if(resp_dark.gt.0.0d0)then +!data contain dark-adapted rd + call resp_mitocho(tempK_dark,1.0d0,ha_darkresp,gascon,term) + rdlight25_ini=resp_dark/term + if(rdlight25_usr.le.0.0d0)rdlight25_usr=rdlight25_ini + endif + resistwp25_ini=0.1d0 + resistch25_ini=0.1d0 + resistwp25max=100.0d0 + resistwp25min=0.0d0 + resistch25max=100.0d0 + resistch25min=0.0d0 + rdlight25max=10.d0 + rdlight25min=1.0d-7 + stargamma25max=10.0d0 + stargamma25min=1.0d-7 + vcmax25max=700.0d0 + vcmax25min=0.0d0 + fkc25max=100.0d0 + fkc25min=5.0d0 + fko25max=20000.0d0 + fko25min=10000.0d0 + fjmax25max=800.0d0 + fjmax25min=0.0d0 + tpu25max=20.0d0 + tpu25min=0.0d0 + alpha25max=10.0d0 + alpha25min=0.0d0 + alpha25_ini=0.001d0 + phifactormin=1.0d-5 + phifactormax=2.0d0 + thetafactormin=1.0d-5 + thetafactormax=1.2d0 + betaPSIImin=0.0d0 + betaPSIImax=1.0d0 + if(ha_darkresp.gt.0.0d0)then + ha_darkrespmin=5.0d0 + ha_darkrespmax=200.0d0 + else +!-Q10 + ha_darkrespmin=-200.0d0 + ha_darkrespmax=0.0d0 + endif + ha_stargammamin=5.0d0 + ha_stargammamax=200.0d0 + ha_vcmaxmin=40.0d0 + ha_vcmaxmax=100.0d0 + ha_jmaxmin=20.0d0 + ha_jmaxmax=100.0d0 + ha_tpumin=20.0d0 + ha_tpumax=100.0d0 + ha_gmesomin=20.0d0 + ha_gmesomax=100.0d0 + if(isitmassbased.eq.1)then + vcmax25max=2000.0d0 + fjmax25max=2000.0d0 + tpu25max=100.0d0 + rdlight25max=30.d0 + endif + nFixedPoints=0 + numACicurves=0 + numALightcurves=0 + nFreePoints=0 + do i=1,ntotsamples0 + aPPFDlf0(i)=PARi0(i)*abspt_lf_par + if(gswmeas0(i).gt.0.0d0)then + resiststomco20(i)=1.6d0/gswmeas0(i) +!unit is 1/(mol/m2/s). Now we need to change it to 1.0d0/(umol/m2/s/Pa) + resiststomco20(i)=resiststomco20(i)*pres_air0(i)*1.0d-6 + else + resiststomco20(i)=-9999.0d0 + endif + j=idnint(CurveTypeID(i)+0.1d0) + if(j.eq.1.or.j.eq.2.or.j.eq.3)then +!points whose limitation states are known. + nFixedPoints=nFixedPoints+1 + Fixedanet_obs(nFixedPoints)=anet_obs0(i) + Fixedpco2i(nFixedPoints)=pco2i0(i) + Fixedtempleaf(nFixedPoints)=templeaf0(i) + FixedaPPFDlf(nFixedPoints)=aPPFDlf0(i) + Fixedpres_air(nFixedPoints)=pres_air0(i) + Fixedpo2i(nFixedPoints)=po2i0(i) + Fixedchlflphips2(nFixedPoints)=chlflphips20(i) + Fixedpco2ambient(nFixedPoints)=pco2ambient0(i) + Fixedtrmmol(nFixedPoints)=trmmol0(i) + Fixedgswmeas(nFixedPoints)=gswmeas0(i) + Fixedvpdl(nFixedPoints)=vpdl0(i) + Fixedtempair(nFixedPoints)=tempair0(i) + Fixedeambient(nFixedPoints)=eambient0(i) +! + Fixedfo_pam(nFixedPoints)=fo_pam0(i) + Fixedfm_pam(nFixedPoints)=fm_pam0(i) + Fixedfs_pam(nFixedPoints)=fs_pam0(i) + Fixedpam_measlight(nFixedPoints)=pam_measlight0(i) + Fixedyield_ps2(nFixedPoints)=yield_ps2(i) + Fixedyield_npq(nFixedPoints)=yield_npq(i) + Fixedqlake(nFixedPoints)=qlake(i) + Fixedqpuddle(nFixedPoints)=qpuddle(i) + Fixedkps2_norm(nFixedPoints)=kps2_norm(i) + Fixedknpq_norm(nFixedPoints)=knpq_norm(i) +! + Fixedresiststomco2(nFixedPoints)=resiststomco20(i) + Prioriphotolimit(nFixedPoints)=j + else + if(j.ge.11.and.j.le.25)then +!A/Ci curves without knowing limitation states of points. + m=0 + do k=1,numACicurves + if(j.eq.ACiID(k))then + nACiPoints(k)=nACiPoints(k)+1 + ACianet_obs0(nACiPoints(k),k)=anet_obs0(i) + ACipco2i0(nACiPoints(k),k)=pco2i0(i) + ACitempleaf0(nACiPoints(k),k)=templeaf0(i) + ACiaPPFDlf0(nACiPoints(k),k)=aPPFDlf0(i) + ACipres_air0(nACiPoints(k),k)=pres_air0(i) + ACipo2i0(nACiPoints(k),k)=po2i0(i) + ACichlflphips20(nACiPoints(k),k)=chlflphips20(i) + ACipco2ambient0(nACiPoints(k),k)=pco2ambient0(i) + ACitrmmol0(nACiPoints(k),k)=trmmol0(i) + ACigswmeas0(nACiPoints(k),k)=gswmeas0(i) + ACivpdl0(nACiPoints(k),k)=vpdl0(i) + ACitempair0(nACiPoints(k),k)=tempair0(i) + ACieambient0(nACiPoints(k),k)=eambient0(i) +! + ACifo_pam0(nACiPoints(k),k)=fo_pam0(i) + ACifm_pam0(nACiPoints(k),k)=fm_pam0(i) + ACifs_pam0(nACiPoints(k),k)=fs_pam0(i) + ACipam_measlight0(nACiPoints(k),k)=pam_measlight0(i) + ACiyield_ps20(nACiPoints(k),k)=yield_ps2(i) + ACiyield_npq0(nACiPoints(k),k)=yield_npq(i) + ACiqlake0(nACiPoints(k),k)=qlake(i) + ACiqpuddle0(nACiPoints(k),k)=qpuddle(i) + ACikps2_norm0(nACiPoints(k),k)=kps2_norm(i) + ACiknpq_norm0(nACiPoints(k),k)=knpq_norm(i) +! + ACiresiststomco20(nACiPoints(k),k)=resiststomco20(i) + m=1 + endif + enddo + if(m.eq.0)then +!A new ACi curve + numACicurves=numACicurves+1 + nACiPoints(numACicurves)=1 + ACiID(numACicurves)=j + ACianet_obs0(1,numACicurves)=anet_obs0(i) + ACipco2i0(1,numACicurves)=pco2i0(i) + ACitempleaf0(1,numACicurves)=templeaf0(i) + ACiaPPFDlf0(1,numACicurves)=aPPFDlf0(i) + ACipres_air0(1,numACicurves)=pres_air0(i) + ACipo2i0(1,numACicurves)=po2i0(i) + ACichlflphips20(1,numACicurves)=chlflphips20(i) + ACipco2ambient0(1,numACicurves)=pco2ambient0(i) + ACitrmmol0(1,numACicurves)=trmmol0(i) + ACigswmeas0(1,numACicurves)=gswmeas0(i) + ACivpdl0(1,numACicurves)=vpdl0(i) + ACitempair0(1,numACicurves)=tempair0(i) + ACieambient0(1,numACicurves)=eambient0(i) +! + ACifo_pam0(1,numACicurves)=fo_pam0(i) + ACifm_pam0(1,numACicurves)=fm_pam0(i) + ACifs_pam0(1,numACicurves)=fs_pam0(i) + ACipam_measlight0(1,numACicurves)=pam_measlight0(i) + ACiyield_ps20(1,numACicurves)=yield_ps2(i) + ACiyield_npq0(1,numACicurves)=yield_npq(i) + ACiqlake0(1,numACicurves)=qlake(i) + ACiqpuddle0(1,numACicurves)=qpuddle(i) + ACikps2_norm0(1,numACicurves)=kps2_norm(i) + ACiknpq_norm0(1,numACicurves)=knpq_norm(i) +! + ACiresiststomco20(1,numACicurves)=resiststomco20(i) + endif + else + if(j.ge.31.and.j.le.45)then +!A/Light curves without knowing limitation states of points. + m=0 + do k=1,numALightcurves + if(j.eq.ALightID(k))then + nALightPoints(k)=nALightPoints(k)+1 + ALightanet_obs0(nALightPoints(k),k)=anet_obs0(i) + ALightpco2i0(nALightPoints(k),k)=pco2i0(i) + ALighttempleaf0(nALightPoints(k),k)=templeaf0(i) + ALightaPPFDlf0(nALightPoints(k),k)=aPPFDlf0(i) + ALightpres_air0(nALightPoints(k),k)=pres_air0(i) + ALightpo2i0(nALightPoints(k),k)=po2i0(i) + ALightchlflphips20(nALightPoints(k),k)=chlflphips20(i) + ALightpco2ambient0(nALightPoints(k),k)=pco2ambient0(i) + ALighttrmmol0(nALightPoints(k),k)=trmmol0(i) + ALightgswmeas0(nALightPoints(k),k)=gswmeas0(i) + ALightvpdl0(nALightPoints(k),k)=vpdl0(i) + ALighttempair0(nALightPoints(k),k)=tempair0(i) + ALighteambient0(nALightPoints(k),k)=eambient0(i) +! + ALightfo_pam0(nALightPoints(k),k)=fo_pam0(i) + ALightfm_pam0(nALightPoints(k),k)=fm_pam0(i) + ALightfs_pam0(nALightPoints(k),k)=fs_pam0(i) + ALightpam_measlight0(nALightPoints(k),k)= + &pam_measlight0(i) + ALightyield_ps20(nALightPoints(k),k)=yield_ps2(i) + ALightyield_npq0(nALightPoints(k),k)=yield_npq(i) + ALightqlake0(nALightPoints(k),k)=qlake(i) + ALightqpuddle0(nALightPoints(k),k)=qpuddle(i) + ALightkps2_norm0(nALightPoints(k),k)=kps2_norm(i) + ALightknpq_norm0(nALightPoints(k),k)=knpq_norm(i) +! + ALightresiststomco20(nALightPoints(k),k)= + &resiststomco20(i) + m=1 + endif + enddo + if(m.eq.0)then +!A new A/Light curve + numALightcurves=numALightcurves+1 + nALightPoints(numALightcurves)=1 + ALightID(numALightcurves)=j + ALightanet_obs0(1,numALightcurves)=anet_obs0(i) + ALightpco2i0(1,numALightcurves)=pco2i0(i) + ALighttempleaf0(1,numALightcurves)=templeaf0(i) + ALightaPPFDlf0(1,numALightcurves)=aPPFDlf0(i) + ALightpres_air0(1,numALightcurves)=pres_air0(i) + ALightpo2i0(1,numALightcurves)=po2i0(i) + ALightchlflphips20(1,numALightcurves)=chlflphips20(i) + ALightpco2ambient0(1,numALightcurves)=pco2ambient0(i) + ALighttrmmol0(1,numALightcurves)=trmmol0(i) + ALightgswmeas0(1,numALightcurves)=gswmeas0(i) + ALightvpdl0(1,numALightcurves)=vpdl0(i) + ALighttempair0(1,numALightcurves)=tempair0(i) + ALighteambient0(1,numALightcurves)=eambient0(i) +! + ALightfo_pam0(1,numALightcurves)=fo_pam0(i) + ALightfm_pam0(1,numALightcurves)=fm_pam0(i) + ALightfs_pam0(1,numALightcurves)=fs_pam0(i) + ALightpam_measlight0(1,numALightcurves)= + &pam_measlight0(i) + ALightyield_ps20(1,numALightcurves)=yield_ps2(i) + ALightyield_npq0(1,numALightcurves)=yield_npq(i) + ALightqlake0(1,numALightcurves)=qlake(i) + ALightqpuddle0(1,numALightcurves)=qpuddle(i) + ALightkps2_norm0(1,numALightcurves)=kps2_norm(i) + ALightknpq_norm0(1,numALightcurves)=knpq_norm(i) +! + ALightresiststomco20(1,numALightcurves)= + &resiststomco20(i) + endif + else + nFreePoints=nFreePoints+1 + Freeanet_obs(nFreePoints)=anet_obs0(i) + Freepco2i(nFreePoints)=pco2i0(i) + Freetempleaf(nFreePoints)=templeaf0(i) + FreeaPPFDlf(nFreePoints)=aPPFDlf0(i) + Freepres_air(nFreePoints)=pres_air0(i) + Freepo2i(nFreePoints)=po2i0(i) + Freechlflphips2(nFreePoints)=chlflphips20(i) + Freepco2ambient(nFreePoints)=pco2ambient0(i) + Freetrmmol(nFreePoints)=trmmol0(i) + Freegswmeas(nFreePoints)=gswmeas0(i) + Freevpdl(nFreePoints)=vpdl0(i) + Freetempair(nFreePoints)=tempair0(i) + Freeeambient(nFreePoints)=eambient0(i) +! + Freefo_pam(nFreePoints)=fo_pam0(i) + Freefm_pam(nFreePoints)=fm_pam0(i) + Freefs_pam(nFreePoints)=fs_pam0(i) + Freepam_measlight(nFreePoints)=pam_measlight0(i) + Freeyield_ps2(nFreePoints)=yield_ps2(i) + Freeyield_npq(nFreePoints)=yield_npq(i) + Freeqlake(nFreePoints)=qlake(i) + Freeqpuddle(nFreePoints)=qpuddle(i) + Freekps2_norm(nFreePoints)=kps2_norm(i) + Freeknpq_norm(nFreePoints)=knpq_norm(i) +! + Freeresiststomco2(nFreePoints)=resiststomco20(i) + endif + endif + endif + enddo +!----------------------------------------------------------------------- +!Average clusters and then sort of ACi and ALight points. No need to cluster or sort fixed and free points + do i=1,numACicurves + call clustering(nACiPoints(i),1,ACipco2i0(1:nACiPoints(i),i:i), + &critdelCi_Pa,k,ibelong) + if(k.lt.nACipoints(i))then + call aftercluster(nACiPoints(i),1, + &ACipco2i0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACipco2ambient0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiaPPFDlf0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACitempleaf0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACipres_air0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACianet_obs0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACipo2i0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACitrmmol0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACigswmeas0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACivpdl0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACitempair0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACieambient0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACichlflphips20(1:nACiPoints(i),i:i),k,ibelong,fvector) +! + call aftercluster(nACiPoints(i),1, + &ACifo_pam0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACifm_pam0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACifs_pam0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACipam_measlight0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiyield_ps20(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiyield_npq0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiqlake0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiqpuddle0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACikps2_norm0(1:nACiPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nACiPoints(i),1, + &ACiknpq_norm0(1:nACiPoints(i),i:i),k,ibelong,fvector) +! + call aftercluster(nACiPoints(i),1, + &ACiresiststomco20(1:nACiPoints(i),i:i),k,ibelong,fvector) + nACiPoints(i)=k + endif +!sort CO2i from low to high + do j=1,nACiPoints(i) + ACipco2i(j,i)=ACipco2i0(j,i) + enddo + call sort_shell(nACiPoints(i),ACipco2i(1:nACiPoints(i),i:i), + &ioriorder) + do j=1,nACiPoints(i) + ACianet_obs(j,i)=ACianet_obs0(ioriorder(j),i) + ACitempleaf(j,i)=ACitempleaf0(ioriorder(j),i) + ACiaPPFDlf(j,i)=ACiaPPFDlf0(ioriorder(j),i) + ACipo2i(j,i)=ACipo2i0(ioriorder(j),i) + ACipres_air(j,i)=ACipres_air0(ioriorder(j),i) + ACipco2ambient(j,i)=ACipco2ambient0(ioriorder(j),i) + ACitrmmol(j,i)=ACitrmmol0(ioriorder(j),i) + ACigswmeas(j,i)=ACigswmeas0(ioriorder(j),i) + ACivpdl(j,i)=ACivpdl0(ioriorder(j),i) + ACitempair(j,i)=ACitempair0(ioriorder(j),i) + ACieambient(j,i)=ACieambient0(ioriorder(j),i) + ACichlflphips2(j,i)=ACichlflphips20(ioriorder(j),i) +! + ACifo_pam(j,i)=ACifo_pam0(ioriorder(j),i) + ACifm_pam(j,i)=ACifm_pam0(ioriorder(j),i) + ACifs_pam(j,i)=ACifs_pam0(ioriorder(j),i) + ACipam_measlight(j,i)=ACipam_measlight0(ioriorder(j),i) + ACiyield_ps2(j,i)=ACiyield_ps20(ioriorder(j),i) + ACiyield_npq(j,i)=ACiyield_npq0(ioriorder(j),i) + ACiqlake(j,i)=ACiqlake0(ioriorder(j),i) + ACiqpuddle(j,i)=ACiqpuddle0(ioriorder(j),i) + ACikps2_norm(j,i)=ACikps2_norm0(ioriorder(j),i) + ACiknpq_norm(j,i)=ACiknpq_norm0(ioriorder(j),i) +! + ACiresiststomco2(j,i)=ACiresiststomco20(ioriorder(j),i) + enddo + enddo + do i=1,numALightcurves + call clustering(nALightPoints(i),1, + &ALightaPPFDlf0(1:nALightPoints(i),i:i),critdelPAR,k,ibelong) + if(k.lt.nALightpoints(i))then + call aftercluster(nALightPoints(i),1, + &ALightpco2i0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightpco2ambient0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightaPPFDlf0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALighttempleaf0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightpres_air0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightanet_obs0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightpo2i0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALighttrmmol0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightgswmeas0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightvpdl0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALighttempair0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALighteambient0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightchlflphips20(1:nALightPoints(i),i:i),k,ibelong,fvector) +! + call aftercluster(nALightPoints(i),1, + &ALightfo_pam0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightfm_pam0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightfs_pam0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightpam_measlight0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightyield_ps20(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightyield_npq0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightqlake0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightqpuddle0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightkps2_norm0(1:nALightPoints(i),i:i),k,ibelong,fvector) + call aftercluster(nALightPoints(i),1, + &ALightknpq_norm0(1:nALightPoints(i),i:i),k,ibelong,fvector) +! + call aftercluster(nALightPoints(i),1, + &ALightresiststomco20(1:nALightPoints(i),i:i),k,ibelong,fvector) + nALightPoints(i)=k + endif +!sort PAR from low to high + do j=1,nALightPoints(i) + ALightaPPFDlf(j,i)=ALightaPPFDlf0(j,i) + enddo + call sort_shell(nALightPoints(i), + &ALightaPPFDlf(1:nALightPoints(i),i:i),ioriorder) + do j=1,nALightPoints(i) + ALightanet_obs(j,i)=ALightanet_obs0(ioriorder(j),i) + ALighttempleaf(j,i)=ALighttempleaf0(ioriorder(j),i) + ALightpco2i(j,i)=ALightpco2i0(ioriorder(j),i) + ALightpo2i(j,i)=ALightpo2i0(ioriorder(j),i) + ALightpres_air(j,i)=ALightpres_air0(ioriorder(j),i) + ALightpco2ambient(j,i)=ALightpco2ambient0(ioriorder(j),i) + ALighttrmmol(j,i)=ALighttrmmol0(ioriorder(j),i) + ALightgswmeas(j,i)=ALightgswmeas0(ioriorder(j),i) + ALightvpdl(j,i)=ALightvpdl0(ioriorder(j),i) + ALighttempair(j,i)=ALighttempair0(ioriorder(j),i) + ALighteambient(j,i)=ALighteambient0(ioriorder(j),i) + ALightchlflphips2(j,i)=ALightchlflphips20(ioriorder(j),i) +! + ALightfo_pam(j,i)=ALightfo_pam0(ioriorder(j),i) + ALightfm_pam(j,i)=ALightfm_pam0(ioriorder(j),i) + ALightfs_pam(j,i)=ALightfs_pam0(ioriorder(j),i) + ALightpam_measlight(j,i)=ALightpam_measlight0(ioriorder(j),i) + ALightyield_ps2(j,i)=ALightyield_ps20(ioriorder(j),i) + ALightyield_npq(j,i)=ALightyield_npq0(ioriorder(j),i) + ALightqlake(j,i)=ALightqlake0(ioriorder(j),i) + ALightqpuddle(j,i)=ALightqpuddle0(ioriorder(j),i) + ALightkps2_norm(j,i)=ALightkps2_norm0(ioriorder(j),i) + ALightknpq_norm(j,i)=ALightknpq_norm0(ioriorder(j),i) +! + ALightresiststomco2(j,i)=ALightresiststomco20(ioriorder(j),i) + enddo + enddo +!----------------------------------------------------------------------- + do i=1,numACicurves + amaxave=0.0d0 + n=3 + do j=nACiPoints(i)-n+1,nACiPoints(i) + amaxave=amaxave+ACianet_obs(j,i) + enddo + amaxave=amaxave/dble(n) +!the sigmoidal function has better asymptotic behaviour so +!it is used for estimating anetmaxs. + iderivative=1 + INFO=0 +!INFO =0, ordinary distance regression +!INFO =1, explicit orthogonal distance regression with shortest distance within iteration +!INFO =2, explicit orthogonal distance regression with x positions as parameters + beta(1)=dabs(amaxave) + if(amaxave.lt.0.0d0)then + betamin(1)=amaxave + else + betamin(1)=0.5d0*amaxave + endif + betamax(1)=1000.0d0 + beta(2)=1.5d0 + betamin(2)=1.0d-5 + betamax(2)=1000.0d0 + beta(3)=0.1d0 + betamin(3)=0.0d0 + betamax(3)=100.0d0 + beta(4)=30.0d0 + betamin(4)=0.0d0 + betamax(4)=5000.0d0 + beta(5)=-10.0d0 + betamin(5)=-1000.0d0 + betamax(5)=1000.0d0 + k=0 + n=0 + do j=1,nACiPoints(i) + weitx(j)=1.0d0 + xmin(j)=dmax1(0.0d0,ACipco2i(j,i)-20.0d0) + xmax(j)=ACipco2i(j,i)+20.0d0 + weity(j)=1.0d0 + if(ACichlflphips2(j,i).gt.0.0d0)then + k=k+1 + yvector(k)=ACichlflphips2(j,i) + xvector(k)=ACipco2i(j,i) + uvector(k)=ACipco2ambient(j,i) + endif + if(ACipco2ambient(j,i).gt.0.0d0)then + n=n+1 + zvector(n)=ACianet_obs(j,i) + wvector(n)=ACipco2ambient(j,i) + endif + enddo +! + call GenericRegres(nACiPoints(i),1, + &ACianet_obs(1:nACiPoints(i),i:i),1,ACipco2i(1:nACiPoints(i),i:i), + &weity,weitx,5,beta,betamin,betamax,xmin,xmax,iderivative,INFO, + &fvector,gvector,sumsquare) + call properties_surffunc(5,beta,starco2i(i),der_starco2i(i), + &Amax_ACi(i),ACiinter(i),der_ACiinter(i), + &ACipco2i(nACiPoints(i):nACiPoints(i),i:i),der_ACiend(i),term, + &ACipco2i(1:1,i:i),ACipco2i(nACiPoints(i):nACiPoints(i),i:i), + &ACimaxcurvature(i),ACimaxcurvpco2i(i)) + if(n.ge.5)then + call GenericRegres(n,1,zvector,1,wvector,weity,weitx,5,beta, + &betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, + &sumsquare) + call properties_surffunc(5,beta,starco2a(i),der_starco2a(i), + &Amax_ACa(i),ACainter(i),der_ACainter(i),40.0d0,der_ACa400ppm(i), + &anet_ACa400ppm(i),wvector(1),wvector(n),ACamaxcurvature(i), + &ACamaxcurvpco2a(i)) + else + der_starco2a(i)=-9999.0d0 + Amax_ACa(i)=-9999.0d0 + ACainter(i)=-9999.0d0 + der_ACainter(i)=-9999.0d0 + der_ACa400ppm(i)=-9999.0d0 + anet_ACa400ppm(i)=-9999.0d0 + ACamaxcurvature(i)=-9999.0d0 + ACamaxcurvpco2a(i)=-9999.0d0 + endif + if(Amax_ACi(i).lt.50.0d0)amaxave=Amax_ACi(i) + j=min0(5,nACiPoints(i)) + call y_aPLUSbx(j,ACipco2i(1:j,i:i),ACianet_obs(1:j,i:i),ac,at) +!fit for y=ac+at*x + if(ac.lt.0.0d0.and.dabs(ac).lt.rdlight25max)then + rdlight25_ini=dabs(ac) + if((-ac/at).lt.stargamma25max.and. + &(-ac/at).gt.stargamma25_ini)stargamma25max=-ac/at + endif + if(amaxave.gt.0.0d0)then + vcmax25_ini=amaxave+rdlight25_ini + else + fjmax25_ini=10.0d0 + vcmax25_ini=fjmax25_ini/1.1d0 + tpu25_ini=1.0d0 + endif + if(k.ge.5)then +! beta(1)=0.50d0 +! betamin(1)=0.0d0 +! betamax(1)=1000.0d0 +! beta(2)=5.50d0 +! betamin(2)=0.0d0 +! betamax(2)=1000.0d0 +! beta(3)=1.50d0 +! betamin(3)=-10.0d0 +! betamax(3)=10.0d0 + + beta(1)=0.4d0 + betamin(1)=0.0d0 + betamax(1)=2.0d0 + beta(2)=1.5d0 + betamin(2)=1.0d-5 + betamax(2)=1000.0d0 + beta(3)=0.1d0 + betamin(3)=0.0d0 + betamax(3)=100.0d0 + beta(4)=30.0d0 + betamin(4)=0.0d0 + betamax(4)=5000.0d0 + beta(5)=0.1d0 + betamin(5)=-5.0d0 + betamax(5)=5.0d0 + do j=1,k + xmin(j)=dmax1(0.0d0,xvector(j)-20.0d0) + xmax(j)=xvector(j)+20.0d0 + enddo + call GenericRegres(k,1,yvector,1,xvector,weity,weitx,5, + &beta,betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, + &sumsquare) + call properties_surffunc(5,beta,PhiPSIIzero_ACi(i), + &der_PhiPSIIzero_ACi(i),PhiPSIImax_ACi(i), + &PhiPSIIinter_ACi(i),der_PhiPSIIinter_ACi(i),xvector(k), + &der_PhiPSIIend_ACi(i),term,xvector(1),xvector(k), + &PhiPSIImaxcurvature_ACi(i),PhiPSIImaxcurv_ACi(i)) + call GenericRegres(k,1,yvector,1,uvector,weity,weitx,5, + &beta,betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, + &sumsquare) + call properties_surffunc(5,beta,PhiPSIIzero_ACa(i), + &der_PhiPSIIzero_ACa(i),PhiPSIImax_ACa(i), + &PhiPSIIinter_ACa(i),der_PhiPSIIinter_ACa(i),uvector(k), + &der_PhiPSIIend_ACa(i),term,uvector(1),uvector(k), + &PhiPSIImaxcurvature_ACa(i),PhiPSIImaxcurv_ACa(i)) + else + PhiPSIIinter_ACi(i)=-9999.0d0 + der_PhiPSIIinter_ACi(i)=-9999.0d0 + PhiPSIIzero_ACi(i)=-9999.0d0 + der_PhiPSIIzero_ACi(i)=-9999.0d0 + PhiPSIImax_ACi(i)=-9999.0d0 + der_PhiPSIIend_ACi(i)=-9999.0d0 + PhiPSIImaxcurvature_ACi(i)=-9999.0d0 + PhiPSIImaxcurv_ACi(i)=-9999.0d0 + PhiPSIIinter_ACa(i)=-9999.0d0 + der_PhiPSIIinter_ACa(i)=-9999.0d0 + PhiPSIIzero_ACa(i)=-9999.0d0 + der_PhiPSIIzero_ACa(i)=-9999.0d0 + PhiPSIImax_ACa(i)=-9999.0d0 + der_PhiPSIIend_ACa(i)=-9999.0d0 + PhiPSIImaxcurvature_ACa(i)=-9999.0d0 + PhiPSIImaxcurv_ACa(i)=-9999.0d0 + endif +! + n=nACiPoints(i) + call y_aPLUSbxrsq(n,ACipco2i(1:n,i:i),ACianet_obs(1:n,i:i), + &ac,at,term) + resistwp25_ini=3.0d0*term**6 + resistch25_ini=term**6 + + if(term.lt.0.9d0)then + if(Amax_ACi(i).gt.0.0d0.and.Amax_ACi(i).lt.100.0d0)then + resistwp25_ini= + &resistwp25_ini*dmin1(20.0d0/Amax_ACi(i),3.0d0) + resistch25_ini= + &resistch25_ini*dmin1(20.0d0/Amax_ACi(i),2.0d0) + else + if(Amax_ACi(i).le.0.0d0)then + resistwp25_ini=6.0d0 + resistch25_ini=4.0d0 + endif + endif + endif +!almost a straightline +!determine the absolute last point of rubisco or rubp for an A/Ci curve + k=4 +10 if(n.le.k)goto 20 + if(ACianet_obs(n,i).gt.ACianet_obs(n-1,i).and. + &ACianet_obs(n-1,i).gt.ACianet_obs(n-2,i))goto 20 + do j=1,k + gvector(j)=ACipco2i(n-j+1,i) + fvector(j)=ACianet_obs(n-j+1,i) + enddo + call y_aPLUSbx(k,gvector,fvector,ac,at) +!fit for y=a+bx + if(at.gt.0.0d0)goto 20 + n=n-1 + goto 10 +20 nendaci(i)=n + if(ACianet_obs(n,i).le.ACianet_obs(n-1,i).and. + &ACianet_obs(n-1,i).le.ACianet_obs(n-2,i))nendaci(i)=nendaci(i)-1 + n=nACiPoints(i)-nendaci(i) + if(n.ge.3)then + do j=1,n + gvector(j)=ACipco2i(nendaci(i)+j,i) + fvector(j)=ACianet_obs(nendaci(i)+j,i) + enddo + call y_aPLUSbx(n,gvector,fvector,ac,at) +!fit for y=a+bx + if(dabs(at).le.1.0d-5)idoalpha0=0 + endif +!Beyond nendaci, the points can only be limited by TPU +! +!Determine the point before which all points are limited by Rubisco and/or RuBP regeneration and after which some points might be +!limited by Rubisco and/or RuBP regeneration and/or TPU until nendaci after which all points are limited by TPU. + n=1 + aj=-1.0d+20 +22 if(n.ge.(nendaci(i)-3))goto 24 + do j=1,k + gvector(j)=ACipco2i(n+j-1,i) + fvector(j)=ACianet_obs(n+j-1,i) + enddo + call y_aPLUSbx(k,gvector,fvector,ac,at) +!fit for y=a+bx + if(at.le.0.0d0)goto 24 + if(at.gt.aj)then + aj=at + else + if(at.lt.aj/5.0d0)goto 24 + endif + n=n+1 + goto 22 +24 nstartaci(i)=n-1 +! + n=nACiPoints(i) + if(n.ge.4)then + if(ACianet_obs(n,i).gt.ACianet_obs(n-1,i).and. + &ACianet_obs(n-1,i).gt.ACianet_obs(n-2,i).and. + &ACianet_obs(n-2,i).gt.ACianet_obs(n-3,i))then + nstartaci(i)=n-1 + nendaci(i)=n +!only the last point can be possibly tpu + endif + endif + if((nendaci(i)-nstartaci(i)).le.2)goto 29 +25 n=nstartaci(i) + if(ACianet_obs(n+1,i).gt.ACianet_obs(n,i))then +!if anet continues to increase, the point is not tpu limited + if((nendaci(i)-nstartaci(i)).gt.2)then + nstartaci(i)=n+1 + goto 25 + endif + else + nstartaci(i)=nstartaci(i)-1 + nstartaci(i)=max0(nstartaci(i),0) + endif +29 continue +!before nstartaci, no TPU points can occur + enddo +! + do i=1,numALightcurves + amaxave=0.0d0 + n=3 + do j=nALightPoints(i)-n+1,nALightPoints(i) + amaxave=amaxave+ALightanet_obs(j,i) + enddo + amaxave=amaxave/dble(n) +!the sigmoidal function has better asymptotic behaviour so +!it is used for estimating anetmaxs. + iderivative=1 + INFO=0 + beta(1)=dabs(amaxave) + if(amaxave.lt.0.0d0)then + betamin(1)=amaxave + else + betamin(1)=0.5d0*amaxave + endif + betamax(1)=200.0d0 + beta(2)=1.5d0 + betamin(2)=1.0d-5 + betamax(2)=1.0d+5 + beta(3)=0.1d0 + betamin(3)=0.0d0 + betamax(3)=5000.0d0 + beta(4)=30.0d0 + betamin(4)=-1000.0d0 + betamax(4)=1000.0d0 + beta(5)=-10.0d0 + betamin(5)=-100.0d0 + betamax(5)=100.0d0 + k=0 + do j=1,nALightPoints(i) + hvector(j)=ALightaPPFDlf(j,i)/abspt_lf_par + weitx(j)=1.0d0 + xmin(j)=dmax1(0.0d0,hvector(j)-20.0d0) + xmax(j)=hvector(j)+20.0d0 + weity(j)=1.0d0 + if(ALightchlflphips2(j,i).gt.0.0d0)then + k=k+1 + yvector(k)=ALightchlflphips2(j,i) + xvector(k)=hvector(j) + endif + enddo + call GenericRegres(nALightPoints(i),1, + &ALightanet_obs(1:nALightPoints(i),i:i),1,hvector(i),weity,weitx,5, + &beta,betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, + &sumsquare) + call properties_surffunc(5,beta,starPAR(i),der_starPAR(i), + &Asat_ALight(i),ALightinter(i),der_ALightinter(i), + &hvector(nALightPoints(i)),der_ALightend(i),term, + &hvector(1),hvector(nALightPoints(i)),ALightmaxcurvature(i), + &ALightmaxcurvPAR(i)) + if(Asat_ALight(i).lt.50.0d0)amaxave=Asat_ALight(i) + j=min0(5,nALightPoints(i)) + call y_aPLUSbx(j,hvector(1:j),ALightanet_obs(1:j,i:i),ac,at) +!fit for y=ac+at*x + if(ac.lt.0.0d0.and.dabs(ac).lt.rdlight25max) + &rdlight25_ini=dabs(ac) + if(amaxave.gt.0.0d0)then + fjmax25_ini=(amaxave+rdlight25_ini)*4.0d0+10.0d0 + vcmax25_ini=fjmax25_ini/1.1d0 + tpu25_ini=(amaxave+rdlight25_ini)/3.0d0 + else + fjmax25_ini=10.0d0 + vcmax25_ini=fjmax25_ini/1.1d0 + tpu25_ini=1.0d0 + endif + if(k.ge.5)then + beta(1)=0.50d0 + betamin(1)=-1000.0d0 + betamax(1)=0.0d0 + beta(2)=5.50d0 + betamin(2)=0.0d0 + betamax(2)=1000.0d0 + beta(3)=1.50d0 + betamin(3)=-10.0d0 + betamax(3)=10.0d0 + do j=1,k + xmin(j)=dmax1(0.0d0,xvector(j)-20.0d0) + xmax(j)=xvector(j)+20.0d0 + enddo + call GenericRegres(k,1,yvector,1,xvector,weity,weitx,3, + &beta,betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, + &sumsquare) + call properties_surffunc(3,beta,term,term1,term2, + &PhiPSIIinter_ALight(i),der_PhiPSIIinter_ALight(i), + &1000.0d0,der_PhiPSII1000_ALight(i),ExcessLightFactor(i), + &xvector(1),xvector(k),PhiPSIImaxcurvature_ALight(i), + &PhiPSIImaxcurv_ALight(i)) + der_PhiPSIIinter_ALight(i)=der_PhiPSIIinter_ALight(i)*1000.0d0 + der_PhiPSII1000_ALight(i)=der_PhiPSII1000_ALight(i)*1000.0d0 + ExcessLightFactor(i)=1.0d0-ExcessLightFactor(i)/0.83d0 + else + PhiPSIIinter_ALight(i)=-9999.0d0 + der_PhiPSIIinter_ALight(i)=-9999.0d0 + der_PhiPSII1000_ALight(i)=-9999.0d0 + ExcessLightFactor(i)=-9999.0d0 + PhiPSIImaxcurvature_ALight(i)=-9999.0d0 + PhiPSIImaxcurv_ALight(i)=-9999.0d0 + endif +!determine the absolute last point of rubp for an A/Light curve + k=4 + n=nALightPoints(i) +30 if(n.le.k)goto 40 + if(ALightanet_obs(n,i).gt.ALightanet_obs(n-1,i).and. + &ALightanet_obs(n-1,i).gt.ALightanet_obs(n-2,i))goto 40 + do j=1,k + gvector(j)=ALightaPPFDlf(n-j+1,i) + fvector(j)=ALightanet_obs(n-j+1,i) + enddo + call y_aPLUSbx(k,gvector,fvector,ac,at) +!fit for y=ac+at*x + if(at.gt.0.0d0)goto 40 + n=n-1 + goto 30 +40 nendalight(i)=n + if(ALightanet_obs(n,i).le.ALightanet_obs(n-1,i).and. + &ALightanet_obs(n-1,i).le.ALightanet_obs(n-2,i)) + &nendalight(i)=nendalight(i)-1 +!Beyond nendalight, the points can only be limited by Rubisco or TPU because they have constant or decreasing anet with inceased light +! +!Determine the point before which all points are limited by RuBP regeneration and after which some points might be limited by RuBP until +!nendalight. + n=1 + aj=-1.0d+20 +50 if(n.ge.(nendalight(i)-3))goto 55 + do j=1,k + gvector(j)=ALightaPPFDlf(n+j-1,i) + fvector(j)=ALightanet_obs(n+j-1,i) + enddo + call y_aPLUSbx(k,gvector,fvector,ac,at) +!fit for y=ac+at*x + if(at.lt.1.0d-4)goto 55 + if(at.gt.aj)then + aj=at + else + if(at.lt.aj/5.0d0)goto 55 + endif + n=n+1 + goto 50 +55 if(n.ge.(nendalight(i)-1))then + n=nendalight(i)-1 + goto 56 + endif + if(ALightanet_obs(n,i).lt.ALightanet_obs(n+1,i))then + n=n+1 + goto 55 + endif +56 nstartalight(i)=n-1 +!before nstartalight, no rubisco or tpu points can occur because anet increases with increased light, indicating RuBP regeneration +!limitation +! + n=nALightPoints(i) + if(n.ge.4)then + if(ALightanet_obs(n,i).gt.ALightanet_obs(n-1,i).and. + &ALightanet_obs(n-1,i).gt.ALightanet_obs(n-2,i).and. + &ALightanet_obs(n-2,i).gt.ALightanet_obs(n-3,i))then + if(ALightpco2i(n,i).le.ALightpco2i(n-1,i).and. + &ALightpco2i(n-1,i).le.ALightpco2i(n-2,i).and. + &ALightpco2i(n-2,i).le.ALightpco2i(n-3,i))then + nstartalight(i)=n-1 + nendalight(i)=n +!only the last point can be possibly Rubico or TPU because anet continues to rise while Ci is constant or decreasing + endif + endif + endif + if((nendalight(i)-nstartalight(i)).le.2)goto 64 +62 n=nstartalight(i) + if(ALightanet_obs(n+1,i).gt.ALightanet_obs(n,i).and. + &ALightpco2i(n+1,i).le.ALightpco2i(n,i))then +!continue until we reach the point when anet does not increase while pco2i does not decrease, i,e, if anet continues +!to increase while pco2i continues to decrease, we assumue this point is still limited by rubp regeneration. + if((nendalight(i)-nstartalight(i)).gt.2)then + nstartalight(i)=n+1 + goto 62 + endif + else + nstartalight(i)=nstartalight(i)-1 + nstartalight(i)=max0(nstartalight(i),0) + endif +64 continue +!we generally assume the points of an A/Light curve are lined up in a sequence of (RuBP, TPU and Rubisco), which is indicated by +!ialightorder=0. However, if Ci increases steadily from nstartalight to the end, we assume a sequence of (RuBP, Rubisco and TPU), +!which is indicated by ialightorder=2. + ialightorder(i)=2 + do j=nstartalight(i)+1,nALightPoints(i) + if(ALightpco2i(j,i).lt.ALightpco2i(j-1,i))ialightorder(i)=0 + enddo + enddo +!------------------------------------------------------------------------------------ +!Merge Fixed points, ACi points, ALight points, and Free points into single arrays. Do not change this order. + ntotsamples=0 + do i=1,nFixedPoints + ntotsamples=ntotsamples+1 + anet_obs(ntotsamples)=Fixedanet_obs(i) + pco2i(ntotsamples)=Fixedpco2i(i) + templeaf(ntotsamples)=Fixedtempleaf(i) + aPPFDlf(ntotsamples)=FixedaPPFDlf(i) + pres_air(ntotsamples)=Fixedpres_air(i) + po2i(ntotsamples)=Fixedpo2i(i) + chlflphips2(ntotsamples)=Fixedchlflphips2(i) + pco2ambient(ntotsamples)=Fixedpco2ambient(i) + trmmol(ntotsamples)=Fixedtrmmol(i) + gswmeas(ntotsamples)=Fixedgswmeas(i) + vpdl(ntotsamples)=Fixedvpdl(i) + tempair(ntotsamples)=Fixedtempair(i) + eambient(ntotsamples)=Fixedeambient(i) +! + fo_pam(ntotsamples)=Fixedfo_pam(i) + fm_pam(ntotsamples)=Fixedfm_pam(i) + fs_pam(ntotsamples)=Fixedfs_pam(i) + pam_measlight(ntotsamples)=Fixedpam_measlight(i) + yield_ps2(ntotsamples)=Fixedyield_ps2(i) + yield_npq(ntotsamples)=Fixedyield_npq(i) + qlake(ntotsamples)=Fixedqlake(i) + qpuddle(ntotsamples)=Fixedqpuddle(i) + kps2_norm(ntotsamples)=Fixedkps2_norm(i) + knpq_norm(ntotsamples)=Fixedknpq_norm(i) +! + resiststomco2(ntotsamples)=Fixedresiststomco2(i) + enddo + do i=1,numACicurves + ACiavetempleaf(i)=0.0d0 + ACiaveaPPFDlf(i)=0.0d0 + ACiavepo2i(i)=0.0d0 + ACiavepres_air(i)=0.0d0 + do j=1,nACiPoints(i) + ntotsamples=ntotsamples+1 + anet_obs(ntotsamples)=ACianet_obs(j,i) + pco2i(ntotsamples)=ACipco2i(j,i) + templeaf(ntotsamples)=ACitempleaf(j,i) + aPPFDlf(ntotsamples)=ACiaPPFDlf(j,i) + pres_air(ntotsamples)=ACipres_air(j,i) + po2i(ntotsamples)=ACipo2i(j,i) + chlflphips2(ntotsamples)=ACichlflphips2(j,i) + pco2ambient(ntotsamples)=ACipco2ambient(j,i) + trmmol(ntotsamples)=ACitrmmol(j,i) + gswmeas(ntotsamples)=ACigswmeas(j,i) + vpdl(ntotsamples)=ACivpdl(j,i) + tempair(ntotsamples)=ACitempair(j,i) + eambient(ntotsamples)=ACieambient(j,i) +! + fo_pam(ntotsamples)=ACifo_pam(j,i) + fm_pam(ntotsamples)=ACifm_pam(j,i) + fs_pam(ntotsamples)=ACifs_pam(j,i) + pam_measlight(ntotsamples)=ACipam_measlight(j,i) + yield_ps2(ntotsamples)=ACiyield_ps2(j,i) + yield_npq(ntotsamples)=ACiyield_npq(j,i) + qlake(ntotsamples)=ACiqlake(j,i) + qpuddle(ntotsamples)=ACiqpuddle(j,i) + kps2_norm(ntotsamples)=ACikps2_norm(j,i) + knpq_norm(ntotsamples)=ACiknpq_norm(j,i) +! + resiststomco2(ntotsamples)=ACiresiststomco2(j,i) + ACiavetempleaf(i)=ACiavetempleaf(i)+ACitempleaf(j,i) + ACiaveaPPFDlf(i)=ACiaveaPPFDlf(i)+ACiaPPFDlf(j,i) + ACiavepo2i(i)=ACiavepo2i(i)+ACipo2i(j,i) + ACiavepres_air(i)=ACiavepres_air(i)+ACipres_air(j,i) + enddo + ACiavetempleaf(i)=ACiavetempleaf(i)/dble(nACiPoints(i)) + ACiaveaPPFDlf(i)=ACiaveaPPFDlf(i)/dble(nACiPoints(i)) + ACiavepo2i(i)=ACiavepo2i(i)/dble(nACiPoints(i)) + ACiavepres_air(i)=ACiavepres_air(i)/dble(nACiPoints(i)) + enddo + do i=1,numALightcurves + ALightavetempleaf(i)=0.0d0 + ALightaveCO2ambient(i)=0.0d0 + ALightavepo2i(i)=0.0d0 + do j=1,nALightPoints(i) + ntotsamples=ntotsamples+1 + anet_obs(ntotsamples)=ALightanet_obs(j,i) + pco2i(ntotsamples)=ALightpco2i(j,i) + templeaf(ntotsamples)=ALighttempleaf(j,i) + aPPFDlf(ntotsamples)=ALightaPPFDlf(j,i) + pres_air(ntotsamples)=ALightpres_air(j,i) + po2i(ntotsamples)=ALightpo2i(j,i) + chlflphips2(ntotsamples)=ALightchlflphips2(j,i) + pco2ambient(ntotsamples)=ALightpco2ambient(j,i) + trmmol(ntotsamples)=ALighttrmmol(j,i) + gswmeas(ntotsamples)=ALightgswmeas(j,i) + vpdl(ntotsamples)=ALightvpdl(j,i) + tempair(ntotsamples)=ALighttempair(j,i) + eambient(ntotsamples)=ALighteambient(j,i) +! + fo_pam(ntotsamples)=ALightfo_pam(j,i) + fm_pam(ntotsamples)=ALightfm_pam(j,i) + fs_pam(ntotsamples)=ALightfs_pam(j,i) + pam_measlight(ntotsamples)=ALightpam_measlight(j,i) + yield_ps2(ntotsamples)=ALightyield_ps2(j,i) + yield_npq(ntotsamples)=ALightyield_npq(j,i) + qlake(ntotsamples)=ALightqlake(j,i) + qpuddle(ntotsamples)=ALightqpuddle(j,i) + kps2_norm(ntotsamples)=ALightkps2_norm(j,i) + knpq_norm(ntotsamples)=ALightknpq_norm(j,i) +! + resiststomco2(ntotsamples)=ALightresiststomco2(j,i) + ALightavetempleaf(i)=ALightavetempleaf(i)+ALighttempleaf(j,i) + ALightaveCO2ambient(i)=ALightaveCO2ambient(i)+ + &ALightpco2ambient(j,i) + ALightavepo2i(i)=ALightavepo2i(i)+ALightpo2i(j,i) + enddo + ALightavetempleaf(i)=ALightavetempleaf(i)/dble(nALightPoints(i)) + ALightaveCO2ambient(i)=ALightaveCO2ambient(i)/ + &dble(nALightPoints(i)) + ALightavepo2i(i)=ALightavepo2i(i)/dble(nALightPoints(i)) + enddo + do i=1,nFreePoints + ntotsamples=ntotsamples+1 + anet_obs(ntotsamples)=Freeanet_obs(i) + pco2i(ntotsamples)=Freepco2i(i) + templeaf(ntotsamples)=Freetempleaf(i) + aPPFDlf(ntotsamples)=FreeaPPFDlf(i) + pres_air(ntotsamples)=Freepres_air(i) + po2i(ntotsamples)=Freepo2i(i) + chlflphips2(ntotsamples)=Freechlflphips2(i) + pco2ambient(ntotsamples)=Freepco2ambient(i) + trmmol(ntotsamples)=Freetrmmol(i) + gswmeas(ntotsamples)=Freegswmeas(i) + vpdl(ntotsamples)=Freevpdl(i) + tempair(ntotsamples)=Freetempair(i) + eambient(ntotsamples)=Freeeambient(i) +! + fo_pam(ntotsamples)=Freefo_pam(i) + fm_pam(ntotsamples)=Freefm_pam(i) + fs_pam(ntotsamples)=Freefs_pam(i) + pam_measlight(ntotsamples)=Freepam_measlight(i) + yield_ps2(ntotsamples)=Freeyield_ps2(i) + yield_npq(ntotsamples)=Freeyield_npq(i) + qlake(ntotsamples)=Freeqlake(i) + qpuddle(ntotsamples)=Freeqpuddle(i) + kps2_norm(ntotsamples)=Freekps2_norm(i) + knpq_norm(ntotsamples)=Freeknpq_norm(i) +! + resiststomco2(ntotsamples)=Freeresiststomco2(i) + enddo + ntotphips2=0 + term1=1.0d+99 + term2=-1.0d+99 + do i=1,ntotsamples + pco2i_ori(i)=pco2i(i) + templeaf_ori(i)=templeaf(i) + if(templeaf(i).lt.term1)term1=templeaf(i) + if(templeaf(i).gt.term2)term2=templeaf(i) + aPPFDlf_ori(i)=aPPFDlf(i) + pres_air_ori(i)=pres_air(i) + po2i_ori(i)=po2i(i) + chlflphips2_ori(i)=chlflphips2(i) + pco2ambient_ori(i)=pco2ambient(i) + trmmol_ori(i)=trmmol(i) + gswmeas_ori(i)=gswmeas(i) + vpdl_ori(i)=vpdl(i) + tempair_ori(i)=tempair(i) + eambient_ori(i)=eambient(i) + resiststomco2_ori(i)=resiststomco2(i) + if(chlflphips2_ori(i).gt.0.0d0)then + ntotphips2=ntotphips2+1 + endif + enddo + idotempcoeff=0 + if((term2-term1).gt.2.0d0)idotempcoeff=1 +!If temperature variation in the dataset is larger enough, try to estimate parameters in temperature response functions +!All variables are now in the right order. All ACi curves are ordered and All ALight curves are ordered. +!------------------------------------------------------------------------------------------------------- +! + do i=1,ntotsamples + anet_pred(i)=-9999.0d0 + pco2i_pred(i)=-9999.0d0 + pco2c(i)=-9999.0d0 + anet_pred_flu(i)=-9999.0d0 + pco2i_pred_flu(i)=-9999.0d0 + pco2c_anet_flu(i)=-9999.0d0 + pco2c_pco2i_flu(i)=-9999.0d0 + enddo + + if(ntotphips2.gt.5)then + do idorch=1,1 +!we do a fluorescence only fit + Prioriknowlimit=-1 + ifitmode=1 +!ifitmode: =-2, ordinary fitting with pco2i calculated as a function of anet +!ifitmode: =-1, ordinary fitting with anet calculated as a function of pco2i +!ifitmode: =1, orthogonal fitting with anet calculated as a function of pco2i +!ifitmode: =2, orthogonal fitting with pco2i calculated as a function of anet + idorwp=1 + resistwp25_ori=resistwp25_ini + if(idorch.eq.1)then + resistch25_ori=resistch25_ini + else + resistch25_ori=0.0d0 + endif + if(rdlight25_usr.le.0.0d0)then + idord=1 + rdlight25_ori=rdlight25_ini + else + idord=0 + rdlight25_ori=rdlight25_usr + endif + idostargamma=1 + idobetaPSII=1 + idoha_darkresp=idotempcoeff + idoha_stargamma=idotempcoeff + idoha_gmeso=idotempcoeff + stargamma25_ori=stargamma25_ini + betaPSII_ori=betaPSII_ini + fjmax25_ori=fjmax25_ini + phifactor_ori=phifactor_ini + thetafactor_ori=thetafactor_ini + ha_darkresp_ori=ha_darkresp_ini + ha_stargamma_ori=ha_stargamma_ini + ha_gmeso_ori=ha_gmeso_ini + ha_jmax_ori=ha_jmax_ini + call HybridCombinatorial() + do j=1,ntotsamples + call gmesoontemp(templeaf(j),1.0d0,gascon,ha_gmeso, + &hd_gmeso,sv_gmeso,term) + resistwp=resistwp25/term + resistch=resistch25/term + call resp_mitocho(templeaf(j),rdlight25,ha_darkresp, + &gascon,rdlight) + call co2compens(templeaf(j),stargamma25, + &ha_stargamma,gascon,stargamma) + write(fluorescenceunit,370)trim(curvename),pco2i_ori(j), + &pco2i_pred(j),pco2c(j),anet_obs(j),anet_pred(j), + &pco2ambient_ori(j),po2i_ori(j)/1000.0d0,eambient_ori(j)/1000.0d0, + &pres_air_ori(j)/1000.0d0,vpdl_ori(j)/1000.0d0, + &aPPFDlf(j)/abspt_lf_par,templeaf_ori(j)-273.15d0, + &tempair_ori(j)-273.15d0,trmmol_ori(j),gswmeas_ori(j), + &chlflphips2_ori(j),rdlight25,resistwp25,resistch25, + &stargamma25,betaPSII,sumsquare,ha_darkresp,resistwp,resistch, + &ha_stargamma,fo_pam(j),fm_pam(j),fs_pam(j),pam_measlight(j), + &yield_ps2(j),yield_npq(j),qlake(j),qpuddle(j),kps2_norm(j), + &knpq_norm(j) + enddo + if(idorch.eq.0)then + fvector(1)=rdlight25 + fvector(2)=resistwp25 + fvector(3)=stargamma25 + fvector(4)=betaPSII + endif + enddo + if(ntotlights.gt.0)then +!Jmax estimation with fluorescence data. +!Only points before nstartalight are used because these points are apparently limited by RuBP regeneration and therefore +!the electron transport equation applies. ntotlights is the number of points that are clearly limited by RuBP regeneration. + modeltype(0)='PARi' + modeltype(1)='TempLeaf' + modeltype(2)='PhiPSII_obs' + modeltype(3)='PhiPSII_pred' + modeltype(4)='Jmax25' + modeltype(5)='phifactor' + modeltype(6)='thetafactor' + modeltype(7)='ha_jmax' + modeltype(8)='SumSquare' + write(fluorescenceunit,305)(trim(modeltype(j)),j=0,8) + do j=1,ntotlights + write(fluorescenceunit,306)aparlights(j)/abspt_lf_par, + &templflights(j)-273.15d0,flphips2lights(j),PhiPSIIlights_pred(j), + &fjmax25,phifactor,thetafactor,ha_jmax,flujmaxfval + enddo + else + fjmax25=-9999.0d0 + phifactor=-9999.0d0 + thetafactor=-9999.0d0 + flujmaxfval=-9999.0d0 + endif + term=tempK_dark-273.15d0 + if(term.lt.-10000.0d0)term=-9999.0d0 + write(fluoresparamunit,380)trim(curvename),fjmax25,rdlight25, + &fvector(1),resistwp25,fvector(2),resistch25,stargamma25, + &fvector(3),phifactor,thetafactor,betaPSII,fvector(4),fo_dark, + &fm_dark,resp_dark,term,sumsquare,flujmaxfval + endif +!---------------------------------------------------------------- + idophifactor=0 + idothetafactor=0 + idobetaPSII=0 + ifitmode=-1 +!ifitmode: =-2, ordinary fitting with pco2i calculated as a function of anet +!ifitmode: =-1, ordinary fitting with anet calculated as a function of pco2i +!ifitmode: =1, orthogonal fitting with anet calculated as a function of pco2i +!ifitmode: =2, orthogonal fitting with pco2i calculated as a function of anet + if(numALightcurves.ge.1)then + idophifactor=1 + idothetafactor=1 + endif + if(ntotphips2.ge.2)idobetaPSII=1 + modeltype(0)='NoSuitModel' + modeltype(1)='RubiscoRuBpTpu' + modeltype(2)='RubiscoRuBp' + modeltype(3)='RubiscoTpu' + modeltype(4)='RuBpTpu' + modeltype(5)='Rubisco' + modeltype(6)='RuBp' + modeltype(7)='Tpu' + fourchars(1)='CO2i' + fourchars(2)='CO2cc' + fourchars(3)='Ac' + fourchars(4)='CO2cj' + fourchars(5)='Aj' + fourchars(6)='CO2ct' + fourchars(7)='At' + do k=1,4 + do j=1,ntotsamples + co2c_Pa(k,j)=-9999.0d0 + recycleratio(k,j)=-9999.0d0 + recycleratio(5,j)=-9999.0d0 + recycleratio(6,j)=-9999.0d0 + enddo + enddo + if(rdlight25_usr.gt.0.0d0)then + idord=0 + rdlight25_ori=rdlight25_usr + else + idord=1 + rdlight25_ori=rdlight25_ini + endif + vcmax25_ori=vcmax25_ini + c4kp25_ori=20000.0d0*vcmax25_ini + c4aparslope_ori=0.05d0 +!------------------------------------------------------------------- + call C4PhotoFit() +!------------------------------------------------------------------- + idomeso=-9999 + idohavjt=-9999 + idostargamma=-9999 + idokc=-9999 + idoko=-9999 + idoalpha=-9999 + idobetaPSII=-9999 + do j=1,ntotsamples + pco2i_pred(j)=pco2i_ori(j) + pco2c(j)=pco2i_ori(j) + bestiphotolimit(j)=Postiphotolimit(j) + recycleratio(1,j)=-9999.0d0 + PhiPSII_pred(j)=-9999.0d0 + pco2i_pred_flu(j)=-9999.0d0 + anet_pred_flu(j)=-9999.0d0 + pco2c_pco2i_flu(j)=-9999.0d0 + pco2c_anet_flu(j)=-9999.0d0 + write(compareunit,300)trim(curvename),idomeso,idohavjt, + &idostargamma,idokc,idoko,idord,idoalpha,idobetaPSII, + &pco2i_ori(j),pco2i_pred(j),pco2c(j),anet_obs(j),anet_pred(j), + &bestiphotolimit(j),recycleratio(1,j),pco2ambient_ori(j), + &po2i_ori(j)/1000.0d0,eambient_ori(j)/1000.0d0, + &pres_air_ori(j)/1000.0d0,vpdl_ori(j)/1000.0d0, + &aPPFDlf(j)/abspt_lf_par,templeaf_ori(j)-273.15d0, + &tempair_ori(j)-273.15d0,trmmol_ori(j),gswmeas_ori(j), + &chlflphips2_ori(j),PhiPSII_pred(j),pco2i_pred_flu(j), + &anet_pred_flu(j),pco2c_pco2i_flu(j),pco2c_anet_flu(j) + enddo +!Generate mono-limiting curves + k=nFixedPoints + do i=1,numACicurves + n=k+nACiPoints(i) + j=n-k + call ilimittypestats(j,bestiphotolimit(k+1:n), + &Currentilimittype,numrubis,numrubp,numtpu) + write(compareunit,310)(trim(fourchars(j)),j=1,7) + co2imany(1)=1.0d0 + co2imany(2)=2.0d0 + co2imany(3)=3.0d0 + co2imany(4)=4.0d0 + co2imany(5)=5.0d0 + co2imany(6)=6.0d0 + m=6 + term=ACipco2i(nACiPoints(i),i)+10.0d0 + do while (co2imany(m).le.term) + m=m+1 + co2imany(m)=co2imany(m-1)+2.5d0 + enddo + do j=1,m + ccc=co2imany(j) + ccj=co2imany(j) + cct=co2imany(j) + Currentilimittype=5 + call c4leafanetmodel(Currentilimittype,ACiaveaPPFDlf(i), + &ACiavetempleaf(i),co2imany(j),ACiavepres_air(i),vcmax25, + &c4aparslope,c4kp25,rdlight25,ac,bestilimittype) + Currentilimittype=6 + call c4leafanetmodel(Currentilimittype,ACiaveaPPFDlf(i), + &ACiavetempleaf(i),co2imany(j),ACiavepres_air(i),vcmax25, + &c4aparslope,c4kp25,rdlight25,aj,bestilimittype) + Currentilimittype=7 + call c4leafanetmodel(Currentilimittype,ACiaveaPPFDlf(i), + &ACiavetempleaf(i),co2imany(j),ACiavepres_air(i),vcmax25, + &c4aparslope,c4kp25,rdlight25,at,bestilimittype) + write(compareunit,320)co2imany(j),ccc,ac,ccj,aj,cct,at + k=n + enddo + enddo + write(compareunit,*) +!------------------------------------------------------------------------------ + bestilimittype=1 + write(paramunit,330)trim(curvename), + &trim(modeltype(bestilimittype)),vcmax25,c4aparslope,c4kp25, + &rdlight25,bestnumrubis,bestnumrubp,bestnumtpu,ntotsamples, + &bestsumsquare, + &trim(siteID),Latitude,Longitude,Elevation,yearsampled,sampledoy, + &GrowingSeasonStart,GrowingSeasonEnd,standage,CanopyHeight, + &LeafAreaIndex,trim(species),avetimeresolution,avetimesampled, + &SampleHeight,Needleage,specificLAI,nitrogencontent,carboncontent, + &phoscontent,trim(woodporosity),sapwooddensity,leafratio + if(numACicurves.gt.0)then + do i=1,numACicurves + write(aciempfitunit,390)trim(curvename),i,starco2i(i), + &der_starco2i(i),Amax_ACi(i),ACiinter(i),der_ACiinter(i), + &der_ACiend(i),PhiPSIImax_ACi(i),PhiPSIIinter_ACi(i), + &der_PhiPSIIinter_ACi(i),der_PhiPSIIend_ACi(i), + &ACimaxcurvature(i),ACimaxcurvpco2i(i), + &PhiPSIImaxcurvature_ACi(i),PhiPSIImaxcurv_ACi(i), + &starco2a(i),der_starco2a(i),Amax_ACa(i),ACainter(i), + &der_ACainter(i),der_ACa400ppm(i),anet_ACa400ppm(i), + &PhiPSIImax_ACa(i),PhiPSIIinter_ACa(i),der_PhiPSIIinter_ACa(i), + &der_PhiPSIIend_ACa(i),ACamaxcurvature(i),ACamaxcurvpco2a(i), + &PhiPSIImaxcurvature_ACa(i),PhiPSIImaxcurv_ACa(i),ACiavetempleaf(i) + &-273.15d0,ACiaveaPPFDlf(i)/abspt_lf_par,ACiavepo2i(i), + &trim(siteID),Latitude,Longitude,Elevation,yearsampled,sampledoy, + &GrowingSeasonStart,GrowingSeasonEnd,standage,CanopyHeight, + &LeafAreaIndex,trim(species),avetimeresolution,avetimesampled, + &SampleHeight,Needleage,specificLAI,nitrogencontent,carboncontent, + &phoscontent,trim(woodporosity),sapwooddensity,leafratio + enddo + endif + if(numALightcurves.gt.0)then + do i=1,numALightcurves + write(alightempfitunit,360)trim(curvename),i,starPAR(i), + &der_starPAR(i),Asat_ALight(i),ALightinter(i),der_ALightinter(i), + &der_ALightend(i),PhiPSIIinter_ALight(i), + &der_PhiPSIIinter_ALight(i),ExcessLightFactor(i), + &der_PhiPSII1000_ALight(i),ALightmaxcurvature(i), + &ALightmaxcurvPAR(i),PhiPSIImaxcurvature_ALight(i), + &PhiPSIImaxcurv_ALight(i),ALightavetempleaf(i)-273.15d0, + &ALightaveCO2ambient(i),ALightavepo2i(i), + &trim(siteID),Latitude,Longitude,Elevation,yearsampled,sampledoy, + &GrowingSeasonStart,GrowingSeasonEnd,standage,CanopyHeight, + &LeafAreaIndex,trim(species),avetimeresolution,avetimesampled, + &SampleHeight,Needleage,specificLAI,nitrogencontent,carboncontent, + &phoscontent,trim(woodporosity),sapwooddensity,leafratio + enddo + endif + return +300 format(a,',',8(i0,','),5(f0.6,','),i0,',',16(f0.6,','),f0.6) +305 format(8(a,','),a) +306 format(8(f0.6,','),f0.6) +310 format(6(a,','),a) +320 format(6(f0.6,','),f0.6) +330 format(2(a,','),4(f0.6,','),4(i0,','),f0.6,',',a,',',10(f0.6,','), + &a,',',8(f0.6,','),a,',',f0.6,',',f0.6) +360 format(a,',',i0,',',17(f0.6,','),a,',',10(f0.6,','),a,',', + &8(f0.6,','),a,',',f0.6,',',f0.6) +370 format(a,',',35(f0.6,','),f0.6) +380 format(a,',',17(f0.6,','),f0.6) +390 format(a,',',i0,',',32(f0.6,','),a,',', + &10(f0.6,','),a,',',8(f0.6,','),a,',',f0.6,',',f0.6) + end subroutine C4SetUpLeafGasFit diff --git a/leafres/testarea/HybridCombinatorial.f b/leafres/testarea/HybridCombinatorial.f index bace95a..8cf8e76 100644 --- a/leafres/testarea/HybridCombinatorial.f +++ b/leafres/testarea/HybridCombinatorial.f @@ -233,7 +233,7 @@ 2001 continue enddo -! goto 1000 + goto 1000 gacontrol(1)=200.0d0 gacontrol(2)=2000.0d0 diff --git a/leafres/testarea/LeafGasFit_Stom.f b/leafres/testarea/LeafGasFit_Stom.f index fe3d03e..027c37d 100644 --- a/leafres/testarea/LeafGasFit_Stom.f +++ b/leafres/testarea/LeafGasFit_Stom.f @@ -596,8 +596,8 @@ do j=1,npoints write(unitwuecicacomp,380)curveno,trim(curvename),co2a_ppm(j), &vpdl(j),wue(j),wuemod(j),cicameas(j),cicamod(j),wue_intrin(j), - &wue_intrinmod(j),((cccimeas(k,j),cccimod(k,j)),k=1,4), - &((co2recycleratio(k,j),recycmod(k,j)),k=1,6) + &wue_intrinmod(j),(cccimeas(k,j),cccimod(k,j),k=1,4), + &(co2recycleratio(k,j),recycmod(k,j),k=1,6) enddo write(unitparamsout,390)curveno,trim(curvename),npoints_stom, &co2threshold,co2current,vpdl_ref,ballintersurf,ballslopesurf, @@ -608,10 +608,10 @@ &dewarrsqgsw,wueref,der_wueref,rsqwue,(alfit(i),i=1,5), &wueref_intrin,der_wueref_intrin,rsqwue_intrin,(blfit(i),i=1,5), &cicaref,der_cicaref,rsqcica,(cicafit(i),i=1,5), - &avetleaf,avetair,avevpdl,avepari,((ccciref(i),der_ccciref(i), - &rsqccci(i),(cccifit(i,j),j=1,6)),i=1,4), - &((recycref(i),der_recycref(i), - &rsqrecyc(i),(recycfit(i,j),j=1,5)),i=1,6), + &avetleaf,avetair,avevpdl,avepari,(ccciref(i),der_ccciref(i), + &rsqccci(i),(cccifit(i,j),j=1,6),i=1,4), + &(recycref(i),der_recycref(i), + &rsqrecyc(i),(recycfit(i,j),j=1,5),i=1,6), ! &trim(siteID),Latitude,Longitude,Elevation,yearsampled, &sampledoy,GrowingSeasonStart,GrowingSeasonEnd, diff --git a/leafres/testarea/LeafGasPISCAL_mpi.f b/leafres/testarea/LeafGasPISCAL_mpi.f index fdcb914..e727e21 100644 --- a/leafres/testarea/LeafGasPISCAL_mpi.f +++ b/leafres/testarea/LeafGasPISCAL_mpi.f @@ -17,7 +17,7 @@ integer dataunit,spareunit,ierr(2),runvalues(8),ipos1,ipos2, &ntotfiles,noutputfiles,i,j,k,rank_mpi,numproc_mpi,numproc, &ierror_mpi,nshare,nmod,npartfiles,istartno,iendno,indexunit(20), - &numchar,needheader(20),rootprocess + &numchar,needheader(20),rootprocess,ic3c4cam character rundate*8,runtime*10,runzone*5,longchar*5000,achar*5, &longchar1*5000 character*100 datapath,outpath,storein,storeout,ACidata(8000) @@ -26,12 +26,13 @@ ! Set input / output directory parameter( & datapath= + &'../input/', ! &'/home/l2g/ngeetropics/gamboa/curves/', ! &'/home/l2g/ngeetropics/metropolitano/curves/', ! &'/home/l2g/ngeetropics/fortsherman/curves/', ! & '/home/l2g/ngeetropics/kelsey/curves/', ! & '/home/l2g/leafres/hybriddata/Berner/', - & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', ! &'/home/l2g/leafweb/data/dweston/Sphagnum_leafweb_Oct2015/', ! & '/home/l2g/SingleLeafModel/ACiSimulation/wenting/', @@ -61,12 +62,13 @@ ! & '/home/l2g/dataassim/leaf/data/dweston/inputs/', ! & '/home/l2g/GEMSiS/curves/', & outpath= + &'../output/fitresult/touser/', ! &'/home/l2g/ngeetropics/gamboa/results/', ! &'/home/l2g/ngeetropics/metropolitano/results/', ! &'/home/l2g/ngeetropics/fortsherman/', ! &'/home/l2g/ngeetropics/kelsey/results/', ! & '/home/l2g/leafres/hybriddata/Berner/', - & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', ! &'/home/l2g/leafweb/data/dweston/Sphagnum_leafweb_Oct2015/', ! &'/home/l2g/leafres/hybriddata/cernusak/2014data/', ! & '/home/l2g/SingleLeafModel/ACiSimulation/wenting/', @@ -100,23 +102,50 @@ ! &storein='/home/l2g/leafweb/users/curves/', ! &storeout='/home/l2g/leafweb/users/results/', - &storein='/home/l2g/clm/results/', - &storeout='/home/l2g/clm/results/', + &storein='../output/clninput/', + &storeout='../output/fitresult/nottouser/', + ! &storein='/home/l2g/junk/', ! &storeout='/home/l2g/junk/', ! &storein='/home/l2g/dataassim/leaf/data/ellsworth/outputs/', ! &storeout='/home/l2g/dataassim/leaf/data/ellsworth/outputs/', - & AllACiFiles='AllLeafGasFiles') + & AllACiFiles='../piscal.cfg') !---------------End of variable declaration---------------- rootprocess=0 dataunit=1 spareunit=3 ! if(rank_mpi.ne.rootprocess)goto 25 !read A/Ci curve names stored in AllACiFiles - open(unit=2,file=trim(datapath)//trim(AllACiFiles)) + open(unit=2,file=trim(AllACiFiles)) ntotfiles=1 + ic3c4cam=-9999 10 read(2,fmt=300,end=20)longchar + if(longchar.eq.''.or.longchar.eq.' ')goto 10 + if(ntotfiles.eq.1.and.ic3c4cam.lt.0)then + i=0 + if(index(longchar,'_photosynthesis_leafweb').gt.0)then + i=index(longchar,'c3')+index(longchar,'C3') + if(i.gt.0)then + ic3c4cam=1 + else + i=index(longchar,'c4')+index(longchar,'C4') + if(i.gt.0)then + ic3c4cam=2 + else + i=index(longchar,'cam')+index(longchar,'caM')+ + &index(longchar,'cAm')+index(longchar,'cAM')+ + &index(longchar,'Cam')+index(longchar,'CaM')+ + &index(longchar,'CAm')+index(longchar,'CAM') + if(i.gt.0)ic3c4cam=3 + endif + endif + endif + if(i.gt.0)goto 10 +!if no indication is provided, c3 photosynthesis is assumed and the first line +!contains the name of the first data file + ic3c4cam=1 + endif i=len(longchar) j=0 15 j=j+1 @@ -153,6 +182,9 @@ noutputfiles=11 !10 to 20 are used for file units for output files do i=1,noutputfiles + if(ic3c4cam.eq.1)outputfile(i)='C3_'//outputfile(i) + if(ic3c4cam.eq.2)outputfile(i)='C4_'//outputfile(i) + if(ic3c4cam.eq.3)outputfile(i)='CAM_'//outputfile(i) indexunit(i)=i+9 enddo call MPI_INIT(ierror_mpi) @@ -190,82 +222,16 @@ numchar=numchar+1 goto 30 40 call NumberToChar(rank_mpi,numchar,achar) - do i=1,noutputfiles-1 + do i=1,noutputfiles open(unit=indexunit(i), &file=trim(outpath)//trim(outputfile(i))//trim(achar)) enddo - call ToLeafGasOptimization(npartfiles,ACidata(istartno:iendno), - &dataunit,spareunit,datapath,indexunit,ierr) - do i=1,noutputfiles-1 + call ToLeafGasOptimization(ic3c4cam,npartfiles, + &ACidata(istartno:iendno),dataunit,spareunit,datapath,indexunit, + &ierr) + do i=1,noutputfiles close(indexunit(i)) enddo - if(ierr(1).ne.0)then - i=indexunit(noutputfiles) - open(unit=i, - &file=trim(outpath)//trim(outputfile(noutputfiles))//trim(achar)) - write(i,*)'Input data error in ',ACidata(ierr(2)+istartno-1) - write(i,*) - &'Please resubmit the data after correcting the following error:' - if(ierr(1).eq.1)then - write(i,*)'Photosynthesis (umol/m2/s) out of range' - endif - if(ierr(1).eq.2)then - write(i,*)'Intercellular CO2(ppm) out of range' - endif - if(ierr(1).eq.3)then - write(i,*)'Leaf temperature (oC) out of range' - endif - if(ierr(1).eq.4)then - write(i,*)'Chamber PAR (umol/m2/s) out of range' - endif - if(ierr(1).eq.5)then - write(i,*)'Atmospheric pressure (Pa) out of range' - endif - if(ierr(1).eq.13)then - write(i,*)'Check line 13 for data entry error' - endif - if(ierr(1).eq.14)then - write(i,*)'Specified chloroplastic CO2 compensation point', - &'(Pa) out of range' - endif - if(ierr(1).eq.15)then - write(i,*)'Specified Michaelis-Menten constant for the', - &'carboxylase (Kc) out of range' - endif - if(ierr(1).eq.16)then - write(i,*)'Specified Michaelis-Menten constant for the', - &'oxygenase (Ko) out of range' - endif - if(ierr(1).eq.17)then - write(i,*)'Specified fraction of nonreturned glycolate', - &'carbon(alpha) out of range 0~1' - endif - if(ierr(1).eq.18)then - write(i,*)'Specified dark respiration rate Rd out of range >0' - endif - if(ierr(1).eq.19)then - write(i,*)'Specified mesophyll) resistance rch or rwp out of', - &'of range >0' - endif - if(ierr(1).eq.34)then - write(i,*)'Check Column 33 or 34. Mixing area- and mass-based - &measurements is not allowed' - endif - if(ierr(1).eq.36)then - write(i,*)'Check line 16 for data entry error' - endif - if(ierr(1).eq.39)then - write(i,*) - &'Check the main body of data for data entry error, starting from - &line 19' - endif - if(ierr(1).eq.40)then - write(i,*) - &'Data file format cannot be recognized' - endif - - close(i) - endif !make sure everyone is done before wrapping up. 45 call MPI_BARRIER(MPI_COMM_WORLD,ierror_mpi) if(rank_mpi.eq.rootprocess)then @@ -326,29 +292,41 @@ enddo !---------------------------------------------------------- !intercept the data - goto 450 -399 call date_and_time(rundate,runtime,runzone,runvalues) + if(needheader(noutputfiles).eq.2)then +!if there is error in any input files, donot store the data + do i=1,ntotfiles + open(unit=1,file=trim(datapath)//'clean'//trim(ACidata(i))) + close(1,status='delete') + enddo + goto 450 + endif + call date_and_time(rundate,runtime,runzone,runvalues) do i=1,ntotfiles - open(unit=1,file=trim(datapath)//trim(ACidata(i))) + open(unit=1,file=trim(datapath)//'clean'//trim(ACidata(i))) open(unit=2,file= - &trim(storein)//rundate//runtime(1:6)//trim(ACidata(i))) + &trim(storein)//rundate//runtime(1:6)//'clean'//trim(ACidata(i))) 400 read(1,fmt=300,end=410)longchar write(2,310)trim(longchar) goto 400 -410 close(1) +410 close(1,status='delete') close(2) enddo - do i=1,6 + do i=1,noutputfiles k=0 open(unit=1,file=trim(outpath)//trim(outputfile(i))) - open(unit=2,file= + if(i.ge.3.and.i.le.5)then + open(unit=2,file= &trim(storeout)//rundate//runtime(1:6)//trim(outputfile(i))) + else + open(unit=2,file= + &trim(outpath)//rundate//runtime(1:6)//trim(outputfile(i))) + endif 420 read(1,fmt=300,end=430)longchar write(2,310)trim(longchar) k=1 goto 420 430 if(k.eq.1)then - close(1) + close(1,status='delete') close(2) else close(1,status='delete') diff --git a/leafres/testarea/LeafGasPISCAL_single.f b/leafres/testarea/LeafGasPISCAL_single.f index 2e7e069..a182052 100644 --- a/leafres/testarea/LeafGasPISCAL_single.f +++ b/leafres/testarea/LeafGasPISCAL_single.f @@ -15,7 +15,7 @@ program main implicit none integer dataunit,spareunit,ierr(2),runvalues(8),ipos1,ipos2, - &ntotfiles,noutputfiles,i,j,k,indexunit(20) + &ntotfiles,noutputfiles,i,j,k,indexunit(20),ic3c4cam character rundate*8,runtime*10,runzone*5,longchar*5000 character*100 datapath,outpath,storein,storeout, &ACidata(8000) @@ -23,11 +23,14 @@ ! Set input / output directory parameter(datapath= +! &'../input/', + &'/home/l2g/jimei/', ! &'/home/l2g/ngeetropics/gamboa/curves/', ! &'/home/l2g/ngeetropics/metropolitano/curves/', ! &'/home/l2g/ngeetropics/fortsherman/curves/', ! &'/home/l2g/ngeetropics/kelsey/curves/', - & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! &'/home/l2g/leafres/hybriddata/nicksmith/data/', ! &'/home/l2g/leafres/hybriddata/dwestonpoplus/data3/', ! &'/home/l2g/leafres/hybriddata/cernusak/2014data/', ! &'/home/l2g/leafres/hybriddata/hanjimei/', @@ -59,6 +62,8 @@ ! & '/home/l2g/dataassim/leaf/data/dweston/inputs/', ! & '/home/l2g/GEMSiS/curves/', & outpath= +! &'../output/fitresult/touser/', + &'/home/l2g/jimei/', ! &'/home/l2g/ngeetropics/gamboa/results/', ! &'/home/l2g/ngeetropics/metropolitano/results/', ! &'/home/l2g/ngeetropics/fortsherman/results/', @@ -69,7 +74,9 @@ ! &'/home/l2g/leafres/hybriddata/hanjimei/', ! ! & '/home/l2g/leafres/hybriddata/Berner/', - & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! & '/home/l2g/SingleLeafModel/ACiSimulation/hybrid/', +! & '/home/l2g/leafres/hybriddata/nicksmith/results/', + ! & '/home/l2g/leafres/hybriddata/huidafeng/', ! &'/home/l2g/leafres/hybriddata/dwestonpoplus/data_Pn_tree_1_195_v2/ ! &', @@ -99,43 +106,28 @@ ! &storein='/home/l2g/leafweb/users/curves/', ! &storeout='/home/l2g/leafweb/users/results/', - &storein='/home/l2g/leafres/testdata/', - &storeout='/home/l2g/leafres/testdata/', -! &storein='/home/l2g/junk/', -! &storeout='/home/l2g/junk/', +! &storein='../output/clninput/', +! &storeout='../output/fitresult/nottouser/', + + &storein='/home/l2g/jimei/', + &storeout='/home/l2g/jimei/', ! &storein='/home/l2g/dataassim/leaf/data/ellsworth/outputs/', ! &storeout='/home/l2g/dataassim/leaf/data/ellsworth/outputs/', - & AllACiFiles='AllLeafGasFiles') +! & AllACiFiles='../piscal.cfg') + &AllACiFiles='/home/l2g/jimei/piscal.cfg') !---------------End of variable declaration---------------- ierr(1)=-1 ierr(2)=-1 - outputfile(1)='leafgasparameters.csv' - outputfile(2)='leafgascomparison.csv' - outputfile(3)='stomwuecicaparameters.csv' - outputfile(4)='stomcomparison.csv' - outputfile(5)='wuecicacomparison.csv' - outputfile(6)='fluorescencefit.csv' - outputfile(7)='fluoresparameters.csv' - outputfile(8)='aciempfitparameters.csv' - outputfile(9)='alightempfitparameters.csv' - outputfile(10)='warningmessage' - outputfile(11)='errormessage' - noutputfiles=11 - do i=1,noutputfiles - indexunit(i)=i+9 - enddo - do i=1,noutputfiles-1 - open(unit=indexunit(i),file=trim(outpath)//trim(outputfile(i))) - enddo !read A/Ci curve names stored in AllACiFiles dataunit=1 spareunit=3 open(unit=dataunit,status='scratch') - open(unit=spareunit,file=trim(datapath)//trim(AllACiFiles)) - read(spareunit,fmt=300,err=40,end=40)longchar + open(unit=spareunit,file=trim(AllACiFiles)) + read(spareunit,fmt=300,err=90,end=90)longchar rewind(spareunit) -2 read(spareunit,fmt=300,err=40,end=5)longchar +2 read(spareunit,fmt=300,err=90,end=5)longchar + if(longchar.eq.''.or.longchar.eq.' ')goto 2 3 k=index(longchar,char(13)) if(k.gt.0)then !DOS text format, convert it to unix format @@ -147,7 +139,34 @@ 5 close(spareunit) rewind(dataunit) ntotfiles=1 + ic3c4cam=-9999 10 read(dataunit,fmt=300,end=20)longchar + if(ntotfiles.eq.1.and.ic3c4cam.lt.0)then + i=0 + if((index(longchar,'_photosynthesis_leafweb')+ + &index(longchar,'_Photosynthesis_leafweb')+ + &index(longchar,'_Photosynthesis_LeafWeb')).gt.0)then + i=index(longchar,'c3')+index(longchar,'C3') + if(i.gt.0)then + ic3c4cam=1 + else + i=index(longchar,'c4')+index(longchar,'C4') + if(i.gt.0)then + ic3c4cam=2 + else + i=index(longchar,'cam')+index(longchar,'caM')+ + &index(longchar,'cAm')+index(longchar,'cAM')+ + &index(longchar,'Cam')+index(longchar,'CaM')+ + &index(longchar,'CAm')+index(longchar,'CAM') + if(i.gt.0)ic3c4cam=3 + endif + endif + endif + if(i.gt.0)goto 10 +!if no indication is provided, c3 photosynthesis is assumed and the first line +!contains the name of the first data file + ic3c4cam=1 + endif i=len(longchar) j=0 15 j=j+1 @@ -170,83 +189,32 @@ goto 10 20 ntotfiles=ntotfiles-1 close(dataunit) - call ToLeafGasOptimization(ntotfiles,ACidata,dataunit,spareunit, - &datapath,indexunit,ierr) -40 do i=1,noutputfiles-1 + outputfile(1)='leafgasparameters.csv' + outputfile(2)='leafgascomparison.csv' + outputfile(3)='stomwuecicaparameters.csv' + outputfile(4)='stomcomparison.csv' + outputfile(5)='wuecicacomparison.csv' + outputfile(6)='fluorescencefit.csv' + outputfile(7)='fluoresparameters.csv' + outputfile(8)='aciempfitparameters.csv' + outputfile(9)='alightempfitparameters.csv' + outputfile(10)='warningmessage' + outputfile(11)='errormessage' + noutputfiles=11 + do i=1,noutputfiles + if(ic3c4cam.eq.1)outputfile(i)='C3_'//outputfile(i) + if(ic3c4cam.eq.2)outputfile(i)='C4_'//outputfile(i) + if(ic3c4cam.eq.3)outputfile(i)='CAM_'//outputfile(i) + indexunit(i)=i+9 + enddo + do i=1,noutputfiles + open(unit=indexunit(i),file=trim(outpath)//trim(outputfile(i))) + enddo + call ToLeafGasOptimization(ic3c4cam,ntotfiles,ACidata,dataunit, + &spareunit,datapath,indexunit,ierr) + do i=1,noutputfiles close(indexunit(i)) enddo - if(ierr(1).ne.0)then - i=indexunit(noutputfiles) - open(unit=i,file=trim(outpath)//trim(outputfile(noutputfiles))) - if(ierr(1).eq.-1)then - close(spareunit) - write(i,*) - &'No data files to analyze or incorrect file name format' - else - write(i,*)'Input data error in ',trim(ACidata(ierr(2))) - write(i,*) - &'Please resubmit the data after correcting the following error:' - endif - if(ierr(1).eq.1)then - write(i,*)'Photosynthesis (umol/m2/s) out of range' - endif - if(ierr(1).eq.2)then - write(i,*)'Intercellular CO2(ppm) out of range' - endif - if(ierr(1).eq.3)then - write(i,*)'Leaf temperature (oC) out of range' - endif - if(ierr(1).eq.4)then - write(i,*)'Chamber PAR (umol/m2/s) out of range' - endif - if(ierr(1).eq.5)then - write(i,*)'Atmospheric pressure (Pa) out of range' - endif - if(ierr(1).eq.13)then - write(i,*)'Check line 13 for data entry error' - endif - if(ierr(1).eq.14)then - write(i,*)'Specified chloroplastic CO2 compensation point', - &'(Pa) out of range' - endif - if(ierr(1).eq.15)then - write(i,*)'Specified Michaelis-Menten constant for the', - &'carboxylase (Kc) out of range' - endif - if(ierr(1).eq.16)then - write(i,*)'Specified Michaelis-Menten constant for the', - &'oxygenase (Ko) out of range' - endif - if(ierr(1).eq.17)then - write(i,*)'Specified fraction of nonreturned glycolate', - &'carbon(alpha) out of range 0~1' - endif - if(ierr(1).eq.18)then - write(i,*)'Specified dark respiration rate Rd out of range >0' - endif - if(ierr(1).eq.19)then - write(i,*)'Specified internal (mesophyll) conductance gi out', - &'of range >0' - endif - if(ierr(1).eq.34)then - write(i,*)'Check Column 33 or 34. Mixing area- and mass-based - &measurements is not allowed' - endif - if(ierr(1).eq.36)then - write(i,*)'Check line 16 for data entry error' - endif - if(ierr(1).eq.39)then - write(i,*) - &'Check the main body of data for data entry error, starting from - &line 19' - endif - if(ierr(1).eq.40)then - write(i,*) - &'Data file format cannot be recognized' - endif - - close(i) - endif do j=1,noutputfiles open(unit=2,file=trim(outpath)//trim(outputfile(j))) read(2,*,end=70) @@ -260,29 +228,47 @@ 80 enddo !---------------------------------------------------------- !intercept the data - goto 450 -399 call date_and_time(rundate,runtime,runzone,runvalues) +90 if(ierr(1).ne.0)then + if(ierr(1).eq.-1)then + close(spareunit) + open(unit=spareunit,file=trim(outpath)//'errormessage') + write(spareunit,*)'No data files to analyze' + close(spareunit) + goto 450 + endif + do i=1,ntotfiles + open(unit=1,file=trim(datapath)//'clean'//trim(ACidata(i))) + close(1,status='delete') + enddo + goto 450 + endif + call date_and_time(rundate,runtime,runzone,runvalues) do i=1,ntotfiles - open(unit=1,file=trim(datapath)//trim(ACidata(i))) + open(unit=1,file=trim(datapath)//'clean'//trim(ACidata(i))) open(unit=2,file= - &trim(storein)//rundate//runtime(1:6)//trim(ACidata(i))) + &trim(storein)//rundate//runtime(1:6)//'clean'//trim(ACidata(i))) 400 read(1,fmt=300,end=410)longchar write(2,310)trim(longchar) goto 400 -410 close(1) +410 close(1,status='delete') close(2) enddo - do i=1,6 + do i=1,noutputfiles k=0 open(unit=1,file=trim(outpath)//trim(outputfile(i))) - open(unit=2,file= + if(i.ge.3.and.i.le.5)then + open(unit=2,file= &trim(storeout)//rundate//runtime(1:6)//trim(outputfile(i))) + else + open(unit=2,file= + &trim(outpath)//rundate//runtime(1:6)//trim(outputfile(i))) + endif 420 read(1,fmt=300,end=430)longchar write(2,310)trim(longchar) k=1 goto 420 430 if(k.eq.1)then - close(1) + close(1,status='delete') close(2) else close(1,status='delete') diff --git a/leafres/testarea/LeafGasParams.h b/leafres/testarea/LeafGasParams.h index 7e530fb..3fb1aa9 100644 --- a/leafres/testarea/LeafGasParams.h +++ b/leafres/testarea/LeafGasParams.h @@ -58,7 +58,7 @@ &ha_stargammamin,ha_stargammamax,ha_stargamma_ori,ha_vcmaxmin, &ha_vcmaxmax,ha_vcmax_ori,ha_jmaxmin,ha_jmaxmax,ha_jmax_ori, &ha_tpumin,ha_tpumax,ha_tpu_ori,ha_gmesomin,ha_gmesomax, - &ha_gmeso_ori + &ha_gmeso_ori,c4aparslope,c4aparslope_ori,c4kp25,c4kp25_ori integer minimumrubis,minimumfj,minimumvt,idorwp,idorch,idord, &idostargamma,idoalpha,idokc,idoko,ifixunivparams(maxpsnparam), @@ -84,7 +84,7 @@ &ha_stargammamin,ha_stargammamax,ha_stargamma_ori,ha_vcmaxmin, &ha_vcmaxmax,ha_vcmax_ori,ha_jmaxmin,ha_jmaxmax,ha_jmax_ori, &ha_tpumin,ha_tpumax,ha_tpu_ori,ha_gmesomin,ha_gmesomax, - &ha_gmeso_ori + &ha_gmeso_ori,c4aparslope,c4aparslope_ori,c4kp25,c4kp25_ori common /intleafparams/minimumrubis,minimumfj,minimumvt,idorwp, &idorch,idord,idostargamma,idoalpha,idokc,idoko,ifixunivparams, diff --git a/leafres/testarea/LeafGasPrintToFiles.f b/leafres/testarea/LeafGasPrintToFiles.f index fa7ad41..35a9344 100644 --- a/leafres/testarea/LeafGasPrintToFiles.f +++ b/leafres/testarea/LeafGasPrintToFiles.f @@ -1,8 +1,9 @@ - subroutine LeafGasPrintToFiles(isitmassbased,indexunit) + subroutine LeafGasPrintToFiles(isitmassbased,indexunit, + &ic3c4cam) implicit none integer isitmassbased,indexunit(20),paramunit,compareunit, &stomwuecicaoutunit,stomcompunit,wuecicacompunit,fluorescenceunit, - &fluoresparamunit,aciempfitunit,alightempfitunit + &fluoresparamunit,aciempfitunit,alightempfitunit,ic3c4cam character *25, & sitevars(50),unitsitevars(50), & paramsvar(0:50),unitparamsvar(0:50), @@ -363,7 +364,7 @@ unitparamsvar(41)='umolkg-1s-1' unitparamsvar(42)='umolkg-1s-1' endif - + sitevars(1)='siteID' sitevars(2)='Latitude' sitevars(3)='Longitude' @@ -411,15 +412,25 @@ unitsitevars(21)='ring/diffuse' unitsitevars(22)='g/cm3' unitsitevars(23)='Unitless' - - write(paramunit,'(2000A)')(trim(univcomvars(i)),',',i=1,9), + if(ic3c4cam.eq.1)then + write(paramunit,'(2000A)')(trim(univcomvars(i)),',',i=1,9), &(trim(paramsvar(i)),',',i=0,34),(trim(paramsvar(i)),',',i=39,42), &(trim(sitevars(i)),',',i=1,22),trim(sitevars(23)) - write(paramunit,'(2000A)')(trim(unitunivcomvars(i)),',',i=1,9), + write(paramunit,'(2000A)')(trim(unitunivcomvars(i)),',',i=1,9), &(trim(unitparamsvar(i)),',',i=0,34), &(trim(unitparamsvar(i)),',',i=39,42), &(trim(unitsitevars(i)),',',i=1,22),trim(unitsitevars(23)) - + endif + if(ic3c4cam.eq.2)then + write(paramunit,'(2000A)')trim(univcomvars(1)),',', + &'Model,Vcmax25,c4aparslope,c4kp25,rdlight25,', + &(trim(paramsvar(i)),',',i=30,34), + &(trim(sitevars(i)),',',i=1,22),trim(sitevars(23)) + write(paramunit,'(2000A)')trim(unitunivcomvars(1)),',', + &'NA,umolm-2s-1,CO2/photon,umolm-2s-1,umolm-2s-1,', + &(trim(unitparamsvar(i)),',',i=30,34), + &(trim(unitsitevars(i)),',',i=1,22),trim(unitsitevars(23)) + endif write(fluorescenceunit,'(1000A)')trim(univcomvars(1)),',', &(trim(univcomvars(i)),',',i=10,14), &(trim(univcomvars(i)),',',i=17,27), @@ -514,9 +525,9 @@ unitstomwuecica(16)='umolkg-1s-1' endif - write(stomcompunit,'(100A)')((trim(stomwuecica(i)),','), + write(stomcompunit,'(100A)')(trim(stomwuecica(i)),',', &i=1,15),trim(stomwuecica(16)) - write(stomcompunit,'(100A)')((trim(unitstomwuecica(i)),','), + write(stomcompunit,'(100A)')(trim(unitstomwuecica(i)),',', &i=1,15),trim(unitstomwuecica(16)) !------------------------------------------------------------ stomwuecica(1)='curveno' @@ -581,9 +592,9 @@ unitstomwuecica(29)='NA' unitstomwuecica(30)='NA' - write(wuecicacompunit,'(200A)')((trim(stomwuecica(i)),','), + write(wuecicacompunit,'(200A)')(trim(stomwuecica(i)),',', &i=1,29),trim(stomwuecica(30)) - write(wuecicacompunit,'(200A)')((trim(unitstomwuecica(i)),','), + write(wuecicacompunit,'(200A)')(trim(unitstomwuecica(i)),',', &i=1,29),trim(stomwuecica(30)) stomwuecica(1)='curveno' @@ -875,10 +886,10 @@ unitstomwuecica(55)='umolkg-1s-1' endif - write(stomwuecicaoutunit,'(2000A)')((trim(stomwuecica(i)),','), - &i=1,139),((trim(sitevars(i)),','),i=1,22),trim(sitevars(23)) - write(stomwuecicaoutunit,'(2000A)')((trim(unitstomwuecica(i)), - &','),i=1,139),((trim(unitsitevars(i)),','),i=1,22), + write(stomwuecicaoutunit,'(2000A)')(trim(stomwuecica(i)),',', + &i=1,139),(trim(sitevars(i)),',',i=1,22),trim(sitevars(23)) + write(stomwuecicaoutunit,'(2000A)')(trim(unitstomwuecica(i)), + &',',i=1,139),(trim(unitsitevars(i)),',',i=1,22), &trim(unitsitevars(23)) return end diff --git a/leafres/testarea/SetUpLeafGasFit.f b/leafres/testarea/SetUpLeafGasFit.f index 9496446..0ff23a7 100644 --- a/leafres/testarea/SetUpLeafGasFit.f +++ b/leafres/testarea/SetUpLeafGasFit.f @@ -685,7 +685,7 @@ else betamin(1)=0.5d0*amaxave endif - betamax(1)=200.0d0 + betamax(1)=1000.0d0 beta(2)=1.5d0 betamin(2)=1.0d-5 betamax(2)=1000.0d0 @@ -696,8 +696,8 @@ betamin(4)=0.0d0 betamax(4)=5000.0d0 beta(5)=-10.0d0 - betamin(5)=-100.0d0 - betamax(5)=100.0d0 + betamin(5)=-1000.0d0 + betamax(5)=1000.0d0 k=0 n=0 do j=1,nACiPoints(i) @@ -717,6 +717,7 @@ wvector(n)=ACipco2ambient(j,i) endif enddo +! call GenericRegres(nACiPoints(i),1, &ACianet_obs(1:nACiPoints(i),i:i),1,ACipco2i(1:nACiPoints(i),i:i), &weity,weitx,5,beta,betamin,betamax,xmin,xmax,iderivative,INFO, @@ -726,13 +727,24 @@ &ACipco2i(nACiPoints(i):nACiPoints(i),i:i),der_ACiend(i),term, &ACipco2i(1:1,i:i),ACipco2i(nACiPoints(i):nACiPoints(i),i:i), &ACimaxcurvature(i),ACimaxcurvpco2i(i)) - call GenericRegres(n,1,zvector,1,wvector,weity,weitx,5,beta, + if(n.ge.5)then + call GenericRegres(n,1,zvector,1,wvector,weity,weitx,5,beta, &betamin,betamax,xmin,xmax,iderivative,INFO,fvector,gvector, &sumsquare) - call properties_surffunc(5,beta,starco2a(i),der_starco2a(i), + call properties_surffunc(5,beta,starco2a(i),der_starco2a(i), &Amax_ACa(i),ACainter(i),der_ACainter(i),40.0d0,der_ACa400ppm(i), &anet_ACa400ppm(i),wvector(1),wvector(n),ACamaxcurvature(i), &ACamaxcurvpco2a(i)) + else + der_starco2a(i)=-9999.0d0 + Amax_ACa(i)=-9999.0d0 + ACainter(i)=-9999.0d0 + der_ACainter(i)=-9999.0d0 + der_ACa400ppm(i)=-9999.0d0 + anet_ACa400ppm(i)=-9999.0d0 + ACamaxcurvature(i)=-9999.0d0 + ACamaxcurvpco2a(i)=-9999.0d0 + endif if(Amax_ACi(i).lt.50.0d0)amaxave=Amax_ACi(i) j=min0(5,nACiPoints(i)) call y_aPLUSbx(j,ACipco2i(1:j,i:i),ACianet_obs(1:j,i:i),ac,at) @@ -1268,7 +1280,7 @@ endif enddo idotempcoeff=0 - if((term2-term1).gt.2.0d0)idotempcoeff=1 + if((term2-term1).gt.5.0d0)idotempcoeff=1 !If temperature variation in the dataset is larger enough, try to estimate parameters in temperature response functions !All variables are now in the right order. All ACi curves are ordered and All ALight curves are ordered. !------------------------------------------------------------------------------------------------------- @@ -1283,7 +1295,7 @@ pco2c_pco2i_flu(i)=-9999.0d0 enddo if(ntotphips2.gt.5)then - do idorch=1,1 + do idorch=0,0 !we do a fluorescence only fit Prioriknowlimit=-1 ifitmode=1 @@ -1291,7 +1303,7 @@ !ifitmode: =-1, ordinary fitting with anet calculated as a function of pco2i !ifitmode: =1, orthogonal fitting with anet calculated as a function of pco2i !ifitmode: =2, orthogonal fitting with pco2i calculated as a function of anet - idorwp=1 + idorwp=0 resistwp25_ori=resistwp25_ini if(idorch.eq.1)then resistch25_ori=resistch25_ini @@ -1638,11 +1650,12 @@ co2imany(3)=3.0d0 co2imany(4)=4.0d0 co2imany(5)=5.0d0 - m=5 + co2imany(6)=6.0d0 + m=6 term=ACipco2i(nACiPoints(i),i)+10.0d0 - do ccc=6.0d0,term,2.5d0 + do while (co2imany(m).le.term) m=m+1 - co2imany(m)=ccc + co2imany(m)=co2imany(m-1)+2.5d0 enddo do j=1,m ccc=co2imany(j) diff --git a/leafres/testarea/ToLeafGasOptimization.f b/leafres/testarea/ToLeafGasOptimization.f index 7d2d147..44b4e74 100644 --- a/leafres/testarea/ToLeafGasOptimization.f +++ b/leafres/testarea/ToLeafGasOptimization.f @@ -1,15 +1,16 @@ - subroutine ToLeafGasOptimization(ntotfiles,ACidata,dataunit, - &spareunit,datapath,indexunit,ierr) + subroutine ToLeafGasOptimization(ic3c4cam,ntotfiles,ACidata, + &dataunit,spareunit,datapath,indexunit,ierr) implicit none !--------------All inputs except for ierr. Outputs are written to files---------------- - integer ntotfiles,dataunit,spareunit,ierr(2),indexunit(20) -!ierr(1)=0, ok, >1 input data out of range + integer ic3c4cam,ntotfiles,dataunit,spareunit,ierr(2), + &indexunit(20) +!ierr(1)=0, ok, >=1 input data out of range !ierr(2) specifies in which input file, the data is out of range character*100 datapath,ACidata(ntotfiles) !------------------------------------------------------------------------------- integer ntotpoints,npoints(ntotfiles),i,j,k,n,curveno(ntotfiles), &iobs,maxobs,nmax,iwarning,warningunit,isitmassbased(ntotfiles), - &iprintheader(ntotfiles),ivector(1000),startline + &iprintheader(ntotfiles),ivector(1000),startline,errorunit parameter(maxobs=2000,nmax=100) character*100 sample(ntotfiles) character*50 chartime,siteID(ntotfiles),species(ntotfiles),ftime, @@ -49,8 +50,14 @@ &stdco2,fmeanco2,xminco2,xmaxco2 ! warningunit=indexunit(10) + errorunit=indexunit(11) ierr(1)=0 - + if(ic3c4cam.ne.1.and.ic3c4cam.ne.2)then + write(errorunit,*)'The analysis for CAM photosyntehsis is still + &under development. Check out LeafWeb for this function later.' + ierr(1)=1 + return + endif ! open(unit=121,file='sphagnumdata.csv') ! write(121,'(200A)')'name,','hhmmss,','no,','time,','datumlimit,', ! &'stom_COND_mol,','CO2chamber_ppm,','CO2i_ppm,','PARi_umol,', @@ -61,7 +68,7 @@ do 10 i=1,ntotfiles isitmassbased(i)=0 iwarning=0 - ierr(2)=i + ierr(2)=i npoints(i)=0 sample(i)=trim(ACidata(i)) !fill any blank spaces in sample(i) with '_' @@ -76,12 +83,12 @@ !In early 2015, the following section of code is added to allow flexibity for the starting rows to be used for metadata. !There is no need for a strict number of rows for metadata because the main data section is now determined automatically. !Locate the rows for the actual data + open(unit=spareunit,file=trim(datapath)//trim(ACidata(i))) + read(spareunit,fmt=300,err=35,end=35)longchar1 + rewind(spareunit) open(unit=dataunit,file= &trim(datapath)//trim(ACidata(i))//'middle') - open(unit=spareunit,file=trim(datapath)//trim(ACidata(i))) - read(spareunit,fmt=300,err=40,end=40)longchar1 - rewind(spareunit) -2 read(spareunit,fmt=300,err=40,end=5)longchar1 +2 read(spareunit,fmt=300,err=35,end=5)longchar1 3 k=index(longchar1,char(13)) if(k.gt.0)then !DOS text format, convert it to unix format @@ -94,8 +101,8 @@ rewind(dataunit) open(unit=spareunit,file= - &trim(datapath)//trim(ACidata(i))//'clean') -7 read(dataunit,fmt=310,err=40,end=9)longchar + &trim(datapath)//'clean'//trim(ACidata(i))) +7 read(dataunit,fmt=310,err=36,end=9)longchar if(longchar.eq.''.or.longchar.eq.' ')goto 7 call charlineparser(longchar,nmax,charvars,n) if(n.eq.0)goto 7 @@ -110,15 +117,21 @@ j=j+1 ivector(j)=n goto 500 -600 if(j.lt.12)then - close(spareunit,status='delete') - goto 630 - else - rewind(spareunit) - endif +600 rewind(spareunit) startline=0 610 startline=startline+1 - if(startline.gt.j-11)goto 40 + if(j.lt.12.or.startline.gt.j-11)then + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'This file has incorrect data format or does + ¬ contain data' + ierr(1)=1 + goto 630 + endif n=0 if(ivector(startline).ne.ivector(startline+1))n=1 if(ivector(startline).ne.ivector(startline+2))n=1 @@ -149,7 +162,7 @@ read(spareunit,*) enddo !========================================================================================================================= - read(spareunit,fmt=310,err=13)longchar + read(spareunit,fmt=310,err=40)longchar call charlineparser(longchar,nmax,charvars,n) do j=n+1,nmax charvars(j)='-9999' @@ -199,7 +212,7 @@ do j=1,2 read(spareunit,*) enddo - read(spareunit,fmt=310,err=36)longchar + read(spareunit,fmt=310,err=40)longchar call charlineparser(longchar,nmax,charvars,n) do j=n+1,nmax charvars(j)='-9999' @@ -235,7 +248,7 @@ do j=1,2 read(spareunit,*) enddo -20 read(spareunit,fmt=310,err=39,end=100)longchar +20 read(spareunit,fmt=310,err=40,end=100)longchar call charlineparser(longchar,nmax,charvars,n) if(n.le.25)goto 20 do j=n+1,nmax @@ -323,7 +336,18 @@ !We assume the user requires mass-based calculations. We convert net photosynthesis, !transpiration, conductance and PAR from area basis to mass basis. All fitted parameters !are mass-based. However, mixing area- and mass- based calculations is not allowed. - if(npoints(i).gt.0.and.isitmassbased(i).eq.0)goto 34 + if(npoints(i).gt.0.and.isitmassbased(i).eq.0)then + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'Line starting with ',longchar(1:50) + write(errorunit,*)'Check Column 33 or 34. Mixing area- and + &mass-based measurements is not allowed' + ierr(1)=1 + endif isitmassbased(i)=1 !Convert PAR from umol/m2/s to umol/kg/s. tissuearea is in cm2 and tissuemass in in g PARi_umol=PARi_umol*tissuearea/(tissuemass*10.0d0) @@ -346,7 +370,18 @@ CO2i_ppm=((gtc-1.0d-3*transp_mmol/2.0d0)*CO2chamber_ppm- &PNcor_umol)/(gtc-1.0d-3*transp_mmol/2.0d0) else - if(isitmassbased(i).ne.0)goto 34 + if(isitmassbased(i).ne.0)then + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'Line starting with ',longchar(1:50) + write(errorunit,*)'Check Column 33 or 34. Mixing area- and + &mass-based measurements is not allowed' + ierr(1)=1 + endif endif if(isitmassbased(i).eq.0)then term=-100.0d0 @@ -356,8 +391,21 @@ term1=1.0d+10 endif if(PNcor_umol.lt.term.or.PNcor_umol.gt.term1)then - ierr(1)=1 - if(fm_fluoresce.le.0.0d0)return + if(fm_fluoresce.le.0.0d0)then + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'Line starting with ',longchar(1:50), '... + &is within the main data body but has no valid photosynthesis data' + if(dabs(PNcor_umol+9999.0d0).gt.1.d-6)then + write(errorunit,*)'Photosynthesis out of range:' + write(errorunit,*)PNcor_umol + endif + ierr(1)=1 + endif else if(transp_mmol.gt.0.0d0.and.stom_COND_mol.gt.0.0d0 &.and.BLCond.gt.0.0d0)then @@ -381,13 +429,29 @@ endif endif if(CO2i_ppm.le.0.0d0.or.CO2i_ppm.gt.10000.0d0)then -! ierr(1)=2 -! return +! if(ierr(2).gt.0)then +! write(errorunit,*)'Input data error in ',trim(ACidata(i)) +! write(errorunit,*) +! &'Please resubmit the data after correcting the following error:' +! ierr(2)=-ierr(2) +! endif +! write(errorunit,*)'Intercellular CO2 (ppm) out of range' +! ierr(1)=1 if(fm_fluoresce.le.0.0d0)goto 20 endif if(Tleaf_oC.lt.-50.0d0.or.Tleaf_oC.gt.100.0d0)then - ierr(1)=3 - if(fm_fluoresce.le.0.0d0)return + if(fm_fluoresce.le.0.0d0)then + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'Line starting with ',longchar(1:50), '... + &is within the main data body but has no valid leaf temperature' + write(errorunit,*)'Leaf temperature (oC) out of range' + ierr(1)=1 + endif endif if(isitmassbased(i).eq.0)then term1=1.0d+5 @@ -395,15 +459,29 @@ term1=1.0d+10 endif if(PARi_umol.lt.-10.01d0.or.PARi_umol.gt.term1)then - ierr(1)=4 - return + if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'Line starting with ',longchar(1:50), '..... + &is within the main data body but has no valid PAR data' + write(errorunit,*)'Sample chamber PAR out of range' + ierr(1)=1 else PARi_umol=dmax1(0.0d0,PARi_umol) endif if(Press_KPa.lt.50.0d0.or.Press_KPa.gt.150.0d0)then Press_KPa=98.9d0 -! ierr(1)=5 -! return +! if(ierr(2).gt.0)then +! write(errorunit,*)'Input data error in ',trim(ACidata(i)) +! write(errorunit,*) +! &'Please resubmit the data after correcting the following error:' +! ierr(2)=-ierr(2) +! endif +! write(errorunit,*)'Air pressure out of range' +! ierr(1)=1 endif if(Tair_oC.lt.-50.0d0.or.Tair_oC.gt.100.0d0)then Tair_oC=Tleaf_oC @@ -483,14 +561,47 @@ call CharToNumeric(chartime,term) sampletime(i,npoints(i))=term goto 20 -100 close(spareunit,status='delete') - do j=1,npoints(i) +100 do j=1,npoints(i) vectorhorse(j)=sampletime(i,j) call time_resolution(npoints(i),vectorhorse, & avetimeresolution(i),avetimesampled(i)) enddo -630 continue +630 close(spareunit) + goto 640 +35 if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'This file has incorrect data format' + ierr(1)=1 + close(spareunit) + goto 640 + +36 if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'This file has incorrect data format' + ierr(1)=1 + close(dataunit,status='delete') + goto 640 + +40 if(ierr(2).gt.0)then + write(errorunit,*)'Input data error in ',trim(ACidata(i)) + write(errorunit,*) + &'Please resubmit the data after correcting the following error:' + ierr(2)=-ierr(2) + endif + write(errorunit,*)'This file has incorrect data format' + ierr(1)=1 + close(spareunit) +640 continue 10 enddo + if(ierr(1).eq.1)return iprintheader(1)=1 do i=2,ntotfiles if(isitmassbased(i).eq.isitmassbased(i-1))then @@ -502,7 +613,8 @@ k=1 do i=1,ntotfiles if(k.eq.1.or.iprintheader(i).eq.1)then - call LeafGasPrintToFiles(isitmassbased(i:i),indexunit) + call LeafGasPrintToFiles(isitmassbased(i:i),indexunit, + &ic3c4cam) k=0 endif if(npoints(i).lt.3)goto 1112 @@ -536,7 +648,30 @@ endif endif !------------------------------------------------------ - call SetUpLeafGasFit(curveno(i:i),sample(i:i),npoints(i:i), + if(ic3c4cam.eq.1) + &call SetUpLeafGasFit(curveno(i:i),sample(i:i),npoints(i:i), + &CurveTypeID(i:i,1:npoints(i)),yAnet(i:i,1:npoints(i)), + &xpco2i(i:i,1:npoints(i)),templeaf(i:i,1:npoints(i)), + &pari(i:i,1:npoints(i)),pres_air(i:i,1:npoints(i)), + &po2i(i:i,1:npoints(i)),chlflphips2(i:i,1:npoints(i)), + &pco2ambient(i:i,1:npoints(i)),trmmol(i:i,1:npoints(i)), + &gswmeas(i:i,1:npoints(i)),vpdl(i:i,1:npoints(i)), + &tempair(i:i,1:npoints(i)),eambient(i:i,1:npoints(i)), + &fo_pam(i:i,1:npoints(i)),fm_pam(i:i,1:npoints(i)), + &fs_pam(i:i,1:npoints(i)),pam_measlight(i:i,1:npoints(i)), + &stargamma25_usr(i:i),fkc25_usr(i:i),fko25_usr(i:i), + &rdlight25_usr(i:i),alpha25_usr(i:i),resistwp25_usr(i:i), + &resistch25_usr(i:i),isitmassbased(i:i),indexunit, + &siteID(i:i),Latitude(i:i),Longitude(i:i),Elevation(i:i), + &yearsampled(i:i),sampledoy(i:i),GrowingSeasonStart(i:i), + &GrowingSeasonEnd(i:i),standage(i:i),CanopyHeight(i:i), + &LeafAreaIndex(i:i),species(i:i),avetimeresolution(i:i), + &avetimesampled(i:i),SampleHeight(i:i),Needleage(i:i), + &specificLAI(i:i),nitrogencontent(i:i),carboncontent(i:i), + &phoscontent(i:i),woodporosity(i:i),sapwooddensity(i:i), + &leafratio(i:i)) + if(ic3c4cam.eq.2) + &call C4SetUpLeafGasFit(curveno(i:i),sample(i:i),npoints(i:i), &CurveTypeID(i:i,1:npoints(i)),yAnet(i:i,1:npoints(i)), &xpco2i(i:i,1:npoints(i)),templeaf(i:i,1:npoints(i)), &pari(i:i,1:npoints(i)),pres_air(i:i,1:npoints(i)), @@ -560,16 +695,6 @@ 1112 continue enddo return -13 ierr(1)=13 - return -34 ierr(1)=34 - return -36 ierr(1)=36 - return -39 ierr(1)=39 - return -40 ierr(1)=40 - return 300 format(a50000) 310 format(a5000) 340 format(a) diff --git a/leafres/testarea/UnivParamsAlloc.f b/leafres/testarea/UnivParamsAlloc.f index f5ea8ad..63675c3 100644 --- a/leafres/testarea/UnivParamsAlloc.f +++ b/leafres/testarea/UnivParamsAlloc.f @@ -61,7 +61,7 @@ ifixunivparams(5)=1 if(idokc.eq.1)ifixunivparams(6)=1 if(idoko.eq.1)ifixunivparams(7)=1 - if(idoha_vcmax)ifixunivparams(16)=1 + if(idoha_vcmax.eq.1)ifixunivparams(16)=1 endif if(Currentilimittype.le.2.or.Currentilimittype.eq.4.or. &Currentilimittype.eq.6)then diff --git a/leafres/testarea/UnivPhotoFit.f b/leafres/testarea/UnivPhotoFit.f index 390fbbb..e9581b0 100644 --- a/leafres/testarea/UnivPhotoFit.f +++ b/leafres/testarea/UnivPhotoFit.f @@ -172,10 +172,12 @@ implicit none include '../testarea/LeafGasParams.h' include '../testarea/LeafGasHybridFit.h' - integer i,ndim,k,j,iderivative,iwrong,jnon + integer i,ndim,k,j,iderivative,iwrong,jnon,n,icompete,isame,i2, + &isitnaninf,nave double precision beta(20),sumsquare0,beta0(20),sumsquarecp, - &betacp(20),ftol,xtol,shortx(maxobs,4),shorty(maxobs,2),ran2, - &ftol_relax + &betacp(20),ftol,xtol,shortx(maxobs,10),shorty(maxobs,5), + &ftol_relax,term1,term2,ran2,history(2000,25),discount,upper,lower, + &f1dim_UnivPhotoFit,ff_pikaia parameter(ftol=1.0d-7,xtol=1.0d-7) external funkmin_UnivPhotoFit,f1dim_UnivPhotoFit, &FCN_UnivPhotoFit,ff_pikaia @@ -193,113 +195,312 @@ enddo isitbounded=1 call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - do i=1,ndim - beta0(i)=beta(i) - enddo - sumsquare0=sumsquare - ftol_relax=ftol - k=0 if(subbestsumsquare(Currentilimittype).gt.1.0d+9)then - jnon=0 - ftol_relax=ftol*100.0d0 - endif -30 call nongradopt(ndim,funkmin_UnivPhotoFit,f1dim_UnivPhotoFit, - &beta,betamin,betamax,ftol_relax,sumsquare) - call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - if((sumsquare+1.0d0).eq.sumsquare.or.sumsquare.gt.sumsquare0)then - do i=1,ndim - beta(i)=beta0(i) - enddo - sumsquare=sumsquare0 - else - if((sumsquare0-sumsquare).gt.ftol_relax)then -!reset the counter for arriving at a better minimum - k=0 - else -!if the same minimum is found, increment the counter - k=k+1 - endif +!global search do i=1,ndim beta0(i)=beta(i) + history(1,i)=beta(i) enddo sumsquare0=sumsquare - endif - if(subbestsumsquare(Currentilimittype).gt.1.0d+9)then - jnon=jnon+1 -!for the first run, try different initial guesses - if(jnon.lt.100.and.k.lt.5)then - if(ran2().gt.0.7d0)then - do i=1,ndim - beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) - enddo - else - do i=1,ndim - if(ran2().gt.0.5d0)then - beta(i)=beta(i)+(ran2()**(3.0d0/dble(k+1)))* - &(betamax(i)-beta(i)) - else - beta(i)=beta(i)-(ran2()**(3.0d0/dble(k+1)))* - &(beta(i)-betamin(i)) - endif - enddo - endif - call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - goto 30 - else - if((ftol_relax-ftol).gt.ftol)then - ftol_relax=ftol - goto 30 - endif - endif - call RepeatCompassSearch(ndim,beta,sumsquare,betamin, - &betamax,funkmin_UnivPhotoFit,f1dim_UnivPhotoFit,xtol) - call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - if((sumsquare+1.0d0).eq.sumsquare.or.sumsquare.gt.sumsquare0) - &then - do i=1,ndim - beta(i)=beta0(i) - enddo - sumsquare=sumsquare0 - endif - do i=1,ndim - betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) + history(1,ndim+1)=sumsquare +!entrance counter + history(1,ndim+2)=1.0d0 +!failure counter + history(1,ndim+3)=0.0d0 +!Is it a competition among different initial guesses? + icompete=0 +!j the total number of calls to nongradopt; k is the number of returns to the current best and reset +!to zero if a better minumum is found; n is the number of scouting points over the landscape of the cost function. +!The first initial guess provided by the user is always part of the set of scouting points.the rest consist of outcomes +!from calls to nongradopt if they are significantly different from the current best. + jnon=0 + isame=0 + n=1 + nave=n + ftol_relax=ftol*1000.0d0 + discount=2.0d0 +!relax the convergence criterion for scouting +30 do i=1,ndim + betacp(i)=beta(i) enddo sumsquarecp=sumsquare - isitbounded=0 - call pikaia(ff_pikaia,ndim,gacontrol,betacp,sumsquarecp,i) - isitbounded=1 - if(i.eq.0)then + iderivative=0 + if(ifitmode.lt.0)then + iwrong=0 + else + iwrong=1 + endif + k=ifitmode + ifitmode=-1 +!ifitmode: =-2, ordinary fitting with pco2i calculated as a function of anet +!ifitmode: =-1, ordinary fitting with anet calculated as a function of pco2i +!ifitmode: =1, orthogonal fitting with anet calculated as a function of pco2i +!ifitmode: =2, orthogonal fitting with pco2i calculated as a function of anet +!for odr_leastsquare, only the predicted value of the response variable is needed, i.e., the cost function value is not needed. +!also, only anet as a function of CO2i is considered (not the other way around) because odr_leastsquare cannot handle the situation +!co2i as a function of anet for tpu limitation when alpha=0 + i=1 + if(ntotphips2.ge.1)i=2 + j=4 + if(Currentiknowlimit.eq.-1)then +!fluorescence only fit. chlflphisi2 becomes a forcing variable + i=1 + j=5 + endif + call odr_leastsquare(ndim,FCN_UnivPhotoFit,beta,ntotsamples, + &forcings(1:ntotsamples,1:j),j,responses(1:ntotsamples,1:i),i, + &weitforcings(1:ntotsamples,1:j),weitresponses(1:ntotsamples,1:i), + &iderivative,shortx(1:ntotsamples,1:j),shorty(1:ntotsamples,1:i), + &sumsquare,iwrong) + ifitmode=k +!after odr_leastsquare, forcing variables are destroyed. restore to the origninals + do i=1,ntotsamples + pco2i(i)=pco2i_ori(i) + aPPFDlf(i)=aPPFDlf_ori(i) + templeaf(i)=templeaf_ori(i) + po2i(i)=po2i_ori(i) + chlflphips2(i)=chlflphips2_ori(i) + enddo + call funkmin_UnivPhotoFit(ndim,beta,sumsquare) + if(isitnaninf(sumsquare).eq.1.or.sumsquare.gt.sumsquarecp)then do i=1,ndim - betacp(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) + beta(i)=betacp(i) enddo - call funkmin_UnivPhotoFit(ndim,betacp,sumsquarecp) + sumsquare=sumsquarecp else do i=1,ndim betacp(i)=beta(i) enddo sumsquarecp=sumsquare endif - if((sumsquarecp+1.0d0).ne.sumsquarecp.and. - &sumsquare.gt.sumsquarecp)then + call nongradopt(ndim,funkmin_UnivPhotoFit, + &f1dim_UnivPhotoFit,beta,betamin,betamax,ftol_relax,sumsquare) + if(isitnaninf(sumsquare).eq.1.or.sumsquare.gt.sumsquarecp)then do i=1,ndim beta(i)=betacp(i) enddo sumsquare=sumsquarecp endif + if(sumsquare.gt.1.0d0)then + term1=sumsquare*ftol_relax + else + term1=ftol_relax*10.0d0 + endif + if(sumsquare.gt.sumsquare0)then +!failure + if((sumsquare-sumsquare0).gt.term1)then + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.5d0 +!even though sumsquare is much worse than sumsquare0, it is an output of optimization after all so +!include it in the set if it has not already been included in the set. + i=1 + i2=1 +40 if(dabs(history(i2,i)-beta(i)).gt.ftol_relax)then + if(dabs(history(i2,ndim+1)-sumsquare).lt.term1)then + history(i2,ndim+3)=history(i2,ndim+3)+1.0d0 + goto 60 + endif + if(i2.ge.n)goto 50 + i2=i2+1 + i=1 + goto 40 + else + if(i.ge.ndim)goto 60 + i=i+1 + goto 40 + endif +50 n=n+1 + do i=1,ndim + history(n,i)=beta(i) + enddo + history(n,ndim+1)=sumsquare + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 +!use average only when there is imporvement + nave=n + else +!the difference is minimal even though sumsquare is larger than sumsquare0. +!Increment the counter for arriving at the same minimum. + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.0d0 + isame=isame+1 + endif +60 do i=1,ndim + beta(i)=beta0(i) + enddo + sumsquare=sumsquare0 + else +!success + if((sumsquare0-sumsquare).lt.term1)then +!negligible improvement. Increment the counter for arriving at the same minimum. +!no increment for the set of central initial guesses + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+0.5d0 + isame=isame+1 + nave=n + else +!reset the counter for arriving at a better minimum. +!Increment the set of central initial guesses + if(dabs(discount-2.0d0).lt.ftol)then + discount=dmax1(0.001d0,(sumsquare0-sumsquare)/1000.0d0) + endif + isame=0 + n=n+1 + do i=1,ndim + history(n,i)=beta(i) + enddo + history(n,ndim+1)=sumsquare + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 + endif + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=sumsquare + endif + jnon=jnon+1 + if(jnon.lt.200.and.isame.lt.3)then +!we first explore around the very first initial guess + if(jnon.lt.10)then + icompete=1 + term1=0.05d0+dmin1(history(1,ndim+3)*0.1d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo + goto 70 + endif +!try average if n is incremented + if(n.gt.nave)then + term1=1.0d0/(history(1,ndim+1)+1.0d-5) + do i=2,n + term1=term1+1.0d0/(history(i,ndim+1)+1.0d-5) + enddo + do i=1,ndim + beta(i)=history(1,i)/(term1*(history(1,ndim+1)+1.0d-5)) + do icompete=2,n + beta(i)=beta(i)+history(icompete,i)/ + &(term1*(history(icompete,ndim+1)+1.0d-5)) + enddo + enddo + nave=n + icompete=0 + goto 70 + endif +!try different initial guesses + if(ran2().gt.0.2d0)then +!guess around the best + icompete=1 + term1=history(1,ndim+1)+ + &discount*history(1,ndim+2)*history(1,ndim+3) + do i=2,n + term2=history(i,ndim+1)+ + &discount*history(i,ndim+2)*history(i,ndim+3) + if(term2.le.term1)then + term1=term2 + do i2=1,ndim+3 + history(n+1,i2)=history(i,i2) + history(i,i2)=history(1,i2) + history(1,i2)=history(n+1,i2) + enddo + endif + enddo + term1=0.05d0+dmin1(history(1,ndim+2)*history(1,ndim+3)* + &0.015d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo + else +!completely random guess + do i=1,ndim + beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) + enddo + icompete=0 + endif +70 call funkmin_UnivPhotoFit(ndim,beta,sumsquare) + goto 30 + else + if((ftol_relax-ftol).gt.ftol)then + if(isame.le.1)then + n=n+1 + do i=1,ndim+3 + history(n,i)=history(1,i) + enddo + do i=1,ndim + history(1,i)=beta(i) + enddo + history(1,ndim+1)=sumsquare + history(1,ndim+2)=0.0d0 + history(1,ndim+3)=0.0d0 + do i=1,n + do icompete=1,ndim + betacp(icompete)=history(i,icompete) + enddo + sumsquarecp=history(i,ndim+1) + call RepeatCompassSearch(ndim,betacp,sumsquarecp, + &betamin,betamax,funkmin_UnivPhotoFit,f1dim_UnivPhotoFit, + &ftol_relax) + call funkmin_UnivPhotoFit(ndim,betacp,sumsquarecp) + if(isitnaninf(sumsquarecp).eq.0.and.sumsquarecp.lt. + &sumsquare)then + do icompete=1,ndim + beta(icompete)=betacp(icompete) + enddo + sumsquare=sumsquarecp + endif + enddo + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=sumsquare + jnon=0 + icompete=1 + else + icompete=0 + endif + ftol_relax=ftol + goto 30 + endif + endif + + goto 110 + do i=1,ndim - beta0(i)=beta(i) + betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) enddo - sumsquare0=sumsquare + sumsquarecp=sumsquare + call pikaia(ff_pikaia,ndim,gacontrol,betacp,sumsquarecp,i) + if(i.eq.0)then + do i=1,ndim + betacp(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) + enddo + call funkmin_UnivPhotoFit(ndim,betacp,sumsquarecp) + if(isitnaninf(sumsquarecp).eq.0.and.sumsquare.gt.sumsquarecp) + &then + do i=1,ndim + beta(i)=betacp(i) + enddo + sumsquare=sumsquarecp + endif + endif else - return +!local search + call nongradopt(ndim,funkmin_UnivPhotoFit,f1dim_UnivPhotoFit, + &beta,betamin,betamax,ftol,sumsquare) + call funkmin_UnivPhotoFit(ndim,beta,sumsquare) endif + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=sumsquare iderivative=0 if(ifitmode.lt.0)then iwrong=0 else iwrong=1 endif - isitbounded=1 k=ifitmode ifitmode=-1 !ifitmode: =-2, ordinary fitting with pco2i calculated as a function of anet @@ -322,7 +523,6 @@ &weitforcings(1:ntotsamples,1:j),weitresponses(1:ntotsamples,1:i), &iderivative,shortx(1:ntotsamples,1:j),shorty(1:ntotsamples,1:i), &sumsquare,iwrong) - isitbounded=1 ifitmode=k !after odr_leastsquare, forcing variables are destroyed. restore to the origninals do i=1,ntotsamples @@ -333,29 +533,12 @@ chlflphips2(i)=chlflphips2_ori(i) enddo call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - if((sumsquare+1.0d0).eq.sumsquare.or.sumsquare.gt.sumsquare0)then + if(isitnaninf(sumsquare).eq.1.or.sumsquare.gt.sumsquare0)then do i=1,ndim beta(i)=beta0(i) enddo sumsquare=sumsquare0 endif - k=0 - do i=1,ndim - if(beta(i).lt.betamin(i))k=1 - if(beta(i).gt.betamax(i))k=1 - enddo - if(k.eq.1)then - do i=1,ndim - betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) - enddo - isitbounded=0 - call pikaia(ff_pikaia,ndim,gacontrol,betacp,sumsquare,i) - do i=1,ndim - beta(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) - enddo - isitbounded=1 - call funkmin_UnivPhotoFit(ndim,beta,sumsquare) - endif j=0 100 jnon=0 105 sumsquare0=sumsquare @@ -370,21 +553,11 @@ goto 105 endif if(sumsquare.eq.sumsquare0)goto 110 - if(dabs(sumsquare).le.dabs(sumsquare0))then - else - if(dabs(sumsquare).gt.1.0d+20)then -!in case of infinity (division by zero) - do i=1,ndim - beta(i)=beta0(i) - enddo - sumsquare=sumsquare0 - else -!designed this way to avoid sumsquare='NAN' - do i=1,ndim - beta(i)=beta0(i) - enddo - sumsquare=sumsquare0 - endif + if(isitnaninf(sumsquare).eq.1.or.sumsquare.gt.sumsquare0)then + do i=1,ndim + beta(i)=beta0(i) + enddo + sumsquare=sumsquare0 endif sumsquarecp=sumsquare do i=1,ndim @@ -394,14 +567,14 @@ &betamax,funkmin_UnivPhotoFit,f1dim_UnivPhotoFit,xtol) call funkmin_UnivPhotoFit(ndim,betacp,sumsquarecp) if(sumsquare.eq.sumsquarecp)goto 110 - if(dabs(sumsquarecp).lt.dabs(sumsquare))then + if(isitnaninf(sumsquarecp).eq.0.and.sumsquarecp.lt.sumsquare)then do i=1,ndim beta(i)=betacp(i) enddo sumsquare=sumsquarecp endif j=j+1 - if(j.le.2.and.dabs(sumsquare-sumsquare0).gt.ftol)goto 100 + if(j.le.2.and.(sumsquare0-sumsquare).gt.ftol)goto 100 ! !------------------------------------------------------ 110 call funkmin_UnivPhotoFit(ndim,beta,sumsquare) diff --git a/leafres/testarea/c4leafanetmodel.f b/leafres/testarea/c4leafanetmodel.f new file mode 100644 index 0000000..74cda8d --- /dev/null +++ b/leafres/testarea/c4leafanetmodel.f @@ -0,0 +1,89 @@ + subroutine c4leafanetmodel(ilimittype,aPPFDlf,templeaf,pco2i, + &pres_air,vcmax25,c4aparslope,c4kp25,rdlight25,anet_pred, + &Postiphotolimit) + implicit none +!------------ Inputs ------------------- +!ilimittype=1: Rubisco,RuBp and TPU limitations +!ilimittype=2: Rubisco and RuBp limitations only +!ilimittype=3: Rubisco and TPU limitations only +!ilimittype=4: RuBp and TPU limitations only +!ilimittype=5: Rubisco limitation only +!ilimittype=6: RuBp limitation only +!ilimittype=7: TPU limitation only +!aPPFDlf: Absorbed photosynthetic photon flux density by leaf (umol m-2 s-1) +!templeaf: Leaf temperature [K] +!pco2i: Intercellular air pressure [Pa] +!pres_air: Ambient air pressure [Pa] +!vcmax25: Maximum RuBP saturated rate of carboxylation at 25oC +! of leaf temperature [umol m-2 s-1] +!c4aparslope: Slope of the response of light-limited rate with respect +! to absorbed light +!c4kp25: Slope of the response of the PEP carboxylase-limited +! rate of carboxylation for C4 plants +!rdlight25: Mitochondrial respiration rate in the light at 25oC + double precision aPPFDlf,templeaf,pco2i,pres_air, + &vcmax25,c4aparslope,c4kp25,rdlight25 +!------------Output--------------------- +!anet_pred: Predicted net photosynthetic rate [umol m-2 s-1] +!Postiphotolimit: limit state indicator +! = 1 Rubisco-limited rate +! = 2 RuBP-regeneration limited rate +! = 3 Product-limited rate + double precision anet_pred + integer ilimittype,Postiphotolimit +!-------------------------------------- + double precision q10,fh,fl,frd,wc,wj,wp,rd,thetacj,thetaip,Ai + q10=2.0d0 + fh=1.0d0+dexp(0.3d0*(templeaf-313.15d0)) + fl=1.0d0+dexp(0.2d0*(288.15d0-templeaf)) + frd=1.0d0+dexp(1.3d0*(templeaf-328.15d0)) + wc=vcmax25*(q10**((templeaf-298.15d0)/10.0d0))/(fh*fl) + wj=c4aparslope*aPPFDlf + wp=c4kp25*(q10**((templeaf-298.15)/10.0d0))*pco2i/pres_air + rd=rdlight25*(q10**((templeaf-298.15d0)/10.0d0))/frd + if((ilimittype.eq.1.and.wc.le.wj.and.wc.le.wp).or. + &ilimittype.eq.5)then + Postiphotolimit=1 + anet_pred=wc-rd + endif + if((ilimittype.eq.1.and.wj.le.wc.and.wj.le.wp).or. + &ilimittype.eq.6)then + Postiphotolimit=2 + anet_pred=wj-rd + endif + if((ilimittype.eq.1.and.wp.le.wc.and.wp.le.wj).or. + &ilimittype.eq.7)then + Postiphotolimit=3 + anet_pred=wp-rd + endif + if(ilimittype.eq.2.and.wc.le.wj)then + Postiphotolimit=1 + anet_pred=wc-rd + else + Postiphotolimit=2 + anet_pred=wj-rd + endif + if(ilimittype.eq.3.and.wc.le.wp)then + Postiphotolimit=1 + anet_pred=wc-rd + else + Postiphotolimit=3 + anet_pred=wp-rd + endif + if(ilimittype.eq.4.and.wj.le.wp)then + Postiphotolimit=2 + anet_pred=wj-rd + else + Postiphotolimit=3 + anet_pred=wp-rd + endif + if(ilimittype.eq.1)then + thetacj=0.8d0 + thetaip=0.95d0 + Ai=((wc+wj)-dsqrt((wc+wj)**2-4.0d0*thetacj*wc*wj))/ + &(2.0d0*thetacj) + anet_pred=((Ai+wp)-dsqrt((Ai+wp)**2-4.0d0*thetaip*Ai*wp))/ + &(2.0d0*thetaip)-rd + endif + return + end diff --git a/leafres/testarea/cica5.f b/leafres/testarea/cica5.f index 8c5a2b6..e64d51a 100644 --- a/leafres/testarea/cica5.f +++ b/leafres/testarea/cica5.f @@ -11,7 +11,7 @@ c integer i,ndim,imodel0 double precision beta(ndim),fatbeta,ftol,bmin0(ndim), - & bmax0(ndim) + & bmax0(ndim),f1dim_cica parameter(ftol=1.0d-7) external funkmin_cica,f1dim_cica diff --git a/leafres/testarea/cica_Regression5.f b/leafres/testarea/cica_Regression5.f index 9a5db62..ce44707 100644 --- a/leafres/testarea/cica_Regression5.f +++ b/leafres/testarea/cica_Regression5.f @@ -156,7 +156,7 @@ C READ PROBLEM DATA, AND SET NONDEFAULT VALUE FOR ARGUMENT IFIXX + ISTOP) implicit none - include '../src/cica.h' + include '../testarea/cica.h' C SUBROUTINE ARGUMENTS C ==> N NUMBER OF OBSERVATIONS diff --git a/leafres/testarea/fluorescencejmax.f b/leafres/testarea/fluorescencejmax.f index 67e0fe4..32b50e5 100644 --- a/leafres/testarea/fluorescencejmax.f +++ b/leafres/testarea/fluorescencejmax.f @@ -3,11 +3,14 @@ implicit none include '../testarea/LeafGasParams.h' include '../testarea/LeafGasHybridFit.h' - integer i,ndim,k,j,iderivative,iwrong + integer i,ndim,k,j,iderivative,iwrong,n,icompete,i2,isitnaninf, + &nave double precision beta(4),sumsquare0,beta0(4),sumsquarecp, &betacp(4),ftol,xtol,shortx(maxobs,2),shorty(maxobs), - &xvar(maxobs,2),weitx(maxobs,2),weity(maxobs),ran2, - &templflights0(maxobs),aparlights0(maxobs),termmin,termmax + &xvar(maxobs,2),weitx(maxobs,2),weity(maxobs), + &templflights0(maxobs),aparlights0(maxobs),termmin,termmax, + &ftol_relax,term1,term2,ran2,discount,history(2000,10),upper,lower, + &f1dim_flujmax,flujmax_pikaia parameter(ftol=1.0d-7,xtol=1.0d-7) external funkmin_flujmax,f1dim_flujmax,FCN_flujmax,flujmax_pikaia !beta(1)=fjmax25 @@ -65,104 +68,298 @@ call funkmin_flujmax(ndim,beta,flujmaxfval) do i=1,ndim beta0(i)=beta(i) + history(1,i)=beta(i) enddo sumsquare0=flujmaxfval + history(1,ndim+1)=flujmaxfval +!entrance counter + history(1,ndim+2)=1.0d0 +!failure counter + history(1,ndim+3)=0.0d0 +!Is it a competition among different initial guesses? + icompete=0 +!j the total number of calls to nongradopt; k is the number of returns to the current best and reset +!to zero if a better minumum is found; n is the number of scouting points over the landscape of the cost function. +!The first initial guess provided by the user is always part of the set of scouting points.the rest consist of outcomes +!from calls to nongradopt if they are significantly different from the current best. j=0 k=0 -30 call nongradopt(ndim,funkmin_flujmax, - &f1dim_flujmax,beta,betamin,betamax,ftol,flujmaxfval) - call funkmin_flujmax(ndim,beta,flujmaxfval) - if((flujmaxfval+1.0d0).eq.flujmaxfval)then - do i=1,ndim - beta(i)=beta0(i) - enddo - flujmaxfval=sumsquare0 - else - if(dabs(flujmaxfval-sumsquare0).lt.ftol)k=k+1 - if(flujmaxfval.gt.sumsquare0)then - do i=1,ndim - beta(i)=beta0(i) - enddo - flujmaxfval=sumsquare0 - else - if((sumsquare0-flujmaxfval).gt.ftol)k=0 -!reset the counter of revisiting a minimum if a new minimum is found - endif - endif - j=j+1 -!try different initial guesses - if(j.lt.200.and.k.lt.50)then - do i=1,ndim - beta0(i)=beta(i) - beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) - enddo - sumsquare0=flujmaxfval - call funkmin_flujmax(ndim,beta,flujmaxfval) - goto 30 - endif - call RepeatCompassSearch(ndim,beta,flujmaxfval,betamin, - &betamax,funkmin_flujmax,f1dim_flujmax,xtol) - do i=1,ndim - betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) + n=1 + nave=1 + ftol_relax=ftol*1000.0d0 + discount=2.0d0 +30 do i=1,ndim + betacp(i)=beta(i) enddo - isitbounded=0 - call pikaia(flujmax_pikaia,ndim,gacontrol,betacp,flujmaxfval,i) - do i=1,ndim - beta(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) - enddo - isitbounded=1 - call funkmin_flujmax(ndim,beta,flujmaxfval) - call RepeatCompassSearch(ndim,beta,flujmaxfval,betamin, - &betamax,funkmin_flujmax,f1dim_flujmax,xtol) - isitbounded=1 - call funkmin_flujmax(ndim,beta,flujmaxfval) - do i=1,ndim - beta0(i)=beta(i) - enddo - sumsquare0=flujmaxfval + sumsquarecp=flujmaxfval iderivative=0 iwrong=0 call odr_leastsquare(ndim,FCN_flujmax,beta,ntotlights, &xvar(1:ntotlights,1:2),2,flphips2lights,1,weitx(1:ntotlights,1:2), &weity,iderivative,shortx(1:ntotlights,1:2),shorty(1:ntotlights), &flujmaxfval,iwrong) - isitbounded=1 !after odr_leastsquare, forcing variables are destroyed. restore to the origninals do i=1,ntotlights templflights(i)=templflights0(i) aparlights(i)=aparlights0(i) enddo call funkmin_flujmax(ndim,beta,flujmaxfval) - if(dabs(flujmaxfval).le.dabs(sumsquare0))then + if(isitnaninf(flujmaxfval).eq.1.or.flujmaxfval.gt.sumsquarecp)then + do i=1,ndim + beta(i)=betacp(i) + enddo + flujmaxfval=sumsquarecp else - if(dabs(flujmaxfval).gt.1.0d+20)then -!in case of infinity (division by zero) + do i=1,ndim + betacp(i)=beta(i) + enddo + sumsquarecp=flujmaxfval + endif + call nongradopt(ndim,funkmin_flujmax,f1dim_flujmax, + &beta,betamin,betamax,ftol_relax,flujmaxfval) + if(isitnaninf(flujmaxfval).eq.1.or.flujmaxfval.gt.sumsquarecp)then + do i=1,ndim + beta(i)=betacp(i) + enddo + flujmaxfval=sumsquarecp + endif + if(flujmaxfval.gt.1.0d0)then + term1=flujmaxfval*ftol_relax + else + term1=ftol_relax*10.0d0 + endif + if(flujmaxfval.gt.sumsquare0)then +!failure + if((flujmaxfval-sumsquare0).gt.term1)then + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.5d0 +!even though flujmaxfval is much worse than sumsquare0, it is an output of optimization after all so +!include it in the set if it has not already been included in the set. + i=1 + i2=1 +40 if(dabs(history(i2,i)-beta(i)).gt.ftol_relax)then + if(dabs(history(i2,ndim+1)-flujmaxfval).lt.term1)then + history(i2,ndim+3)=history(i2,ndim+3)+1.0d0 + goto 60 + endif + if(i2.ge.n)goto 50 + i2=i2+1 + i=1 + goto 40 + else + if(i.ge.ndim)goto 60 + i=i+1 + goto 40 + endif +50 n=n+1 do i=1,ndim - beta(i)=beta0(i) + history(n,i)=beta(i) enddo - flujmaxfval=sumsquare0 + history(n,ndim+1)=flujmaxfval + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 +!use average only when there is improvement + nave=n else -!designed this way to avoid flujmaxfval='NAN' +!the difference is minimal even though flujmaxfval is larger than sumsquare0. +!Increment the counter for arriving at the same minimum. + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+1.0d0 + k=k+1 + endif +60 do i=1,ndim + beta(i)=beta0(i) + enddo + flujmaxfval=sumsquare0 + else +!success + if((sumsquare0-flujmaxfval).lt.term1)then +!negligible improvement. Increment the counter for arriving at the same minimum. +!no increment for the set of central initial guesses + if(icompete.eq.1)history(1,ndim+3)=history(1,ndim+3)+0.5d0 + k=k+1 + else +!reset the counter for arriving at a better minimum. +!Increment the set of central initial guesses + if(dabs(discount-2.0d0).lt.ftol)then + discount=dmax1(0.001d0,(sumsquare0-flujmaxfval)/1000.0d0) + endif + k=0 + n=n+1 do i=1,ndim - beta(i)=beta0(i) + history(n,i)=beta(i) enddo - flujmaxfval=sumsquare0 + history(n,ndim+1)=flujmaxfval + history(n,ndim+2)=0.0d0 + history(n,ndim+3)=0.0d0 + endif + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=flujmaxfval + endif + j=j+1 + if(j.lt.200.and.k.lt.3)then +!first explore around the very first initial guess + if(j.lt.10)then + term1=0.05d0+dmin1(history(1,ndim+3)*0.1d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo + icompete=1 + goto 70 + endif +!try average + if(n.gt.nave)then + term1=1.0d0/(history(1,ndim+1)+1.0d-5) + do i=2,n + term1=term1+1.0d0/(history(i,ndim+1)+1.0d-5) + enddo + do i=1,ndim + beta(i)=history(1,i)/(term1*(history(1,ndim+1)+1.0d-5)) + do icompete=2,n + beta(i)=beta(i)+history(icompete,i)/ + &(term1*(history(icompete,ndim+1)+1.0d-5)) + enddo + enddo + nave=n + icompete=0 + goto 70 + endif +!try different initial guesses + if(ran2().gt.0.2d0)then +!guess around the best + icompete=1 + term1=history(1,ndim+1)+ + &discount*history(1,ndim+2)*history(1,ndim+3) + do i=2,n + term2=history(i,ndim+1)+ + &discount*history(i,ndim+2)*history(i,ndim+3) + if(term2.le.term1)then + term1=term2 + do i2=1,ndim+3 + history(n+1,i2)=history(i,i2) + history(i,i2)=history(1,i2) + history(1,i2)=history(n+1,i2) + enddo + endif + enddo + term1=0.05d0+dmin1(history(1,ndim+2)*history(1,ndim+3)* + &0.015d0,0.9d0) + history(1,ndim+2)=history(1,ndim+2)+1.0d0 + do i=1,ndim + lower=history(1,i)-term1*(history(1,i)-betamin(i)) + upper=history(1,i)+term1*(betamax(i)-history(1,i)) + beta(i)=lower+ran2()*(upper-lower) + enddo + else +!completely random guess + do i=1,ndim + beta(i)=betamin(i)+ran2()*(betamax(i)-betamin(i)) + enddo + icompete=0 + endif +70 call funkmin_flujmax(ndim,beta,flujmaxfval) + goto 30 + else + if((ftol_relax-ftol).gt.ftol)then + if(k.le.1)then + n=n+1 + do i=1,ndim+3 + history(n,i)=history(1,i) + enddo + do i=1,ndim + history(1,i)=beta(i) + enddo + history(1,ndim+1)=flujmaxfval + history(1,ndim+2)=0.0d0 + history(1,ndim+3)=0.0d0 + do i=1,n + do icompete=1,ndim + betacp(icompete)=history(i,icompete) + enddo + sumsquarecp=history(i,ndim+1) + call RepeatCompassSearch(ndim,betacp,sumsquarecp, + &betamin,betamax,funkmin_flujmax,f1dim_flujmax,ftol_relax) + call funkmin_flujmax(ndim,betacp,sumsquarecp) + if(isitnaninf(sumsquarecp).eq.0.and.sumsquarecp.lt. + &flujmaxfval)then + do icompete=1,ndim + beta(icompete)=betacp(icompete) + enddo + flujmaxfval=sumsquarecp + endif + enddo + do i=1,ndim + beta0(i)=beta(i) + enddo + sumsquare0=flujmaxfval + j=0 + icompete=1 + else + icompete=0 + endif + ftol_relax=ftol + goto 30 endif endif - j=0 -100 if(j.ge.10)then + + goto 110 + + call RepeatCompassSearch(ndim,beta,flujmaxfval,betamin, + &betamax,funkmin_flujmax,f1dim_flujmax,xtol) + call funkmin_flujmax(ndim,beta,flujmaxfval) + if(isitnaninf(flujmaxfval).eq.1.or.flujmaxfval.gt.sumsquare0)then do i=1,ndim - betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) + beta(i)=beta0(i) enddo - isitbounded=0 - call pikaia(flujmax_pikaia,ndim,gacontrol,betacp,flujmaxfval,i) + flujmaxfval=sumsquare0 + else do i=1,ndim - beta(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) + beta0(i)=beta(i) enddo - isitbounded=1 - call funkmin_flujmax(ndim,beta,flujmaxfval) + sumsquare0=flujmaxfval endif - sumsquare0=flujmaxfval + do i=1,ndim + betacp(i)=(beta(i)-betamin(i))/(betamax(i)-betamin(i)) + enddo + call pikaia(flujmax_pikaia,ndim,gacontrol,betacp,flujmaxfval,i) + if(i.eq.0)then + do i=1,ndim + betacp(i)=betamin(i)+betacp(i)*(betamax(i)-betamin(i)) + enddo + call funkmin_flujmax(ndim,betacp,flujmaxfval) + if(isitnaninf(flujmaxfval).eq.0.and.flujmaxfval.lt.sumsquare0) + &then + do i=1,ndim + beta(i)=betacp(i) + beta0(i)=betacp(i) + enddo + sumsquare0=flujmaxfval + endif + endif + flujmaxfval=sumsquare0 + iderivative=0 + iwrong=0 + call odr_leastsquare(ndim,FCN_flujmax,beta,ntotlights, + &xvar(1:ntotlights,1:2),2,flphips2lights,1,weitx(1:ntotlights,1:2), + &weity,iderivative,shortx(1:ntotlights,1:2),shorty(1:ntotlights), + &flujmaxfval,iwrong) +!after odr_leastsquare, forcing variables are destroyed. restore to the origninals + do i=1,ntotlights + templflights(i)=templflights0(i) + aparlights(i)=aparlights0(i) + enddo + call funkmin_flujmax(ndim,beta,flujmaxfval) + if(isitnaninf(flujmaxfval).eq.1.or.flujmaxfval.gt.sumsquare0)then + do i=1,ndim + beta(i)=beta0(i) + enddo + flujmaxfval=sumsquare0 + endif + j=0 +100 sumsquare0=flujmaxfval do i=1,ndim beta0(i)=beta(i) enddo @@ -170,21 +367,11 @@ &beta,betamin,betamax,ftol,flujmaxfval) call funkmin_flujmax(ndim,beta,flujmaxfval) if(flujmaxfval.eq.sumsquare0)return - if(dabs(flujmaxfval).le.dabs(sumsquare0))then - else - if(dabs(flujmaxfval).gt.1.0d+20)then -!in case of infinity (division by zero) - do i=1,ndim - beta(i)=beta0(i) - enddo - flujmaxfval=sumsquare0 - else -!designed this way to avoid flujmaxfval='NAN' - do i=1,ndim - beta(i)=beta0(i) - enddo - flujmaxfval=sumsquare0 - endif + if(isitnaninf(flujmaxfval).eq.1.or.flujmaxfval.gt.sumsquare0)then + do i=1,ndim + beta(i)=beta0(i) + enddo + flujmaxfval=sumsquare0 endif sumsquarecp=flujmaxfval do i=1,ndim @@ -194,14 +381,15 @@ &betamax,funkmin_flujmax,f1dim_flujmax,xtol) call funkmin_flujmax(ndim,betacp,sumsquarecp) if(flujmaxfval.eq.sumsquarecp)return - if(dabs(sumsquarecp).lt.dabs(flujmaxfval))then + if(isitnaninf(sumsquarecp).eq.0.and.flujmaxfval.gt.sumsquarecp) + &then do i=1,ndim beta(i)=betacp(i) enddo flujmaxfval=sumsquarecp endif j=j+1 - if(j.le.2.and.dabs(flujmaxfval-sumsquare0).gt.ftol)goto 100 + if(j.le.2.and.(sumsquare0-flujmaxfval).gt.ftol)goto 100 ! !------------------------------------------------------ 110 call funkmin_flujmax(ndim,beta,flujmaxfval) diff --git a/leafres/testarea/funkmin_C4Fit.f b/leafres/testarea/funkmin_C4Fit.f new file mode 100644 index 0000000..e63277b --- /dev/null +++ b/leafres/testarea/funkmin_C4Fit.f @@ -0,0 +1,128 @@ + subroutine funkmin_C4Fit(ndim,beta,fvalue) + implicit none + include '../testarea/LeafGasParams.h' + include '../testarea/LeafGasHybridFit.h' + integer ndim + double precision beta(1:ndim),fvalue +!(in) ndim: the dimension of the parameter vector +!(in) beta: the parameters +!(out) fvalue: the value of the cost function at beta +! +!---------Local variables-------------------------------------------------- + integer i +!----------- End of variables declaration --------------------------------- +!check to see if parameters are out of bounds. + if(isitbounded.eq.1)then + do i=1,ndim + if(beta(i).lt.betamin(i).or.beta(i).gt.betamax(i))then +! parameter out of bound + fvalue=1.0d+100 + return + endif + enddo + endif + vcmax25=beta(1) + c4aparslope=beta(2) + c4kp25=beta(3) + if(idord.eq.1)rdlight25=beta(ndim) + fvalue=0.0d0 + do i=1,ntotsamples + call c4leafanetmodel(1,aPPFDlf(i),templeaf(i),pco2i(i), + &pres_air(i),vcmax25,c4aparslope,c4kp25,rdlight25,anet_pred(i), + &Postiphotolimit(i)) + fvalue=fvalue+(anet_obs(i)-anet_pred(i))**2.0d0 + enddo + return + end subroutine funkmin_C4Fit +!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ + double precision function f1dim_C4Fit(x) + implicit none + double precision x +CU USES funkmin_C4Fit + INTEGER j +!(((((((((((((((((((((((((((((((((((((((((((((((((((( + integer NMAX,ncom + parameter(NMAX=1000) + double precision pcom(NMAX),xicom(NMAX) + COMMON /f1com/ pcom,xicom,ncom + save /f1com/ +!)))))))))))))))))))))))))))))))))))))))))))))))))))) + double precision xt(NMAX) + do 11 j=1,ncom + xt(j)=pcom(j)+x*xicom(j) +11 continue + call funkmin_C4Fit(ncom,xt,f1dim_C4Fit) + return + END +!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + SUBROUTINE FCN_C4Fit(N,M,NP,NQ, + + LDN,LDM,LDNP, + + BETA,XPLUSD, + + IFIXB,IFIXX,LDIFX, + + IDEVAL,F,FJACB,FJACD, + + ISTOP) + implicit none + include '../testarea/LeafGasParams.h' + include '../testarea/LeafGasHybridFit.h' +C SUBROUTINE ARGUMENTS +C ==> N NUMBER OF OBSERVATIONS +C ==> M NUMBER OF COLUMNS IN EXPLANATORY VARIABLE +C ==> NP NUMBER OF PARAMETERS +C ==> NQ NUMBER OF RESPONSES PER OBSERVATION +C ==> LDN LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING N +C ==> LDM LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING M +C ==> LDNP LEADING DIMENSION DECLARATOR EQUAL OR EXCEEDING NP +C ==> BETA CURRENT VALUES OF PARAMETERS +C ==> XPLUSD CURRENT VALUE OF EXPLANATORY VARIABLE, I.E., X + DELTA +C ==> IFIXB INDICATORS FOR "FIXING" PARAMETERS (BETA) +C ==> IFIXX INDICATORS FOR "FIXING" EXPLANATORY VARIABLE (X) +C ==> LDIFX LEADING DIMENSION OF ARRAY IFIXX +C ==> IDEVAL INDICATOR FOR SELECTING COMPUTATION TO BE PERFORMED +C <== F PREDICTED FUNCTION VALUES +C <== FJACB JACOBIAN WITH RESPECT TO BETA +C <== FJACD JACOBIAN WITH RESPECT TO ERRORS DELTA +C <== ISTOP STOPPING CONDITION, WHERE +C 0 MEANS CURRENT BETA AND X+DELTA WERE +C ACCEPTABLE AND VALUES WERE COMPUTED SUCCESSFULLY +C 1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD SELECT VALUES +C CLOSER TO MOST RECENTLY USED VALUES IF POSSIBLE +C -1 MEANS CURRENT BETA AND X+DELTA ARE +C NOT ACCEPTABLE; ODRPACK SHOULD STOP + +C INPUT ARGUMENTS, NOT TO BE CHANGED BY THIS ROUTINE: + INTEGER I,IDEVAL,ISTOP,L,LDIFX,LDM,LDN,LDNP,M,N,NP,NQ + DOUBLE PRECISION BETA(NP),XPLUSD(LDN,M) + INTEGER IFIXB(NP),IFIXX(LDIFX,M) +C OUTPUT ARGUMENTS: + DOUBLE PRECISION F(LDN,NQ),FJACB(LDN,LDNP,NQ),FJACD(LDN,LDM,NQ) + integer k + double precision fvalue +c + ISTOP=0 + do I=1,NP + if(BETA(I).lt.betamin(I).or. + &BETA(I).gt.betamax(I))then + ISTOP=1 + return + endif + enddo + do I=1,N + pco2i(I)=XPLUSD(I,1) + aPPFDlf(I)=XPLUSD(I,2) + templeaf(I)=XPLUSD(I,3) + pres_air(I)=XPLUSD(I,4) + enddo + IF (MOD(IDEVAL,10).GE.1) THEN + call funkmin_C4Fit(NP,BETA,fvalue) + if(fvalue.gt.1.0d+20)then + ISTOP=1 + return + endif + DO 100 I = 1,N + F(I,1)=anet_pred(I) + 100 CONTINUE + END IF + RETURN + END +!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ diff --git a/leafres/testarea/stomoptimization.f b/leafres/testarea/stomoptimization.f index b839d3f..d5511b1 100644 --- a/leafres/testarea/stomoptimization.f +++ b/leafres/testarea/stomoptimization.f @@ -10,7 +10,7 @@ c &gammas0(npoints),yAnet0(npoints),gswmeas0(npoints), &pvapordef_s0(npoints),stomintercept,stomslope,rayDzero integer i,ndim - double precision beta(10),fatbeta,ftol + double precision beta(10),fatbeta,ftol,f1dim_stom parameter(ftol=1.0d-7) external funkmin_stom,f1dim_stom diff --git a/leafres/testrun/Makefile b/leafres/testrun/Makefile index 189af25..5e05a07 100644 --- a/leafres/testrun/Makefile +++ b/leafres/testrun/Makefile @@ -1,12 +1,11 @@ # This is the makefile for piscal # name of executable ALL = piscal -#mpipiscal # compiler options FF = mpif90 #FOPTS = -g -C -FOPTS = -g -fallow-argument-mismatch +FOPTS = -g #Base directory BASEDIR = ../.. @@ -27,7 +26,8 @@ OBJS = LeafGasPISCAL_single.o adsor.o clustering.o cppowell.o GenericRegres.o lf LeafGasFit_Stom.o nonsyssolver.o time_resolution.o CharToNumeric.o cpfixedpoint.o funkmin_cica5.o NumberToChar.o\ stdmaxmeanmin.o ToLeafGasOptimization.o cica5.o cpnongradopt.o funkmin_stom.o LeafGasPrintToFiles.o odr_leastsquare.o StomatalConductance.o\ UnivParamsAlloc.o cica_Regression5.o cpnonsyssolver.o funkmin_UnivPhotoFit.o leafunivphotosyn.o odrpack.o stomlfitbasis.o UnivPhotoFit.o\ - fluorescencejmax.o funkmin_flujmax.o pam_parameters.o + fluorescencejmax.o funkmin_flujmax.o pam_parameters.o C4SetUpLeafGasFit.o C4PhotoFit.o funkmin_C4Fit.o c4leafanetmodel.o d1mach.o dnqsol.o\ + ierm1.o derv1.o dnrm2.o ierv1.o ermsg.o erfin.o $(ALL): $(OBJS) $(FF) $(FOPTS) $(OBJS) -o $@
  • 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