ESMF_DistGridGetIds Subroutine

private subroutine ESMF_DistGridGetIds(distgrid, Ids, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_DistGrid), intent(in) :: distgrid
integer, intent(out) :: Ids(:)
integer, intent(out), optional :: rc

Calls

proc~~esmf_distgridgetids~~CallsGraph proc~esmf_distgridgetids ESMF_DistGridGetIds interface~esmf_distgridget ESMF_DistGridGet proc~esmf_distgridgetids->interface~esmf_distgridget proc~esmf_delayoutget ESMF_DELayoutGet proc~esmf_distgridgetids->proc~esmf_delayoutget proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_distgridgetids->proc~esmf_logfounderror proc~esmf_distgridgetdefault ESMF_DistGridGetDefault interface~esmf_distgridget->proc~esmf_distgridgetdefault proc~esmf_distgridgetplocalde ESMF_DistGridGetPLocalDe interface~esmf_distgridget->proc~esmf_distgridgetplocalde proc~esmf_distgridgetplocaldepdim ESMF_DistGridGetPLocalDePDim interface~esmf_distgridget->proc~esmf_distgridgetplocaldepdim proc~esmf_delayoutget->proc~esmf_logfounderror c_esmc_delayoutget c_esmc_delayoutget proc~esmf_delayoutget->c_esmc_delayoutget interface~esmf_interarraycreate ESMF_InterArrayCreate proc~esmf_delayoutget->interface~esmf_interarraycreate proc~esmf_delayoutgetinit ESMF_DELayoutGetInit proc~esmf_delayoutget->proc~esmf_delayoutgetinit proc~esmf_imerr ESMF_IMErr proc~esmf_delayoutget->proc~esmf_imerr proc~esmf_interarraydestroy ESMF_InterArrayDestroy proc~esmf_delayoutget->proc~esmf_interarraydestroy proc~esmf_logwrite ESMF_LogWrite proc~esmf_delayoutget->proc~esmf_logwrite proc~esmf_vmsetinitcreated ESMF_VMSetInitCreated proc~esmf_delayoutget->proc~esmf_vmsetinitcreated esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logfounderror->proc~esmf_logwrite

Called by

proc~~esmf_distgridgetids~~CalledByGraph proc~esmf_distgridgetids ESMF_DistGridGetIds proc~esmf_meshcreateredist ESMF_MeshCreateRedist proc~esmf_meshcreateredist->proc~esmf_distgridgetids interface~esmf_meshcreate ESMF_MeshCreate interface~esmf_meshcreate->proc~esmf_meshcreateredist proc~esmf_meshcreatefromfileold ESMF_MeshCreateFromFileOld proc~esmf_meshcreatefromfileold->proc~esmf_meshcreateredist

Source Code

subroutine ESMF_DistGridGetIds(distgrid, Ids, rc)
    type(ESMF_DistGrid), intent(in)            :: distgrid
    integer,             intent(out)           :: Ids(:)
    integer,             intent(out), optional :: rc

    type(ESMF_DELayout) :: delayout
    integer :: localDeCount,lDE,numDEIDs
    integer :: startPos
    integer :: localrc

    ! Get delayout from distgrid
    call ESMF_DistGridGet(distgrid, delayout=delayout, rc=localrc)
    if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
         ESMF_CONTEXT, rcToReturn=rc)) return

    ! Get local number of DEs
    call ESMF_DELayoutGet(delayout, localDECount=localDECount, rc=localrc)
    if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
         ESMF_CONTEXT, rcToReturn=rc)) return

    ! Iterate summing number of DEs
    startPos=1
    do lDE=0,localDECount-1
       call ESMF_DistGridGet(distgrid,localDe=lDE, &
            elementCount=numDEIds, rc=localrc)
       if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

       if (numDEIds >0) then
          call ESMF_DistGridGet(distgrid,localDe=lDE, &
               seqIndexList=Ids(startPos:startPos+numDEIds-1), rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return
       endif

       startPos=startPos+numDEIds
    enddo

end subroutine ESMF_DistGridGetIds