Hello,
When solving a linear system Ax=b, the first step is assigning values to
matrix A. In my program, the subroutine PETSCSOLVE, which is used to slove Ax=b
with PETSc, gets the CSR format matrix(values, columns, rowIndex) to set values
to PETSc Mat A.
The variables 'values'?'columns'?'rowIndex' belong to the main function.
They are used to represent a matrix in CSR format. The following table describes
the arrays in terms of the values, row, and column positions of the non-zero
elements in a sparse matrix.
values: A real or complex array that contains the non-zero elements of a
sparse matrix. The non-zero elements are mapped into the values
array using the row-major upper triangular storage mapping described
above.
columns: Element i of the integer array columns is the number of the column
that contains the i-th element in the values array.
rowIndex: Element j of the integer array rowIndex gives the index of the
element in the values array that is first non-zero element in a
row j.
codes:
---------Set Values to A From CSR
Format(values,rowIndex,columns)-------------------
!values:Non-Symmetric Matrix
ione = 1
do 10,II=Istart+1,Iend
!non-zero numbers of this row
rowNum=rowIndex(II+1)-rowIndex(II)
do 11,JJ=1,rowNum
!elemnt index of the values/columns
kValNn=rowIndex(II)+JJ-1
!column index of this element
nCol=columns(kValNn)-1
!Setdata:II-RowIndex,nCol-ColIndex
nRow=II-1
call
MatSetValues(A,ione,nRow,ione,nCol,values(kValNn),INSERT_VALUES,ierr)
11 continue
10 continue
--------------------------------------------------------------------------------------
As we can see, it has to loop a number of times because it can only set one
data per
time. And this leads to low efficiency.
So is there a better way to do this?
Thank you.
Jim
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120608/c3d62f2b/attachment-0001.html>