55 ClassImp(TQpLinSolverSparse);
60 TQpLinSolverSparse::TQpLinSolverSparse(TQpProbSparse *factory,TQpDataSparse *data) :
61 TQpLinSolverBase(factory,data)
63 const Int_t n = factory->fNx+factory->fMy+factory->fMz;
66 if (fMy > 0) data->PutAIntoAt(fKkt,fNx, 0);
67 if (fMz > 0) data->PutCIntoAt(fKkt,fNx+fMy,0);
70 if (fMy > 0 || fMz > 0) {
71 TMatrixDSparse tmp(TMatrixDSparse::kTransposed,fKkt);
75 data->PutQIntoAt(fKkt,0,0);
82 TQpLinSolverSparse::TQpLinSolverSparse(
const TQpLinSolverSparse &another) :
83 TQpLinSolverBase(another)
92 void TQpLinSolverSparse::Factor(TQpDataBase *prob,TQpVar *vars)
94 TQpLinSolverBase::Factor(prob,vars);
95 fSolveSparse.SetMatrix(fKkt);
102 void TQpLinSolverSparse::PutXDiagonal(TVectorD &xdiag)
104 TMatrixDSparseDiag diag(fKkt);
105 for (Int_t i = 0; i < xdiag.GetNrows(); i++)
113 void TQpLinSolverSparse::PutZDiagonal(TVectorD &zdiag)
115 TMatrixDSparseDiag diag(fKkt);
116 for (Int_t i = 0; i < zdiag.GetNrows(); i++)
117 diag[i+fNx+fMy] = zdiag[i];
126 void TQpLinSolverSparse::SolveCompressed(TVectorD &compressedRhs)
128 fSolveSparse.Solve(compressedRhs);
135 TQpLinSolverSparse &TQpLinSolverSparse::operator=(
const TQpLinSolverSparse &source)
137 if (
this != &source) {
138 TQpLinSolverBase::operator=(source);
139 fKkt.ResizeTo(source.fKkt); fKkt = source.fKkt;
140 fSolveSparse = source.fSolveSparse;