ESMF_VMComponentUTest Program

Uses

  • program~~esmf_vmcomponentutest~~UsesGraph program~esmf_vmcomponentutest ESMF_VMComponentUTest module~esmf ESMF program~esmf_vmcomponentutest->module~esmf module~esmf_testmod ESMF_TestMod program~esmf_vmcomponentutest->module~esmf_testmod module~esmf_vmcomponentutest_gcomp_mod ESMF_VMComponentUTest_gcomp_mod program~esmf_vmcomponentutest->module~esmf_vmcomponentutest_gcomp_mod

Calls

program~~esmf_vmcomponentutest~~CallsGraph program~esmf_vmcomponentutest ESMF_VMComponentUTest esmf_gridcompsetservices esmf_gridcompsetservices program~esmf_vmcomponentutest->esmf_gridcompsetservices esmf_gridcompsetvm esmf_gridcompsetvm program~esmf_vmcomponentutest->esmf_gridcompsetvm interface~esmf_vmget ESMF_VMGet program~esmf_vmcomponentutest->interface~esmf_vmget proc~esmf_finalize ESMF_Finalize program~esmf_vmcomponentutest->proc~esmf_finalize proc~esmf_gridcompcreate ESMF_GridCompCreate program~esmf_vmcomponentutest->proc~esmf_gridcompcreate proc~esmf_gridcompdestroy ESMF_GridCompDestroy program~esmf_vmcomponentutest->proc~esmf_gridcompdestroy proc~esmf_gridcompfinalize ESMF_GridCompFinalize program~esmf_vmcomponentutest->proc~esmf_gridcompfinalize proc~esmf_gridcompget ESMF_GridCompGet program~esmf_vmcomponentutest->proc~esmf_gridcompget proc~esmf_gridcompinitialize ESMF_GridCompInitialize program~esmf_vmcomponentutest->proc~esmf_gridcompinitialize proc~esmf_gridcomprun ESMF_GridCompRun program~esmf_vmcomponentutest->proc~esmf_gridcomprun proc~esmf_gridcompsetvmstdredirect ESMF_GridCompSetVMStdRedirect program~esmf_vmcomponentutest->proc~esmf_gridcompsetvmstdredirect proc~esmf_test ESMF_Test program~esmf_vmcomponentutest->proc~esmf_test proc~esmf_testend ESMF_TestEnd program~esmf_vmcomponentutest->proc~esmf_testend proc~esmf_teststart ESMF_TestStart program~esmf_vmcomponentutest->proc~esmf_teststart proc~esmf_vmgetglobal ESMF_VMGetGlobal program~esmf_vmcomponentutest->proc~esmf_vmgetglobal proc~esmf_vmiscreated ESMF_VMIsCreated program~esmf_vmcomponentutest->proc~esmf_vmiscreated proc~esmf_vmlog ESMF_VMLog program~esmf_vmcomponentutest->proc~esmf_vmlog

Variables

Type Attributes Name Initial
character(len=*), parameter :: version = '$Id$'
character(len=40) :: compName
character(len=ESMF_MAXSTR) :: failMsg
character(len=ESMF_MAXSTR) :: name
integer :: i
integer :: iMax
integer :: j
integer :: jMax
integer :: loc_petCount
integer :: localPet
integer :: loop_rc
integer :: petCount
integer, allocatable :: petList(:)
integer :: rc
integer :: result = 0
logical :: isCreated
type(ESMF_GridComp) :: gcomp(1000)
type(ESMF_GridComp) :: gcomp2
type(ESMF_VM) :: vm
type(ESMF_VM) :: vm2

Source Code

program ESMF_VMComponentUTest

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

#include "ESMF_Macros.inc"

!==============================================================================
!BOP
! !PROGRAM: ESMF_VMComponentUTest - Unit test for VM/Component interaction
!
! !DESCRIPTION:
!
! The code in this file drives the F90 VM/Component test.
!
!-----------------------------------------------------------------------------
! !USES:
  use ESMF_TestMod     ! test methods
  use ESMF
  use ESMF_VMComponentUTest_gcomp_mod

  implicit none

!------------------------------------------------------------------------------
  ! The following line turns the CVS identifier string into a printable variable.
  character(*), parameter :: version = &
    '$Id$'
!------------------------------------------------------------------------------
  ! cumulative result: count failures; no failures equals "all pass"
  integer :: result = 0

  ! individual test failure message
  character(ESMF_MAXSTR) :: failMsg
  character(ESMF_MAXSTR) :: name

  ! local variables
  integer               :: i, j, iMax, jMax
  integer               :: rc, loop_rc, localPet, petCount, loc_petCount
  type(ESMF_VM)         :: vm, vm2
  type(ESMF_GridComp)   :: gcomp(1000), gcomp2
  logical               :: isCreated
  integer, allocatable  :: petList(:)
  character(len=40)     :: compName

!------------------------------------------------------------------------------
! 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
! Special strings (Non-exhaustive and exhaustive) have been
! added to allow a script to count the number and types of unit tests.
!------------------------------------------------------------------------------

  call ESMF_TestStart(ESMF_SRCLINE, rc=rc)
  if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)

  ! Get global VM and print info
  call ESMF_VMGetGlobal(vm, rc=rc)
  if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)
  call ESMF_VMGet(vm, petCount=petCount, localPet=localPet, rc=rc)
  if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)
  call ESMF_VMLog(vm, rc=rc)
  if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

      print *, "stdout before ESMF_GridCompSetVM() j,i=", j, i

      call ESMF_GridCompSetVM(gcomp(i), userRoutine=mygcomp_setvm, &
        rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

      print *, "stdout between ESMF_GridCompSetVM() and ESMF_GridCompSetServices() j,i=", j, i

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

      print *, "stdout after ESMF_GridCompSetServices() j,i=", j, i

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 10

    enddo
  enddo

10 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy Test"
  write(failMsg, *) "Incorrect petCount!"
  call ESMF_Test((loc_petCount==petCount), name, failMsg, result, ESMF_SRCLINE)

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

      call ESMF_GridCompSetVM(gcomp(i), &
        userRoutine=mygcomp_setvmForcePthreads, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 15

    enddo
  enddo

15 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy ForcePthreads Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy ForcePthreads Test"
  write(failMsg, *) "Incorrect petCount!"
  call ESMF_Test((loc_petCount==petCount), name, failMsg, result, ESMF_SRCLINE)

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS
  loc_petCount = -1

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), &
        petList=(/0/), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110

      call ESMF_GridCompSetVM(gcomp(i), userRoutine=mygcomp_setvm, &
        rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=rc)
      if (localPet==0) then
        loop_rc=rc
      elseif (rc/=ESMF_SUCCESS) then
        loop_rc=ESMF_SUCCESS
      endif
      if (loop_rc /= ESMF_SUCCESS) goto 110

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 110

    enddo
  enddo

110 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy with petList Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy with petList Test"
  write(failMsg, *) "Incorrect petCount!"
  if (localPet==0) then
    call ESMF_Test((loc_petCount==1), name, failMsg, result, ESMF_SRCLINE)
  else
    call ESMF_Test((loc_petCount==-1), name, failMsg, result, ESMF_SRCLINE)
  endif

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS
  loc_petCount = -1

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), &
        petList=(/0/), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115

      call ESMF_GridCompSetVM(gcomp(i), &
        userRoutine=mygcomp_setvmForcePthreads, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=rc)
      if (localPet==0) then
        loop_rc=rc
      elseif (rc/=ESMF_SUCCESS) then
        loop_rc=ESMF_SUCCESS
      endif
      if (loop_rc /= ESMF_SUCCESS) goto 115

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 115

    enddo
  enddo

115 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy ForcePthreads with petList Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy ForcePthreads with petList Test"
  write(failMsg, *) "Incorrect petCount!"
  if (localPet==0) then
    call ESMF_Test((loc_petCount==1), name, failMsg, result, ESMF_SRCLINE)
  else
    call ESMF_Test((loc_petCount==-1), name, failMsg, result, ESMF_SRCLINE)
  endif

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

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS
  allocate(petList(0))

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), &
        petList=petList, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

      call ESMF_GridCompSetVM(gcomp(i), userRoutine=mygcomp_setvm, &
        rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 210

    enddo
  enddo
  deallocate(petList)

210 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy with empty petList Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy with empty petList Test"
  write(failMsg, *) "Incorrect petCount!"
  call ESMF_Test((loc_petCount==petCount), name, failMsg, result, ESMF_SRCLINE)

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS
  allocate(petList(0))

  jMax = 1
  iMax = 2

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), &
        petList=petList, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

      call ESMF_GridCompSetVM(gcomp(i), &
        userRoutine=mygcomp_setvmForcePthreads, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_nexh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

    enddo
    do i=1, iMax

      call ESMF_GridCompGet(gcomp(i), petCount=loc_petCount, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 215

    enddo
  enddo
  deallocate(petList)

215 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !NEX_UTest
  write(name, *) "Component Create/SetServices/Destroy ForcePthreads with empty petList Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !----------------------------------------------------------------
  !Check petCount
  !NEX_UTest
  write(name, *) "Check petCount for Component Create/SetServices/Destroy ForcePthreads with empty petList Test"
  write(failMsg, *) "Incorrect petCount!"
  call ESMF_Test((loc_petCount==petCount), name, failMsg, result, ESMF_SRCLINE)

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

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Testing VM IsCreated for uncreated object"
  write(failMsg, *) "Did not return .false."
  isCreated = ESMF_VMIsCreated(vm2, rc=rc)
  call ESMF_Test((isCreated .eqv. .false.), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Testing VM IsCreated for uncreated object"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Create test VM for IsCreated"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  gcomp2 = ESMF_GridCompCreate(name='My gridded component2', rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Testing SetVMStdRedirect()"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_GridCompSetVMStdRedirect(gcomp2, &
    stdout="redirectTest.stdout", stderr="redirectTest.stderr", rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Set test VM for IsCreated"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_GridCompSetServices(gcomp2, userRoutine=mygcomp_register_nexh, &
        rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Get test VM for IsCreated"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_GridCompGet(gcomp2, vm=vm2, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Testing VM IsCreated for created object"
  write(failMsg, *) "Did not return .true."
  isCreated = ESMF_VMIsCreated(vm2, rc=rc)
  call ESMF_Test((isCreated .eqv. .true.), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Testing VM IsCreated for created object"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

  !------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroy test VM for IsCreated"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_GridCompDestroy(gcomp2, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !------------------------------------------------------------------------

#ifdef ESMF_TESTEXHAUSTIVE

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS

  jMax = 20
  iMax = 200

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20

      call ESMF_GridCompSetVM(gcomp(i), userRoutine=mygcomp_setvm, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_exh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20

    enddo
    do i=1, iMax

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 20

    enddo
  enddo

20 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !EX_UTest
  write(name, *) "Exhaustive Component Create/SetServices/Destroy Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)

  !----------------------------------------------------------------
  !----------------------------------------------------------------
  ! Prepare for loop testing
  loop_rc=ESMF_SUCCESS

  jMax = 20
  iMax = 200

  do j=1, jMax
    do i=1, iMax

      write(compName,'(A,I05.5,I05.5)') "MyGcomp", j, i
      gcomp(i) = ESMF_GridCompCreate(name=trim(compName), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25

      call ESMF_GridCompSetVM(gcomp(i), &
        userRoutine=mygcomp_setvmForcePthreads, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25

      call ESMF_GridCompSetServices(gcomp(i), &
        userRoutine=mygcomp_register_exh, rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25

    enddo
    do i=1, iMax

      call ESMF_GridCompInitialize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25
      call ESMF_GridCompRun(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25
      call ESMF_GridCompFinalize(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25

      call ESMF_GridCompDestroy(gcomp(i), rc=loop_rc)
      if (loop_rc /= ESMF_SUCCESS) goto 25

    enddo
  enddo

25 continue
  !----------------------------------------------------------------
  !Verify loop test results
  !EX_UTest
  write(name, *) "Exhaustive Component Create/SetServices/Destroy ForcePthreads Test"
  write(failMsg, *) "Failure codes returned!"
  call ESMF_Test((loop_rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)

#endif

  call ESMF_TestEnd(ESMF_SRCLINE)

  continue

end program ESMF_VMComponentUTest