Hi, I apologize in advance if I am confusing you or down right saying something that is wrong.
When I initially checked you code, it looks like CPU O is opening the file... but the rest of the CPUs try to read it aswell even though they havent opened(dont have a correct file pointer to the file) it yet... This would cause a segmentation fault. fgets is using the fd variable, wich in case of anything but CPU 0 are pointing to some garbage and not the file itself. With best regards, Shaman Mahmoudi ----- Original Message ----- From: "Joshua Adelman" <[email protected]> To: <petsc-users at mcs.anl.gov> Sent: Friday, May 12, 2006 12:54 AM Subject: PETSc Problem with fgets > 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 > ------------------------------------------------------------------------ > ------------------------------ > > >
