subroutine user_run(comp, importState, exportState, clock, rc)
type(ESMF_GridComp) :: comp
type(ESMF_State) :: importState, exportState
type(ESMF_Clock) :: clock
integer, intent(out) :: rc
! ! Local variables
type(ESMF_VM) :: vm
integer :: de_id
type(ESMF_Field) :: humidity
type(ESMF_LocStream) :: locs
type(ESMF_DistGrid) :: distgrid
logical :: arbIndex
integer :: elementCount
integer, allocatable :: indexList(:)
integer(ESMF_KIND_I4), dimension(:), pointer :: fptr
integer :: exlb(1), exub(1), i
rc = ESMF_SUCCESS
call ESMF_GridCompGet(comp, vm=vm, rc=rc)
if(rc/=ESMF_SUCCESS) return
call ESMF_VMGet(vm, localPet=de_id, rc=rc)
if(rc/=ESMF_SUCCESS) return
print *, de_id, "User Comp Run starting"
! Get information from the component.
call ESMF_StateGet(importState, "humidity", humidity, rc=rc)
if(rc/=ESMF_SUCCESS) return
call ESMF_FieldGet(humidity, locstream=locs, rc=rc)
if(rc/=ESMF_SUCCESS) return
call ESMF_LocStreamGet(locs, distgrid=distgrid, rc=rc)
if(rc/=ESMF_SUCCESS) return
call ESMF_DistGridGet(distgrid, localDe=0, arbSeqIndexFlag=arbIndex, &
elementCount=elementCount, rc=rc)
if(rc/=ESMF_SUCCESS) return
allocate(indexList(elementCount))
call ESMF_DistGridGet(distgrid, localDe=0, seqIndexList=indexList, rc=rc)
if(rc/=ESMF_SUCCESS) return
call ESMF_FieldGet(humidity, localDe=0, farrayPtr=fptr, &
exclusiveLBound=exlb, exclusiveUBound=exub, rc=rc)
if(rc/=ESMF_SUCCESS) return
! Verify that the redist data in dstField(l) is correct.
! Before the FieldRedist op, the dst Field contains all 0.
! The FieldRedist op reset the values to the index value, verify this is the case.
!write(*, '(9I3)') l, lpe, fptr
do i = exlb(1), exub(1)
if(fptr(i) .ne. indexList(i)) then
print *, de_id, "ERROR ", indexList(i), " value =", fptr(i)
rc = ESMF_FAILURE
endif
enddo
deallocate(indexList)
print *, de_id, "User Comp Run returning"
end subroutine user_run