@@ -568,7 +568,7 @@ bool hiopKKTLinSysCompressedXYcYd::update(const hiopIterate* iter,
568568 Dx_->axdzpy_w_pattern (1.0 , *iter_->zl , *iter_->sxl , nlp_->get_ixl ());
569569 Dx_->axdzpy_w_pattern (1.0 , *iter_->zu , *iter_->sxu , nlp_->get_ixu ());
570570 nlp_->log ->write (" Dx in KKT" , *Dx_, hovMatrices);
571-
571+ assert ( false );
572572 // Dd=(Sdl)^{-1}Vu + (Sdu)^{-1}Vu
573573 Dd_->setToZero ();
574574 Dd_->axdzpy_w_pattern (1.0 , *iter_->vl , *iter_->sdl , nlp_->get_idl ());
@@ -595,31 +595,58 @@ bool hiopKKTLinSysCompressedXYcYd::computeDirections(const hiopResidual* resid,
595595
596596 /* **********************************************************************
597597 * perform the reduction to the compressed linear system
598- * rx_tilde = rx+Sxl^{-1}*[rszl-Zl*rxl] - Sxu^{-1}*(rszu-Zu*rxu)
598+ * rx_tilde = rx+ M_lumped* Sxl^{-1}*[rszl-Zl*rxl] - M_lumped* Sxu^{-1}*(rszu-Zu*rxu)
599599 * ryd_tilde = ryd + [(Sdl^{-1}Vl+Sdu^{-1}Vu)]^{-1}*
600600 * [rd + Sdl^{-1}*(rsvl-Vl*rdl)-Sdu^{-1}(rsvu-Vu*rdu)]
601601 * rd_tilde = rd + Sdl^{-1}*(rsvl-Vl*rdl)-Sdu^{-1}(rsvu-Vu*rdu)
602602 * Dd_inv = [(Sdl^{-1}Vl+Sdu^{-1}Vu)]^{-1}
603603 * yd_tilde = ryd + Dd_inv*rd_tilde
604604 */
605605 rx_tilde_->copyFrom (*r.rx );
606+
607+ // if(nlp_->n_low_local() > 0) {
608+ // // rl:=rszl-Zl*rxl (using dir->x as working buffer)
609+ // hiopVector& rl = *(dir->x); // temporary working buffer
610+ // rl.copyFrom(*r.rszl);
611+ // rl.axzpy(-1.0, *iter_->zl, *r.rxl);
612+ // // rx_tilde = rx+Sxl^{-1}*rl
613+ // rx_tilde_->axdzpy_w_pattern(1.0, rl, *iter_->sxl, nlp_->get_ixl());
614+ // }
615+ // if(nlp_->n_upp_local() > 0) {
616+ // // ru:=rszu-Zu*rxu (using dir->x as working buffer)
617+ // hiopVector& ru = *(dir->x); // temporary working buffer
618+ // ru.copyFrom(*r.rszu);
619+ // ru.axzpy(-1.0, *iter_->zu, *r.rxu);
620+ // // rx_tilde = rx_tilde - Sxu^{-1}*ru
621+ // rx_tilde_->axdzpy_w_pattern(-1.0, ru, *iter_->sxu, nlp_->get_ixu());
622+ // }
623+
624+ hiopVector& rx2 = *(dir->sxl ); // temporary working buffer
625+ rx2.setToZero ();
606626 if (nlp_->n_low_local () > 0 ) {
607- // rl:=rszl-Zl*rxl (using dir->x as working buffer)
608627 hiopVector& rl = *(dir->x ); // temporary working buffer
609628 rl.copyFrom (*r.rszl );
610629 rl.axzpy (-1.0 , *iter_->zl , *r.rxl );
611- // rx_tilde = rx+Sxl^{-1}*rl
612- rx_tilde_->axdzpy_w_pattern (1.0 , rl, *iter_->sxl , nlp_->get_ixl ());
630+ // // rx_tilde = rx+Sxl^{-1}*rl
631+ // rx_tilde_->axdzpy_w_pattern(1.0, rl, *iter_->sxl, nlp_->get_ixl());
632+ rx2.axdzpy_w_pattern (1.0 , rl, *iter_->sxl , nlp_->get_ixl ());
613633 }
634+
614635 if (nlp_->n_upp_local () > 0 ) {
615- // ru:=rszu-Zu*rxu (using dir->x as working buffer)
616- hiopVector& ru = *(dir->x ); // temporary working buffer
636+ // ru:=rszu-Zu*rxu
637+ hiopVector& ru = *(dir->x );
617638 ru.copyFrom (*r.rszu );
618639 ru.axzpy (-1.0 , *iter_->zu , *r.rxu );
619- // rx_tilde = rx_tilde - Sxu^{-1}*ru
620- rx_tilde_->axdzpy_w_pattern (-1.0 , ru, *iter_->sxu , nlp_->get_ixu ());
640+ // // rx_tilde = rx_tilde - Sxu^{-1}*ru
641+ // //rx_tilde_->axdzpy_w_pattern(-1.0, ru, *iter_->sxu, nlp_->get_ixu());
642+ rx2.axdzpy_w_pattern (-1.0 , ru, *iter_->sxu , nlp_->get_ixu ());
643+ }
644+ if (nlp_->n_low_local () > 0 || nlp_->n_upp_local () > 0 ) {
645+ rx2.componentMult (*nlp_->inner_prod ()->M_lumped ());
646+ rx_tilde_->axpy (1.0 , rx2);
621647 }
622648
649+
623650 // for ryd_tilde:
624651 ryd_tilde_->copyFrom (*r.ryd );
625652 // 1. the diag (Sdl^{-1}Vl+Sdu^{-1}Vu)^{-1} has already computed in Dd_inv in 'update'
0 commit comments