Ejemplo n.º 1
0
    template <> void LapHessenberg(
        MatrixView<std::complex<float> > A, 
        VectorView<std::complex<float> > Ubeta) 
    {
        TMVAssert(A.iscm());
        TMVAssert(A.colsize() >= A.rowsize());
        TMVAssert(Ubeta.size() == A.rowsize());
        TMVAssert(A.ct()==NonConj);

        int n = A.rowsize();
        int ilo = 1;
        int ihi = n;
        int lda = A.stepj();
        int Lap_info=0;
#ifndef LAPNOWORK
        int lwork = n*LAP_BLOCKSIZE;
        std::complex<float>* work = LAP_CWork(lwork);
#endif
        LAPNAME(cgehrd) (
            LAPCM LAPV(n),LAPV(ilo),LAPV(ihi),
            LAPP(A.ptr()),LAPV(lda),LAPP(Ubeta.ptr())
            LAPWK(work) LAPVWK(lwork) LAPINFO);
        Ubeta.ConjugateSelf();
#ifdef LAPNOWORK
        LAP_Results(Lap_info,"cgehrd");
#else
        LAP_Results(Lap_info,int(REAL(work[0])),m,n,lwork,"cgehrd");
#endif
    }