extern "C" magma_int_t magma_c_precond( magma_c_sparse_matrix A, magma_c_vector b, magma_c_vector *x, magma_c_preconditioner *precond, magma_queue_t queue ) { // set up precond parameters as solver parameters magma_c_solver_par psolver_par; psolver_par.epsilon = precond->epsilon; psolver_par.maxiter = precond->maxiter; psolver_par.restart = precond->restart; psolver_par.verbose = 0; switch( precond->solver ) { case Magma_CG: magma_ccg_res( A, b, x, &psolver_par, queue );break; case Magma_BICGSTAB: magma_cbicgstab( A, b, x, &psolver_par, queue );break; case Magma_GMRES: magma_cgmres( A, b, x, &psolver_par, queue );break; case Magma_JACOBI: magma_cjacobi( A, b, x, &psolver_par, queue );break; case Magma_BAITER: magma_cbaiter( A, b, x, &psolver_par, queue );break; } return MAGMA_SUCCESS; }
magma_int_t magma_c_precond( magma_c_sparse_matrix A, magma_c_vector b, magma_c_vector *x, magma_c_preconditioner precond ) { // set up precond parameters as solver parameters magma_c_solver_par psolver_par; psolver_par.epsilon = precond.epsilon; psolver_par.maxiter = precond.maxiter; psolver_par.restart = precond.restart; if( precond.solver == Magma_CG ){ // printf( "start CG preconditioner with epsilon: %f and maxiter: %d: ", // psolver_par.epsilon, psolver_par.maxiter ); magma_ccg( A, b, x, &psolver_par ); // printf( "done.\n" ); return MAGMA_SUCCESS; } if( precond.solver == Magma_GMRES ){ // printf( "start GMRES preconditioner with epsilon: %f and maxiter: %d: ", // psolver_par.epsilon, psolver_par.maxiter ); magma_cgmres( A, b, x, &psolver_par ); // printf( "done.\n" ); return MAGMA_SUCCESS; } if( precond.solver == Magma_BICGSTAB ){ // printf( "start BICGSTAB preconditioner with epsilon: %f and maxiter: %d: ", // psolver_par.epsilon, psolver_par.maxiter ); magma_cbicgstab( A, b, x, &psolver_par ); // printf( "done.\n"); return MAGMA_SUCCESS; } if( precond.solver == Magma_JACOBI ){ // printf( "start JACOBI preconditioner with epsilon: %f and maxiter: %d: ", // psolver_par.epsilon, psolver_par.maxiter ); magma_cjacobi( A, b, x, &psolver_par ); // printf( "done.\n"); return MAGMA_SUCCESS; } if( precond.solver == Magma_BCSRLU ){ // printf( "start BCSRLU preconditioner with epsilon: %f and maxiter: %d: ", // psolver_par.epsilon, psolver_par.maxiter ); magma_cbcsrlu( A, b, x, &psolver_par ); // printf( "done.\n"); return MAGMA_SUCCESS; } else{ printf( "error: preconditioner type not yet supported.\n" ); return MAGMA_ERR_NOT_SUPPORTED; } }