1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/*
-- MAGMA (version 2.9.0) --
Univ. of Tennessee, Knoxville
Univ. of California, Berkeley
Univ. of Colorado, Denver
@date January 2025
@author Hartwig Anzt
@generated from sparse/src/zcustomic.cpp, normal z -> c, Wed Jan 22 14:42:43 2025
*/
#include "magmasparse_internal.h"
#include "../blas/magma_trisolve.h"
#define COMPLEX
/* For hipSPARSE, they use a separate complex type than for hipBLAS */
#ifdef MAGMA_HAVE_HIP
#define hipblasComplex hipFloatComplex
#endif
/**
Purpose
-------
Reads in an Incomplete Cholesky preconditioner.
Arguments
---------
@param[in]
A magma_c_matrix
input matrix A
@param[in]
b magma_c_matrix
input RHS b
@param[in,out]
precond magma_c_preconditioner*
preconditioner parameters
@param[in]
queue magma_queue_t
Queue to execute in.
@ingroup magmasparse_cgepr
********************************************************************/
extern "C"
magma_int_t
magma_ccustomicsetup(
magma_c_matrix A,
magma_c_matrix b,
magma_c_preconditioner *precond,
magma_queue_t queue )
{
magma_int_t info = 0;
magma_c_matrix hA={Magma_CSR};
char preconditionermatrix[255];
snprintf( preconditionermatrix, sizeof(preconditionermatrix),
"/Users/hanzt0114cl306/work/matrices/matrices/ICT.mtx" );
CHECK( magma_c_csr_mtx( &hA, preconditionermatrix , queue) );
// for CUSPARSE
CHECK( magma_cmtransfer( hA, &precond->M, Magma_CPU, Magma_DEV , queue ));
// copy the matrix to precond->L and (transposed) to precond->U
CHECK( magma_cmtransfer(precond->M, &(precond->L), Magma_DEV, Magma_DEV, queue ));
CHECK( magma_cmtranspose( precond->L, &(precond->U), queue ));
// extract the diagonal of L into precond->d
CHECK( magma_cjacobisetup_diagscal( precond->L, &precond->d, queue ));
CHECK( magma_cvinit( &precond->work1, Magma_DEV, hA.num_rows, 1, MAGMA_C_ZERO, queue ));
// extract the diagonal of U into precond->d2
CHECK( magma_cjacobisetup_diagscal( precond->U, &precond->d2, queue ));
CHECK( magma_cvinit( &precond->work2, Magma_DEV, hA.num_rows, 1, MAGMA_C_ZERO, queue ));
CHECK(magma_ctrisolve_analysis(precond->M, &precond->cuinfoL, false, false, false, queue));
CHECK(magma_ctrisolve_analysis(precond->M, &precond->cuinfoU, false, false, true, queue));
cleanup:
magma_cmfree( &hA, queue );
return info;
}
|