ESMF_LocalArrayDataUTest Program

Variables

Type Attributes Name Initial
character(len=*), parameter :: version = '$Id$'
character(len=ESMF_MAXSTR) :: failMsg
character(len=ESMF_MAXSTR) :: name
integer(kind=ESMF_KIND_I4), dimension(:), pointer :: data
integer(kind=ESMF_KIND_I4), dimension(:,:), pointer :: data2d
integer(kind=ESMF_KIND_I4), dimension(:), pointer :: fptr
integer(kind=ESMF_KIND_I4), dimension(:), pointer :: fptr2
integer(kind=ESMF_KIND_I4), dimension(:,:), pointer :: fptr2d
integer(kind=ESMF_KIND_I4), dimension(:,:), pointer :: fptr2d2
integer(kind=ESMF_KIND_I4), dimension(:,:), pointer :: fptr2dslice
integer :: i
integer :: imax
integer :: imin
integer :: j
integer :: jmax
integer :: jmin
integer :: rc
integer :: result = 0
logical :: looptest
type(ESMF_LocalArray) :: la
type(PtrIWrap1) :: sizetest1I

Derived Types

type, sequence  ::  PtrIWrap1

Components

Type Visibility Attributes Name Initial
integer(kind=ESMF_KIND_I4), public, dimension(:), pointer :: data

Source Code

program ESMF_LocalArrayDataUTest

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

#include "ESMF_Macros.inc"

!==============================================================================
!BOP
! !PROGRAM: ESMF_LocalArrayDataTest - Check LocalArray data storage integrity
!
! !DESCRIPTION:
!
! The code in this file drives F90 LocalArrayData unit tests.
! The companion file ESMF\_LocalArray.F90 contains the definitions for the
! LocalArray methods.
!
!-----------------------------------------------------------------------------
! !USES:
  use ESMF_TestMod     ! test methods
  use ESMF

  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 result code
  integer :: rc

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

  integer :: i, j, imin, jmin, imax, jmax
  logical :: looptest
  type(ESMF_LocalArray) :: la

  ! F90 array pointer of 4-byte integers
  integer (ESMF_KIND_I4),dimension(:), pointer :: data
  integer (ESMF_KIND_I4),dimension(:), pointer :: fptr, fptr2

  ! F90 array pointer of 4-byte integers
  integer (ESMF_KIND_I4),dimension(:,:), pointer :: data2d
  integer (ESMF_KIND_I4),dimension(:,:), pointer :: fptr2d, fptr2d2, fptr2dslice

  ! F90 derived type with F90 array pointer member of 4-byte integers
  type PtrIWrap1
  sequence
    integer (ESMF_KIND_I4),dimension(:), pointer :: data
  end type

  type(PtrIWrap1) :: sizetest1I

    

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


  ! prepare for F90 allocatable array "data"
  allocate(data(-12:-6), stat=rc)
  do i = -12, -6
    data(i) = i*1000
  enddo

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(data, datacopyflag=ESMF_DATACOPY_VALUE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do i = -12, -6
    if (fptr(i) /= data(i)) looptest = .false.
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do i = -12, -6
    fptr(i) = fptr(i) + 57
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was not overridden by copy"
  write(failMsg, *) "Data changed incorrectly"
  looptest = .true.
  do i = -12, -6
    if (fptr(i) /= data(i)) looptest = .false.
  enddo
  call ESMF_Test(.not.looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do i = -12, -6
    if (fptr2(i) /= fptr(i)) looptest = .false.
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  ! garbage collection
  deallocate(data, stat=rc)


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


  ! prepare for F90 array pointer member "data" in F90 derived type
  allocate(sizetest1I%data(-12:-6), stat=rc)
  do i = -12, -6
    sizetest1I%data(i) = i*1000 - 11
  enddo

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 Pointer within ",&
    "derived type"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(sizetest1I%data, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from an allocated F90 Pointer ",&
    "within derived type"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do i = -12, -6
    if (fptr(i) /= sizetest1I%data(i)) looptest = .false.
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do i = -12, -6
    fptr(i) = fptr(i) + 57
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do i = -12, -6
    if (fptr2(i) /= fptr(i)) looptest = .false.
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was overridden by reference"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do i = -12, -6
    if (fptr(i) /= sizetest1I%data(i)) looptest = .false.
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "Pointer within derived type"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  ! garbage collection
  deallocate(sizetest1I%data, stat=rc)


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


  ! prepare for F90 allocatable array "data2d"
  allocate(data2d(10,6), stat=rc)
  do j = 1, 6
    do i = 1, 10
      data2d(i,j) = j*1000 + i
    enddo
  enddo

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(data2d, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = 1, 6
    do i = 1, 10
      if (fptr2d(i,j) /= data2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do j = 1, 6
    do i = 1, 10
      fptr2d(i,j) = fptr2d(i,j) + 57
    enddo
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = 1, 6
    do i = 1, 10
      if (fptr2d2(i,j) /= fptr2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was overridden by reference"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = 1, 6
    do i = 1, 10
      if (fptr2d(i,j) /= data2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  ! garbage collection
  deallocate(data2d, stat=rc)


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


  ! prepare for F90 allocatable array "data2d"
  imin = 1
  imax = 100
  jmin = 1
  jmax = 60
  allocate(data2d(100,60), stat=rc)
  do j = jmin, jmax
    do i = imin, imax
      data2d(i,j) = j*1000 + i
    enddo
  enddo

  fptr2dslice => data2d(:,:)

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 array pointer slice (:,:)"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(fptr2dslice, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= data2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do j = jmin, jmax
    do i = imin, imax
      fptr2d(i,j) = fptr2d(i,j) + 57
    enddo
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d2(i,j) /= fptr2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was overridden by reference"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= data2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------


  ! change slice
  fptr2dslice => data2d(:,20:20)
  jmin=1
  jmax=1  

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 array pointer slice (:,:)"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(fptr2dslice, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= fptr2dslice(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do j = jmin, jmax
    do i = imin, imax
      fptr2d(i,j) = fptr2d(i,j) + 57
    enddo
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d2(i,j) /= fptr2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was overridden by reference"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= fptr2dslice(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  ! change slice
  fptr2dslice => data2d(:,11:25)
  jmin=1
  jmax=15

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Creating a LocalArray from an allocated F90 array pointer slice (:,:)"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  la = ESMF_LocalArrayCreate(fptr2dslice, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Printing LocalArray created from allocated F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayPrint(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= fptr2dslice(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  ! Fill in different values via fptr
  do j = jmin, jmax
    do i = imin, imax
      fptr2d(i,j) = fptr2d(i,j) + 57
    enddo
  enddo
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Obtaining access to data in LocalArray via F90 array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayGet(la, fptr2d2, datacopyflag=ESMF_DATACOPY_REFERENCE, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying data in LocalArray via F90 array pointer access"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d2(i,j) /= fptr2d(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Verifying that original data was overridden by reference"
  write(failMsg, *) "Incorrect data detected"
  looptest = .true.
  do j = jmin, jmax
    do i = imin, imax
      if (fptr2d(i,j) /= fptr2dslice(i,j)) looptest = .false.
    enddo
  enddo
  call ESMF_Test(looptest, name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------
  
  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Destroying LocalArray created from an allocated F90 ",&
    "array pointer"
  write(failMsg, *) "Did not return ESMF_SUCCESS"
  call ESMF_LocalArrayDestroy(la, rc=rc)
  call ESMF_Test((rc.eq.ESMF_SUCCESS), name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

  ! garbage collection
  deallocate(data2d, stat=rc)

  !-----------------------------------------------------------------------------
  call ESMF_TestEnd(ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

end program ESMF_LocalArrayDataUTest