petsc I/O

Barry Smith bsmith at mcs.anl.gov
Fri Sep 15 20:26:17 CDT 2006


  Matt,

   You need to if (I am then correct process) I put in and ONLY access the value
on the process that owns it and then have ONLY that one
call PetscSynchronizedFPrintf().

  Barry


On Fri, 15 Sep 2006, Matt Funk wrote:

> Hi
> 
> The value are not local in general. So, true, it would entail communication. 
> 
> I just used MPI calls to do what i needed it to do. I was just wondering if 
> PETSc had that functionality, that's all.
> 
> Also before i wrote the email, i did as Barry suggested by using the 
> PetscSynchronizedPrintf() after getting the array via VecGetArray().
> However, for me that hung the program (at least i believe this was the reason 
> the program hung). Because for example, say i want to print (array-wise 
> speaking) element 144,144,144. This element resides on one processor only. I 
> use the DA object and hence use global(!!) indices to access the array. So 
> that means the program looks for element 144,144,144 on all processor (since, 
> as far as i understand it, PetscSynchronizedPrintf() gets the requested value 
> from all processors and then prints it). However, this will mean that it is 
> out of the scope of the local portion of the global vector for all processors 
> except one (that is the processors on which this point lives). So i believe 
> that was the reason it crashed. 
> 
> thanks
> mat
> 
> 
> On Friday 15 September 2006 10:44, Matthew Knepley wrote:
> > On 9/15/06, Matt Funk <mafunk at nmsu.edu> wrote:
> > > Hi,
> > >
> > > thanks for the answers first of all. I have another question though ...
> > > :)
> > >
> > > Say, i want to print a specific element from a PETSc global vector. Is
> > > there a
> > > function (PetscSunchFPrintF does not do this i believe) to which i simply
> > > pass the file handle, communicator, the vector and the element and it
> > > writes
> > > the value to the file?
> >
> > No, this function does not currently exist. Are these elements local? If
> > not, it
> > would entail communication. If so, you could use VecGetArray() and then
> > just index in. Is that sufficient?
> >
> >   thanks,
> >
> >    Matt
> >
> > thanks
> >
> > > mat
> > >
> > > On Wednesday 13 September 2006 17:13, Berend van Wachem wrote:
> > > > Hi Matt,
> > > >
> > > > > i need to read in an input file. So to open my file i use PETSCFOpen
> > > > > which works fine. But then my problems begin ... :)
> > > > >
> > > > > I guess i need to tell only the first proc in the communicator to
> > >
> > > fscan.
> > >
> > > > > But is there a PETSC function that returns me the processor id?
> > > > > And when i read the parameters in on the first proc i need to
> > >
> > > broadcast
> > >
> > > > > them to the other procs. Does PETSC have anything for this?
> > > >
> > > > For both issues you can use standard MPI:
> > > >
> > > > to get the processor ID:
> > > > ierr=MPI_Comm_rank(MPI_Comm Communicator,int *rank);
> > > >
> > > > to broadcast information:
> > > > ierr=MPI_Bcast ( void *buffer, int count, MPI_Datatype datatype, int
> > > > root,  MPI_Comm comm )
> > > >
> > > > If possible, I would recommend you to use the PetscViewer interface for
> > > > your IO handling; it is very easy.
> > > >
> > > > Good luck,
> > > >
> > > > Berend.
> 
> 




More information about the petsc-users mailing list