ESMF_XGridGetSMMSpecFrac Subroutine

private subroutine ESMF_XGridGetSMMSpecFrac(xgrid, srcSide, srcGridIndex, dstSide, dstGridIndex, keywordEnforcer, sparseMat, srcFracArray, dstFracArray, srcFrac2Array, dstFrac2Array, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_XGrid), intent(in) :: xgrid
type(ESMF_XGridSide_Flag), intent(in) :: srcSide
integer, intent(in) :: srcGridIndex
type(ESMF_XGridSide_Flag), intent(in) :: dstSide
integer, intent(in) :: dstGridIndex
type(ESMF_KeywordEnforcer), optional :: keywordEnforcer
type(ESMF_XGridSpec), intent(out), optional :: sparseMat
type(ESMF_Array), intent(inout), optional :: srcFracArray
type(ESMF_Array), intent(inout), optional :: dstFracArray
type(ESMF_Array), intent(inout), optional :: srcFrac2Array
type(ESMF_Array), intent(inout), optional :: dstFrac2Array
integer, intent(out), optional :: rc

Calls

proc~~esmf_xgridgetsmmspecfrac~~CallsGraph proc~esmf_xgridgetsmmspecfrac ESMF_XGridGetSMMSpecFrac esmf_arraycopy esmf_arraycopy proc~esmf_xgridgetsmmspecfrac->esmf_arraycopy proc~esmf_imerr ESMF_IMErr proc~esmf_xgridgetsmmspecfrac->proc~esmf_imerr proc~esmf_logfounderror ESMF_LogFoundError proc~esmf_xgridgetsmmspecfrac->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~esmf_xgridgetsmmspecfrac->proc~esmf_logseterror proc~esmf_xgridgetinit ESMF_XGridGetInit proc~esmf_xgridgetsmmspecfrac->proc~esmf_xgridgetinit proc~esmf_imerr->proc~esmf_logfounderror proc~esmf_initcheckdeep ESMF_InitCheckDeep proc~esmf_imerr->proc~esmf_initcheckdeep esmf_breakpoint esmf_breakpoint proc~esmf_logfounderror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logfounderror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite proc~esmf_logfounderror->proc~esmf_logwrite proc~esmf_logseterror->esmf_breakpoint proc~esmf_logseterror->proc~esmf_logrc2msg proc~esmf_logseterror->proc~esmf_logwrite c_esmc_loggeterrormsg c_esmc_loggeterrormsg proc~esmf_logrc2msg->c_esmc_loggeterrormsg c_esmc_vmwtime c_esmc_vmwtime proc~esmf_logwrite->c_esmc_vmwtime proc~esmf_logclose ESMF_LogClose proc~esmf_logwrite->proc~esmf_logclose proc~esmf_logflush ESMF_LogFlush proc~esmf_logwrite->proc~esmf_logflush proc~esmf_logopenfile ESMF_LogOpenFile proc~esmf_logwrite->proc~esmf_logopenfile proc~esmf_utiliounitflush ESMF_UtilIOUnitFlush proc~esmf_logwrite->proc~esmf_utiliounitflush proc~esmf_utilstring2array ESMF_UtilString2Array proc~esmf_logwrite->proc~esmf_utilstring2array proc~esmf_logclose->proc~esmf_logflush proc~esmf_logflush->proc~esmf_utiliounitflush proc~esmf_utilarray2string ESMF_UtilArray2String proc~esmf_logflush->proc~esmf_utilarray2string proc~esmf_logopenfile->proc~esmf_utiliounitflush proc~esmf_utiliounitget ESMF_UtilIOUnitGet proc~esmf_logopenfile->proc~esmf_utiliounitget

Called by

proc~~esmf_xgridgetsmmspecfrac~~CalledByGraph proc~esmf_xgridgetsmmspecfrac ESMF_XGridGetSMMSpecFrac interface~esmf_xgridget ESMF_XGridGet interface~esmf_xgridget->proc~esmf_xgridgetsmmspecfrac

Source Code

subroutine ESMF_XGridGetSMMSpecFrac(xgrid, srcSide, srcGridIndex, &
    dstSide, dstGridIndex, keywordEnforcer, &
    sparseMat, srcFracArray, dstFracArray, &
    srcFrac2Array, dstFrac2Array, &
    rc) 

!
! !ARGUMENTS:
type(ESMF_XGrid),          intent(in)               :: xgrid
type(ESMF_XGridSide_Flag), intent(in)               :: srcSide
integer,                   intent(in)               :: srcGridIndex
type(ESMF_XGridSide_Flag), intent(in)               :: dstSide
integer,                   intent(in)               :: dstGridIndex
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
type(ESMF_XGridSpec),      intent(out),   optional  :: sparseMat
type(ESMF_Array),          intent(inout), optional  :: srcFracArray
type(ESMF_Array),          intent(inout), optional  :: dstFracArray
type(ESMF_Array),          intent(inout), optional  :: srcFrac2Array
type(ESMF_Array),          intent(inout), optional  :: dstFrac2Array
integer,                   intent(out),   optional  :: rc 
!
! !DESCRIPTION:
!      Get information about XGrid
!
!     The arguments are:
!     \begin{description}
!     \item [xgrid]
!       The {\tt ESMF\_XGrid} object used to retrieve information from.
!     \item [srcSide] 
!       Side of the XGrid from (either ESMF\_XGRIDSIDE\_A,
!       ESMF\_XGRIDSIDE\_B, or ESMF\_XGRIDSIDE\_BALANCED).
!     \item [srcGridIndex] 
!       If xgridSide is  ESMF\_XGRIDSIDE\_A or ESMF\_XGRIDSIDE\_B then this index tells which Grid on
!       that side.
!     \item [dstSide]
!       Side of the XGrid from (either ESMF\_XGRIDSIDE\_A,
!       ESMF\_XGRIDSIDE\_B, or ESMF\_XGRIDSIDE\_BALANCED).
!     \item [dstGridIndex] 
!       If xgridSide is  ESMF\_XGRIDSIDE\_A or ESMF\_XGRIDSIDE\_B then this index tells which Grid on
!       that side.
!     \item [{[sparseMat]}]
!       SparseMat corresponding to the src and dst Grid or Mesh.
!     \item [{[srcFracArray]}]
!       src Frac Array corresponding to the src Grid or Mesh.
!     \item [{[dstFracArray]}]
!       dst Frac Array corresponding to the dst Grid or Mesh.
!     \item [{[srcFrac2Array]}]
!       src Frac2 Array corresponding to the src Grid or Mesh.
!     \item [{[dstFrac2Array]}]
!       dst Frac2 Array corresponding to the dst Grid or Mesh.
!     \item [{[rc]}]
!       Return code; equals {\tt ESMF\_SUCCESS} only if the {\tt ESMF\_XGrid} 
!       is created.
!     \end{description}
!
!EOPI

    type(ESMF_XGridType), pointer :: xgtypep
    integer                       :: localrc

    ! Initialize return code   
    if(present(rc)) rc = ESMF_RC_NOT_IMPL

    ! check init status of input XGrid
    ESMF_INIT_CHECK_DEEP(ESMF_XGridGetInit,xgrid,rc)

    xgtypep => xgrid%xgtypep

    if(srcSide .eq. ESMF_XGRIDSIDE_A .and. dstSide .eq. ESMF_XGRIDSIDE_BALANCED) then
        if(present(sparseMat)) sparseMat = xgtypep%SparseMatA2X(srcGridIndex)

        if(present(srcFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query srcFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFracArray, xgtypep%fracA2X(srcGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query dstFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFracArray, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif

        if(present(srcFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query srcFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFrac2Array, xgtypep%frac2A(srcGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query dstFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFrac2Array, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
    endif

    if(srcSide .eq. ESMF_XGRIDSIDE_B .and. dstSide .eq. ESMF_XGRIDSIDE_BALANCED) then
        if(present(sparseMat)) sparseMat = xgtypep%SparseMatB2X(srcGridIndex)
        if(present(srcFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query srcFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFracArray, xgtypep%fracB2X(srcGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query dstFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFracArray, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif

        if(present(srcFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query srcFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFrac2Array, xgtypep%frac2B(srcGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot query dstFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFrac2Array, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
    endif

    if(srcSide .eq. ESMF_XGRIDSIDE_BALANCED .and. dstSide .eq. ESMF_XGRIDSIDE_A) then
        if(present(sparseMat)) sparseMat = xgtypep%SparseMatX2A(dstGridIndex)
        if(present(srcFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query srcFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFracArray, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query dstFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFracArray, xgtypep%fracX2A(dstGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif

        if(present(srcFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query srcFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFrac2Array, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query dstFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFrac2Array, xgtypep%frac2A(dstGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
    endif

    if(srcSide .eq. ESMF_XGRIDSIDE_BALANCED .and. dstSide .eq. ESMF_XGRIDSIDE_B) then
        if(present(sparseMat)) sparseMat = xgtypep%SparseMatX2B(dstGridIndex)
        if(present(srcFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query srcFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFracArray, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFracArray)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query dstFracArray for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFracArray, xgtypep%fracX2B(dstGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif

        if(present(srcFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query srcFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(srcFrac2Array, xgtypep%fracX, rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
        if(present(dstFrac2Array)) then
          if(xgtypep%online == 0) then
            call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, & 
               msg="- Cannot cannot query dstFrac2Array for xgrid created offline", &
               ESMF_CONTEXT, rcToReturn=rc) 
            return
          endif
          call ESMF_ArrayCopy(dstFrac2Array, xgtypep%frac2B(dstGridIndex), rc=localrc)
          if (ESMF_LogFoundError(localrc, &
              ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
        endif
    endif

    ! success
    if(present(rc)) rc = ESMF_SUCCESS

end subroutine ESMF_XGridGetSMMSpecFrac