subroutine ESMF_LocStreamDestruct(lstypep,rc)
!
! !ARGUMENTS:
type (ESMF_LocStreamType), pointer :: lstypep
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Destruct an {\tt ESMF\_LocStream} object and all appropriate
! internal structures.
!
! The arguments are:
! \begin{description}
! \item[lstypep]
! locstream to destruct
! \item[{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOPI
integer :: localrc ! Error status
integer :: i
type(ESMF_Status) :: status
! Initialize return code; assume failure until success is certain
if (present(rc)) rc = ESMF_RC_NOT_IMPL
call ESMF_BaseGetStatus(lstypep%base, status, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
if (status .eq. ESMF_STATUS_READY) then
! Destroy key Arrays
do i=1,lstypep%keyCount
if (lstypep%destroyKeys(i)) then
call ESMF_ArrayDestroy(lstypep%keys(i), rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
endif
enddo
! destroy distgrid
if (lstypep%destroyDistGrid) then
!! destroy distgrid
call ESMF_DistGridDestroy(lstypep%distgrid, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
endif
! Deallocate space for key data (if its been allocated)
if (lstypep%keyCount .gt. 0) then
deallocate (lstypep%keyNames)
deallocate (lstypep%keyUnits)
deallocate (lstypep%keyLongNames)
deallocate( lstypep%keys)
deallocate( lstypep%destroyKeys)
endif
endif
! mark object invalid
call ESMF_BaseSetStatus(lstypep%base, ESMF_STATUS_INVALID, rc=localrc)
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! return successfully
if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_LocStreamDestruct