PETSc Problem with fgets
Joshua L. Adelman
jadelman at OCF.Berkeley.EDU
Fri May 12 13:38:22 CDT 2006
Just to clarify, it appears from the documentation that this causes
several processors to get the same line from a file. If I just want
to have a single processor get a line and then parse that to some
variables within a struct, it would seem like I don't need all of my
processors reading the line.
Would I just use PETSC_WORLD_SELF in the PetscFOpen() command to have
a single processor open the file, and then use _SELF again in the
synchronized fgets to have a single processor take care of retrieving
the line?
Thanks again for your help.
Josh
On May 12, 2006, at 11:23 AM, Barry Smith wrote:
>
> Stupid me, I don't know my own code.
>
> You can use PetscSynchronizedFGets() exactly for this purpose.
>
> Barry
>
> I have updated the manual page for PetscFOpen() to seealso:
> PetscSynchronizedFGets()
>
>
> On Fri, 12 May 2006, Barry Smith wrote:
>
>>
>> Joshua,
>>
>> PetscFOpen() only produces a valid fd on process 0. Thus fgets()
>> can only be used on process 0. It is crashing on process 1 because
>> fd is garbage there.
>>
>> You need to MPI_Scatter the data to the other processes. There is
>> no PetscFGets(), though come to think of it there should be! I
>> will write
>> one and send it to you.
>>
>> Barry
>>
>>
>>
>> On Thu, 11 May 2006, Joshua Adelman wrote:
>>
>>> I am trying to read some parameters into my PETSc simulation
>>> using fgets, and am getting a strange error. It appears that
>>> fgets and sscanf are working since the proper values are read
>>> into the simulation, but it throws an error anyways. This problem
>>> only arises when I am using the parallel version of the code
>>> (i.e. setting -n in mpiexec to a value greater than 1). Basically
>>> if I comment everything out and then start uncommenting one line
>>> at a time, the error appears once I've uncommented the line with
>>> fgets. One strange thing to note is that the error happens after
>>> the program has already finished executing the function where the
>>> problem is. Here's a snippet of the code that seems to be causing
>>> the problem:
>>> PetscErrorCode DataReadParams(SimData *sdata) {
>>> int rank, size;
>>> PetscErrorCode ierr;
>>> int i;
>>> FILE *fd;
>>> char str[256];
>>> char line[100];
>>> int max = 100;
>>> PetscFunctionBegin;
>>>
>>> ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size); CHKERRQ(ierr);
>>> ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); CHKERRQ(ierr);
>>>
>>> /* Read data from files */
>>> sprintf(str,"%s%s",sdata->simname,".param");
>>> ierr = PetscFOpen(PETSC_COMM_WORLD,str,"r",&fd); CHKERRQ(ierr);
>>> if (!rank && !fd) {
>>> SETERRQ1(PETSC_ERR_FILE_OPEN,"Cannot open %s\n",str);
>>> }
>>> // PetscPrintf(PETSC_COMM_WORLD,"Opening file %s\n",str);
>>> fgets(line,max,fd);
>>> sscanf(line,"%d",&sdata->NP);
>>> The error that is kicked out is:
>>> [1]PETSC ERROR: Caught signal number 10 BUS: Bus Error, possibly
>>> illegal memory access
>>> [1]PETSC ERROR: Try option -start_in_debugger or -
>>> on_error_attach_debugger
>>> [1]PETSC ERROR: or try http://valgrind.org on linux to find
>>> memory corruption errors
>>> [1]PETSC ERROR: likely location of problem given in stack below
>>> [1]PETSC ERROR: --------------- Stack Frames ---------------
>>> [1]PETSC ERROR: Note: The EXACT line numbers in the stack are not
>>> available,
>>> [1]PETSC ERROR: INSTEAD the line number of the start of the
>>> function
>>> [1]PETSC ERROR: is given.
>>> [1]PETSC ERROR: [1] DataReadParams line 23 datareadparams.c
>>> [1]PETSC ERROR: [1] SimInit line 19 siminit.c
>>> [1]PETSC ERROR: --------------------------------------------
>>> [1]PETSC ERROR: User provided function() line 0 in unknown
>>> directory unknown file
>>> [1]PETSC ERROR: Signal received!
>>> [1]PETSC ERROR: !
>>> Any insight would be most appreciated.
>>> Josh
------------------------------------------------------------------------
------------------------------
Joshua L. Adelman
Biophysics Graduate Group Lab: 510.643.2159
218 Wellman Hall Fax: 510.642.7428
University of California, Berkeley http://www.ocf.berkeley.edu/
~jadelman
Berkeley, CA 94720 USA jadelman at ocf.berkeley.edu
------------------------------------------------------------------------
------------------------------
More information about the petsc-users
mailing list