subroutine ESMF_EsmfGetVerts(ncid, filename, numElements, numNodePElement, numNodes, &
latBuffer, lonBuffer, rc)
integer, intent(in) :: ncid
character(len=*), intent(in) :: filename
integer, intent(in) :: numElements
integer, intent(in) :: numNodePElement
integer, intent(in) :: numNodes
real(ESMF_KIND_R8), intent(inout) :: latBuffer(:,:)
real(ESMF_KIND_R8), intent(inout) :: lonBuffer(:,:)
integer, intent(out), optional :: rc
integer :: ncStatus
real(ESMF_KIND_R8), allocatable :: nodeCoords(:,:)
integer(ESMF_KIND_I4), allocatable :: elementConn(:,:)
integer :: varId, fillValue
integer, parameter :: fillValue1 = -9999
integer :: i,j, index
character(len=256)::errmsg
integer :: localPolyBreakValue
integer, parameter :: nf90_noerror = 0
#ifdef ESMF_NETCDF
allocate(nodeCoords(2, numNodes))
allocate(elementConn(numNodePElement, numElements))
! Get NodeCoords
ncStatus = nf90_inq_varid(ncid, "nodeCoords", varId)
errmsg = "Variable nodeCoords in "//trim(filename)
if (CDFCheckError (ncStatus, &
ESMF_METHOD, &
ESMF_SRCLINE, errmsg, &
rc)) return
ncStatus = nf90_get_var(ncid, varId, nodeCoords)
if (CDFCheckError (ncStatus, &
ESMF_METHOD, &
ESMF_SRCLINE, errmsg, &
rc)) return
! Get elementConn table
ncStatus = nf90_inq_varid(ncid, "elementConn", varId)
errmsg = "Variable elementConn in "//trim(filename)
if (CDFCheckError (ncStatus, &
ESMF_METHOD, &
ESMF_SRCLINE, errmsg, &
rc)) return
ncStatus = nf90_get_var(ncid, varId, elementConn)
if (CDFCheckError (ncStatus, &
ESMF_METHOD, &
ESMF_SRCLINE, errmsg, &
rc)) return
! Get fill value
ncStatus = nf90_get_att(ncid, varId, "_FillValue", fillValue)
errmsg = "Attribute _FillValue for elementConn in "//trim(filename)
if (CDFCheckError (ncStatus, &
ESMF_METHOD, &
ESMF_SRCLINE, errmsg, &
rc)) return
! Get polybreak if it exists, if it doesn't just use set to fillValue
ncStatus = nf90_get_att (ncid, varId, "polygon_break_value", &
values=localPolyBreakValue)
if (ncStatus /= nf90_noerror) then
localPolyBreakValue=fillValue
endif
! Fill latBuffer and lonBuffer
do i=1, numElements
do j=1, numNodePElement
if ((elementConn(j,i) /= fillValue) .and. &
(elementConn(j,i) /= localPolyBreakValue)) then
index = elementConn(j,i)
latBuffer(j,i) = nodeCoords(2,index)
lonBuffer(j,i) = nodeCoords(1,index)
else
latBuffer(j,i) = fillValue1
lonBuffer(j,i) = fillValue1
endif
enddo
enddo
if (present(rc)) rc=ESMF_SUCCESS
return
#else
if (ESMF_LogFoundError(ESMF_RC_LIB_NOT_PRESENT, &
msg="- ESMF_NETCDF not defined when lib was compiled", &
ESMF_CONTEXT, rcToReturn=rc)) return
#endif
end subroutine ESMF_EsmfGetVerts