LinearSystem * QpBoundPetsc::makeLinsys( Data * prob_in ) { QpBoundData * prob = (QpBoundData *) prob_in; PetscSpSymMatrixHandle Mat( new PetscSpSymMatrix( m, m, nx, nx*nx ) ); prob->putQIntoAt( *Mat, 0, 0 ); OoqpVectorHandle dq = OoqpVectorHandle( this->newPrimalVector() ); Mat->getDiagonal( *dq ); PetscIterativeSolver * solver = 0; if( mKsp ) { solver = new PetscIterativeSolver( Mat, mKsp ); } else { solver = new PetscIterativeSolver( Mat, KSPCG, PCJACOBI ); } OoqpVectorHandle ixlow( prob->getIndexLower() ); OoqpVectorHandle ixupp( prob->getIndexUpper() ); return new QpBoundLinsys( this, Mat, solver, dq, nx, ixlow, ixupp ); }
sResiduals::sResiduals( sTree* tree, OoqpVector * ixlow_, OoqpVector * ixupp_, OoqpVector * iclow_, OoqpVector * icupp_ ) :NlpGenResiduals() { SpReferTo( ixlow, ixlow_ ); nxlow = ixlow->numberOfNonzeros(); SpReferTo( ixupp, ixupp_ ); nxupp = ixupp->numberOfNonzeros(); SpReferTo( iclow, iclow_ ); mclow = iclow->numberOfNonzeros(); SpReferTo( icupp, icupp_ ); mcupp = icupp->numberOfNonzeros(); rQ = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); rA = OoqpVectorHandle( (OoqpVector*) tree->newDualYVector() ); rC = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); rz = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); if ( mclow > 0 ) { rt = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); rlambda = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); } else { rt = OoqpVectorHandle( (OoqpVector*) tree->newDualZVectorEmpty() ); rlambda = OoqpVectorHandle( (OoqpVector*) tree->newDualZVectorEmpty() ); } if ( mcupp > 0 ) { ru = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); rpi = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); } else { ru = OoqpVectorHandle( (OoqpVector*) tree->newDualZVectorEmpty() ); rpi = OoqpVectorHandle( (OoqpVector*) tree->newDualZVectorEmpty() ); } if( nxlow > 0 ) { rv = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); rgamma = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); } else { rv = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVectorEmpty() ); rgamma = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVectorEmpty() ); } if( nxupp > 0 ) { rw = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); rphi = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); } else { rw = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVectorEmpty() ); rphi = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVectorEmpty() ); } rp_OriSys = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); rd_OriSys = OoqpVectorHandle( (OoqpVector*) tree->newDualYVector() ); priWrk = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); dualWrk = OoqpVectorHandle( (OoqpVector*) tree->newDualYVector() ); dualWrk_Z = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); priWrk_S = OoqpVectorHandle( (OoqpVector*) tree->newDualZVector() ); Wd = OoqpVectorHandle( (OoqpVector*) tree->newPrimalVector() ); stochNode = tree; }
QpGenData::QpGenData(LinearAlgebraPackage * la_, long long nx_, long long my_, long long mz_, long long nnzQ, long long nnzA, long long nnzC) { la = la_; nx = nx_; my = my_; mz = mz_; Q = SymMatrixHandle( la->newSymMatrix( nx, nnzQ ) ); A = GenMatrixHandle( la->newGenMatrix( my, nx, nnzA ) ); C = GenMatrixHandle( la->newGenMatrix( mz, nx, nnzC ) ); g = OoqpVectorHandle( la->newVector( nx ) ); blx = OoqpVectorHandle( la->newVector( nx ) ); ixlow = OoqpVectorHandle( la->newVector( nx ) ); bux = OoqpVectorHandle( la->newVector( nx ) ); ixupp = OoqpVectorHandle( la->newVector( nx ) ); bA = OoqpVectorHandle( la->newVector( my ) ); bl = OoqpVectorHandle( la->newVector( mz ) ); iclow = OoqpVectorHandle( la->newVector( mz ) ); bu = OoqpVectorHandle( la->newVector( mz ) ); icupp = OoqpVectorHandle( la->newVector( mz ) ); sc = OoqpVectorHandle( la->newVector( nx ) ); }