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