Ejemplo n.º 1
0
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 );
} 
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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  ) );
}