Changeset 14 for include/fflas-ffpack/ffpack_ludivine.inl
- Timestamp:
- 04/09/07 12:02:27 (2 years ago)
- Files:
-
- 1 modified
-
include/fflas-ffpack/ffpack_ludivine.inl (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
include/fflas-ffpack/ffpack_ludivine.inl
r13 r14 37 37 typename Field::Element * A, const size_t lda, size_t*P, 38 38 size_t *Q, const enum FFPACK_LUDIVINE_TAG LuTag){ 39 static typename Field::Element mone,one ;39 static typename Field::Element mone,one,zero; 40 40 F.init(one,1.0); 41 F.init(zero,0.0); 41 42 F.neg (mone, one); 42 43 size_t MN = MIN(M,N); … … 45 46 46 47 for (size_t k = 0; k < MN; ++k){ 47 write_field(F,cerr<<"A = "<<endl,A,M,N,lda);48 cerr<<"Q["<<r<<"] = "<<Q[r]<<endl;49 48 size_t p = r; 49 Acurr = A+k*lda+r; 50 50 while ((p < N) && F.isZero (*(Acurr++))) 51 51 p++; 52 if (p == N){ 53 Q[r] ++; 54 Acurr += lda; 55 } else { 52 if (p < N){ 56 53 P[r] = p; 57 if (r < Q[r]) 58 fcopy (F, N-r, (A + r*(lda+1)), 1, (A+Q[r]*lda+r),1); 54 if (r < k){ 55 fcopy (F, N-r, (A + r*(lda+1)), 1, (A+k*lda+r),1); 56 Acurr = A+r+k*lda; 57 for (size_t i=r; i<N; ++i) 58 F.assign(*(Acurr++),zero); 59 } 60 59 61 fswap (F, M, A+r, lda, A+p, lda); 60 Acurr += lda +1;62 Q[r] = k; 61 63 r++; 62 Q[r] = r; 63 } 64 if (Q[r]<M){ 65 write_field(F,cerr<<"A avant = "<<endl,A,M,N,lda); 66 ftrsv (F, FflasUpper, FflasTrans, FflasNonUnit, r, A, lda, A+(Q[r])*lda, 1); 67 write_field(F,cerr<<"A milieu = "<<endl,A,M,N,lda); 68 fgemv (F, FflasTrans, N-r,r, mone, A+r, lda, A+(Q[r])*lda, 1, one, Acurr, 1); 64 } 65 if (k+1<M){ 66 ftrsv (F, FflasUpper, FflasTrans, FflasNonUnit, r, A, lda, A+(k+1)*lda, 1); 67 fgemv (F, FflasTrans, r, N-r, mone, A+r, lda, A+(k+1)*lda, 1, one, A+(k+1)*lda+r, 1); 69 68 } else 70 69 return r;
