subroutine ESMFIO_Destroy(IOComp, keywordEnforcer, rc)
type(ESMF_GridComp) :: IOComp
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
integer, intent(out), optional :: rc
! -- local variables
integer :: localrc
integer :: localDe
type(ioWrapper) :: is
! -- begin
if (present(rc)) rc = ESMF_SUCCESS
if (ESMF_GridCompIsCreated(IOComp)) then
call ESMF_GridCompGetInternalState(IOComp, is, localrc)
if (ESMF_LogFoundError(rcToCheck=localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return ! bail out
if (associated(is % IO)) then
if (associated(is % IO % IOLayout)) then
do localDe = 0, size(is % IO % IOLayout) - 1
if (ESMF_GridCompIsCreated(is % IO % IOLayout(localDe) % taskComp)) then
call ESMF_GridCompDestroy(is % IO % IOLayout(localDe) % taskComp, rc=localrc)
if (ESMF_LogFoundError(rcToCheck=localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return ! bail out
end if
end do
deallocate(is % IO % IOLayout, stat=localrc)
if (ESMF_LogFoundDeallocError(statusToCheck=localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return ! bail out
nullify(is % IO % IOLayout)
call ESMF_GridCompDestroy(IOComp, rc=localrc)
if (ESMF_LogFoundError(rcToCheck=localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return ! bail out
end if
nullify(is % IO)
end if
end if
end subroutine ESMFIO_Destroy