| 3073 | } |
| 3074 | |
| 3075 | void HEkk::updateFactor(HVector* column, HVector* row_ep, HighsInt* iRow, |
| 3076 | HighsInt* hint) { |
| 3077 | analysis_.simplexTimerStart(UpdateFactorClock); |
| 3078 | simplex_nla_.update(column, row_ep, iRow, hint); |
| 3079 | // Now have a representation of B^{-1}, but it is not fresh |
| 3080 | status_.has_invert = true; |
| 3081 | if (info_.update_count >= info_.update_limit) |
| 3082 | *hint = kRebuildReasonUpdateLimitReached; |
| 3083 | |
| 3084 | // Determine whether to reinvert based on the synthetic clock |
| 3085 | bool reinvert_syntheticClock = |
| 3086 | this->total_synthetic_tick_ >= this->build_synthetic_tick_; |
| 3087 | const bool performed_min_updates = |
| 3088 | info_.update_count >= kSyntheticTickReinversionMinUpdateCount; |
| 3089 | if (reinvert_syntheticClock && performed_min_updates) |
| 3090 | *hint = kRebuildReasonSyntheticClockSaysInvert; |
| 3091 | analysis_.simplexTimerStop(UpdateFactorClock); |
| 3092 | // Use the next level down for the debug level, since the cost of |
| 3093 | // checking the INVERT every iteration is an order more expensive |
| 3094 | // than checking after factorization. |
| 3095 | HighsInt alt_debug_level = options_->highs_debug_level - 1; |
| 3096 | // Forced expensive debug for development work |
| 3097 | // if (debug_solve_report_) alt_debug_level = kHighsDebugLevelExpensive; |
| 3098 | HighsDebugStatus debug_status = |
| 3099 | debugNlaCheckInvert("HEkk::updateFactor", alt_debug_level); |
| 3100 | if (debug_status == HighsDebugStatus::kError) { |
| 3101 | *hint = kRebuildReasonPossiblySingularBasis; |
| 3102 | } |
| 3103 | } |
| 3104 | |
| 3105 | void HEkk::updatePivots(const HighsInt variable_in, const HighsInt row_out, |
| 3106 | const HighsInt move_out) { |
no test coverage detected