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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*
-- MAGMA (version 2.9.0) --
Univ. of Tennessee, Knoxville
Univ. of California, Berkeley
Univ. of Colorado, Denver
@date January 2025
@precisions normal z -> s d c
@author Hartwig Anzt
*/
#include "magmasparse_internal.h"
/**
Purpose
-------
Passes a vector to MAGMA.
Arguments
---------
@param[in]
m magma_int_t
number of rows
@param[in]
n magma_int_t
number of columns
@param[in]
val magmaDoubleComplex*
array containing vector entries
@param[out]
v magma_z_matrix*
magma vector
@param[in]
queue magma_queue_t
Queue to execute in.
@ingroup magmasparse_zaux
********************************************************************/
extern "C"
magma_int_t
magma_zvset(
magma_int_t m, magma_int_t n,
magmaDoubleComplex *val,
magma_z_matrix *v,
magma_queue_t queue )
{
// make sure the target structure is empty
magma_zmfree( v, queue );
v->num_rows = m;
v->num_cols = n;
v->nnz = m*n;
v->memory_location = Magma_CPU;
v->val = val;
v->major = MagmaColMajor;
v->storage_type = Magma_DENSE;
v->ownership = MagmaFalse;
return MAGMA_SUCCESS;
}
/**
Purpose
-------
Passes a MAGMA vector back. This function requires the array val to be
already allocated (of size m x n).
Arguments
---------
@param[in]
v magma_z_matrix
magma vector
@param[out]
m magma_int_t
number of rows
@param[out]
n magma_int_t
number of columns
@param[out]
val magmaDoubleComplex*
array of size m x n the vector entries are copied into
@param[in]
queue magma_queue_t
Queue to execute in.
@ingroup magmasparse_zaux
********************************************************************/
extern "C"
magma_int_t
magma_zvcopy(
magma_z_matrix v,
magma_int_t *m, magma_int_t *n,
magmaDoubleComplex *val,
magma_queue_t queue )
{
magma_z_matrix v_CPU={Magma_CSR};
magma_int_t info =0;
if ( v.memory_location == Magma_CPU ) {
*m = v.num_rows;
*n = v.num_cols;
for (magma_int_t i=0; i<v.num_rows*v.num_cols; i++) {
val[i] = v.val[i];
}
} else {
CHECK( magma_zmtransfer( v, &v_CPU, v.memory_location, Magma_CPU, queue ));
CHECK( magma_zvcopy( v_CPU, m, n, val, queue ));
}
cleanup:
return info;
}
|