本文整理汇总了C++中SmartPtr::GetComp方法的典型用法代码示例。如果您正苦于以下问题:C++ SmartPtr::GetComp方法的具体用法?C++ SmartPtr::GetComp怎么用?C++ SmartPtr::GetComp使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SmartPtr
的用法示例。
在下文中一共展示了SmartPtr::GetComp方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: InitializeImpl
bool IndexPCalculator::InitializeImpl(const OptionsList& options,
const std::string& prefix)
{
DBG_START_METH("IndexPCalculator::InitializeImpl", dbg_verbosity);
SmartPtr<const IteratesVector> iv = IpData().curr();
nrows_ = 0;
for (Index i=0; i<iv->NComps(); ++i) {
nrows_+=iv->GetComp(i)->Dim();
}
data_A()->Print(Jnlst(),J_VECTOR,J_USER1,"PCalc SchurData");
return true;
}
示例2: Solve
ESymSolverStatus AugRestoSystemSolver::Solve(const SymMatrix* W,
double W_factor,
const Vector* D_x,
double delta_x,
const Vector* D_s,
double delta_s,
const Matrix* J_c,
const Vector* D_c,
double delta_c,
const Matrix* J_d,
const Vector* D_d,
double delta_d,
const Vector& rhs_x,
const Vector& rhs_s,
const Vector& rhs_c,
const Vector& rhs_d,
Vector& sol_x,
Vector& sol_s,
Vector& sol_c,
Vector& sol_d,
bool check_NegEVals,
Index numberOfNegEVals)
{
DBG_START_METH("AugRestoSystemSolver::Solve",dbg_verbosity);
DBG_ASSERT(J_c && J_d); // should pass these by ref
// I think the comment below is incorrect
// Remember, W and the D's may be NULL!
// ToDo: I don't think the W's can ever be NULL (we always need the structure)
DBG_ASSERT(W);
SmartPtr<const CompoundSymMatrix> CW =
static_cast<const CompoundSymMatrix*>(W);
SmartPtr<const CompoundVector> CD_x =
static_cast<const CompoundVector*>(D_x);
SmartPtr<const CompoundMatrix> CJ_c =
static_cast<const CompoundMatrix*>(J_c);
DBG_ASSERT(IsValid(CJ_c));
SmartPtr<const CompoundMatrix> CJ_d =
static_cast<const CompoundMatrix*>(J_d);
DBG_ASSERT(IsValid(CJ_d));
SmartPtr<const CompoundVector> Crhs_x =
static_cast<const CompoundVector*>(&rhs_x);
DBG_ASSERT(IsValid(Crhs_x));
SmartPtr<CompoundVector> Csol_x = static_cast<CompoundVector*>(&sol_x);
DBG_ASSERT(IsValid(Csol_x));
// Get the Sigma inverses
SmartPtr<const Vector> sigma_n_c;
SmartPtr<const Vector> sigma_p_c;
SmartPtr<const Vector> sigma_n_d;
SmartPtr<const Vector> sigma_p_d;
if (IsValid(CD_x)) {
sigma_n_c = CD_x->GetComp(1);
sigma_p_c = CD_x->GetComp(2);
sigma_n_d = CD_x->GetComp(3);
sigma_p_d = CD_x->GetComp(4);
}
SmartPtr<const Vector> sigma_tilde_n_c_inv =
Sigma_tilde_n_c_inv(sigma_n_c, delta_x, *Crhs_x->GetComp(1));
SmartPtr<const Vector> sigma_tilde_p_c_inv =
Sigma_tilde_p_c_inv(sigma_p_c, delta_x, *Crhs_x->GetComp(2));
SmartPtr<const Vector> sigma_tilde_n_d_inv =
Sigma_tilde_n_d_inv(sigma_n_d, delta_x, *Crhs_x->GetComp(3));
SmartPtr<const Vector> sigma_tilde_p_d_inv =
Sigma_tilde_p_d_inv(sigma_p_d, delta_x, *Crhs_x->GetComp(4));
// Pull out the expansion matrices for d
SmartPtr<const Matrix> pd_l = CJ_d->GetComp(0,3);
SmartPtr<const Matrix> neg_pd_u = CJ_d->GetComp(0,4);
// Now map the correct entries into the Solve method
// pull out the parts of the hessian h_orig + diag
DBG_PRINT_MATRIX(2, "CW", *CW);
SmartPtr<const SymMatrix> h_orig;
SmartPtr<const Vector> D_xR;
SmartPtr<const SumSymMatrix> WR_sum =
dynamic_cast<const SumSymMatrix*>(GetRawPtr(CW->GetComp(0,0)));
Number orig_W_factor = W_factor;
if (IsValid(WR_sum)) {
// We seem to be in the regular situation with exact second
// derivatives
double temp_factor;
WR_sum->GetTerm(0, temp_factor, h_orig);
DBG_ASSERT(temp_factor == 1. || temp_factor == 0.);
orig_W_factor = temp_factor * W_factor;
SmartPtr<const SymMatrix> eta_DR;
double factor;
WR_sum->GetTerm(1, factor, eta_DR);
SmartPtr<const Vector> wr_d =
static_cast<const DiagMatrix*>(GetRawPtr(eta_DR))->GetDiag();
if (IsValid(CD_x)) {
//.........这里部分代码省略.........
示例3: RestoIpoptNLP
//.........这里部分代码省略.........
THROW_EXCEPTION(LOCALLY_INFEASIBLE,
"Restoration phase converged to a point of local infeasibility");
}
}
else if (resto_status == MAXITER_EXCEEDED) {
THROW_EXCEPTION(RESTORATION_MAXITER_EXCEEDED,
"Maximal number of iterations exceeded in restoration phase.");
}
else if (resto_status == LOCAL_INFEASIBILITY) {
// converged to locally infeasible point - pass this on to the outer algorithm...
THROW_EXCEPTION(LOCALLY_INFEASIBLE, "Restoration phase converged to a point of local infeasibility");
}
else if (resto_status == RESTORATION_FAILURE) {
Jnlst().Printf(J_WARNING, J_LINE_SEARCH,
"Restoration phase in the restoration phase failed.\n");
THROW_EXCEPTION(RESTORATION_FAILED, "Restoration phase in the restoration phase failed.");
}
else if (resto_status == USER_REQUESTED_STOP) {
// Use requested stop during restoration phase - rethrow exception
THROW_EXCEPTION(RESTORATION_USER_STOP, "User requested stop during restoration phase");
}
else {
Jnlst().Printf(J_ERROR, J_MAIN, "Sorry, things failed ?!?!\n");
retval = 1;
}
if (retval == 0) {
// Copy the results into the trial fields;. They will be
// accepted later in the full algorithm
SmartPtr<const CompoundVector> cx =
dynamic_cast<const CompoundVector*>(GetRawPtr(resto_ip_data->curr()->x()));
DBG_ASSERT(IsValid(cx));
SmartPtr<IteratesVector> trial = IpData().trial()->MakeNewContainer();
trial->Set_primal(*cx->GetComp(0), *resto_ip_data->curr()->s());
IpData().set_trial(trial);
// If this is a square problem, we are done because a
// sufficiently feasible point has been found
if (square_problem) {
Jnlst().Printf(J_DETAILED, J_LINE_SEARCH,
"Recursive restoration phase algorithm termined successfully for square problem.\n");
IpData().AcceptTrialPoint();
THROW_EXCEPTION(FEASIBILITY_PROBLEM_SOLVED, "Restoration phase converged to sufficiently feasible point of original square problem.");
}
// Update the bound multiplers, pretending that the entire
// progress in x and s in the restoration phase has been one
// [rimal-dual Newton step (and therefore the result of solving
// an augmented system)
SmartPtr<IteratesVector> delta = IpData().curr()->MakeNewIteratesVector(true);
delta->Set(0.0);
ComputeBoundMultiplierStep(*delta->z_L_NonConst(), *IpData().curr()->z_L(),
*IpCq().curr_slack_x_L(),
*IpCq().trial_slack_x_L());
ComputeBoundMultiplierStep(*delta->z_U_NonConst(), *IpData().curr()->z_U(),
*IpCq().curr_slack_x_U(),
*IpCq().trial_slack_x_U());
ComputeBoundMultiplierStep(*delta->v_L_NonConst(), *IpData().curr()->v_L(),
*IpCq().curr_slack_s_L(),
*IpCq().trial_slack_s_L());
ComputeBoundMultiplierStep(*delta->v_U_NonConst(), *IpData().curr()->v_U(),
*IpCq().curr_slack_s_U(),
*IpCq().trial_slack_s_U());
DBG_PRINT_VECTOR(1, "delta_z_L", *delta->z_L());
DBG_PRINT_VECTOR(1, "delta_z_U", *delta->z_U());