[petsc-users] Reading in a matrix from ASCII file

Storm Weiner stormweiner at berkeley.edu
Thu Oct 5 17:43:54 CDT 2017


Ahh of course.  Thanks!

I had switched to PetscViewerASCIIOpen and then back to
PetscViewerBinaryOpen and forgot to include the file mode.

I appreciate the rapid and useful response!

-Storm

On Thu, Oct 5, 2017 at 3:21 PM, Jed Brown <jed at jedbrown.org> wrote:

> Please always use "reply-all" so that your messages go to the list.
> This is standard mailing list etiquette.  It is important to preserve
> threading for people who find this discussion later and so that we do
> not waste our time re-answering the same questions that have already
> been answered in private side-conversations.  You'll likely get an
> answer faster that way too.
>
>
> Storm Weiner <stormweiner at berkeley.edu> writes:
>
> > Thanks,
> >
> > I decided to use one of the example matrices provided on the ftp to start
> > with but now I have another issue.
> > I tried to port /mat/ex1.c to f90 but when I do
> >
> >  CALL PetscViewerBinaryOpen(PETSC_COMM_WORLD,DataFile,fd,ierr)
> >
> > I get a bad file descriptor error.
> >
> > A simple open() close() check immediately before PetscViewerBinaryOpen()
> > passes, so I know I'm using an appropriate file path.
> >
> > Furthermore, the unaltered ex1.c works fine with the file I'm attempting.
> > Is there something special about petsc+f90 file descriptors, or did I
> mess
> > up somewhere along the way?
>
> No, but Fortran doesn't warn when you pass the wrong number of
> parameters.  You need this.
>
> diff --git i/ex1.F90 w/ex1.F90
> index 049e6ae..311d6f0 100644
> --- i/ex1.F90
> +++ w/ex1.F90
> @@ -25,7 +25,7 @@
>        close(10)
>
>        write(*,*) "before viewer create"
> -      CALL PetscViewerBinaryOpen(PETSC_COMM_WORLD,DataFile,fd,ierr);
> CHKERRA(ierr)
> +      CALL PetscViewerBinaryOpen(PETSC_COMM_WORLD,DataFile,FILE_MODE_
> READ,fd,ierr);CHKERRA(ierr)
>
>
>        !! Load the matrix; then destroy the viewer.
>
>
> > The complete error message is:
> >
> >
> > $ ./ex1 -f $PWD/testmat
> >  before initialize
> >  DataFile=
> >  /usr/workspace/wsa/weiner6/MPI_sandbox/Minimal/testmat
> >
> >
> >  before test open/close
> >  before viewer create
> > [0]PETSC ERROR:
> > ------------------------------------------------------------------------
> > [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation,
> > probably memory access out of range
> > [0]PETSC ERROR: Try option -start_in_debugger or
> -on_error_attach_debugger
> > [0]PETSC ERROR: or see
> > http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
> > [0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac
> OS X
> > to find memory corruption errors
> > [0]PETSC ERROR: likely location of problem given in stack below
> > [0]PETSC ERROR: ---------------------  Stack Frames
> > ------------------------------------
> > [0]PETSC ERROR: Note: The EXACT line numbers in the stack are not
> available,
> > [0]PETSC ERROR:       INSTEAD the line number of the start of the
> function
> > [0]PETSC ERROR:       is given.
> > [0]PETSC ERROR: --------------------- Error Message
> > --------------------------------------------------------------
> > [0]PETSC ERROR: Signal received
> > [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
> for
> > trouble shooting.
> > [0]PETSC ERROR: Petsc Release Version 3.8.0, unknown
> > [0]PETSC ERROR: ./ex1 on a arch-linux2-c-debug named borax2 by weiner6
> Thu
> > Oct  5 14:48:33 2017
> > [0]PETSC ERROR: Configure options --with-scalar-type=complex
> > --with-valgrind-dir=/usr/bin/
> > [0]PETSC ERROR: #1 User provided function() line 0 in  unknown file
> > application called MPI_Abort(MPI_COMM_WORLD, 59) - process 0
> > [unset]: write_line error; fd=-1 buf=:cmd=abort exitcode=59
> > :
> > system msg for write_line failure : Bad file descriptor
> >
> > -Storm
> >
> > P.S.  Should I be using reply-all to in these email threads?
> >
> > On Thu, Oct 5, 2017 at 2:10 PM, Jed Brown <jed at jedbrown.org> wrote:
> >
> >> http://www.mcs.anl.gov/petsc/documentation/faq.html#sparse-
> >> matrix-ascii-format
> >>
> >> Better, read it using Python on MATLAB and write it (using the provided
> >> PETSc scripts) in PETSc binary format.  Parallel IO with ASCII files is
> >> a dead end.
> >>
> >> Storm Weiner <stormweiner at berkeley.edu> writes:
> >>
> >> > Hey there,
> >> >
> >> > I'm working through some basic examples, and I want to read in a test
> >> > matrix I have stored in a (row, column, value) ASCII file.   How can I
> >> read
> >> > this in using PETSc?
> >> >
> >> >
> >> > I found the routine PetscViewerASCIIOpen and PetscViewerASCIIRead  but
> >> I'm
> >> > not sure how to tell it that what I have is actually a matrix.  In
> this
> >> > example, I know the matrix, so I can specify how many entries to read,
> >> but
> >> > is there a way to just read "the whole file"?
> >> >
> >> > What's the preferred PETSc way to do this?
> >> >
> >> > I'm using F90 by the way.
> >> >
> >> >
> >> > -Storm
> >>
> >        Program Main
> >        use PETSCMAT
> >        implicit NONE
> > #include <petsc/finclude/petscmat.h>
> >
> >
> >       Mat             ::  A
> >       PetscViewer     ::  fd
> >       character(100)   ::  DataFile    ! input file name
> >       IS              ::  isrow,iscol            ! row and column
> permutations
> >       PetscErrorCode  ::  ierr
> >       MatOrderingType :: rtype = MATORDERINGRCM
> >       PetscBool       :: flg,PetscPreLoad = PETSC_FALSE
> >
> >       write(*,*) "before initialize"
> >       call PETSCinitialize(PETSC_NULL_CHARACTER,ierr)
> >
> >       call PetscOptionsGetString(petsc_NULL_OPTIONS,PETSC_NULL_
> CHARACTER,"-f",DataFile,flg,ierr)
> >       CHKERRA(ierr)
> >       write(*,*) "DataFile=",DataFile
> >      !!Open ascii file.  Note that we use FILE_MODE_READ to indicate
> >      !!reading from this file.
> >       write(*,*) "before test open/close"
> >       open(10, FILE=DataFile)
> >       close(10)
> >
> >       write(*,*) "before viewer create"
> >       CALL PetscViewerBinaryOpen(PETSC_COMM_WORLD,DataFile,fd,ierr);
> CHKERRA(ierr)
> >
> >
> >       !! Load the matrix; then destroy the viewer.
> >       write(*,*) "before matcreate"
> >       call  MatCreate(PETSC_COMM_WORLD,A,ierr);CHKERRA(ierr);
> >       write(*,*) "before matsettype"
> >       call  MatSetType(A,MATSEQAIJ,ierr);CHKERRA(ierr);
> >       write(*,*) "before matload"
> >       call  MatLoad(A,fd,ierr);CHKERRA(ierr);
> >       write(*,*) "before destroyviewer"
> >       call  PetscViewerDestroy(fd,ierr);CHKERRA(ierr);
> >
> >
> >
> >       call  MatGetOrdering(A,rtype,isrow,iscol,ierr);CHKERRA(ierr);
> >
> >
> >      !! All PETSc objects should be destroyed when they are no longer
> needed.
> >       call MatDestroy(A,ierr);CHKERRA(ierr);
> >       call ISDestroy(isrow,ierr);CHKERRA(ierr);
> >       call ISDestroy(iscol,ierr);CHKERRA(ierr);
> >       write(*,*) isrow,iscol
> >       call PetscFinalize(ierr)
> >       stop
> >       end program Main
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171005/6c9e98c6/attachment-0001.html>


More information about the petsc-users mailing list