#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'README' <<'END_OF_FILE' X *************************************************************************** X * All the software contained in this library is protected by copyright. * X * Permission to use, copy, modify, and distribute this software for any * X * purpose without fee is hereby granted, provided that this entire notice * X * is included in all copies of any software which is or includes a copy * X * or modification of this software and in all copies of the supporting * X * documentation for such software. * X *************************************************************************** X * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED * X * WARRANTY. IN NO EVENT, NEITHER THE AUTHORS, NOR THE PUBLISHER, NOR ANY * X * MEMBER OF THE EDITORIAL BOARD OF THE JOURNAL "NUMERICAL ALGORITHMS", * X * NOR ITS EDITOR-IN-CHIEF, BE LIABLE FOR ANY ERROR IN THE SOFTWARE, ANY * X * MISUSE OF IT OR ANY DAMAGE ARISING OUT OF ITS USE. THE ENTIRE RISK OF * X * USING THE SOFTWARE LIES WITH THE PARTY DOING SO. * X *************************************************************************** X * ANY USE OF THE SOFTWARE CONSTITUTES ACCEPTANCE OF THE TERMS OF THE * X * ABOVE STATEMENT. * X *************************************************************************** X X AUTHORS: X X M. Sadkane X Universite de Bretagne Occidentale, Brest, France X E-MAIL: sadkane@univ-brest.fr X X R. B. Sidje X University of Queensland, Brisbane, Australia X E-MAIL: rbs@maths.uq.edu.au X X REFERENCE: X X - Implementation of a Variable Block Davidson Method with Deflation X for Solving Large Sparse Eigenproblems X NUMERICAL ALGORITHMS, 20 (1999), PP. 217-240 X X SOFTWARE REVISION DATE: X X JANUARY 11, 1999 X X SOFTWARE LANGUAGE: X X FORTRAN 77 X X--------------------------------------------------------------------------- XThis is a Fortran-77 software package which implements a deflated and Xvariable-block version of the Davidson method for computing a few of Xthe extreme (i.e., leftmost or rightmost) eigenpairs of large sparse Xsymmetric matrices. X X C O N T E N T S X=========================================================================== XThis README is divided into three main parts: XPART 1. QUICK SUMMARY - Quick overview of the package XPART 2. SAMPLES OF SESSION - Outputs obtained by executing the software XPART 3. DETAILED GUIDE - Further details about the package X X=========================================================================== X P A R T 1. X Q U I C K S U M M A R Y X=========================================================================== XBelow is an overview of the different components of the package. XWithin each module given below, there is a detailed header which lists Xthe elements contained in the module and their purpose. For each Xroutine in the module, the header includes a section which gives the aim Xof the routine, the routines that are called ("Called Routines"), as Xwell as the other routines of the package in which the routine itself Xis called ("Calling Routines"). X XA/ DATA X--------------------------------------------------------------------------- Xgr3030 : Harwell-Boeing matrix X Xinit.data.example for the driver runme: X This is an example of how to set input data for the driver runme. X In order to be used, copy init.data.example to init.data X or simply type the command "runme init.data.example" X XB/ DRIVERS X--------------------------------------------------------------------------- Xrunme.f : driver using external data. X Xalone.f : simple self-contained stand-alone driver. X XMakefile : makefile allowing to build the executables. X To build the stand-alone driver simply type "make alone" X To build the advanced driver simply type "make runme" X XC/ MODULES TO HANDLE THE INPUT/OUTPUT PHASES X--------------------------------------------------------------------------- Xcommon.inc: common/global variables. X Users can modify the file to add their own extra variables X Xio.f : input/output management X Xrandm.f : generates a matrix of random numbers using the function DLARN X from the LAPACK testing suite (DLARN is included in the package) X Xgetmat.f : gets the matrix, make up the corrector, get initial guesses. X Users can modify the module to add their own matrix loading X routines X Xeigsrt.f : sorts the eigenpairs with respect to eigenvalues or residuals. X XD/ COMPUTATIONAL MODULES X--------------------------------------------------------------------------- Xdavpack.f : Davidson's algorithm. X Xmatvec.f : block matrix-vector multiplication routines. X Users can modify the module to add their own matrix-vector X routines X Xexpokit.f : relevant subset extracted from the matrix exponential package X EXPOKIT. X Xichol.f : LDL^T variant of Incomplete Choleski. X Xcorrec.f : routines to perform the correction/preconditioning step in X Davidson's algorithm. X Users can modify the module to add their own preconditioners X XE/ BLAS/LAPACK X--------------------------------------------------------------------------- Xblas.f and lapack.f : X These files assemble the relevant subsets of BLAS and LAPACK X needed by the package. By uncommenting or commenting the X appropriate lines in the Makefile, one may link either to these X substitutes or the local installations of BLAS and/or LAPACK. X X=========================================================================== X P A R T 2. X S A M P L E S O F S E S S I O N X (On a SUN workstation with Solaris) X XSample 1: alone (using g77 -O3) XSample 2: runme (using g77 -O3) XSample 3: alone (using f77 -O3) XSample 4: runme (using f77 -O3) XSample 5: runme init.data.example (using f77 -O3) X=========================================================================== X X WARNING: on a SUN system, at the end of the output, the following X note may appear (without affecting the correctness of the results): X XNote: the following IEEE floating-point arithmetic exceptions Xoccurred and were never cleared; see ieee_flags(3M): XInexact; Underflow; XSun's implementation of IEEE arithmetic is discussed in Xthe Numerical Computation Guide. X X########################################################################### XSample 1: alone (using g77 -O3) X########################################################################### X X%alone X Generating the matrix ... X machine epsilon = 2.22044605E-16 X tolerance used = 1.E-10 X Xiter basis nmult block nevf residual X 2 2 2 0 6.274E+00 X 4 4 2 0 4.829E+00 X 6 6 2 0 4.621E+00 X 8 8 2 0 3.197E+00 X 10 10 2 0 2.988E+00 X 12 12 2 0 2.527E+00 X 14 14 2 0 2.117E+00 X 16 16 2 0 2.024E+00 X 18 18 2 0 2.084E+00 X 1 20 20 2 0 1.804E+00 X-------------------------------------------- X 4 24 4 0 2.177E+00 X 6 26 2 0 2.217E+00 X 8 28 2 0 1.751E+00 X 10 30 2 0 2.323E+00 X 12 32 2 0 2.080E+00 X 14 34 2 0 2.446E+00 X 16 36 2 0 2.218E+00 X 18 38 2 0 2.510E+00 X 2 20 40 2 0 2.524E+00 X-------------------------------------------- X 4 44 4 0 2.331E+00 X 6 46 2 0 2.124E+00 X 8 48 2 0 2.077E+00 X 10 50 2 0 1.965E+00 X 12 52 2 0 1.838E+00 X 14 54 2 0 1.638E+00 X 16 56 2 0 1.701E+00 X 18 58 2 0 1.665E+00 X 3 20 60 2 0 1.597E+00 X-------------------------------------------- X 4 64 4 0 1.572E+00 X 6 66 2 0 2.062E+00 X 8 68 2 0 1.826E+00 X 10 70 2 0 1.888E+00 X 12 72 2 0 1.452E+00 X 14 74 2 0 7.878E-01 X 16 76 2 0 6.184E-01 X 18 78 2 0 7.799E-01 X 4 20 80 2 0 4.594E-01 X-------------------------------------------- X 4 84 4 0 2.438E-01 X 6 86 2 0 2.128E-01 X 8 88 2 0 1.910E-01 X 10 90 2 0 1.951E-01 X 12 92 2 0 1.490E-01 X 14 94 2 0 9.609E-02 X 16 96 2 0 5.960E-02 X 18 98 2 0 4.364E-02 X 5 20 100 2 0 2.286E-02 X-------------------------------------------- X 4 104 4 0 1.133E-02 X 6 106 2 0 9.091E-03 X 8 108 2 0 4.869E-03 X 10 110 2 0 2.875E-03 X 12 112 2 0 1.720E-03 X 14 114 2 0 1.026E-03 X 16 116 2 0 8.118E-04 X 18 118 2 0 4.948E-04 X 6 20 120 2 0 4.553E-04 X-------------------------------------------- X 4 124 4 0 2.651E-04 X 6 126 2 0 3.858E-04 X 8 128 2 0 3.391E-04 X 10 130 2 0 3.397E-04 X 12 132 2 0 3.114E-04 X 14 134 2 0 2.538E-04 X 16 136 2 0 1.837E-04 X 18 138 2 0 1.177E-04 X 7 20 140 2 0 7.538E-05 X-------------------------------------------- X 4 144 4 0 3.999E-05 X 6 146 2 0 2.841E-05 X 8 148 2 0 1.755E-05 X 10 150 2 0 1.121E-05 X 12 152 2 0 8.045E-06 X 14 154 2 0 5.543E-06 X 16 156 2 0 4.396E-06 X 18 158 2 0 2.656E-06 X 8 20 160 2 0 2.499E-06 X-------------------------------------------- X 4 164 4 0 1.624E-06 X 6 166 2 0 2.651E-06 X 8 168 2 0 2.274E-06 X 10 170 2 0 2.492E-06 X 12 172 2 0 2.036E-06 X 14 174 2 0 1.783E-06 X 16 176 2 0 1.046E-06 X 18 178 2 0 7.020E-07 X 9 20 180 2 0 4.875E-07 X-------------------------------------------- X 4 184 4 0 2.380E-07 X 6 186 2 0 1.762E-07 X 8 188 2 0 1.142E-07 X 10 190 2 0 6.470E-08 X 12 192 2 0 4.387E-08 X 14 194 2 0 2.744E-08 X 16 196 2 0 2.314E-08 X 18 198 2 0 1.353E-08 X 10 20 200 2 0 1.482E-08 X-------------------------------------------- X 4 204 4 0 8.702E-09 X 6 206 2 0 1.543E-08 X 8 208 2 0 1.307E-08 X 10 210 2 0 1.431E-08 X 12 212 2 0 1.306E-08 X 14 214 2 0 9.364E-09 X 11 16 216 2 1 7.155E-11 X-------------------------------------------- X X Runtime (seconds) = 0.031249546 X Mat-vec products = 216 X Residual = 7.15459411E-11 X Eigenvalue = 11.1321623 X X########################################################################### XSample 2: runme (using g77 -O3) X########################################################################### X X%runme XNo `init.data' file. Default internal configuration is used. XHBO matrix filename? Xgr3030 X 1SYMMETRIC MATRIX FROM NINE POINT START ON A 30 X 30 GRID. type : X RSA size : 900 900 X order : 900 number of nonzero : 4322 X ||A||_inf = 12. XInput phase OK... X---------------------------------------- X machine epsilon = 2.22044605E-16 X tolerance used = 1.00000001E-07 X Xiter basis nmult block nevf residual X 1 40 40 1 0 2.277E-03 X 2 40 80 1 0 3.012E-05 X 3 40 120 1 0 2.183E-07 X 4 15 135 1 1 9.515E-08 X XRuntime (seconds): 7.188E-03 XTotal number of iterations used: 4 XTotal number of matrix * vector: 135 X------------- INFORMATION -------------- X matfile: gr3030 X mattype: hbo Xguessfile: X errfile: X outfile: X outfmt: 1P,E22.15 Xinfolevel: 1 X basis: 40 X block: 1 Xeigenpair: 1 Xiteration: 100 Xcorrector: 1 X outmax: 5 Xtolerance: 1.00E-07 X---------------------------------------- X XRESIDUALS = X 9.514969539817650E-08 X XEIGENVALUES = X 1.195905988250289E+01 X XEIGENVECTORS = X 4.847095996510790E-04 X 1.588202453176127E-03 X 1.434279286987249E-03 X 3.111376095734475E-03 X 2.325096331228699E-03 X X X########################################################################### XSample 3: alone (using f77 -O3) X########################################################################### X X%alone X Generating the matrix ... X machine epsilon = 2.2204460492503D-16 X tolerance used = 1.0000000000000D-10 X Xiter basis nmult block nevf residual X 2 2 2 0 6.274E+00 X 4 4 2 0 4.829E+00 X 6 6 2 0 4.621E+00 X 8 8 2 0 3.197E+00 X 10 10 2 0 2.988E+00 X 12 12 2 0 2.527E+00 X 14 14 2 0 2.117E+00 X 16 16 2 0 2.024E+00 X 18 18 2 0 2.084E+00 X 1 20 20 2 0 1.804E+00 X-------------------------------------------- X 4 24 4 0 2.177E+00 X 6 26 2 0 2.217E+00 X 8 28 2 0 1.751E+00 X 10 30 2 0 2.323E+00 X 12 32 2 0 2.080E+00 X 14 34 2 0 2.446E+00 X 16 36 2 0 2.218E+00 X 18 38 2 0 2.510E+00 X 2 20 40 2 0 2.524E+00 X-------------------------------------------- X 4 44 4 0 2.331E+00 X 6 46 2 0 2.124E+00 X 8 48 2 0 2.077E+00 X 10 50 2 0 1.965E+00 X 12 52 2 0 1.838E+00 X 14 54 2 0 1.638E+00 X 16 56 2 0 1.701E+00 X 18 58 2 0 1.665E+00 X 3 20 60 2 0 1.597E+00 X-------------------------------------------- X 4 64 4 0 1.572E+00 X 6 66 2 0 2.062E+00 X 8 68 2 0 1.826E+00 X 10 70 2 0 1.888E+00 X 12 72 2 0 1.452E+00 X 14 74 2 0 7.878E-01 X 16 76 2 0 6.184E-01 X 18 78 2 0 7.799E-01 X 4 20 80 2 0 4.594E-01 X-------------------------------------------- X 4 84 4 0 2.438E-01 X 6 86 2 0 2.128E-01 X 8 88 2 0 1.910E-01 X 10 90 2 0 1.951E-01 X 12 92 2 0 1.490E-01 X 14 94 2 0 9.609E-02 X 16 96 2 0 5.960E-02 X 18 98 2 0 4.364E-02 X 5 20 100 2 0 2.286E-02 X-------------------------------------------- X 4 104 4 0 1.133E-02 X 6 106 2 0 9.091E-03 X 8 108 2 0 4.869E-03 X 10 110 2 0 2.875E-03 X 12 112 2 0 1.720E-03 X 14 114 2 0 1.026E-03 X 16 116 2 0 8.118E-04 X 18 118 2 0 4.948E-04 X 6 20 120 2 0 4.553E-04 X-------------------------------------------- X 4 124 4 0 2.651E-04 X 6 126 2 0 3.858E-04 X 8 128 2 0 3.391E-04 X 10 130 2 0 3.397E-04 X 12 132 2 0 3.114E-04 X 14 134 2 0 2.538E-04 X 16 136 2 0 1.837E-04 X 18 138 2 0 1.177E-04 X 7 20 140 2 0 7.538E-05 X-------------------------------------------- X 4 144 4 0 3.999E-05 X 6 146 2 0 2.841E-05 X 8 148 2 0 1.755E-05 X 10 150 2 0 1.121E-05 X 12 152 2 0 8.045E-06 X 14 154 2 0 5.543E-06 X 16 156 2 0 4.396E-06 X 18 158 2 0 2.656E-06 X 8 20 160 2 0 2.499E-06 X-------------------------------------------- X 4 164 4 0 1.624E-06 X 6 166 2 0 2.651E-06 X 8 168 2 0 2.274E-06 X 10 170 2 0 2.492E-06 X 12 172 2 0 2.036E-06 X 14 174 2 0 1.783E-06 X 16 176 2 0 1.046E-06 X 18 178 2 0 7.020E-07 X 9 20 180 2 0 4.875E-07 X-------------------------------------------- X 4 184 4 0 2.380E-07 X 6 186 2 0 1.762E-07 X 8 188 2 0 1.142E-07 X 10 190 2 0 6.470E-08 X 12 192 2 0 4.387E-08 X 14 194 2 0 2.744E-08 X 16 196 2 0 2.314E-08 X 18 198 2 0 1.353E-08 X 10 20 200 2 0 1.482E-08 X-------------------------------------------- X 4 204 4 0 8.702E-09 X 6 206 2 0 1.543E-08 X 8 208 2 0 1.307E-08 X 10 210 2 0 1.431E-08 X 12 212 2 0 1.306E-08 X 14 214 2 0 9.364E-09 X 11 16 216 2 1 7.155E-11 X-------------------------------------------- X X Runtime (seconds) = 1.5833926200867 X Mat-vec products = 216 X Residual = 7.1545941069204D-11 X Eigenvalue = 11.132162270033 X X########################################################################### XSample 4: runme (using f77 -O3) X########################################################################### X X%runme XNo `init.data' file. Default internal configuration is used. XHBO matrix filename? Xgr3030 X 1SYMMETRIC MATRIX FROM NINE POINT START ON A 30 X 30 GRID. type : X RSA size : 900 900 X order : 900 number of nonzero : 4322 X ||A||_inf = 12.000000000000 XInput phase OK... X---------------------------------------- X machine epsilon = 2.2204460492503D-16 X tolerance used = 1.0000000000000D-07 X Xiter basis nmult block nevf residual X 1 40 40 1 0 2.277E-03 X 2 40 80 1 0 3.012E-05 X 3 40 120 1 0 2.183E-07 X 4 15 135 1 1 9.515E-08 X XRuntime (seconds): 1.401E+00 XTotal number of iterations used: 4 XTotal number of matrix * vector: 135 X------------- INFORMATION -------------- X matfile: gr3030 X mattype: hbo Xguessfile: X errfile: X outfile: X outfmt: 1P,E22.15 Xinfolevel: 1 X basis: 40 X block: 1 Xeigenpair: 1 Xiteration: 100 Xcorrector: 1 X outmax: 5 Xtolerance: 1.00E-07 X---------------------------------------- X XRESIDUALS = X 9.514969539817650E-08 X XEIGENVALUES = X 1.195905988250289E+01 X XEIGENVECTORS = X 4.847095996510790E-04 X 1.588202453176127E-03 X 1.434279286987249E-03 X 3.111376095734475E-03 X 2.325096331228699E-03 X X########################################################################### XSample 5: runme init.data.example (using f77 -O3) X########################################################################### X X% runme init.data.example Xinit.data.example>infolevel= 1 Xinit.data.example> matfile= gr3030 Xinit.data.example> outfmt= 1P,E11.3 X 1SYMMETRIC MATRIX FROM NINE POINT START ON A 30 X 30 GRID. type : X RSA size : 900 900 X order : 900 number of nonzero : 4322 X ||A||_inf = 12.000000000000 XInput phase OK... X---------------------------------------- X machine epsilon = 2.2204460492503D-16 X tolerance used = 1.0000000000000D-07 X Xiter basis nmult block nevf residual X 1 40 40 1 0 2.277E-03 X 2 40 80 1 0 3.012E-05 X 3 40 120 1 0 2.183E-07 X 4 15 135 1 1 9.515E-08 X XRuntime (seconds): 1.403E+00 XTotal number of iterations used: 4 XTotal number of matrix * vector: 135 X------------- INFORMATION -------------- X matfile: gr3030 X mattype: hbo Xguessfile: X errfile: X outfile: X outfmt: 1P,E11.3 Xinfolevel: 1 X basis: 40 X block: 1 Xeigenpair: 1 Xiteration: 100 Xcorrector: 1 X outmax: 5 Xtolerance: 1.00E-07 X---------------------------------------- X XRESIDUALS = X 9.515E-08 X XEIGENVALUES = X 1.196E+01 X XEIGENVECTORS = X 4.847E-04 X 1.588E-03 X 1.434E-03 X 3.111E-03 X 2.325E-03 X X=========================================================================== X X P A R T 3. X D E T A I L E D G U I D E X=========================================================================== X XThe Davidson method is a preconditioned eigenvalue technique aimed at Xcomputing a few of the extreme (i.e., leftmost or rightmost) Xeigenpairs of large sparse symmetric matrices. The method has gained Xquite an interest in quantum chemistry where it emanated. However, for Xthe classical Davidson method to be suitable, the matrix dealt with Xmust be strongly diagonally dominant (in the sense that its Xeigenvectors are close to the canonical vectors). The algorithm then Xuses the diagonal as preconditioner. Further recent investigations Xhave shown that the method can be used with more general Xpreconditioners and therefore can be applied successfully to matrices Xarising in other fields. The crux of the problem now resides in Xchosing an appropriate preconditioner for the situation at hand. X XThis package is a generalized block implementation of the Davidson Xmethod. The block implementation increases memory performance through Xdata locality and cache reuse. More specifically, this implementation Xis a variable block implementation in the sense that the block-size is Xadjusted (downward or upward) on the fly. Several eigenpairs are Xcomputed at once and the eigenpairs that converge are deflated. The Xpreconditioning stage is implemented with a variety of general Xpreconditioners instead of using only the diagonal as it was proposed Xoriginally. Built-in preconditioners are: diagonal, tridiagonal, Xpentadiagonal, Gauss-Seidel, Incomplete Choleski, Exponential. X XAdditionally, the package contains interface routines for input/output Xmanagement and this allows an end-user to exploit the software Xdirectly in a stand-alone fashion without extra coding. Besides, the Xmodular organization of the package enables interested users to either Xextract the core computational routines in view of utilizing them Xelsewhere, or add in the present package their own routines for Xhandling matrix-dependent operations. These include: matrix loading, Xmatrix multiplication, preconditioning. X XThe present package is ready-to-use for matrices stored under the XHarwell-Boeing storage format (HBO), Compressed Column Storage format X(CCS) and the Coordinates storage format (COO). X XThe implementation has been successfully tested on SUN and SGI Xplatforms. X XINSTALLATION X------------ X XThe package is written in Fortran 77 and uses external routines from Xthe well-known dense linear algebra libraries BLAS and LAPACK. If you Xdo not have BLAS and/or LAPACK, the files blas.f and lapack.f within Xthis package provide the relevant subsets of BLAS and LAPACK needed. XThe Makefile has further details on how to use either these substitutes Xor your own local installations of BLAS and/or LAPACK. X XTyping "make alone" builds a simple self-contained stand-alone driver. X XTyping "make runme" builds a more elaborated driver that uses Xexternal data. X XOnce the executables have been successfully built, they can be run Xdirectly. They will use default settings. X XIf the compilation is unsuccessful, one may need to edit the Makefile Xin order to change either the compiler name or the libraries with Xrespect to the local installations. X XEXECUTION X--------- X XThe use of the driver "alone" is straightforward. Simply type the Xcommand "alone". (Its source code integrates its own initializations). XThe remainder of this document is concerned only with the driver "runme". X Xsyntax: runme [name-of-initialization-file] X XIf no initialization file is specified on the command line (i.e., Xthe command is just "runme"), the code will consider init.data as the Xdefault initialization file. If the file init.data does not exist, the Xcode will use default initialization values (see below) and will prompt Xthe user for the name of a file containing a Harwell-Boeing matrix. X XWhen the matrix is loaded, the data needed for the corrector (or Xpreconditioner) are retrieved or computed from the matrix. If the Xuser has specified an initial guess file, initial guess vectors are Xread from the user's file, otherwise, they are generated randomly. XMatrix and corrector data sets are passed through common blocks that Xare declared in the file common.inc. X XMANAGING INPUT/OUTPUT X--------------------- X XThe driver runme uses a number of parameters that can be tuned by the Xuser. All these parameters and their default values are summarized here X(More details are given in the file init.data.example which can be used Xdirectly with the command "runme init.data.example"). X XName Description X----------------------------------------------------------------------- Xmatfile : string - the name of the file containing the matrix X (default = screen) Example: gr3030 X Xmattype : string of 3 characters - the format in which the matrix X is stored (hbo or coo or ccs) X (default = hbo) Example: coo X Xguessfile : string - the name of a file containing initial guesses, for X eigenvectors X (default = unspecified) Example: guess_file X if unspecified, guesses are generated internally (random) X if specified, guesses are read from the file X Xerrfile : string - the name of a file in which error messages should be X reported X (default = screen) Example: error_file X Xoutfile : string - the name of a file in which to put results of the X computation X (default = screen) Example: output_file X Xoutfmt : string - format for output results as per the Fortran 77 syntax X (default = 1P,E22.15) Example: 1P,E11.3 X Xinfolevel : integer between 0 and 5 - information level gauge X (default = 1) Example: 2 X Xbasis : integer - the maximum basis size X (default = 40) Example: 30 X Xblock : integer - the initial block size X (default = 1) Example: 4 X Xeigenpair : integer - number of desired leftmost/rightmost eigenpairs X -p searches for the p leftmost eigenpairs X (default = 1) Example: -3 X Xiteration : integer - maximum allowable number of iterations (i.e., restarts) X (default = 100) Example: 50 X Xcorrector : integer - the numeric identifier of the corrector/preconditioner X (default = 1) Example: -1 X 0 = no internal correction (NC) X 1 = diagonal correction (DC) X 2 = tridiagonal correction (TC) X 3 = pentadiagonal correction (PC) X -1 = Gauss-Seidel correction (GS) X -2 = Incomplete Choleski correction (IC) X -3 = Exponential correction (EX) X Xoutmax : integer - number of rows written on output X -k causes the last k rows to be written X (default = 5) Example: -7 X Xtolerance : double precision - required tolerance on the residuals X (default = 1.0E-7) Example: 1.0E-5 X XEXIT CODES X---------- X XWhen the computation aborts, either of the following exit codes Xmay be reported: X *A negative value means bad input arguments: X ifail = -1 if the basis-size exceeds the order of the X problem X X ifail = -2 if the basis-size exceeds the order or the X block-size exceeds the basis-size X X ifail = -3 if the order exceeds the declared X leading dimension X X ifail = -4 if the integer workspace is insufficient X X ifail = -5 if the workspace is insufficient X X Note that if inputs are not initialized properly (e.g. X if the order is 0), one or another error may be reported. X X *A positive value means a runtime failure occurred. X Current exit codes are: X ifail = 8 if a failure occurred in LAPACK when solving X the Ritz problem. X ifail = 9 if the maximum allowable number of iterations X was reached without convergence of all of the X eigenpairs. X XMODIFICATION OF THE PACKAGE X--------------------------- X XEXTRACTING THE CORE COMPUTATIONAL ROUTINES X------------------------------------------ X XIf you wish to extract the core computational routines of this package Xin view of their utilization from within another existing package, then Xalone.f provides the necessary illustration as to how this can be done. X XThe core computational routines are grouped in the file davpack.f. XThis file is computationally self-contained and does not use common Xvariables. The routines there are matrix-free, i.e., they are Xindependent of the matrix data storage format. Utilization of these Xroutines is possible outside of the actual package provided the Xfollowing (see alone.f): X- a matrix-vector multiplication routine (matvec) X- a correction routine (correc) X- link either with your local installations of BLAS and LAPACK or X the subsets blas.f and lapack.f provided in this package. X XUSER-DEFINED MATRIX FORMAT X-------------------------- X XIf you want to operate with matrices stored in a format not currently Xsupported in the package, you can either pre-process the matrices and Xconvert them into a supported format, or your can add the routines that Xwill support your format within the package: X X- Modify getmat.f to load your matrix (see explanations in getmat.f) X- Modify matvec.f to add your block matrix-vector product (see X explanations in matvec.f) X XThe same considerations apply if the matrix is not available explicitly. XThe user can modify getmat.f to add some upfront initializations, and Xthen modify matvec.f to insert the matrix-vector function. X XUSER-DEFINED CORRECTOR (PRECONDITIONER) X--------------------------------------- X XThis section describes how to add your own corrector. This operation has Xtwo aspects: i) initialization of your corrector, and ii) application of Xthe corrector at each correction stage. X Xi) Initialization: If the data for your corrector can be retrieved Xupfront when the matrix is loaded, then modify getmat.f to initialize Xyour corrector at the same time that the matrix is initialized. The Xdiagonal, tridiagonal, pentadiognal correctors of this package are Xconstructed in that way. Some correctors do not need an upfront Xinitialization. The Choleski corrector, for example, is recomputed at Xeach correction stage. X Xii) Application: Modify correc.f to add your corrector routine Xthat will be called at each correction stage (see explanations in Xcorrec.f). X XUSER-DEFINED VARIABLES X---------------------- X XAll the variables that need to be shared across modules are grouped Xin the file common.inc. This file is included (with the the Fortran 77 Xstatement "include 'common.inc'") in all the modules except davpack.f. X XIn the course of implementing your matrix loading routines, corrector, Xor matrix-vector multiplication routines, you can re-use variables Xfrom the common file, augment the declared sizes of the variables, Xor add your own extra variables. X XThe file common.inc includes the following variables: X XSizes: X------ X integer c_nmax, c_nzmax, c_n, c_nz X parameter( c_nmax=15500, c_nzmax=550000 ) X X The settings are large enough for all the matrices in the X Harwell-Boeing collection as of March 28, 1994, X except bcsstk30, 31, and 32 in bcsstuc5.data. X XMatrix data: X------------ X double precision c_a(c_nzmax), c_anorm X integer c_ia(c_nzmax), c_ja(c_nzmax) X common /MATRIX/ X. c_anorm,- some norm of the matrix X. c_a, - non-zeros values of the matrix X. c_ia, - depending on format: row indices or row pointers X. c_ja, - depending on format: column indices or column pointers X. c_nz, - number of non-zeros X. c_n - order of the matrix X XCorrector data: X--------------- X double precision c_diag(c_nmax,3) X X The array holds the appropriate number of diagonals of the matrix X to enable Diagonal, Tridiagonal, Pentadiagonal correctors X X double precision c_ac(c_nzmax) X integer c_ic(c_nzmax), c_jc(c_nmax+1) X common /CORRECTOR/ X. c_diag, c_ac, c_ic, c_jc X X These arrays are used to hold the factors of the Incomplete X Choleski (LDL^T variant) corrector. X XNOTE: X----- XIt is important to keep in mind that there is only one "active" Xpreconditioner and matrix-vector module per run. Hence each Xpreconditioner can use the common arrays as workspace. X XConsequently, while designing their preconditioner or matrix-vector Xmultiplication routines, users can use and modify the arrays Xin common.inc accordingly. X END_OF_FILE if test 34246 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'gr3030' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'gr3030'\" else echo shar: Extracting \"'gr3030'\" \(56700 characters\) sed "s/^X//" >'gr3030' <<'END_OF_FILE' X1SYMMETRIC MATRIX FROM NINE POINT START ON A 30 X 30 GRID. GR 30 30 X 696 46 217 433 0 XRSA 900 900 4322 0 X(20I4) (20I4) (10F8.1) X 1 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 X 100 105 110 115 120 125 130 135 140 145 148 152 157 162 167 172 177 182 187 192 X 197 202 207 212 217 222 227 232 237 242 247 252 257 262 267 272 277 282 287 292 X 295 299 304 309 314 319 324 329 334 339 344 349 354 359 364 369 374 379 384 389 X 394 399 404 409 414 419 424 429 434 439 442 446 451 456 461 466 471 476 481 486 X 491 496 501 506 511 516 521 526 531 536 541 546 551 556 561 566 571 576 581 586 X 589 593 598 603 608 613 618 623 628 633 638 643 648 653 658 663 668 673 678 683 X 688 693 698 703 708 713 718 723 728 733 736 740 745 750 755 760 765 770 775 780 X 785 790 795 800 805 810 815 820 825 830 835 840 845 850 855 860 865 870 875 880 X 883 887 892 897 902 907 912 917 922 927 932 937 942 947 952 957 962 967 972 977 X 982 987 992 9971002100710121017102210271030103410391044104910541059106410691074 X10791084108910941099110411091114111911241129113411391144114911541159116411691174 X11771181118611911196120112061211121612211226123112361241124612511256126112661271 X12761281128612911296130113061311131613211324132813331338134313481353135813631368 X13731378138313881393139814031408141314181423142814331438144314481453145814631468 X14711475148014851490149515001505151015151520152515301535154015451550155515601565 X15701575158015851590159516001605161016151618162216271632163716421647165216571662 X16671672167716821687169216971702170717121717172217271732173717421747175217571762 X17651769177417791784178917941799180418091814181918241829183418391844184918541859 X18641869187418791884188918941899190419091912191619211926193119361941194619511956 X19611966197119761981198619911996200120062011201620212026203120362041204620512056 X20592063206820732078208320882093209821032108211321182123212821332138214321482153 X21582163216821732178218321882193219822032206221022152220222522302235224022452250 X22552260226522702275228022852290229523002305231023152320232523302335234023452350 X23532357236223672372237723822387239223972402240724122417242224272432243724422447 X24522457246224672472247724822487249224972500250425092514251925242529253425392544 X25492554255925642569257425792584258925942599260426092614261926242629263426392644 X26472651265626612666267126762681268626912696270127062711271627212726273127362741 X27462751275627612766277127762781278627912794279828032808281328182823282828332838 X28432848285328582863286828732878288328882893289829032908291329182923292829332938 X29412945295029552960296529702975298029852990299530003005301030153020302530303035 X30403045305030553060306530703075308030853088309230973102310731123117312231273132 X31373142314731523157316231673172317731823187319231973202320732123217322232273232 X32353239324432493254325932643269327432793284328932943299330433093314331933243329 X33343339334433493354335933643369337433793382338633913396340134063411341634213426 X34313436344134463451345634613466347134763481348634913496350135063511351635213526 X35293533353835433548355335583563356835733578358335883593359836033608361336183623 X36283633363836433648365336583663366836733676368036853690369537003705371037153720 X37253730373537403745375037553760376537703775378037853790379538003805381038153820 X38233827383238373842384738523857386238673872387738823887389238973902390739123917 X39223927393239373942394739523957396239673970397439793984398939943999400440094014 X40194024402940344039404440494054405940644069407440794084408940944099410441094114 X41174121412641314136414141464151415641614166417141764181418641914196420142064211 X42164221422642314236424142464251425642614264426642684270427242744276427842804282 X42844286428842904292429442964298430043024304430643084310431243144316431843204322 X4323 X 1 2 31 32 2 3 31 32 33 3 4 32 33 34 4 5 33 34 35 5 X 6 34 35 36 6 7 35 36 37 7 8 36 37 38 8 9 37 38 39 9 X 10 38 39 40 10 11 39 40 41 11 12 40 41 42 12 13 41 42 43 13 X 14 42 43 44 14 15 43 44 45 15 16 44 45 46 16 17 45 46 47 17 X 18 46 47 48 18 19 47 48 49 19 20 48 49 50 20 21 49 50 51 21 X 22 50 51 52 22 23 51 52 53 23 24 52 53 54 24 25 53 54 55 25 X 26 54 55 56 26 27 55 56 57 27 28 56 57 58 28 29 57 58 59 29 X 30 58 59 60 30 59 60 31 32 61 62 32 33 61 62 63 33 34 62 63 X 64 34 35 63 64 65 35 36 64 65 66 36 37 65 66 67 37 38 66 67 X 68 38 39 67 68 69 39 40 68 69 70 40 41 69 70 71 41 42 70 71 X 72 42 43 71 72 73 43 44 72 73 74 44 45 73 74 75 45 46 74 75 X 76 46 47 75 76 77 47 48 76 77 78 48 49 77 78 79 49 50 78 79 X 80 50 51 79 80 81 51 52 80 81 82 52 53 81 82 83 53 54 82 83 X 84 54 55 83 84 85 55 56 84 85 86 56 57 85 86 87 57 58 86 87 X 88 58 59 87 88 89 59 60 88 89 90 60 89 90 61 62 91 92 62 63 X 91 92 93 63 64 92 93 94 64 65 93 94 95 65 66 94 95 96 66 67 X 95 96 97 67 68 96 97 98 68 69 97 98 99 69 70 98 99 100 70 71 X 99 100 101 71 72 100 101 102 72 73 101 102 103 73 74 102 103 104 74 75 X 103 104 105 75 76 104 105 106 76 77 105 106 107 77 78 106 107 108 78 79 X 107 108 109 79 80 108 109 110 80 81 109 110 111 81 82 110 111 112 82 83 X 111 112 113 83 84 112 113 114 84 85 113 114 115 85 86 114 115 116 86 87 X 115 116 117 87 88 116 117 118 88 89 117 118 119 89 90 118 119 120 90 119 X 120 91 92 121 122 92 93 121 122 123 93 94 122 123 124 94 95 123 124 125 X 95 96 124 125 126 96 97 125 126 127 97 98 126 127 128 98 99 127 128 129 X 99 100 128 129 130 100 101 129 130 131 101 102 130 131 132 102 103 131 132 133 X 103 104 132 133 134 104 105 133 134 135 105 106 134 135 136 106 107 135 136 137 X 107 108 136 137 138 108 109 137 138 139 109 110 138 139 140 110 111 139 140 141 X 111 112 140 141 142 112 113 141 142 143 113 114 142 143 144 114 115 143 144 145 X 115 116 144 145 146 116 117 145 146 147 117 118 146 147 148 118 119 147 148 149 X 119 120 148 149 150 120 149 150 121 122 151 152 122 123 151 152 153 123 124 152 X 153 154 124 125 153 154 155 125 126 154 155 156 126 127 155 156 157 127 128 156 X 157 158 128 129 157 158 159 129 130 158 159 160 130 131 159 160 161 131 132 160 X 161 162 132 133 161 162 163 133 134 162 163 164 134 135 163 164 165 135 136 164 X 165 166 136 137 165 166 167 137 138 166 167 168 138 139 167 168 169 139 140 168 X 169 170 140 141 169 170 171 141 142 170 171 172 142 143 171 172 173 143 144 172 X 173 174 144 145 173 174 175 145 146 174 175 176 146 147 175 176 177 147 148 176 X 177 178 148 149 177 178 179 149 150 178 179 180 150 179 180 151 152 181 182 152 X 153 181 182 183 153 154 182 183 184 154 155 183 184 185 155 156 184 185 186 156 X 157 185 186 187 157 158 186 187 188 158 159 187 188 189 159 160 188 189 190 160 X 161 189 190 191 161 162 190 191 192 162 163 191 192 193 163 164 192 193 194 164 X 165 193 194 195 165 166 194 195 196 166 167 195 196 197 167 168 196 197 198 168 X 169 197 198 199 169 170 198 199 200 170 171 199 200 201 171 172 200 201 202 172 X 173 201 202 203 173 174 202 203 204 174 175 203 204 205 175 176 204 205 206 176 X 177 205 206 207 177 178 206 207 208 178 179 207 208 209 179 180 208 209 210 180 X 209 210 181 182 211 212 182 183 211 212 213 183 184 212 213 214 184 185 213 214 X 215 185 186 214 215 216 186 187 215 216 217 187 188 216 217 218 188 189 217 218 X 219 189 190 218 219 220 190 191 219 220 221 191 192 220 221 222 192 193 221 222 X 223 193 194 222 223 224 194 195 223 224 225 195 196 224 225 226 196 197 225 226 X 227 197 198 226 227 228 198 199 227 228 229 199 200 228 229 230 200 201 229 230 X 231 201 202 230 231 232 202 203 231 232 233 203 204 232 233 234 204 205 233 234 X 235 205 206 234 235 236 206 207 235 236 237 207 208 236 237 238 208 209 237 238 X 239 209 210 238 239 240 210 239 240 211 212 241 242 212 213 241 242 243 213 214 X 242 243 244 214 215 243 244 245 215 216 244 245 246 216 217 245 246 247 217 218 X 246 247 248 218 219 247 248 249 219 220 248 249 250 220 221 249 250 251 221 222 X 250 251 252 222 223 251 252 253 223 224 252 253 254 224 225 253 254 255 225 226 X 254 255 256 226 227 255 256 257 227 228 256 257 258 228 229 257 258 259 229 230 X 258 259 260 230 231 259 260 261 231 232 260 261 262 232 233 261 262 263 233 234 X 262 263 264 234 235 263 264 265 235 236 264 265 266 236 237 265 266 267 237 238 X 266 267 268 238 239 267 268 269 239 240 268 269 270 240 269 270 241 242 271 272 X 242 243 271 272 273 243 244 272 273 274 244 245 273 274 275 245 246 274 275 276 X 246 247 275 276 277 247 248 276 277 278 248 249 277 278 279 249 250 278 279 280 X 250 251 279 280 281 251 252 280 281 282 252 253 281 282 283 253 254 282 283 284 X 254 255 283 284 285 255 256 284 285 286 256 257 285 286 287 257 258 286 287 288 X 258 259 287 288 289 259 260 288 289 290 260 261 289 290 291 261 262 290 291 292 X 262 263 291 292 293 263 264 292 293 294 264 265 293 294 295 265 266 294 295 296 X 266 267 295 296 297 267 268 296 297 298 268 269 297 298 299 269 270 298 299 300 X 270 299 300 271 272 301 302 272 273 301 302 303 273 274 302 303 304 274 275 303 X 304 305 275 276 304 305 306 276 277 305 306 307 277 278 306 307 308 278 279 307 X 308 309 279 280 308 309 310 280 281 309 310 311 281 282 310 311 312 282 283 311 X 312 313 283 284 312 313 314 284 285 313 314 315 285 286 314 315 316 286 287 315 X 316 317 287 288 316 317 318 288 289 317 318 319 289 290 318 319 320 290 291 319 X 320 321 291 292 320 321 322 292 293 321 322 323 293 294 322 323 324 294 295 323 X 324 325 295 296 324 325 326 296 297 325 326 327 297 298 326 327 328 298 299 327 X 328 329 299 300 328 329 330 300 329 330 301 302 331 332 302 303 331 332 333 303 X 304 332 333 334 304 305 333 334 335 305 306 334 335 336 306 307 335 336 337 307 X 308 336 337 338 308 309 337 338 339 309 310 338 339 340 310 311 339 340 341 311 X 312 340 341 342 312 313 341 342 343 313 314 342 343 344 314 315 343 344 345 315 X 316 344 345 346 316 317 345 346 347 317 318 346 347 348 318 319 347 348 349 319 X 320 348 349 350 320 321 349 350 351 321 322 350 351 352 322 323 351 352 353 323 X 324 352 353 354 324 325 353 354 355 325 326 354 355 356 326 327 355 356 357 327 X 328 356 357 358 328 329 357 358 359 329 330 358 359 360 330 359 360 331 332 361 X 362 332 333 361 362 363 333 334 362 363 364 334 335 363 364 365 335 336 364 365 X 366 336 337 365 366 367 337 338 366 367 368 338 339 367 368 369 339 340 368 369 X 370 340 341 369 370 371 341 342 370 371 372 342 343 371 372 373 343 344 372 373 X 374 344 345 373 374 375 345 346 374 375 376 346 347 375 376 377 347 348 376 377 X 378 348 349 377 378 379 349 350 378 379 380 350 351 379 380 381 351 352 380 381 X 382 352 353 381 382 383 353 354 382 383 384 354 355 383 384 385 355 356 384 385 X 386 356 357 385 386 387 357 358 386 387 388 358 359 387 388 389 359 360 388 389 X 390 360 389 390 361 362 391 392 362 363 391 392 393 363 364 392 393 394 364 365 X 393 394 395 365 366 394 395 396 366 367 395 396 397 367 368 396 397 398 368 369 X 397 398 399 369 370 398 399 400 370 371 399 400 401 371 372 400 401 402 372 373 X 401 402 403 373 374 402 403 404 374 375 403 404 405 375 376 404 405 406 376 377 X 405 406 407 377 378 406 407 408 378 379 407 408 409 379 380 408 409 410 380 381 X 409 410 411 381 382 410 411 412 382 383 411 412 413 383 384 412 413 414 384 385 X 413 414 415 385 386 414 415 416 386 387 415 416 417 387 388 416 417 418 388 389 X 417 418 419 389 390 418 419 420 390 419 420 391 392 421 422 392 393 421 422 423 X 393 394 422 423 424 394 395 423 424 425 395 396 424 425 426 396 397 425 426 427 X 397 398 426 427 428 398 399 427 428 429 399 400 428 429 430 400 401 429 430 431 X 401 402 430 431 432 402 403 431 432 433 403 404 432 433 434 404 405 433 434 435 X 405 406 434 435 436 406 407 435 436 437 407 408 436 437 438 408 409 437 438 439 X 409 410 438 439 440 410 411 439 440 441 411 412 440 441 442 412 413 441 442 443 X 413 414 442 443 444 414 415 443 444 445 415 416 444 445 446 416 417 445 446 447 X 417 418 446 447 448 418 419 447 448 449 419 420 448 449 450 420 449 450 421 422 X 451 452 422 423 451 452 453 423 424 452 453 454 424 425 453 454 455 425 426 454 X 455 456 426 427 455 456 457 427 428 456 457 458 428 429 457 458 459 429 430 458 X 459 460 430 431 459 460 461 431 432 460 461 462 432 433 461 462 463 433 434 462 X 463 464 434 435 463 464 465 435 436 464 465 466 436 437 465 466 467 437 438 466 X 467 468 438 439 467 468 469 439 440 468 469 470 440 441 469 470 471 441 442 470 X 471 472 442 443 471 472 473 443 444 472 473 474 444 445 473 474 475 445 446 474 X 475 476 446 447 475 476 477 447 448 476 477 478 448 449 477 478 479 449 450 478 X 479 480 450 479 480 451 452 481 482 452 453 481 482 483 453 454 482 483 484 454 X 455 483 484 485 455 456 484 485 486 456 457 485 486 487 457 458 486 487 488 458 X 459 487 488 489 459 460 488 489 490 460 461 489 490 491 461 462 490 491 492 462 X 463 491 492 493 463 464 492 493 494 464 465 493 494 495 465 466 494 495 496 466 X 467 495 496 497 467 468 496 497 498 468 469 497 498 499 469 470 498 499 500 470 X 471 499 500 501 471 472 500 501 502 472 473 501 502 503 473 474 502 503 504 474 X 475 503 504 505 475 476 504 505 506 476 477 505 506 507 477 478 506 507 508 478 X 479 507 508 509 479 480 508 509 510 480 509 510 481 482 511 512 482 483 511 512 X 513 483 484 512 513 514 484 485 513 514 515 485 486 514 515 516 486 487 515 516 X 517 487 488 516 517 518 488 489 517 518 519 489 490 518 519 520 490 491 519 520 X 521 491 492 520 521 522 492 493 521 522 523 493 494 522 523 524 494 495 523 524 X 525 495 496 524 525 526 496 497 525 526 527 497 498 526 527 528 498 499 527 528 X 529 499 500 528 529 530 500 501 529 530 531 501 502 530 531 532 502 503 531 532 X 533 503 504 532 533 534 504 505 533 534 535 505 506 534 535 536 506 507 535 536 X 537 507 508 536 537 538 508 509 537 538 539 509 510 538 539 540 510 539 540 511 X 512 541 542 512 513 541 542 543 513 514 542 543 544 514 515 543 544 545 515 516 X 544 545 546 516 517 545 546 547 517 518 546 547 548 518 519 547 548 549 519 520 X 548 549 550 520 521 549 550 551 521 522 550 551 552 522 523 551 552 553 523 524 X 552 553 554 524 525 553 554 555 525 526 554 555 556 526 527 555 556 557 527 528 X 556 557 558 528 529 557 558 559 529 530 558 559 560 530 531 559 560 561 531 532 X 560 561 562 532 533 561 562 563 533 534 562 563 564 534 535 563 564 565 535 536 X 564 565 566 536 537 565 566 567 537 538 566 567 568 538 539 567 568 569 539 540 X 568 569 570 540 569 570 541 542 571 572 542 543 571 572 573 543 544 572 573 574 X 544 545 573 574 575 545 546 574 575 576 546 547 575 576 577 547 548 576 577 578 X 548 549 577 578 579 549 550 578 579 580 550 551 579 580 581 551 552 580 581 582 X 552 553 581 582 583 553 554 582 583 584 554 555 583 584 585 555 556 584 585 586 X 556 557 585 586 587 557 558 586 587 588 558 559 587 588 589 559 560 588 589 590 X 560 561 589 590 591 561 562 590 591 592 562 563 591 592 593 563 564 592 593 594 X 564 565 593 594 595 565 566 594 595 596 566 567 595 596 597 567 568 596 597 598 X 568 569 597 598 599 569 570 598 599 600 570 599 600 571 572 601 602 572 573 601 X 602 603 573 574 602 603 604 574 575 603 604 605 575 576 604 605 606 576 577 605 X 606 607 577 578 606 607 608 578 579 607 608 609 579 580 608 609 610 580 581 609 X 610 611 581 582 610 611 612 582 583 611 612 613 583 584 612 613 614 584 585 613 X 614 615 585 586 614 615 616 586 587 615 616 617 587 588 616 617 618 588 589 617 X 618 619 589 590 618 619 620 590 591 619 620 621 591 592 620 621 622 592 593 621 X 622 623 593 594 622 623 624 594 595 623 624 625 595 596 624 625 626 596 597 625 X 626 627 597 598 626 627 628 598 599 627 628 629 599 600 628 629 630 600 629 630 X 601 602 631 632 602 603 631 632 633 603 604 632 633 634 604 605 633 634 635 605 X 606 634 635 636 606 607 635 636 637 607 608 636 637 638 608 609 637 638 639 609 X 610 638 639 640 610 611 639 640 641 611 612 640 641 642 612 613 641 642 643 613 X 614 642 643 644 614 615 643 644 645 615 616 644 645 646 616 617 645 646 647 617 X 618 646 647 648 618 619 647 648 649 619 620 648 649 650 620 621 649 650 651 621 X 622 650 651 652 622 623 651 652 653 623 624 652 653 654 624 625 653 654 655 625 X 626 654 655 656 626 627 655 656 657 627 628 656 657 658 628 629 657 658 659 629 X 630 658 659 660 630 659 660 631 632 661 662 632 633 661 662 663 633 634 662 663 X 664 634 635 663 664 665 635 636 664 665 666 636 637 665 666 667 637 638 666 667 X 668 638 639 667 668 669 639 640 668 669 670 640 641 669 670 671 641 642 670 671 X 672 642 643 671 672 673 643 644 672 673 674 644 645 673 674 675 645 646 674 675 X 676 646 647 675 676 677 647 648 676 677 678 648 649 677 678 679 649 650 678 679 X 680 650 651 679 680 681 651 652 680 681 682 652 653 681 682 683 653 654 682 683 X 684 654 655 683 684 685 655 656 684 685 686 656 657 685 686 687 657 658 686 687 X 688 658 659 687 688 689 659 660 688 689 690 660 689 690 661 662 691 692 662 663 X 691 692 693 663 664 692 693 694 664 665 693 694 695 665 666 694 695 696 666 667 X 695 696 697 667 668 696 697 698 668 669 697 698 699 669 670 698 699 700 670 671 X 699 700 701 671 672 700 701 702 672 673 701 702 703 673 674 702 703 704 674 675 X 703 704 705 675 676 704 705 706 676 677 705 706 707 677 678 706 707 708 678 679 X 707 708 709 679 680 708 709 710 680 681 709 710 711 681 682 710 711 712 682 683 X 711 712 713 683 684 712 713 714 684 685 713 714 715 685 686 714 715 716 686 687 X 715 716 717 687 688 716 717 718 688 689 717 718 719 689 690 718 719 720 690 719 X 720 691 692 721 722 692 693 721 722 723 693 694 722 723 724 694 695 723 724 725 X 695 696 724 725 726 696 697 725 726 727 697 698 726 727 728 698 699 727 728 729 X 699 700 728 729 730 700 701 729 730 731 701 702 730 731 732 702 703 731 732 733 X 703 704 732 733 734 704 705 733 734 735 705 706 734 735 736 706 707 735 736 737 X 707 708 736 737 738 708 709 737 738 739 709 710 738 739 740 710 711 739 740 741 X 711 712 740 741 742 712 713 741 742 743 713 714 742 743 744 714 715 743 744 745 X 715 716 744 745 746 716 717 745 746 747 717 718 746 747 748 718 719 747 748 749 X 719 720 748 749 750 720 749 750 721 722 751 752 722 723 751 752 753 723 724 752 X 753 754 724 725 753 754 755 725 726 754 755 756 726 727 755 756 757 727 728 756 X 757 758 728 729 757 758 759 729 730 758 759 760 730 731 759 760 761 731 732 760 X 761 762 732 733 761 762 763 733 734 762 763 764 734 735 763 764 765 735 736 764 X 765 766 736 737 765 766 767 737 738 766 767 768 738 739 767 768 769 739 740 768 X 769 770 740 741 769 770 771 741 742 770 771 772 742 743 771 772 773 743 744 772 X 773 774 744 745 773 774 775 745 746 774 775 776 746 747 775 776 777 747 748 776 X 777 778 748 749 777 778 779 749 750 778 779 780 750 779 780 751 752 781 782 752 X 753 781 782 783 753 754 782 783 784 754 755 783 784 785 755 756 784 785 786 756 X 757 785 786 787 757 758 786 787 788 758 759 787 788 789 759 760 788 789 790 760 X 761 789 790 791 761 762 790 791 792 762 763 791 792 793 763 764 792 793 794 764 X 765 793 794 795 765 766 794 795 796 766 767 795 796 797 767 768 796 797 798 768 X 769 797 798 799 769 770 798 799 800 770 771 799 800 801 771 772 800 801 802 772 X 773 801 802 803 773 774 802 803 804 774 775 803 804 805 775 776 804 805 806 776 X 777 805 806 807 777 778 806 807 808 778 779 807 808 809 779 780 808 809 810 780 X 809 810 781 782 811 812 782 783 811 812 813 783 784 812 813 814 784 785 813 814 X 815 785 786 814 815 816 786 787 815 816 817 787 788 816 817 818 788 789 817 818 X 819 789 790 818 819 820 790 791 819 820 821 791 792 820 821 822 792 793 821 822 X 823 793 794 822 823 824 794 795 823 824 825 795 796 824 825 826 796 797 825 826 X 827 797 798 826 827 828 798 799 827 828 829 799 800 828 829 830 800 801 829 830 X 831 801 802 830 831 832 802 803 831 832 833 803 804 832 833 834 804 805 833 834 X 835 805 806 834 835 836 806 807 835 836 837 807 808 836 837 838 808 809 837 838 X 839 809 810 838 839 840 810 839 840 811 812 841 842 812 813 841 842 843 813 814 X 842 843 844 814 815 843 844 845 815 816 844 845 846 816 817 845 846 847 817 818 X 846 847 848 818 819 847 848 849 819 820 848 849 850 820 821 849 850 851 821 822 X 850 851 852 822 823 851 852 853 823 824 852 853 854 824 825 853 854 855 825 826 X 854 855 856 826 827 855 856 857 827 828 856 857 858 828 829 857 858 859 829 830 X 858 859 860 830 831 859 860 861 831 832 860 861 862 832 833 861 862 863 833 834 X 862 863 864 834 835 863 864 865 835 836 864 865 866 836 837 865 866 867 837 838 X 866 867 868 838 839 867 868 869 839 840 868 869 870 840 869 870 841 842 871 872 X 842 843 871 872 873 843 844 872 873 874 844 845 873 874 875 845 846 874 875 876 X 846 847 875 876 877 847 848 876 877 878 848 849 877 878 879 849 850 878 879 880 X 850 851 879 880 881 851 852 880 881 882 852 853 881 882 883 853 854 882 883 884 X 854 855 883 884 885 855 856 884 885 886 856 857 885 886 887 857 858 886 887 888 X 858 859 887 888 889 859 860 888 889 890 860 861 889 890 891 861 862 890 891 892 X 862 863 891 892 893 863 864 892 893 894 864 865 893 894 895 865 866 894 895 896 X 866 867 895 896 897 867 868 896 897 898 868 869 897 898 899 869 870 898 899 900 X 870 899 900 871 872 872 873 873 874 874 875 875 876 876 877 877 878 878 879 879 X 880 880 881 881 882 882 883 883 884 884 885 885 886 886 887 887 888 888 889 889 X 890 890 891 891 892 892 893 893 894 894 895 895 896 896 897 897 898 898 899 899 X 900 900 X 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 X -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 X -1.0 -1.0 8.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 X -1.0 -1.0 -1.0 8.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 -1.0 -1.0 8.0 -1.0 -1.0 -1.0 -1.0 X 8.0 -1.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 -1.0 8.0 X -1.0 8.0 END_OF_FILE if test 56700 -ne `wc -c <'gr3030'`; then echo shar: \"'gr3030'\" unpacked with wrong size! fi # end of 'gr3030' fi if test -f 'init.data.example' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'init.data.example'\" else echo shar: Extracting \"'init.data.example'\" \(5328 characters\) sed "s/^X//" >'init.data.example' <<'END_OF_FILE' X# Input/Output parameters for the driver runme. X# If this file is improperly set, there will be I/O errors. X# As a precaution, keep infolevel as the first parameter and use a value X# of 5 (debug mode) to see how this file is being read -- VERY USEFUL in X# order to detect and fix I/O errors. The value of 5 will produce X# a very long output. Specify an output file (see outfile below) or X# use the UNIX redirection command (>) to capture the output in a file. X# X# The keyword that denotes a parameter and its corresponding value X# must start at the first column. Moreover, the keyword must end X# with a colon (:) X# X# Lines without a proper keyword are consider as comment lines. X X#-------------------------------------------------------------------------- X# infolevel - Information Level (default = 1) X# The infolevel parameter specifies the amount of information to be reported X# X# 0 = Silent running X# X# 1 = print Iteration info (compact mode for outer iteration) X# Use this to see quantities at the end of each iteration X# X# 2 = print Sub-iteration info (compact mode for inner-iteration) X# Use this to see a detailed history of the residual and block-size X# X# 3,4 = print Convergence info (medium mode) X# Use this to see the evolution of individual Ritz values and X# residual norms X# X# 5 = debug mode (highly verbose) X# Very long output. Specify an output file (see outfile below). X# Alternatively, you can use the UNIX redirection command (>) on the X# prompt to capture the output in a file. You should also set the X# number of iteration to 1 just to see the output at the first X# iteration. X# X# EXPLANATIONS ABOUT THE QUANTITIES THAT ARE REPORTED X# =================================================== X# X# compact mode when infolevel = 1,2, the following variables are printed X# ------------ X# iter : current number of iterations. X# basis : current size of the basis. X# nmult : current number of matrix-vector multiplications used. X# block : current block size. X# nevf : number of eigenpairs found so far. X# residual : maximum among residual norms. X# X# medium mode when infolvel = 3,4, display further scalar quantities X# ----------- X# current Ritz values X# current residual norms X# X# verbose mode when infolevel = 5, display also vector & matrix quantities X# ------------ X# current Ritz vectors X# current Interaction matrix X# current basis vectors X# current eigen vectors X# current residual vectors X Xinfolevel: X1 X X#-------------------------------------------------------------------------- X# Matrix filename. Only one matrix at a time. X# Relative or full path to the file containing the matrix X Xmatfile: Xgr3030 X X#-------------------------------------------------------------------------- X#Set the matrix type X# hbo = Harwell-Boeing storage format (default) X# ccs = Compressed Column Storage format X# coo = COOrdinates storage format X X#mattype: X#hbo X X#-------------------------------------------------------------------------- X#Set the block size (default = 1) X X#block: X#3 X X#-------------------------------------------------------------------------- X#Set number of wanted eigenpairs (default = 1) X#a positive value searches for the rightmost eigenpairs X#a negative value searches for the leftmost eigenpairs X X#eigenpair: X#-3 X X#-------------------------------------------------------------------------- X#Choose the corrector (preconditioner) X# 0 = no internal correction (NC) X# 1 = diagonal correction (DC) (default) X# 2 = tridiagonal correction (TC) X# 3 = pentadiagonal correction (PC) X# -1 = Gauss-Seidel correction (GS) X# -2 = Incomplete Cholesky correction (IC) X# -3 = Exponential correction (EX) X X#corrector: X#3 X X#-------------------------------------------------------------------------- X# Set size of the basis (default = 40) X# The value should not exceed the maximum value declared in the main program X X#basis: X#30 X X#-------------------------------------------------------------------------- X# Set maximun allowable number of iterations (default = 100) X X#iteration: X#150 X X#-------------------------------------------------------------------------- X# Set tolerance (default = 1.0d-7) X X#tolerance: X#1.0d-10 X X#-------------------------------------------------------------------------- X# Number of rows of eigenvectors and residual vectors to show (default = 5) X# A negative value -k causes the last k rows to be written X X#outmax: X#-7 X X#-------------------------------------------------------------------------- X# Set output format X# The syntax should be as expected by the Fortran compiler X Xoutfmt: X1P,E11.3 X X#-------------------------------------------------------------------------- X# Initial guess file for starting eigenvectors (default = unspecified) X# If unspecified, guesses are generated internally with a random function X# If specified, guesses are read from the file in the standard matrix-wise X# tabulation X X#guessfile: X#guess X X#-------------------------------------------------------------------------- X# Name of a file for error messages (default = screen) X# Relative or full path to the file X X#errfile: X#error X X#-------------------------------------------------------------------------- X# Name of a file for output of results (default = screen) X# Relative or full path to the file X X#outfile: X#output END_OF_FILE if test 5328 -ne `wc -c <'init.data.example'`; then echo shar: \"'init.data.example'\" unpacked with wrong size! fi # end of 'init.data.example' fi if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(1483 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' X#--- type `make alone' to build the self-contained standalone driver X#--- type `make runme' to build the comprehensive driver X X# COMPILER X########################################################################### XFC = g77 X#FC = f77 X X# COMPILER FLAGS: X########################################################################### X#Comment the first assignment and uncomment the second one if your are on X#SGI to ensure that SGI optimizations preserve IEEE requirements XFFLAGS = -O3 X#FFLAGS = -O3 -OPT:IEEE_arithmetic=1 X X# LIBRARIES X########################################################################### X# Among the 3 possibilities below, uncomment the appropriate X# case for your environment and comment the others. X X# case 1: works when LAPACK and BLAS are installed. X#OBJLIBS = X#LIBS = -llapack -lblas X#LIBS = -lcomplib.sgimath X X# case 2: works when LAPACK is not installed but BLAS is. X#LIBS = -lblas X#OBJLIBS = lapack.o X X# case 3: works when neither LAPACK nor BLAS are installed. XOBJLIBS = blas.o lapack.o XLIBS = X X# RULES X########################################################################### X XALONE = randm.o eigsrt.o davpack.o $(OBJLIBS) X Xalone: $(ALONE) alone.o X $(FC) $(FFLAGS) -o $@ alone.o $(ALONE) $(LIBS) X X#--- X XRUNME = randm.o io.o getmat.o matvec.o correc.o ichol.o \ X eigsrt.o davpack.o $(OBJLIBS) X Xrunme: $(RUNME) runme.o expokit.o X $(FC) $(FFLAGS) -o $@ runme.o expokit.o $(RUNME) $(LIBS) X X#--- X X.f.o:; $(FC) $(FFLAGS) -c $< X X END_OF_FILE if test 1483 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'common.inc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'common.inc'\" else echo shar: Extracting \"'common.inc'\" \(3516 characters\) sed "s/^X//" >'common.inc' <<'END_OF_FILE' X*----------------------------------------------------------------------| X* FILE X* common.inc - Common variables X* X* DESCRIPTION X* X* Common variables that are included in subroutines with the X* statement: include 'common.inc'. The inclusion is done in the X* driver runme.f and all subroutines of: X* correc.f, getmat.f, io.f, matvec.f. X* X* To avoid inadvertent mis-use and to enable a better identification X* subsequently, common variables are prefixed with `c_' X* X* END DESCRIPTION X*----------------------------------------------------------------------| X* X* AUTHORS X* X* M. Sadkane - sadkane@univ-brest.fr R. B. Sidje - rbs@maths.uq.edu.au X* Departement de Mathematiques Department of Mathematics X* Universite de Bretagne Occidentale University of Queensland X* 6, Avenue Le Gorgeu, B.P. 809 Brisbane QLD 4072 X* 29285 Brest Cedex. France Australia X* X* REVISION DATE: 11/JAN/1999 X*----------------------------------------------------------------------| X X implicit none X*----------------------------------------------------------------------| X*--- These settings are large enough for all the matrices in X*--- the Harwell-Boeing collection as of March 28, 1994, except X*--- bcsstk30, 31, and 32 in bcsstuc5.data. X integer c_nmax, c_nzmax, c_n, c_nz X parameter( c_nmax=15500, c_nzmax=550000 ) X X*----------------------------------------------------------------------| X*--- Adjust as suited for your matrices ... X double precision c_a(c_nzmax), c_anorm X integer c_ia(c_nzmax), c_ja(c_nzmax) X X common /MATRIX/ X . c_anorm, X . c_a, X . c_ia, X . c_ja, X . c_nz, X . c_n X X*----------------------------------------------------------------------| X*--- Adjust as suited for your correctors/preconditioners ... X X*--- Diagonal / Tridiagonal / Pentadiagonal correctors X double precision c_diag(c_nmax,3) X X*--- Choleski (LDL^T variant) corrector X double precision c_ac(c_nzmax) X integer c_ic(c_nzmax), c_jc(c_nmax+1) X X common /CORRECTOR/ X . c_diag, c_ac, c_ic, c_jc X X*----------------------------------------------------------------------| X*--- Arrays used for speedy work ... X double precision c_wrk(7*c_nmax) X integer c_iwrk(c_nmax) X common /WRK/ X . c_wrk, X . c_iwrk X X*----------------------------------------------------------------------| X*--- This remaining part is unlikely to be changed ... X X double precision c_tol X X integer c_stdin, c_stdout, c_stderr, c_outmax, X . c_corrector, c_basis, c_block, c_eigenpair, X . c_iteration, c_infolevel, c_nmult, c_guess X X character*80 c_matfile, c_mattype, c_outfmt, X . c_initfile, c_guessfile, c_errfile, c_outfile X X*----------------------------------------------------------------------| X common /FLOATS/ X . c_tol X X common /INTEGERS/ X . c_stdin, X . c_stdout, X . c_stderr, X . c_infolevel, X . c_corrector, X . c_nmult, X . c_guess, X . c_basis, X . c_block, X . c_eigenpair, X . c_iteration, X . c_outmax X X common /STRINGS/ X . c_outfmt, X . c_matfile, X . c_mattype, X . c_initfile, X . c_guessfile, X . c_errfile, X . c_outfile X*----------------------------------------------------------------------| X END_OF_FILE if test 3516 -ne `wc -c <'common.inc'`; then echo shar: \"'common.inc'\" unpacked with wrong size! fi # end of 'common.inc' fi if test -f 'alone.f' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'alone.f'\" else echo shar: Extracting \"'alone.f'\" \(10503 characters\) sed "s/^X//" >'alone.f' <<'END_OF_FILE' X*----------------------------------------------------------------------| X* FILE X* alone.f - stand-alone driver using internal data - X* This is an example of a self-contained stand-alone X* driver that illustrates the use of the Variable-Block X* Davidson eigensolver in isolation. X* X* Complile with "make alone" and simply type "alone" to run the code X* X* The program will start by generating a random matrix as follows: X* A = [a_ij] where: (Example 5.5 in Crouzeix et al.) X* a_ii = random in [-10,+10] X* random in [-1,+1], with probability alpha X* a_ij = < X* 0, with probability 1-alpha (alpha was taken as 0.01) X* X* The COOrdinates storage is used, thus three arrays are built: X* ia(1:nz) contains row indices, ja(1:nz) contains column indices, X* and a(1:nz) contains non-zero values, where nz is the number of X* non-zeros. During the generation, the diagonal of A is stored in X* diag(1:n) which is used later for diagonal correction. X* X* After generating the matrix and the corrector, the program then X* proceeds to initialize all the input arguments expected in the X* Davidson eigensolver: X* nbx = maximum allowable size of the basis X* nb = initial block-size X* nev = number of wanted eigenpairs X* itmax = maximum allowable number of iterations (i.e., restarts) X* tol = accuracy tolerance X* ilevel = level of information to be reported X* iunit = unit where the information should be reported (6 = screen) X* anorm = estimate of some norm of A. This parameter provides a X* means to select a particular convergence test: X* - If anorm>0.0d0, an eigenpair (x,lambda) is accepted if X* the relative residual ||A*x - lambda*x||/anorm <= tol. X* - If anorm=1.0d0, the test is therefore based on the X* absolute residual ||A*x - lambda*x|| <= tol. X* - If anorm=0.0d0, the code uses the relative residual X* ||A*x - lambda*x||/MAX(eps^{2/3},ABS(lambda)) <= tol. X* `eps' is the machine unit roundoff (computed internally) X* X* After these initializations, the eigensolver itself is called. X* Then the computed eigenpairs are sorted and the results printed. X* X* CONTENTS X* subroutine mymatv(m,x,ldx,y,ldy) - block matrix-vector product X* subroutine mycorr(m,ritzv,x,ldx,r,ldr) - diagonal corrector X* double precision function timer( ) - simple utility timer routine X* X* CALLED ROUTINES X* davpack.f: davson(...) - Variable-Block Davidson with deflation X* randm.f: DLARAN( ISEED ) - uniform (0,1) random number generator X* DLARAN is taken from the LAPACK testing suite. X* eigsrt.f: eigsrt( n, nev, res, eig, x,ldx ) - sorts eigenpairs X* internal: timer( ) - simple utility timer routine (seconds) X* X* DESCRIPTION X* X* #####################################################################| X* subroutine mymatv( m, x,ldx, y,ldy ) X* Purpose X* Block matrix-vector multiplication using the COOrdinate storage. X* Although A is a symmetric matrix, it is in a complete (not half) X* format. The matrix A is passed through a common block. X* Called Routines X* -none- X* X* #####################################################################| X* subroutine mycorr( m, ritzv, x,ldx, r,ldr ) X* Purpose X* Diagonal corrector. X* computes r_j = (M-ritzv(j)*I)\r_j for j = 1:m, where M = diag(A) X* The diagonal of A is passed through a common block. X* Called Routines X* -none- X* X* #####################################################################| X* double precision function timer( ) X* Purpose X* This is a simple utility timer routine (seconds) modelled on top X* of SUN' etime function. Users must change the call to "etime" X* as appropriate to suit their environments. X* X* END DESCRIPTION X*----------------------------------------------------------------------| X* X* AUTHORS X* X* M. Sadkane - sadkane@univ-brest.fr R. B. Sidje - rbs@maths.uq.edu.au X* Departement de Mathematiques Department of Mathematics X* Universite de Bretagne Occidentale University of Queensland X* 6, Avenue Le Gorgeu, B.P. 809 Brisbane QLD 4072 X* 29285 Brest Cedex. France Australia X* X* REVISION DATE: 11/JAN/1999 X*----------------------------------------------------------------------| X X IMPLICIT NONE X external mymatv, mycorr X X*--- Matrix and Corrector (diagonal correction) ... X X integer n, nz, nmax, nzmax, nmult X parameter( nmax =5000, nzmax =100000 ) X integer ia(nzmax), ja(nzmax) X double precision diag(nmax), a(nzmax) X common /MATRIX/ diag, a, ia, ja, n, nz X X*--- Arguments of DAVSON ... X integer nevmax, nbxmax, liwork, lwork, ldx X parameter( ldx=nmax, nevmax=10, nbxmax=50 ) X parameter( liwork=6*nbxmax, X . lwork = (nmax+nbxmax)*(nevmax+nbxmax)+(nmax+8)*nbxmax ) X X integer nbx, nb, nev, itmax, iter, ilevel, iunit X integer iwork(liwork), ifail X double precision res(nevmax), eig(nevmax), x(ldx,nevmax) X double precision work(lwork), tol, anorm X X*--- other variables ... X integer nev1, i, j, iseed(4) X double precision alpha, t0, t1 X X*--- functions X double precision timer, dlaran X intrinsic ABS X X*======================================================================| X*--- Setup the matrix ... (Example 5.5 in Crouzeix et al.) X* The COOrdinates format is used. X* X write(*,*) 'Generating the matrix ...' X n = 1000 X alpha = 0.01d0 X nz = 0 X iseed(1) = 0 X iseed(2) = 0 X iseed(3) = 0 X iseed(4) = 7 X*-- generate the diagonal ... X do i = 1,n X nz = nz + 1 X ia(nz) = i X ja(nz) = i X a(nz) = 20.0d0*DLARAN( iseed ) - 10.0d0 X diag(i) = a(nz) X enddo X*--- generate the lower part ... X do j = 1,n X do i = 1,j-1 X if ( nz.ge.nzmax ) stop 'Please increase nzmax' X if ( DLARAN( iseed ).le.alpha ) then X nz = nz + 1 X ia(nz) = i X ja(nz) = j X a(nz) = 2.0d0*DLARAN( iseed ) - 1.0d0 X endif X enddo X enddo X*--- include the upper-part in the COOrdinates format ... X j = nz X do i = 1,j X if ( ia(i).ne.ja(i) ) then X if ( nz.ge.nzmax ) stop 'Please increase nzmax' X nz = nz + 1 X a(nz) = a(i) X ja(nz) = ia(i) X ia(nz) = ja(i) X endif X enddo X X*======================================================================| X*--- Setup input arguments of DAVSON ... X nbx = 20 X nb = 2 X nev = 1 X itmax = 100 X tol = 1.0D-10 X ilevel = 2 X iunit = 6 X anorm = 1.0d0 X X*======================================================================| X*--- Initial estimate eigenvectors ... (random generation) X iseed(1) = 1 X iseed(2) = 3 X iseed(3) = 5 X iseed(4) = 7 X do j = 1,nb X do i = 1,n X x(i,j) = DLARAN( iseed ) X enddo X enddo X X*======================================================================| X*--- Compute the desired eigenpairs ... X nev1 = nev X t0 = timer( ) X call davson( n, nbx, nb, nev1, itmax, iter, nmult, tol, X . anorm, res, eig, x,ldx, work,lwork, iwork,liwork, X . mymatv, mycorr, ilevel, iunit, ifail ) X t1 = timer( ) X X*======================================================================| X*--- Sort the eigenpairs in increasing order ... X call eigsrt( n, ABS(nev), res, eig, x,ldx ) X X*======================================================================| X*--- Output results ... X write(*,*) 'Runtime (seconds) =', t1-t0 X write(*,*) 'Mat-vec products =', nmult X write(*,*) 'Residual =', res(1) X write(*,*) 'Eigenvalue =', eig(1) X X*======================================================================| X*--- WARNING: on a SUN system, at the end of the output, the following X* note may appear (without affecting the correctness of the results) X*--- X* Note: the following IEEE floating-point arithmetic exceptions X* occurred and were never cleared; see ieee_flags(3M): X* Inexact; Underflow; X* Sun's implementation of IEEE arithmetic is discussed in X* the Numerical Computation Guide. X*--- X end X*----------------------------------------------------------------------| X*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| X*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| X*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::| X*----------------------------------------------------------------------| X subroutine mymatv( m, x,ldx, y,ldy ) X implicit none X* X integer m, ldx, ldy X double precision x(ldx,m), y(ldy,m) X* X*--- computes y = A*x, A is a complete (not half) COOrdinate matrix... X* X*--- Matrix data and corrector ... X integer n, nz, nmax, nzmax X parameter( nmax =5000, nzmax =100000 ) X integer ia(nzmax), ja(nzmax) X double precision diag(nmax), a(nzmax) X common /MATRIX/ diag, a, ia, ja, n, nz X* X integer i, k X* X do k = 1,m X do i = 1,n X y(i,k) = 0.0d0 X enddo X enddo X do i = 1,nz X do k = 1,m X y(ia(i),k) = y(ia(i),k) + a(i)*x(ja(i),k) X enddo X enddo X end X*----------------------------------------------------------------------| X subroutine mycorr( m, ritzv, x,ldx, r,ldr ) X implicit none X* X integer m, ldx, ldr X double precision x(ldx,m), r(ldr,m), ritzv(m) X* X*--- Diagonal correction ... X* X*--- Matrix data and corrector ... X integer n, nz, nmax, nzmax X parameter( nmax =5000, nzmax =100000 ) X integer ia(nzmax), ja(nzmax) X double precision diag(nmax), a(nzmax) X common /MATRIX/ diag, a, ia, ja, n, nz X* X integer i, j X double precision tmp X X do j = 1,m X do i = 1,n X tmp = diag(i) - ritzv(j) X if ( tmp.ne.0.0d0 ) r(i,j) = r(i,j)/tmp X enddo X enddo X end X*----------------------------------------------------------------------| X*--- Simple utility timer routine (seconds) X* Modify as appropriate to suit your environment X double precision function timer( ) X real*4 etime, tm(2) X timer = etime( tm ) X end END_OF_FILE if test 10503 -ne `wc -c <'alone.f'`; then echo shar: \"'alone.f'\" unpacked with wrong size! fi # end of 'alone.f' fi if test -f 'blas.f' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'blas.f'\" else echo shar: Extracting \"'blas.f'\" \(103779 characters\) sed "s/^X//" >'blas.f' <<'END_OF_FILE' X subroutine daxpy(n,da,dx,incx,dy,incy) Xc Xc constant times a vector plus a vector. Xc uses unrolled loops for increments equal to one. Xc jack dongarra, linpack, 3/11/78. Xc modified 12/3/93, array(1) declarations changed to array(*) Xc X double precision dx(*),dy(*),da X integer i,incx,incy,ix,iy,m,mp1,n Xc X if(n.le.0)return X if (da .eq. 0.0d0) return X if(incx.eq.1.and.incy.eq.1)go to 20 Xc Xc code for unequal increments or equal increments Xc not equal to 1 Xc X ix = 1 X iy = 1 X if(incx.lt.0)ix = (-n+1)*incx + 1 X if(incy.lt.0)iy = (-n+1)*incy + 1 X do 10 i = 1,n X dy(iy) = dy(iy) + da*dx(ix) X ix = ix + incx X iy = iy + incy X 10 continue X return Xc Xc code for both increments equal to 1 Xc Xc Xc clean-up loop Xc X 20 m = mod(n,4) X if( m .eq. 0 ) go to 40 X do 30 i = 1,m X dy(i) = dy(i) + da*dx(i) X 30 continue X if( n .lt. 4 ) return X 40 mp1 = m + 1 X do 50 i = mp1,n,4 X dy(i) = dy(i) + da*dx(i) X dy(i + 1) = dy(i + 1) + da*dx(i + 1) X dy(i + 2) = dy(i + 2) + da*dx(i + 2) X dy(i + 3) = dy(i + 3) + da*dx(i + 3) X 50 continue X return X end X subroutine dcopy(n,dx,incx,dy,incy) Xc Xc copies a vector, x, to a vector, y. Xc uses unrolled loops for increments equal to one. Xc jack dongarra, linpack, 3/11/78. Xc modified 12/3/93, array(1) declarations changed to array(*) Xc X double precision dx(*),dy(*) X integer i,incx,incy,ix,iy,m,mp1,n Xc X if(n.le.0)return X if(incx.eq.1.and.incy.eq.1)go to 20 Xc Xc code for unequal increments or equal increments Xc not equal to 1 Xc X ix = 1 X iy = 1 X if(incx.lt.0)ix = (-n+1)*incx + 1 X if(incy.lt.0)iy = (-n+1)*incy + 1 X do 10 i = 1,n X dy(iy) = dx(ix) X ix = ix + incx X iy = iy + incy X 10 continue X return Xc Xc code for both increments equal to 1 Xc Xc Xc clean-up loop Xc X 20 m = mod(n,7) X if( m .eq. 0 ) go to 40 X do 30 i = 1,m X dy(i) = dx(i) X 30 continue X if( n .lt. 7 ) return X 40 mp1 = m + 1 X do 50 i = mp1,n,7 X dy(i) = dx(i) X dy(i + 1) = dx(i + 1) X dy(i + 2) = dx(i + 2) X dy(i + 3) = dx(i + 3) X dy(i + 4) = dx(i + 4) X dy(i + 5) = dx(i + 5) X dy(i + 6) = dx(i + 6) X 50 continue X return X end X double precision function ddot(n,dx,incx,dy,incy) Xc Xc forms the dot product of two vectors. Xc uses unrolled loops for increments equal to one. Xc jack dongarra, linpack, 3/11/78. Xc modified 12/3/93, array(1) declarations changed to array(*) Xc X double precision dx(*),dy(*),dtemp X integer i,incx,incy,ix,iy,m,mp1,n Xc X ddot = 0.0d0 X dtemp = 0.0d0 X if(n.le.0)return X if(incx.eq.1.and.incy.eq.1)go to 20 Xc Xc code for unequal increments or equal increments Xc not equal to 1 Xc X ix = 1 X iy = 1 X if(incx.lt.0)ix = (-n+1)*incx + 1 X if(incy.lt.0)iy = (-n+1)*incy + 1 X do 10 i = 1,n X dtemp = dtemp + dx(ix)*dy(iy) X ix = ix + incx X iy = iy + incy X 10 continue X ddot = dtemp X return Xc Xc code for both increments equal to 1 Xc Xc Xc clean-up loop Xc X 20 m = mod(n,5) X if( m .eq. 0 ) go to 40 X do 30 i = 1,m X dtemp = dtemp + dx(i)*dy(i) X 30 continue X if( n .lt. 5 ) go to 60 X 40 mp1 = m + 1 X do 50 i = mp1,n,5 X dtemp = dtemp + dx(i)*dy(i) + dx(i + 1)*dy(i + 1) + X * dx(i + 2)*dy(i + 2) + dx(i + 3)*dy(i + 3) + dx(i + 4)*dy(i + 4) X 50 continue X 60 ddot = dtemp X return X end X SUBROUTINE DGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, X $ BETA, C, LDC ) X* .. Scalar Arguments .. X CHARACTER*1 TRANSA, TRANSB X INTEGER M, N, K, LDA, LDB, LDC X DOUBLE PRECISION ALPHA, BETA X* .. Array Arguments .. X DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ) X* .. X* X* Purpose X* ======= X* X* DGEMM performs one of the matrix-matrix operations X* X* C := alpha*op( A )*op( B ) + beta*C, X* X* where op( X ) is one of X* X* op( X ) = X or op( X ) = X', X* X* alpha and beta are scalars, and A, B and C are matrices, with op( A ) X* an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. X* X* Parameters X* ========== X* X* TRANSA - CHARACTER*1. X* On entry, TRANSA specifies the form of op( A ) to be used in X* the matrix multiplication as follows: X* X* TRANSA = 'N' or 'n', op( A ) = A. X* X* TRANSA = 'T' or 't', op( A ) = A'. X* X* TRANSA = 'C' or 'c', op( A ) = A'. X* X* Unchanged on exit. X* X* TRANSB - CHARACTER*1. X* On entry, TRANSB specifies the form of op( B ) to be used in X* the matrix multiplication as follows: X* X* TRANSB = 'N' or 'n', op( B ) = B. X* X* TRANSB = 'T' or 't', op( B ) = B'. X* X* TRANSB = 'C' or 'c', op( B ) = B'. X* X* Unchanged on exit. X* X* M - INTEGER. X* On entry, M specifies the number of rows of the matrix X* op( A ) and of the matrix C. M must be at least zero. X* Unchanged on exit. X* X* N - INTEGER. X* On entry, N specifies the number of columns of the matrix X* op( B ) and the number of columns of the matrix C. N must be X* at least zero. X* Unchanged on exit. X* X* K - INTEGER. X* On entry, K specifies the number of columns of the matrix X* op( A ) and the number of rows of the matrix op( B ). K must X* be at least zero. X* Unchanged on exit. X* X* ALPHA - DOUBLE PRECISION. X* On entry, ALPHA specifies the scalar alpha. X* Unchanged on exit. X* X* A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is X* k when TRANSA = 'N' or 'n', and is m otherwise. X* Before entry with TRANSA = 'N' or 'n', the leading m by k X* part of the array A must contain the matrix A, otherwise X* the leading k by m part of the array A must contain the X* matrix A. X* Unchanged on exit. X* X* LDA - INTEGER. X* On entry, LDA specifies the first dimension of A as declared X* in the calling (sub) program. When TRANSA = 'N' or 'n' then X* LDA must be at least max( 1, m ), otherwise LDA must be at X* least max( 1, k ). X* Unchanged on exit. X* X* B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is X* n when TRANSB = 'N' or 'n', and is k otherwise. X* Before entry with TRANSB = 'N' or 'n', the leading k by n X* part of the array B must contain the matrix B, otherwise X* the leading n by k part of the array B must contain the X* matrix B. X* Unchanged on exit. X* X* LDB - INTEGER. X* On entry, LDB specifies the first dimension of B as declared X* in the calling (sub) program. When TRANSB = 'N' or 'n' then X* LDB must be at least max( 1, k ), otherwise LDB must be at X* least max( 1, n ). X* Unchanged on exit. X* X* BETA - DOUBLE PRECISION. X* On entry, BETA specifies the scalar beta. When BETA is X* supplied as zero then C need not be set on input. X* Unchanged on exit. X* X* C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). X* Before entry, the leading m by n part of the array C must X* contain the matrix C, except when beta is zero, in which X* case C need not be set on entry. X* On exit, the array C is overwritten by the m by n matrix X* ( alpha*op( A )*op( B ) + beta*C ). X* X* LDC - INTEGER. X* On entry, LDC specifies the first dimension of C as declared X* in the calling (sub) program. LDC must be at least X* max( 1, m ). X* Unchanged on exit. X* X* X* Level 3 Blas routine. X* X* -- Written on 8-February-1989. X* Jack Dongarra, Argonne National Laboratory. X* Iain Duff, AERE Harwell. X* Jeremy Du Croz, Numerical Algorithms Group Ltd. X* Sven Hammarling, Numerical Algorithms Group Ltd. X* X* X* .. External Functions .. X LOGICAL LSAME X EXTERNAL LSAME X* .. External Subroutines .. X EXTERNAL XERBLA X* .. Intrinsic Functions .. X INTRINSIC MAX X* .. Local Scalars .. X LOGICAL NOTA, NOTB X INTEGER I, INFO, J, L, NCOLA, NROWA, NROWB X DOUBLE PRECISION TEMP X* .. Parameters .. X DOUBLE PRECISION ONE , ZERO X PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) X* .. X* .. Executable Statements .. X* X* Set NOTA and NOTB as true if A and B respectively are not X* transposed and set NROWA, NCOLA and NROWB as the number of rows X* and columns of A and the number of rows of B respectively. X* X NOTA = LSAME( TRANSA, 'N' ) X NOTB = LSAME( TRANSB, 'N' ) X IF( NOTA )THEN X NROWA = M X NCOLA = K X ELSE X NROWA = K X NCOLA = M X END IF X IF( NOTB )THEN X NROWB = K X ELSE X NROWB = N X END IF X* X* Test the input parameters. X* X INFO = 0 X IF( ( .NOT.NOTA ).AND. X $ ( .NOT.LSAME( TRANSA, 'C' ) ).AND. X $ ( .NOT.LSAME( TRANSA, 'T' ) ) )THEN X INFO = 1 X ELSE IF( ( .NOT.NOTB ).AND. X $ ( .NOT.LSAME( TRANSB, 'C' ) ).AND. X $ ( .NOT.LSAME( TRANSB, 'T' ) ) )THEN X INFO = 2 X ELSE IF( M .LT.0 )THEN X INFO = 3 X ELSE IF( N .LT.0 )THEN X INFO = 4 X ELSE IF( K .LT.0 )THEN X INFO = 5 X ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN X INFO = 8 X ELSE IF( LDB.LT.MAX( 1, NROWB ) )THEN X INFO = 10 X ELSE IF( LDC.LT.MAX( 1, M ) )THEN X INFO = 13 X END IF X IF( INFO.NE.0 )THEN X CALL XERBLA( 'DGEMM ', INFO ) X RETURN X END IF X* X* Quick return if possible. X* X IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. X $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) X $ RETURN X* X* And if alpha.eq.zero. X* X IF( ALPHA.EQ.ZERO )THEN X IF( BETA.EQ.ZERO )THEN X DO 20, J = 1, N X DO 10, I = 1, M X C( I, J ) = ZERO X 10 CONTINUE X 20 CONTINUE X ELSE X DO 40, J = 1, N X DO 30, I = 1, M X C( I, J ) = BETA*C( I, J ) X 30 CONTINUE X 40 CONTINUE X END IF X RETURN X END IF X* X* Start the operations. X* X IF( NOTB )THEN X IF( NOTA )THEN X* X* Form C := alpha*A*B + beta*C. X* X DO 90, J = 1, N X IF( BETA.EQ.ZERO )THEN X DO 50, I = 1, M X C( I, J ) = ZERO X 50 CONTINUE X ELSE IF( BETA.NE.ONE )THEN X DO 60, I = 1, M X C( I, J ) = BETA*C( I, J ) X 60 CONTINUE X END IF X DO 80, L = 1, K X IF( B( L, J ).NE.ZERO )THEN X TEMP = ALPHA*B( L, J ) X DO 70, I = 1, M X C( I, J ) = C( I, J ) + TEMP*A( I, L ) X 70 CONTINUE X END IF X 80 CONTINUE X 90 CONTINUE X ELSE X* X* Form C := alpha*A'*B + beta*C X* X DO 120, J = 1, N X DO 110, I = 1, M X TEMP = ZERO X DO 100, L = 1, K X TEMP = TEMP + A( L, I )*B( L, J ) X 100 CONTINUE X IF( BETA.EQ.ZERO )THEN X C( I, J ) = ALPHA*TEMP X ELSE X C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) X END IF X 110 CONTINUE X 120 CONTINUE X END IF X ELSE X IF( NOTA )THEN X* X* Form C := alpha*A*B' + beta*C X* X DO 170, J = 1, N X IF( BETA.EQ.ZERO )THEN X DO 130, I = 1, M X C( I, J ) = ZERO X 130 CONTINUE X ELSE IF( BETA.NE.ONE )THEN X DO 140, I = 1, M X C( I, J ) = BETA*C( I, J ) X 140 CONTINUE X END IF X DO 160, L = 1, K X IF( B( J, L ).NE.ZERO )THEN X TEMP = ALPHA*B( J, L ) X DO 150, I = 1, M X C( I, J ) = C( I, J ) + TEMP*A( I, L ) X 150 CONTINUE X END IF X 160 CONTINUE X 170 CONTINUE X ELSE X* X* Form C := alpha*A'*B' + beta*C X* X DO 200, J = 1, N X DO 190, I = 1, M X TEMP = ZERO X DO 180, L = 1, K X TEMP = TEMP + A( L, I )*B( J, L ) X 180 CONTINUE X IF( BETA.EQ.ZERO )THEN X C( I, J ) = ALPHA*TEMP X ELSE X C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) X END IF X 190 CONTINUE