slasq3 - check for deflation, compute a shift and calls dqds. Used by sbdsqr
SUBROUTINE SLASQ3(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL IEEE INTEGER I0, ITER, N0, NDIV, NFAIL, PP, TTYPE REAL DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU REAL Z(*) SUBROUTINE SLASQ3_64(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL*8 IEEE INTEGER*8 I0, ITER, N0, NDIV, NFAIL, PP, TTYPE REAL DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU REAL Z(*) F95 INTERFACE SUBROUTINE LASQ3(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL :: IEEE INTEGER :: I0, N0, PP, NFAIL, ITER, NDIV, TTYPE REAL, DIMENSION(:) :: Z REAL :: DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU SUBROUTINE LASQ3_64(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL(8) :: IEEE INTEGER(8) :: I0, N0, PP, NFAIL, ITER, NDIV, TTYPE REAL, DIMENSION(:) :: Z REAL :: DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU C INTERFACE #include <sunperf.h> void slasq3 (int i0, int n0, float *z, int *pp, float *dmin, float *sigma, float *desig, float qmax, int *nfail, int *iter, int *ndiv, int ieee, int *ttype, float *dmin1, float *dmin2, float *dn, float *dn1, float *dn2, float *g, float *tau); void slasq3_64 (long i0, long n0, float *z, long *pp, float *dmin, float *sigma, float *desig, float qmax, long *nfail, long *iter, long *ndiv, long ieee, long *ttype, float *dmin1, float *dmin2, float *dn, float *dn1, float *dn2, float *g, float *tau);
Oracle Solaris Studio Performance Library slasq3(3P) NAME slasq3 - check for deflation, compute a shift and calls dqds. Used by sbdsqr SYNOPSIS SUBROUTINE SLASQ3(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL IEEE INTEGER I0, ITER, N0, NDIV, NFAIL, PP, TTYPE REAL DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU REAL Z(*) SUBROUTINE SLASQ3_64(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL*8 IEEE INTEGER*8 I0, ITER, N0, NDIV, NFAIL, PP, TTYPE REAL DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU REAL Z(*) F95 INTERFACE SUBROUTINE LASQ3(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL :: IEEE INTEGER :: I0, N0, PP, NFAIL, ITER, NDIV, TTYPE REAL, DIMENSION(:) :: Z REAL :: DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU SUBROUTINE LASQ3_64(I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL, ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1, DN2, G, TAU) LOGICAL(8) :: IEEE INTEGER(8) :: I0, N0, PP, NFAIL, ITER, NDIV, TTYPE REAL, DIMENSION(:) :: Z REAL :: DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G, QMAX, SIGMA, TAU C INTERFACE #include <sunperf.h> void slasq3 (int i0, int n0, float *z, int *pp, float *dmin, float *sigma, float *desig, float qmax, int *nfail, int *iter, int *ndiv, int ieee, int *ttype, float *dmin1, float *dmin2, float *dn, float *dn1, float *dn2, float *g, float *tau); void slasq3_64 (long i0, long n0, float *z, long *pp, float *dmin, float *sigma, float *desig, float qmax, long *nfail, long *iter, long *ndiv, long ieee, long *ttype, float *dmin1, float *dmin2, float *dn, float *dn1, float *dn2, float *g, float *tau); PURPOSE slasq3 checks for deflation, computes a shift (TAU) and calls dqds. In case of failure it changes shifts, and tries again until output is pos- itive. ARGUMENTS I0 (input) I0 is INTEGER First index. N0 (input/output) N0 is INTEGER Last index. Z (input/output) Z is REAL array, dimension (4*N) Z holds the qd array. PP (input/output) PP is INTEGER PP=0 for ping, PP=1 for pong. PP=2 indicates that flipping was applied to the Z array and that the initial tests for deflation should not be performed. DMIN (output) DMIN is REAL Minimum value of d. SIGMA (output) SIGMA is REAL Sum of shifts used in current segment. DESIG (input/output) DESIG is REAL Lower order part of SIGMA. QMAX (input) QMAX is REAL Maximum value of q. NFAIL (output) NFAIL is INTEGER Number of times shift was too big. ITER (output) ITER is INTEGER Number of iterations. NDIV (output) NDIV is INTEGER Number of divisions. IEEE (input) IEEE is LOGICAL Flag for IEEE or non IEEE arithmetic (passed to SLASQ5). TTYPE (input/output) TTYPE is INTEGER Shift type. DMIN1 (input/output) DMIN1 is REAL DMIN2 (input/output) DMIN2 is REAL DN (input/output) DN is REAL DN1 (input/output) DN1 is REAL DN2 (input/output) DN2 is REAL G (input/output) G is REAL TAU (input/output) TAU is REAL These are passed as arguments in order to save their values between calls to SLASQ3. 7 Nov 2015 slasq3(3P)