@@ -2278,10 +2278,13 @@ int barrier_solver_t<i_t, f_t>::initial_point(iteration_data_t<i_t, f_t>& data)
22782278 }
22792279 } op (data);
22802280
2281- if (settings.barrier_iterative_refinement ) {
2281+ if (settings.barrier_iterative_refinement != barrier_iterative_refinement_t ::Off ) {
22822282 const f_t ir_tol = data.has_sparse_cones () ? f_t (1e-12 ) : f_t (1e-8 );
2283- iterative_refinement<i_t , f_t , op_t >(
2284- op, rhs, soln, ir_tol, settings.barrier_iterative_refinement_method );
2283+
2284+ const i_t internal_method =
2285+ (settings.barrier_iterative_refinement == barrier_iterative_refinement_t ::FixedPoint) ? 0
2286+ : 1 ;
2287+ iterative_refinement<i_t , f_t , op_t >(op, rhs, soln, ir_tol, internal_method);
22852288 }
22862289
22872290 for (i_t k = 0 ; k < lp.num_cols ; k++) {
@@ -2904,15 +2907,15 @@ i_t barrier_solver_t<i_t, f_t>::gpu_compute_search_direction(iteration_data_t<i_
29042907 data_.chol ->solve (b, x);
29052908 }
29062909 } op (data);
2907- if (settings.barrier_iterative_refinement ) {
2910+ if (settings.barrier_iterative_refinement != barrier_iterative_refinement_t ::Off ) {
29082911 raft::common::nvtx::range fun_scope (" Barrier: iterative_refinement" );
29092912 const f_t ir_tol = data.has_sparse_cones () ? f_t (1e-12 ) : f_t (1e-8 );
2910- const f_t solve_err =
2911- iterative_refinement< i_t , f_t , op_t >(op,
2912- data. d_augmented_rhs_ ,
2913- data. d_augmented_soln_ ,
2914- ir_tol,
2915- settings. barrier_iterative_refinement_method );
2913+
2914+ const i_t internal_method =
2915+ (settings. barrier_iterative_refinement == barrier_iterative_refinement_t ::FixedPoint) ? 0
2916+ : 1 ;
2917+ const f_t solve_err = iterative_refinement< i_t , f_t , op_t >(
2918+ op, data. d_augmented_rhs_ , data. d_augmented_soln_ , ir_tol, internal_method );
29162919 if (solve_err > 1e-1 ) {
29172920 settings.log .printf (" || Aug (dx, dy) - aug_rhs || %e after IR\n " , solve_err);
29182921 }
@@ -2982,7 +2985,8 @@ i_t barrier_solver_t<i_t, f_t>::gpu_compute_search_direction(iteration_data_t<i_
29822985 // GMRES can handle large, potentially ill-conditioned systems better than simple Richardson
29832986 // or classical iterative refinement, at the potential cost of higher computational work and
29842987 // memory. This is only used on the pure Schur-complement (n_dense_columns == 0).
2985- if (settings.barrier_iterative_refinement && data.n_dense_columns == 0 ) {
2988+ if (settings.barrier_iterative_refinement != barrier_iterative_refinement_t ::Off &&
2989+ data.n_dense_columns == 0 ) {
29862990 struct adat_op_t {
29872991 adat_op_t (iteration_data_t <i_t , f_t >& data) : data_(data) {}
29882992 iteration_data_t <i_t , f_t >& data_;
@@ -2998,8 +3002,12 @@ i_t barrier_solver_t<i_t, f_t>::gpu_compute_search_direction(iteration_data_t<i_
29983002 data_.gpu_solve_adat (b, x);
29993003 }
30003004 } adat_op (data);
3005+
3006+ const i_t internal_method =
3007+ (settings.barrier_iterative_refinement == barrier_iterative_refinement_t ::FixedPoint) ? 0
3008+ : 1 ;
30013009 const f_t adat_solve_err = iterative_refinement<i_t , f_t , adat_op_t >(
3002- adat_op, data.d_h_ , data.d_dy_ , f_t (1e-8 ), settings. barrier_iterative_refinement_method );
3010+ adat_op, data.d_h_ , data.d_dy_ , f_t (1e-8 ), internal_method );
30033011 if (adat_solve_err > 1e-1 ) {
30043012 settings.log .printf (" ||ADAT*dy - h|| %e after IR\n " , adat_solve_err);
30053013 }
0 commit comments