@@ -55,10 +55,10 @@ struct subtract_scaled_op {
5555};
5656
5757template <typename i_t , typename f_t , typename T>
58- f_t iterative_refinement_simple (T& op,
59- const rmm::device_uvector<f_t >& b,
60- rmm::device_uvector<f_t >& x,
61- f_t tol = 1e-8 )
58+ f_t iterative_refinement_fixed_point (T& op,
59+ const rmm::device_uvector<f_t >& b,
60+ rmm::device_uvector<f_t >& x,
61+ f_t tol = 1e-8 )
6262{
6363 rmm::device_uvector<f_t > x_sav (x, x.stream ());
6464
@@ -365,13 +365,15 @@ template <typename i_t, typename f_t, typename T>
365365f_t iterative_refinement (T& op,
366366 const dense_vector_t <i_t , f_t >& b,
367367 dense_vector_t <i_t , f_t >& x,
368- f_t tol = 1e-8 )
368+ f_t tol = 1e-8 ,
369+ i_t method = 1 )
369370{
370371 rmm::device_uvector<f_t > d_b (b.size (), op.data_ .handle_ptr ->get_stream ());
371372 raft::copy (d_b.data (), b.data (), b.size (), op.data_ .handle_ptr ->get_stream ());
372373 rmm::device_uvector<f_t > d_x (x.size (), op.data_ .handle_ptr ->get_stream ());
373374 raft::copy (d_x.data (), x.data (), x.size (), op.data_ .handle_ptr ->get_stream ());
374- auto err = iterative_refinement_gmres<i_t , f_t , T>(op, d_b, d_x, tol);
375+ auto err = (method == 0 ) ? iterative_refinement_fixed_point<i_t , f_t , T>(op, d_b, d_x, tol)
376+ : iterative_refinement_gmres<i_t , f_t , T>(op, d_b, d_x, tol);
375377
376378 raft::copy (x.data (), d_x.data (), x.size (), op.data_ .handle_ptr ->get_stream ());
377379
@@ -383,9 +385,11 @@ template <typename i_t, typename f_t, typename T>
383385f_t iterative_refinement (T& op,
384386 const rmm::device_uvector<f_t >& b,
385387 rmm::device_uvector<f_t >& x,
386- f_t tol = 1e-8 )
388+ f_t tol = 1e-8 ,
389+ i_t method = 1 )
387390{
388- return iterative_refinement_gmres<i_t , f_t , T>(op, b, x, tol);
391+ return (method == 0 ) ? iterative_refinement_fixed_point<i_t , f_t , T>(op, b, x, tol)
392+ : iterative_refinement_gmres<i_t , f_t , T>(op, b, x, tol);
389393}
390394
391395} // namespace cuopt::mathematical_optimization::barrier
0 commit comments