int LUsolve(Matrix A, int *indexarray, Vector b, Vector x) { int i, dim = A->dim; for (i = 0; i < dim; i++) x->ve[i] = b->ve[indexarray[i]]; if (Lsolve(A, x, x, 1.) == -1 || Usolve(A, x, x, 0.) == -1) return -1; return 0; }
void sLinsys::solveCompressed( OoqpVector& rhs_ ) { StochVector& rhs = dynamic_cast<StochVector&>(rhs_); #ifdef TIMING //double tTot=MPI_Wtime(); #endif Lsolve (data,rhs); Dsolve (data,rhs); Ltsolve(data,rhs); #ifdef TIMING //cout << "SolveCompressed took: " << (MPI_Wtime()-tTot) << endl; #endif }
VEC *LUsolve(const MAT *LU, PERM *pivot, const VEC *b, VEC *x) #endif { if ( ! LU || ! b || ! pivot ) error(E_NULL,"LUsolve"); if ( LU->m != LU->n || LU->n != b->dim ) error(E_SIZES,"LUsolve"); x = v_resize(x,b->dim); px_vec(pivot,b,x); /* x := P.b */ Lsolve(LU,x,x,1.0); /* implicit diagonal = 1 */ Usolve(LU,x,x,0.0); /* explicit diagonal */ return (x); }