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. > >
