On 6/7/06, Evrim Dizemen <gudik at ae.metu.edu.tr> wrote: > > Hi all, > > First thanks for your comments. I still have the same problem but i > agree with you all that reading a matrix from a file is not parallel > programming. So i wonder if you can recommend an efficient and faster > way to read a 30000x30000 sparse matrix where i got those values from my > fortran code on aeroacoustics similation. I tried calling MatSetValues > as i attached below. I found that way from the ex11f.F in the matrix > examples and not sure if it is appropriate for my situation. > > ! do, i=1,n > ! do, j=1,n > ! value=Aval(i,j) > ! if(value .ne. 0)then > ! l=i-1 > ! m=j-1 > ! call MatSetValues(A,1,l,1,m,value,INSERT_VALUES,ierr) > ! endif > ! enddo > ! enddo > > Thanks soooooo much
1) You should set an entire row at a time at least, not a single value 2) You need to preallocate the matrix for good performance: http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html 3) You are here setting all values from one process. You should do as Randy suggests and set only the values which are owned by each process. 4) I would consult an example, such as: http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/ksp/ksp/examples/tutorials/ex2.c.html Matt EVRIM > -- "Failure has a thousand explanations. Success doesn't need one" -- Sir Alec Guiness -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20060607/a8041122/attachment.htm>
