55 ClassImp(TQpLinSolverDens);
60 TQpLinSolverDens::TQpLinSolverDens(TQpProbDens *factory,TQpDataDens *data) :
61 TQpLinSolverBase(factory,data)
63 const Int_t n = factory->fNx+factory->fMy+factory->fMz;
66 data->PutQIntoAt(fKkt,0, 0);
67 if (fMy > 0) data->PutAIntoAt(fKkt,fNx, 0);
68 if (fMz > 0) data->PutCIntoAt(fKkt,fNx+fMy,0);
69 for (Int_t ix = fNx; ix < fNx+fMy+fMz; ix++) {
70 for (Int_t iy = fNx; iy < fNx+fMy+fMz; iy++)
74 fSolveLU = TDecompLU(n);
81 TQpLinSolverDens::TQpLinSolverDens(
const TQpLinSolverDens &another) : TQpLinSolverBase(another)
90 void TQpLinSolverDens::Factor(TQpDataBase *prob,TQpVar *vars)
92 TQpLinSolverBase::Factor(prob,vars);
93 fSolveLU.SetMatrix(fKkt);
100 void TQpLinSolverDens::PutXDiagonal(TVectorD &xdiag)
102 TMatrixDDiag diag(fKkt);
103 for (Int_t i = 0; i < xdiag.GetNrows(); i++)
111 void TQpLinSolverDens::PutZDiagonal(TVectorD &zdiag)
113 TMatrixDDiag diag(fKkt);
114 for (Int_t i = 0; i < zdiag.GetNrows(); i++)
115 diag[i+fNx+fMy] = zdiag[i];
124 void TQpLinSolverDens::SolveCompressed(TVectorD &compressedRhs)
126 fSolveLU.Solve(compressedRhs);
133 TQpLinSolverDens &TQpLinSolverDens::operator=(
const TQpLinSolverDens &source)
135 if (
this != &source) {
136 TQpLinSolverBase::operator=(source);
137 fKkt.ResizeTo(source.fKkt); fKkt = source.fKkt;
138 fSolveLU = source.fSolveLU;