Actual source code: ex1f.F90

  1: !
  2: !  Simple PETSc Program to test setting error handlers from Fortran
  3: !
  4:       subroutine GenerateErr(line, ierr)

  6: #include <petsc/finclude/petscsys.h>
  7:         use petscsys
  8:         PetscErrorCode ierr
  9:         integer line

 11:         call PetscError(PETSC_COMM_SELF, 1, PETSC_ERROR_INITIAL, 'My error message')
 12:       end

 14:       subroutine MyErrHandler(comm, line, fun, file, n, p, mess, ctx, ierr)
 15:         use petscsysdef
 16:         integer line, n, p
 17:         PetscInt ctx
 18:         PetscErrorCode ierr
 19:         MPI_Comm comm
 20:         character*(*) fun, file, mess

 22:         write (6, *) 'My error handler ', mess
 23:         call flush (6)
 24:       end

 26:       program main
 27:         use petscsys
 28:         PetscErrorCode ierr
 29:         external MyErrHandler

 31:         PetscCallA(PetscInitialize(ierr))
 32:         PetscCallA(PetscPushErrorHandler(PetscTraceBackErrorHandler, PETSC_NULL_INTEGER, ierr))
 33:         PetscCallA(GenerateErr(__LINE__, ierr))
 34:         PetscCallA(PetscPushErrorHandler(MyErrHandler, PETSC_NULL_INTEGER, ierr))
 35:         PetscCallA(GenerateErr(__LINE__, ierr))
 36:         PetscCallA(PetscPushErrorHandler(PetscAbortErrorHandler, PETSC_NULL_INTEGER, ierr))
 37:         PetscCallA(GenerateErr(__LINE__, ierr))
 38:         PetscCallA(PetscFinalize(ierr))
 39:       end

 41: !
 42: !     These test fails on some systems randomly due to the Fortran and C output becoming mixed up,
 43: !     using a Fortran flush after the Fortran print* does not resolve the issue
 44: !
 45: !/*TEST
 46: !
 47: !   test:
 48: !     args: -error_output_stdout
 49: !     TODO: cannot fix
 50: !     filter:Error: grep -E "(My error handler|Operating system error: Cannot allocate memory)" | wc -l
 51: !
 52: !TEST*/