subroutine createArrays(rc)
! Creates Arrays used by the tests used in this module
integer, intent(out) :: rc
type(ESMF_ArraySpec) :: arraySpecInt
type(ESMF_ArraySpec) :: arraySpecFloat
type(ESMF_ArraySpec) :: arraySpecDouble
integer :: i, j
distgrid = ESMF_DistGridCreate(minIndex=[1,1], maxIndex=[3*petCount,4], regDecomp=[petCount,1], rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArraySpecSet(arraySpecInt, typekind=ESMF_TYPEKIND_I4, rank=2, rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArraySpecSet(arraySpecFloat, typekind=ESMF_TYPEKIND_R4, rank=2, rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArraySpecSet(arraySpecDouble, typekind=ESMF_TYPEKIND_R8, rank=2, rc=rc)
if (rc /= ESMF_SUCCESS) return
arrayInt = ESMF_ArrayCreate(distgrid, arraySpecInt, name="arrayInt", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayInt, farrayPtr=arrayIntData, rc=rc)
if (rc /= ESMF_SUCCESS) return
do j = 1, size(arrayIntData, 2)
do i = 1, size(arrayIntData, 1)
arrayIntData(i,j) = (localPet+1) * 17 * ((i-1)*size(arrayIntData,2) + (j-1))
end do
end do
arrayIntRead = ESMF_ArrayCreate(distgrid, arraySpecInt, name="arrayInt", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayIntRead, farrayPtr=arrayIntReadData, rc=rc)
if (rc /= ESMF_SUCCESS) return
arrayFloat = ESMF_ArrayCreate(distgrid, arraySpecFloat, name="arrayFloat", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayFloat, farrayPtr=arrayFloatData, rc=rc)
if (rc /= ESMF_SUCCESS) return
do j = 1, size(arrayFloatData, 2)
do i = 1, size(arrayFloatData, 1)
arrayFloatData(i,j) = (localPet+1) * 27.0 * ((i-1)*size(arrayFloatData,2) + (j-1))
end do
end do
arrayFloatRead = ESMF_ArrayCreate(distgrid, arraySpecFloat, name="arrayFloat", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayFloatRead, farrayPtr=arrayFloatReadData, rc=rc)
if (rc /= ESMF_SUCCESS) return
arrayDouble = ESMF_ArrayCreate(distgrid, arraySpecDouble, name="arrayDouble", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayDouble, farrayPtr=arrayDoubleData, rc=rc)
if (rc /= ESMF_SUCCESS) return
do j = 1, size(arrayDoubleData, 2)
do i = 1, size(arrayDoubleData, 1)
arrayDoubleData(i,j) = (localPet+1) * 37.0 * ((i-1)*size(arrayDoubleData,2) + (j-1))
end do
end do
arrayDoubleRead = ESMF_ArrayCreate(distgrid, arraySpecDouble, name="arrayDouble", rc=rc)
if (rc /= ESMF_SUCCESS) return
call ESMF_ArrayGet(arrayDoubleRead, farrayPtr=arrayDoubleReadData, rc=rc)
if (rc /= ESMF_SUCCESS) return
end subroutine createArrays