Blame test/mpi/f08/init/baseenvf90.f90

Packit 0848f5
! -*- Mode: Fortran; -*-
Packit 0848f5
!
Packit 0848f5
!  (C) 2014 by Argonne National Laboratory.
Packit 0848f5
!      See COPYRIGHT in top-level directory.
Packit 0848f5
!
Packit 0848f5
       program main
Packit 0848f5
       use mpi_f08
Packit 0848f5
       integer ierr, provided, errs, rank, size
Packit 0848f5
       integer iv, isubv, qprovided
Packit 0848f5
       logical flag
Packit 0848f5
Packit 0848f5
       errs = 0
Packit 0848f5
       flag = .true.
Packit 0848f5
       call mpi_finalized( flag, ierr )
Packit 0848f5
       if (flag) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'Returned true for finalized before init'
Packit 0848f5
       endif
Packit 0848f5
       flag = .true.
Packit 0848f5
       call mpi_initialized( flag, ierr )
Packit 0848f5
       if (flag) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'Return true for initialized before init'
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       provided = -1
Packit 0848f5
       call mpi_init_thread( MPI_THREAD_MULTIPLE, provided, ierr )
Packit 0848f5
Packit 0848f5
       if (provided .ne. MPI_THREAD_MULTIPLE .and.  &
Packit 0848f5
      &     provided .ne. MPI_THREAD_SERIALIZED .and. &
Packit 0848f5
      &     provided .ne. MPI_THREAD_FUNNELED .and. &
Packit 0848f5
      &     provided .ne. MPI_THREAD_SINGLE) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, ' Unrecognized value for provided = ', provided
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       iv    = -1
Packit 0848f5
       isubv = -1
Packit 0848f5
       call mpi_get_version( iv, isubv, ierr )
Packit 0848f5
       if (iv .ne. MPI_VERSION .or. isubv .ne. MPI_SUBVERSION) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'Version in mpif.h and get_version do not agree'
Packit 0848f5
          print *, 'Version in mpif.h is ', MPI_VERSION, '.',  &
Packit 0848f5
      &              MPI_SUBVERSION
Packit 0848f5
          print *, 'Version in get_version is ', iv, '.', isubv
Packit 0848f5
       endif
Packit 0848f5
       if (iv .lt. 1 .or. iv .gt. 3) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'Version of MPI is invalid (=', iv, ')'
Packit 0848f5
       endif
Packit 0848f5
       if (isubv.lt.0 .or. isubv.gt.2) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'Subversion of MPI is invalid (=', isubv, ')'
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       call mpi_comm_rank( MPI_COMM_WORLD, rank, ierr )
Packit 0848f5
       call mpi_comm_size( MPI_COMM_WORLD, size, ierr )
Packit 0848f5
Packit 0848f5
       flag = .false.
Packit 0848f5
       call mpi_is_thread_main( flag, ierr )
Packit 0848f5
       if (.not.flag) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'is_thread_main returned false for main thread'
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       call mpi_query_thread( qprovided, ierr )
Packit 0848f5
       if (qprovided .ne. provided) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *,'query thread and init thread disagree on'// &
Packit 0848f5
      &           ' thread level'
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       call mpi_finalize( ierr )
Packit 0848f5
       flag = .false.
Packit 0848f5
       call mpi_finalized( flag, ierr )
Packit 0848f5
       if (.not. flag) then
Packit 0848f5
          errs = errs + 1
Packit 0848f5
          print *, 'finalized returned false after finalize'
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       if (rank .eq. 0) then
Packit 0848f5
          if (errs .eq. 0) then
Packit 0848f5
             print *, ' No Errors'
Packit 0848f5
          else
Packit 0848f5
             print *, ' Found ', errs, ' errors'
Packit 0848f5
          endif
Packit 0848f5
       endif
Packit 0848f5
Packit 0848f5
       end