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

Method majorUpdateFtranFinal

highs/simplex/HEkkDualMulti.cpp:693–763  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

691}
692
693void HEkkDual::majorUpdateFtranFinal() {
694 analysis->simplexTimerStart(FtranMixFinalClock);
695 HighsInt updateFTRAN_inDense = dualRHS.workCount < 0;
696 if (updateFTRAN_inDense) {
697 for (HighsInt iFn = 0; iFn < multi_nFinish; iFn++) {
698 multi_finish[iFn].col_aq->count = -1;
699 multi_finish[iFn].row_ep->count = -1;
700 double* myCol = multi_finish[iFn].col_aq->array.data();
701 double* myRow = multi_finish[iFn].row_ep->array.data();
702 for (HighsInt jFn = 0; jFn < iFn; jFn++) {
703 HighsInt pivotRow = multi_finish[jFn].row_out;
704 const double pivotAlpha = multi_finish[jFn].alpha_row;
705 const double* pivotArray = multi_finish[jFn].col_aq->array.data();
706 double pivotX1 = myCol[pivotRow];
707 double pivotX2 = myRow[pivotRow];
708
709 // The FTRAN regular buffer
710 if (fabs(pivotX1) > kHighsTiny) {
711 const double pivot = pivotX1 / pivotAlpha;
712 // #pragma omp parallel for
713 highs::parallel::for_each(
714 0, solver_num_row,
715 [&](HighsInt start, HighsInt end) {
716 for (HighsInt i = start; i < end; i++)
717 myCol[i] -= pivot * pivotArray[i];
718 },
719 100);
720 myCol[pivotRow] = pivot;
721 }
722 // The FTRAN-DSE buffer
723 if (fabs(pivotX2) > kHighsTiny) {
724 const double pivot = pivotX2 / pivotAlpha;
725 // #pragma omp parallel for
726 highs::parallel::for_each(
727 0, solver_num_row,
728 [&](HighsInt start, HighsInt end) {
729 for (HighsInt i = start; i < end; i++)
730 myRow[i] -= pivot * pivotArray[i];
731 },
732 100);
733 myRow[pivotRow] = pivot;
734 }
735 }
736 }
737 } else {
738 for (HighsInt iFn = 0; iFn < multi_nFinish; iFn++) {
739 MFinish* finish = &multi_finish[iFn];
740 HVector* Col = finish->col_aq;
741 HVector* Row = finish->row_ep;
742 for (HighsInt jFn = 0; jFn < iFn; jFn++) {
743 MFinish* jFinish = &multi_finish[jFn];
744 HighsInt pivotRow = jFinish->row_out;
745 double pivotX1 = Col->array[pivotRow];
746 // The FTRAN regular buffer
747 if (fabs(pivotX1) > kHighsTiny) {
748 pivotX1 /= jFinish->alpha_row;
749 Col->saxpy(-pivotX1, jFinish->col_aq);
750 Col->array[pivotRow] = pivotX1;

Callers

nothing calls this directly

Calls 5

for_eachFunction · 0.85
simplexTimerStartMethod · 0.80
dataMethod · 0.80
saxpyMethod · 0.80
simplexTimerStopMethod · 0.80

Tested by

no test coverage detected