Some of our test matrices are scaled near overflow or underflow, but on the Crays, problems with the arithmetic near overflow and underflow forced us to scale by only the square root of overflow and underflow. The LAPACK auxiliary routine SLABAD (or DLABAD) is called to take the square root of underflow and overflow in cases where it could cause difficulties. We assume we are on a Cray if 14#14 is greater than 2000 and take the square root of underflow and overflow in this case. The test in SLABAD is as follows:
IF( LOG10( LARGE ).GT.2000. ) THEN SMALL = SQRT( SMALL ) LARGE = SQRT( LARGE ) END IFUsers of other machines with similar restrictions on the effective range of usable numbers may have to modify this test so that the square roots are done on their machine as well. Usually on HPPA architectures, a similar restriction in SLABAD should be enforced for all testing involving complex arithmetic. SLABAD is located in LAPACK/SRC.
For machines which have a narrow exponent range or lack gradual underflow (DEC VAXes for example), it is not uncommon to experience failures in sec.out and/or dec.out with SLAQTR/DLAQTR or DTRSYL. The failures in SLAQTR/DLAQTR and DTRSYL occur with test problems which are very badly scaled when the norm of the solution is very close to the underflow threshold (or even underflows to zero). We believe that these failures could probably be avoided by an even greater degree of care in scaling, but we did not want to delay the release of LAPACK any further. These tests pass successfully on most other machines. An example failure in dec.out on a MicroVAX II looks like the following:
Tests of the Nonsymmetric eigenproblem condition estimation routines DLALN2, DLASY2, DLANV2, DLAEXC, DTRSYL, DTREXC, DTRSNA, DTRSEN, DLAQTR Relative machine precision (EPS) = 0.277556D-16 Safe minimum (SFMIN) = 0.587747D-38 Routines pass computational tests if test ratio is less than 20.00 DEC routines passed the tests of the error exits ( 35 tests done) Error in DTRSYL: RMAX = 0.155D+07 LMAX = 5323 NINFO= 1600 KNT= 27648 Error in DLAQTR: RMAX = 0.344D+04 LMAX = 15792 NINFO= 26720 KNT= 45000