double startv(SMat A,double[][] wptr,int step,int n){
  double rnm2, t;
  double[] r;
  int id, i;
  rnm2=svd_ddot(n,wptr[0],1,wptr[0],1);
  Random random=new Random(918273L + step);
  r=wptr[0];
  for (id=0; id < 3; id++) {
    if (id > 0 || step > 0 || rnm2 == 0)     for (i=0; i < n; i++)     r[i]=random.nextDouble();
    svd_dcopy(n,wptr[0],1,wptr[3],1);
    svd_opb(A,wptr[3],wptr[0],OPBTemp);
    svd_dcopy(n,wptr[0],1,wptr[3],1);
    rnm2=svd_ddot(n,wptr[0],1,wptr[3],1);
    if (rnm2 > 0.0)     break;
  }
  if (rnm2 <= 0.0) {
    ierr=8192;
    return (-1);
  }
  if (step > 0) {
    for (i=0; i < step; i++) {
      store(n,RETRQ,i,wptr[5]);
      t=-svd_ddot(n,wptr[3],1,wptr[5],1);
      svd_daxpy(n,t,wptr[5],1,wptr[0],1);
    }
    t=svd_ddot(n,wptr[4],1,wptr[0],1);
    svd_daxpy(n,-t,wptr[2],1,wptr[0],1);
    svd_dcopy(n,wptr[0],1,wptr[3],1);
    t=svd_ddot(n,wptr[3],1,wptr[0],1);
    if (t <= eps * rnm2)     t=0.0;
    rnm2=t;
  }
  return (Math.sqrt(rnm2));
}

double startv ( SMat A , double [ ] [ ] wptr , int step , int n ) { double rnm2 , t ; double [ ] r ; int id , i ; rnm2 = svd_ddot ( n , wptr [ 0 ] , 1 , wptr [ 0 ] , 1 ) ; Random random = new Random ( 918273L + step ) ; r = wptr [ 0 ] ; for ( id = 0 ; id < 3 ; id ++ ) { if ( id > 0 || step > 0 || rnm2 == 0 ) for ( i = 0 ; i < n ; i ++ ) r [ i ] = random . nextDouble ( ) ; svd_dcopy ( n , wptr [ 0 ] , 1 , wptr [ 3 ] , 1 ) ; svd_opb ( A , wptr [ 3 ] , wptr [ 0 ] , OPBTemp ) ; svd_dcopy ( n , wptr [ 0 ] , 1 , wptr [ 3 ] , 1 ) ; rnm2 = svd_ddot ( n , wptr [ 0 ] , 1 , wptr [ 3 ] , 1 ) ; if ( rnm2 > 0.0 ) break ; } if ( rnm2 <= 0.0 ) { ierr = 8192 ; return ( - 1 ) ; } if ( step > 0 ) { for ( i = 0 ; i < step ; i ++ ) { store ( n , RETRQ , i , wptr [ 5 ] ) ; t = - svd_ddot ( n , wptr [ 3 ] , 1 , wptr [ 5 ] , 1 ) ; svd_daxpy ( n , t , wptr [ 5 ] , 1 , wptr [ 0 ] , 1 ) ; } t = svd_ddot ( n , wptr [ 4 ] , 1 , wptr [ 0 ] , 1 ) ; svd_daxpy ( n , - t , wptr [ 2 ] , 1 , wptr [ 0 ] , 1 ) ; svd_dcopy ( n , wptr [ 0 ] , 1 , wptr [ 3 ] , 1 ) ; t = svd_ddot ( n , wptr [ 3 ] , 1 , wptr [ 0 ] , 1 ) ; if ( t <= eps * rnm2 ) t = 0.0 ; rnm2 = t ; } return ( Math . sqrt ( rnm2 ) ) ; }
description - - - - - - - - - - - function delivers a starting vector in r and returns | r | ; it returns zero if the range is spanned , and ierr is non - zero if no starting vector within range of operator can be found . parameters - - - - - - - - - ( input ) n dimension of the eigenproblem matrix b wptr array of pointers that point to work space j starting index for a lanczos run eps machine epsilon ( relative precision ) ( output ) wptr array of pointers that point to work space that contains r [ j ] , q [ j ] , q [ j - 1 ] , p [ j ] , p [ j - 1 ] ierr error flag ( nonzero if no starting vector can be found ) functions used - - - - - - - - - - - - - - blas svd_ddot , svd_dcopy , svd_daxpy user svd_opb , store misc random
