ESMF_VMUTest Program

Uses

  • program~~esmf_vmutest~2~~UsesGraph program~esmf_vmutest~2 ESMF_VMUTest module~esmf ESMF program~esmf_vmutest~2->module~esmf module~esmf_testmod ESMF_TestMod program~esmf_vmutest~2->module~esmf_testmod module~esmf_vmsubrs_umi ESMF_VMSubrs_UMI program~esmf_vmutest~2->module~esmf_vmsubrs_umi

Calls

program~~esmf_vmutest~2~~CallsGraph program~esmf_vmutest~2 ESMF_VMUTest interface~esmf_vmget ESMF_VMGet program~esmf_vmutest~2->interface~esmf_vmget mpi_init mpi_init program~esmf_vmutest~2->mpi_init proc~esmf_finalize ESMF_Finalize program~esmf_vmutest~2->proc~esmf_finalize proc~esmf_test ESMF_Test program~esmf_vmutest~2->proc~esmf_test proc~esmf_testend ESMF_TestEnd program~esmf_vmutest~2->proc~esmf_testend proc~esmf_teststart ESMF_TestStart program~esmf_vmutest~2->proc~esmf_teststart proc~esmf_vmgetglobal ESMF_VMGetGlobal program~esmf_vmutest~2->proc~esmf_vmgetglobal proc~esmf_vmprint ESMF_VMPrint program~esmf_vmutest~2->proc~esmf_vmprint proc~esmf_vmgetdefault ESMF_VMGetDefault interface~esmf_vmget->proc~esmf_vmgetdefault proc~esmf_vmgetpetspecific ESMF_VMGetPetSpecific interface~esmf_vmget->proc~esmf_vmgetpetspecific c_esmc_getcompliancechecktrace c_esmc_getcompliancechecktrace proc~esmf_finalize->c_esmc_getcompliancechecktrace proc~esmf_calendarfinalize ESMF_CalendarFinalize proc~esmf_finalize->proc~esmf_calendarfinalize proc~esmf_logfinalize ESMF_LogFinalize proc~esmf_finalize->proc~esmf_logfinalize proc~esmf_logflush ESMF_LogFlush proc~esmf_finalize->proc~esmf_logflush proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_finalize->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_finalize->proc~esmf_logwrite proc~esmf_traceclose ESMF_TraceClose proc~esmf_finalize->proc~esmf_traceclose proc~esmf_vmabort ESMF_VMAbort proc~esmf_finalize->proc~esmf_vmabort proc~esmf_vmfinalize ESMF_VMFinalize proc~esmf_finalize->proc~esmf_vmfinalize proc~esmf_test->proc~esmf_logwrite proc~esmf_testend->proc~esmf_finalize proc~esmf_testend->proc~esmf_logwrite proc~esmf_teststart->interface~esmf_vmget proc~esmf_initialize ESMF_Initialize proc~esmf_teststart->proc~esmf_initialize proc~esmf_logset ESMF_LogSet proc~esmf_teststart->proc~esmf_logset proc~esmf_teststart->proc~esmf_logwrite c_esmc_vmprint c_esmc_vmprint proc~esmf_vmprint->c_esmc_vmprint proc~esmf_imerr ESMF_IMErr proc~esmf_vmprint->proc~esmf_imerr proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_vmprint->proc~esmf_logfounderror proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_vmprint->proc~esmf_utiliounitflush proc~esmf_vmgetinit ESMF_VMGetInit proc~esmf_vmprint->proc~esmf_vmgetinit

Variables

Type Attributes Name Initial
character(len=*), parameter :: version = '$Id$'
integer :: ierr

Source Code

      program ESMF_VMUTest

!------------------------------------------------------------------------------
 

!==============================================================================
!BOP
! !PROGRAM: ESMF_VMTest - This unit test file verifies VM methods.
!
! !DESCRIPTION:
!
! The code in this file drives F90 VM unit tests.
! The companion file ESMF\_VM.F90 contains the definitions for the
! VM methods.
!
!-----------------------------------------------------------------------------
! !USES:
      use ESMF_TestMod     ! test methods
      use ESMF

      use ESMF_VMSubrs_UMI ! VM specific subroutines

      implicit none

#ifndef ESMF_MPIUNI           
      integer:: ierr
#endif

!------------------------------------------------------------------------------
! The following line turns the CVS identifier string into a printable variable.
      character(*), parameter :: version = &
      '$Id$'
!------------------------------------------------------------------------------

!-------------------------------------------------------------------------------
! The unit tests are divided into Sanity and Exhaustive. The Sanity tests are
! always run. When the environment variable, EXHAUSTIVE, is set to ON then 
! the EXHAUSTIVE and sanity tests both run. If the EXHAUSTIVE variable is set
! to OFF, then only the sanity unit tests.
! Special strings (Non-exhaustive and exhaustive) have been
! added to allow a script to count the number and types of unit tests.
!------------------------------------------------------------------------------- 

      ! testing that VM is o.k. with user initializing MPI
#ifndef ESMF_MPIUNI     
      call MPI_Init(ierr)
      print *, "The user code called MPI_Init() and does IO before ESMF_Initialize() is called"
#else
      print *, "This test is meaningless in MPIUNI mode!"
#endif
  
      call ESMF_TestStart(ESMF_SRCLINE, rc=rc)
      if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)

      !------------------------------------------------------------------------
      !NEX_UTest
      write(failMsg, *) "Did not return ESMF_SUCCESS"
      write(name, *) "VM Get Global Test"
      call ESMF_VMGetGlobal(vm, rc=rc)
      call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)

      !------------------------------------------------------------------------
      !NEX_UTest
      write(failMsg, *) "Did not return ESMF_SUCCESS"
      write(name, *) "VM Get Test"
      call ESMF_VMGet(vm, petCount=npets, rc=rc)
      call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)

      !------------------------------------------------------------------------
      !NEX_UTest
      write(failMsg, *) "Did not return ESMF_SUCCESS"
      write(name, *) "VM print Test"
      call ESMF_VMPrint(vm, rc=rc)
      call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)

#ifdef ESMF_TESTEXHAUSTIVE

      !------------------------------------------------------------------------
      !EX_UTest
      write(failMsg, *) "Did not return ESMF_SUCCESS"
      write(name, *) "VM Get Test"
      call ESMF_VMGet(vm, localPet=localPet, petCount=npets, rc=rc)
      call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)


      !------------------------------------------------------------------------
      ! allocate data arrays

      nsize = 2
      allocate(array1(nsize))
      allocate(farray1(nsize))
      allocate(f4array1(nsize))

      allocate(array3(nsize))
      allocate(farray3(nsize))
      allocate(f4array3(nsize))

      allocate(array3_soln(nsize))
      allocate(farray3_soln(nsize))
      allocate(f4array3_soln(nsize))

      ! prepare data array1, farray1, f4array1
      do i=1, nsize
        array1(i) = localPet * 100 + i
        farray1(i)= real(array1(i), ESMF_KIND_R8)
        f4array1(i)=real(farray1(i), ESMF_KIND_R4)
      enddo

      ! Populate array2
      allocate(array2(nsize,npets))
      allocate(farray2(nsize,npets))
      allocate(f4array2(nsize,npets))
      do j=1, npets 
        do i=1, nsize
          array2(i,j) = (j-1) * 100 + i
          farray2(i,j) = real(array2(i,j), ESMF_KIND_R8)
          f4array2(i,j) = real(farray2(i,j), ESMF_KIND_R4)
        enddo
      enddo

      call test_AllFullReduce_sum
      call test_allReduce_sum

      call test_AllFullReduce_min
      call test_AllReduce_min

      call test_AllFullReduce_max
      call test_AllReduce_max

      !------------------------------------------------------------------------
      ! deallocate data arrays
      
      deallocate(array1)
      deallocate(farray1)
      deallocate(f4array1)

      deallocate(array3)
      deallocate(farray3)
      deallocate(f4array3)

      deallocate(array3_soln)
      deallocate(farray3_soln)
      deallocate(f4array3_soln)

      deallocate(array2)
      deallocate(farray2)
      deallocate(f4array2)

#endif
      call ESMF_TestEnd(ESMF_SRCLINE)

      end program ESMF_VMUTest