[petsc-dev] PetscExceptionTry1

Barry Smith bsmith at mcs.anl.gov
Mon Feb 14 13:54:15 CST 2011


On Feb 14, 2011, at 1:48 PM, Jed Brown wrote:

> On Mon, Feb 14, 2011 at 20:43, Matthew Knepley <knepley at gmail.com> wrote:
> This code
> 
>   for(i = 0; i < 10000; ++i) {
>     std::ostringstream trial;
>     FILE              *fp;
> 
>     trial << "dft_" << std::setw(5) << std::setfill('0') << i << ".py";
>     //ierr = PetscExceptionTry1(PetscFOpen(PETSC_COMM_WORLD, trial.str().c_str(), "r", &fp), PETSC_ERR_FILE_OPEN);
>     ierr = PetscFOpen(PETSC_COMM_WORLD, trial.str().c_str(), "r", &fp);
>     if (ierr == PETSC_ERR_FILE_OPEN) break;
>     ierr = PetscFClose(PETSC_COMM_WORLD, fp);CHKERRQ(ierr);
>   }
> 
> produces the following printout
> 
> You need to PetscPushErrorHandler(PetscReturnErrorHandler,0);

  You could do that. But I think it is better to not generate an error at all by first checking if you can actually open the file before trying to open it.

  I found the exception stuff I put in PETSc was too clunky for almost anyone to use and feel it is better to reserve the PETSc error system for truly deadly unrecoverable errors.

   Barry





More information about the petsc-dev mailing list