void Newton::Make_gVec(Newton::WHICH_DIRECTION direction, InputData& inputData, Solutions& currentPt, Residuals& currentRes, AverageComplementarity& mu, DirectionParameter& beta, Phase& phase, WorkVariables& work, ComputeTime& com) { TimeStart(START1); // rMessage("mu = " << mu.current); // rMessage("beta = " << beta.value); compute_rMat(direction,mu,beta,currentPt,work); TimeEnd(END1); com.makerMat += TimeCal(START1,END1); TimeStart(START2); TimeStart(START_GVEC_MUL); // work.DLS1 = R Z^{-1} - X D Z^{-1} = r_zinv - X D Z^{-1} if (phase.value == SolveInfo:: pFEAS || phase.value == SolveInfo::noINFO) { if (direction == CORRECTOR) { // x_rd_zinvMat is computed in PREDICTOR step Lal::let(work.DLS1,'=',r_zinvMat,'+',x_rd_zinvMat,&DMONE); } else { // currentPt is infeasilbe, that is the residual // dualMat is not 0. // x_rd_zinvMat = X D Z^{-1} Jal::ns_jordan_triple_product(x_rd_zinvMat,currentPt.xMat, currentRes.dualMat,currentPt.invzMat, work.DLS2); Lal::let(work.DLS1,'=',r_zinvMat,'+',x_rd_zinvMat,&DMONE); } // if (direction == CORRECTOR) } else { // dualMat == 0 work.DLS1.copyFrom(r_zinvMat); } // rMessage("work.DLS1"); // work.DLS1.display(); TimeEnd(END_GVEC_MUL); com.makegVecMul += TimeCal(START_GVEC_MUL,END_GVEC_MUL); inputData.multi_InnerProductToA(work.DLS1,gVec); Lal::let(gVec,'=',gVec,'*',&DMONE); // rMessage("gVec = "); // gVec.display(); #if 0 if (phase.value == SolveInfo:: dFEAS || phase.value == SolveInfo::noINFO) { #endif Lal::let(gVec,'=',gVec,'+',currentRes.primalVec); #if 0 } #endif TimeEnd(END2); com.makegVec += TimeCal(START2,END2); }