MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / majorUpdateFtranPrepare

Method majorUpdateFtranPrepare

highs/simplex/HEkkDualMulti.cpp:574–608  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

572}
573
574void HEkkDual::majorUpdateFtranPrepare() {
575 // Prepare FTRAN BFRT buffer
576 col_BFRT.clear();
577 for (HighsInt iFn = 0; iFn < multi_nFinish; iFn++) {
578 MFinish* finish = &multi_finish[iFn];
579 HVector* Vec = finish->col_BFRT;
580 a_matrix->collectAj(*Vec, finish->variable_in, finish->theta_primal);
581
582 // Update this buffer by previous Row_ep
583 for (HighsInt jFn = iFn - 1; jFn >= 0; jFn--) {
584 MFinish* jFinish = &multi_finish[jFn];
585 double* jRow_epArray = jFinish->row_ep->array.data();
586 double pivotX = 0;
587 for (HighsInt k = 0; k < Vec->count; k++) {
588 HighsInt iRow = Vec->index[k];
589 pivotX += Vec->array[iRow] * jRow_epArray[iRow];
590 }
591 if (fabs(pivotX) > kHighsTiny) {
592 pivotX /= jFinish->alpha_row;
593 a_matrix->collectAj(*Vec, jFinish->variable_in, -pivotX);
594 a_matrix->collectAj(*Vec, jFinish->variable_out, pivotX);
595 }
596 }
597 col_BFRT.saxpy(1.0, Vec);
598 }
599
600 // Prepare regular FTRAN buffer
601 for (HighsInt iFn = 0; iFn < multi_nFinish; iFn++) {
602 MFinish* iFinish = &multi_finish[iFn];
603 HVector* iColumn = iFinish->col_aq;
604 iColumn->clear();
605 iColumn->packFlag = true;
606 a_matrix->collectAj(*iColumn, iFinish->variable_in, 1);
607 }
608}
609
610void HEkkDual::majorUpdateFtranParallel() {
611 analysis->simplexTimerStart(FtranMixParClock);

Callers

nothing calls this directly

Calls 4

collectAjMethod · 0.80
dataMethod · 0.80
saxpyMethod · 0.80
clearMethod · 0.45

Tested by

no test coverage detected