52 struct s_solver solver;
53 Clock t0, t3, refine_clk;
55 float *x = (
float*)(xp->
b);
56 float *b = (
float*)(bp->
b);
59 float eps, normb, normr;
60 float berr, last_berr;
64 memset( &solver, 0,
sizeof(
struct s_solver) );
67 if ( !(pastix_data->
steps & STEP_NUMFACT) ) {
68 fprintf(stderr,
"pastix_task_refine: Simple refinement cannot be applied without preconditionner\n" );
72 n = pastix_data->
bcsc->n;
78 fprintf(stdout, OUT_ITERREFINE_PIVOT);
80 r = (
float *)solver.malloc(n *
sizeof(
float));
81 dx = (
float *)solver.malloc(n *
sizeof(
float));
83 clockInit(refine_clk);
84 clockStart(refine_clk);
86 normb = solver.norm( pastix_data, n, b );
94 sb = solver.malloc( n *
sizeof(
float) );
101 solver.copy( pastix_data, n, b, r );
110 normr = solver.norm( pastix_data, n, r );
111 berr = normr / normb;
115 last_berr = 3 * berr;
120 ( pastix_data->
procnum == 0 ) ) {
121 solver.output_oneiter( t0, t3, berr, iter );
126 if ( (iter < itermax) &&
128 (berr <= (last_berr / 2.)) )
133 solver.copy( pastix_data, n, r, dx );
134 solver.spsv( pastix_data, dx, sb );
137 solver.axpy( pastix_data, n, 1.0, dx, x );
148 clockStop(refine_clk);
150 solver.output_final( pastix_data, berr, iter, refine_clk, x, x );