Actual source code: ex84f.F90

  1: #include <petsc/finclude/petscsys.h>
  2: ! Ensure matching C and Fortran constants (Fortran variant)
  3: program ex84
  4:   use PETScSys
  5:   implicit none

  7:   interface
  8:     subroutine get_constants(pi, phi, sqrt2, e, max_real, min_real, machine_epsilon, sqrt_machine_epsilon, small, infinity, ninfinity) bind(c)
  9:       use PETScSys
 10:       implicit none(type, external)
 11:       PetscReal, intent(out) :: pi, phi, sqrt2, e, max_real, min_real, machine_epsilon, sqrt_machine_epsilon, small, infinity, ninfinity

 13:     end subroutine get_constants
 14:   end interface

 16:   PetscReal :: pi, phi, sqrt2, e, max_real, min_real, machine_epsilon, sqrt_machine_epsilon, small, infinity, ninfinity
 17:   PetscErrorCode :: ierr

 19:   PetscCallA(PetscInitialize(ierr))
 20:   call get_constants(pi, phi, sqrt2, e, max_real, min_real, machine_epsilon, sqrt_machine_epsilon, small, infinity, ninfinity)

 22:   PetscCheckA(pi == PETSC_PI, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_PI: value differs between C and Fortran')
 23:   PetscCheckA(phi == PETSC_PHI, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_PHI: value differs between C and Fortran')
 24:   PetscCheckA(sqrt2 == PETSC_SQRT2, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_SQRT2: value differs between C and Fortran')
 25:   PetscCheckA(e == PETSC_E, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_E: value differs between C and Fortran')
 26:   PetscCheckA(max_real == PETSC_MAX_REAL, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_MAX_REAL: value differs between C and Fortran')
 27:   PetscCheckA(min_real == PETSC_MIN_REAL, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_MIN_REAL: value differs between C and Fortran')
 28:   PetscCheckA(machine_epsilon == PETSC_MACHINE_EPSILON, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_MACHINE_EPSILON: value differs between C and Fortran')
 29:   PetscCheckA(sqrt_machine_epsilon == PETSC_SQRT_MACHINE_EPSILON, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_SQRT_MACHINE_EPSILON: value differs between C and Fortran')
 30:   PetscCheckA(small == PETSC_SMALL, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_SMALL: value differs between C and Fortran')
 31:   PetscCheckA(infinity == PETSC_INFINITY, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_INFINITY: value differs between C and Fortran')
 32:   PetscCheckA(ninfinity == PETSC_NINFINITY, MPI_COMM_WORLD, PETSC_ERR_PLIB, 'PETSC_NINFINITY: value differs between C and Fortran')
 33:   PetscCallA(PetscFinalize(ierr))
 34: end program ex84

 36: !/*TEST
 37: !
 38: !   build:
 39: !     depends: ex84.c
 40: !
 41: !   test:
 42: !     output_file: output/empty.out
 43: !
 44: !TEST*/