ESMF_GetMeshFromUGridFile Subroutine

public subroutine ESMF_GetMeshFromUGridFile(filename, nodeCoords, elmtConn, elmtNums, startElmt, faceCoords, convertToDeg, rc)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filename
real(kind=ESMF_KIND_R8), pointer :: nodeCoords(:,:)
integer(kind=ESMF_KIND_I4), pointer :: elmtConn(:)
integer(kind=ESMF_KIND_I4), pointer :: elmtNums(:)
integer, intent(out) :: startElmt
real(kind=ESMF_KIND_R8), optional, pointer :: faceCoords(:,:)
logical, intent(in), optional :: convertToDeg
integer, intent(out), optional :: rc

Calls

proc~~esmf_getmeshfromugridfile~~CallsGraph proc~esmf_getmeshfromugridfile ESMF_GetMeshFromUGridFile proc~esmf_logseterror ESMF_LogSetError proc~esmf_getmeshfromugridfile->proc~esmf_logseterror esmf_breakpoint esmf_breakpoint proc~esmf_logseterror->esmf_breakpoint proc~esmf_logrc2msg ESMF_LogRc2Msg proc~esmf_logseterror->proc~esmf_logrc2msg proc~esmf_logwrite ESMF_LogWrite 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_getmeshfromugridfile~~CalledByGraph proc~esmf_getmeshfromugridfile ESMF_GetMeshFromUGridFile proc~esmf_meshcreatefromunstruct ESMF_MeshCreateFromUnstruct proc~esmf_meshcreatefromunstruct->proc~esmf_getmeshfromugridfile proc~esmf_meshcreatefromfileold ESMF_MeshCreateFromFileOld proc~esmf_meshcreatefromfileold->proc~esmf_meshcreatefromunstruct proc~esmf_meshcreatefromscrip ESMF_MeshCreateFromScrip proc~esmf_meshcreatefromfileold->proc~esmf_meshcreatefromscrip proc~esmf_meshcreatefromscrip->proc~esmf_meshcreatefromunstruct

Source Code

subroutine ESMF_GetMeshFromUGridFile (filename, nodeCoords, elmtConn, &
                                elmtNums, startElmt,  &
                                faceCoords, convertToDeg, rc)

    character(len=*), intent(in)   :: filename
    real(ESMF_KIND_R8), pointer    :: nodeCoords (:,:)
    integer(ESMF_KIND_I4), pointer :: elmtConn (:)
    integer(ESMF_KIND_I4), pointer :: elmtNums (:)
    integer,           intent(out) :: startElmt
    real(ESMF_KIND_R8), pointer, optional    :: faceCoords (:,:)
    logical, intent(in), optional  :: convertToDeg
    integer, intent(out), optional :: rc


    type(ESMF_VM) :: vm
    integer PetNo, PetCnt

    integer :: ncid, meshId
    integer :: ncStatus
    integer :: meshDim
    character(len=256) :: errmsg
    character(len=24) :: attbuf
    integer :: len
    logical :: convertToDegLocal
    logical :: faceCoordFlag
    integer :: localrc
    integer, parameter :: nf90_noerror = 0

#ifdef ESMF_NETCDF
    convertToDegLocal = .false.
    if (present(convertToDeg)) convertToDegLocal = convertToDeg

    ! Get VM information
    call ESMF_VMGetCurrent(vm, rc=rc)
    if (rc /= ESMF_SUCCESS) return
    ! set up local pet info
    call ESMF_VMGet(vm, localPet=PetNo, petCount=PetCnt, rc=rc)
    if (rc /= ESMF_SUCCESS) return

    call ESMF_UGridInq(filename, meshid=meshid, nodeCoordDim=meshDim, &
         faceCoordFlag=faceCoordFlag, rc=localrc)
    if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
                  ESMF_CONTEXT, rcToReturn=rc)) return

    ncStatus = nf90_open (path=trim(filename), mode=nf90_nowrite, ncid=ncid)
    if (CDFCheckError (ncStatus, &
      ESMF_METHOD,  &
      ESMF_SRCLINE, trim(filename), &
      rc)) return

    if (meshDim == 2) then
       if (faceCoordFlag) then
          call ESMF_GetMesh2DFromUGrid (filename, ncid, meshId, nodeCoords, elmtConn, &
                                elmtNums, startElmt, faceCoords=faceCoords, &
                                convertToDeg=convertToDegLocal, rc=rc)
       else
          call ESMF_GetMesh2DFromUGrid (filename, ncid, meshId, nodeCoords, elmtConn, &
                                elmtNums, startElmt, convertToDeg=convertToDegLocal, rc=rc)
       endif
    elseif (meshDim == 3) then
       if (faceCoordFlag) then
          call ESMF_GetMesh3DFromUGrid (filename, ncid, meshId, nodeCoords, elmtConn, &
                                elmtNums, startElmt, faceCoords=faceCoords, &
                                rc=rc)
       else
          call ESMF_GetMesh3DFromUGrid (filename, ncid, meshId, nodeCoords, elmtConn, &
                                elmtNums, startElmt, rc=rc)
       endif                    
    else
       call ESMF_LogSetError(rcToCheck=ESMF_FAILURE, &
                 msg="- Only 2D or 3D mesh is supported currently", &
                 ESMF_CONTEXT, rcToReturn=rc)
       return
    endif
return

#else
    call ESMF_LogSetError(ESMF_RC_LIB_NOT_PRESENT, &
                 msg="- ESMF_NETCDF not defined when lib was compiled", &
                 ESMF_CONTEXT, rcToReturn=rc)
    return
#endif
end subroutine ESMF_GetMeshFromUGridFile