PETSc Problem with fgets
Barry Smith
bsmith at mcs.anl.gov
Fri May 12 07:59:14 CDT 2006
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