magma_int_t magma_c_applyprecond( magma_c_sparse_matrix A, magma_c_vector b, magma_c_vector *x, magma_c_preconditioner *precond ) { if( precond->solver == Magma_JACOBI ){ magma_cjacobi_diagscal( A.num_rows, precond->d.val, b.val, x->val ); return MAGMA_SUCCESS; } else if( precond->solver == Magma_PASTIX ){ magma_capplypastix( b, x, precond ); return MAGMA_SUCCESS; } else if( precond->solver == Magma_ILU ){ magma_c_vector tmp; magma_c_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_C_MAKE(1.0, 0.0) ); // magma_capplycuilu_l( b, &tmp, precond ); // magma_capplycuilu_r( tmp, x, precond ); magma_c_vfree( &tmp ); return MAGMA_SUCCESS; } else if( precond->solver == Magma_ICC ){ magma_c_vector tmp; magma_c_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_C_MAKE(1.0, 0.0) ); // magma_ctrisv_l_nu( precond->L, b, &tmp ); // magma_ctrisv_r_nu( precond->L, tmp, x ); magma_c_vfree( &tmp ); return MAGMA_SUCCESS; } else{ printf( "error: preconditioner type not yet supported.\n" ); return MAGMA_ERR_NOT_SUPPORTED; } }
extern "C" magma_int_t magma_c_applyprecond( magma_c_sparse_matrix A, magma_c_vector b, magma_c_vector *x, magma_c_preconditioner *precond, magma_queue_t queue ) { // set queue for old dense routines magma_queue_t orig_queue; magmablasGetKernelStream( &orig_queue ); if ( precond->solver == Magma_JACOBI ) { magma_cjacobi_diagscal( A.num_rows, precond->d, b, x, queue ); } else if ( precond->solver == Magma_PASTIX ) { magma_capplypastix( b, x, precond, queue ); } else if ( precond->solver == Magma_ILU ) { magma_c_vector tmp; magma_c_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_C_ZERO, queue ); magma_c_vfree( &tmp, queue ); } else if ( precond->solver == Magma_ICC ) { magma_c_vector tmp; magma_c_vinit( &tmp, Magma_DEV, A.num_rows, MAGMA_C_ZERO, queue ); magma_c_vfree( &tmp, queue ); } else if ( precond->solver == Magma_NONE ) { magma_ccopy( b.num_rows, b.dval, 1, x->dval, 1 ); // x = b } else { printf( "error: preconditioner type not yet supported.\n" ); magmablasSetKernelStream( orig_queue ); return MAGMA_ERR_NOT_SUPPORTED; } magmablasSetKernelStream( orig_queue ); return MAGMA_SUCCESS; }