! ! Simple PETSc Program to test setting error handlers from Fortran ! subroutine GenerateErr(line, ierr) #include use petscsys PetscErrorCode ierr integer line call PetscError(PETSC_COMM_SELF, 1, PETSC_ERROR_INITIAL, 'My error message') end subroutine MyErrHandler(comm, line, fun, file, n, p, mess, ctx, ierr) use petscsysdef integer line, n, p PetscInt ctx PetscErrorCode ierr MPI_Comm comm character*(*) fun, file, mess write (6, *) 'My error handler ', mess call flush (6) end program main use petscsys PetscErrorCode ierr external MyErrHandler PetscCallA(PetscInitialize(ierr)) PetscCallA(PetscPushErrorHandler(PetscTraceBackErrorHandler, PETSC_NULL_INTEGER, ierr)) PetscCallA(GenerateErr(__LINE__, ierr)) PetscCallA(PetscPushErrorHandler(MyErrHandler, PETSC_NULL_INTEGER, ierr)) PetscCallA(GenerateErr(__LINE__, ierr)) PetscCallA(PetscPushErrorHandler(PetscAbortErrorHandler, PETSC_NULL_INTEGER, ierr)) PetscCallA(GenerateErr(__LINE__, ierr)) PetscCallA(PetscFinalize(ierr)) end ! ! These test fails on some systems randomly due to the Fortran and C output becoming mixed up, ! using a Fortran flush after the Fortran print* does not resolve the issue ! !/*TEST ! ! test: ! args: -error_output_stdout ! TODO: cannot fix ! filter:Error: grep -E "(My error handler|Operating system error: Cannot allocate memory)" | wc -l ! !TEST*/