getPointListOnFieldLoc Subroutine

private subroutine getPointListOnFieldLoc(field, maskValues, addOrigCoords, createdTmpPointList, pointlist, rc)

Arguments

Type IntentOptional Attributes Name
type(ESMF_Field), intent(in) :: field
integer(kind=ESMF_KIND_I4), intent(in), optional :: maskValues(:)
logical, intent(in), optional :: addOrigCoords
logical, intent(out) :: createdTmpPointList
type(ESMF_PointList), intent(out) :: pointlist
integer, intent(out), optional :: rc

Calls

proc~~getpointlistonfieldloc~~CallsGraph proc~getpointlistonfieldloc getPointListOnFieldLoc esmf_fieldget esmf_fieldget proc~getpointlistonfieldloc->esmf_fieldget interface~esmf_pointlistcreate ESMF_PointListCreate proc~getpointlistonfieldloc->interface~esmf_pointlistcreate interface~esmf_xgridget ESMF_XGridGet proc~getpointlistonfieldloc->interface~esmf_xgridget proc~checkgridlite checkGridLite proc~getpointlistonfieldloc->proc~checkgridlite proc~esmf_logfounderror ESMF_LogFoundError proc~getpointlistonfieldloc->proc~esmf_logfounderror proc~esmf_logseterror ESMF_LogSetError proc~getpointlistonfieldloc->proc~esmf_logseterror proc~esmf_pointlistcreatefrmgrid ESMF_PointListCreateFrmGrid interface~esmf_pointlistcreate->proc~esmf_pointlistcreatefrmgrid proc~esmf_pointlistcreatefrminput ESMF_PointListCreateFrmInput interface~esmf_pointlistcreate->proc~esmf_pointlistcreatefrminput proc~esmf_pointlistcreatefrmlocstream ESMF_PointListCreateFrmLocStream interface~esmf_pointlistcreate->proc~esmf_pointlistcreatefrmlocstream proc~esmf_pointlistcreatefrmmesh ESMF_PointListCreateFrmMesh interface~esmf_pointlistcreate->proc~esmf_pointlistcreatefrmmesh proc~esmf_xgridgetdefault ESMF_XGridGetDefault interface~esmf_xgridget->proc~esmf_xgridgetdefault proc~esmf_xgridgetdg ESMF_XGridGetDG interface~esmf_xgridget->proc~esmf_xgridgetdg proc~esmf_xgridgetele ESMF_XGridGetEle interface~esmf_xgridget->proc~esmf_xgridgetele proc~esmf_xgridgetgb ESMF_XGridGetGB interface~esmf_xgridget->proc~esmf_xgridgetgb proc~esmf_xgridgetgeomobj ESMF_XGridGetGeomObj interface~esmf_xgridget->proc~esmf_xgridgetgeomobj proc~esmf_xgridgetsmmspecfrac ESMF_XGridGetSMMSpecFrac interface~esmf_xgridget->proc~esmf_xgridgetsmmspecfrac proc~checkgridlite->proc~esmf_logfounderror proc~checkgridlite->proc~esmf_logseterror proc~esmf_gridgetdecomptype ESMF_GridGetDecompType proc~checkgridlite->proc~esmf_gridgetdecomptype 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

Called by

proc~~getpointlistonfieldloc~~CalledByGraph proc~getpointlistonfieldloc getPointListOnFieldLoc proc~esmf_fieldregridstorenx ESMF_FieldRegridStoreNX proc~esmf_fieldregridstorenx->proc~getpointlistonfieldloc interface~esmf_fieldregridstore ESMF_FieldRegridStore interface~esmf_fieldregridstore->proc~esmf_fieldregridstorenx

Source Code

    subroutine getPointListOnFieldLoc(field, maskValues, addOrigCoords, &
         createdTmpPointList, pointlist, rc)

      type(ESMF_Field), intent(in)  :: field
      integer(ESMF_KIND_I4), intent(in),  optional :: maskValues(:)
      logical, intent(in), optional :: addOrigCoords
      logical,          intent(out) :: createdTmpPointList
      type(ESMF_PointList),  intent(out) :: pointlist
      integer,          intent(out),   optional :: rc 
      
      integer :: localrc
      type(ESMF_GeomType_Flag)  :: geomtype
      type(ESMF_Grid)      :: grid
      type(ESMF_Mesh)      :: tmpMesh
      type(ESMF_MeshLoc)   :: meshloc
      type(ESMF_StaggerLoc) :: staggerLoc
      type(ESMF_LocStream)  :: tmpLocStream
      type(ESMF_XGrid)      :: xgrid

      ! Init variable
      createdTmpPointList=.false.

      ! Get information from field that we need to create the mesh
      call ESMF_FieldGet(field, geomtype=geomtype, rc=localrc)
      if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
           ESMF_CONTEXT, rcToReturn=rc)) return
                
      ! Get the mesh based on the geomtype
      if (geomtype .eq. ESMF_GEOMTYPE_GRID) then

         ! Get information about Grid from Field
         call ESMF_FieldGet(field, grid=grid, &
              staggerloc=staggerloc, rc=localrc)
         if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
         
         ! Check Grid
         call checkGridLite(grid,staggerloc,rc=localrc)
         if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
              
         ! Create PointList
         pointlist=ESMF_PointListCreate(grid,staggerloc, &
              maskValues=maskValues, addOrigCoords=addOrigCoords, &
              rc=localrc)
         if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
              ESMF_CONTEXT, rcToReturn=rc)) return
      
         ! Record that we created the PointList
         createdTmpPointList=.true.

      else if (geomtype .eq. ESMF_GEOMTYPE_MESH) then

         ! Get information about mesh from field
          call ESMF_FieldGet(field, mesh=tmpMesh, meshloc=meshloc, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return

          ! Create PointList from Mesh
          pointlist=ESMF_PointListCreate(tmpMesh, meshloc, addOrigCoords=addOrigCoords, &
               maskValues=maskValues, &
               rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return

         ! Record that we created the PointList
         createdTmpPointList=.true.
             
       else if (geomtype .eq. ESMF_GEOMTYPE_XGRID) then

          ! Get information about XGrid from field
          call ESMF_FieldGet(field, xgrid=xgrid, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return
          
          ! Get XGrid Mesh
          call ESMF_XGridGet(xgrid, mesh=tmpMesh, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return

          ! Create PointList from Mesh
          ! (Until we have an XGrid location indicator, assume center/element) 
          pointlist=ESMF_PointListCreate(tmpMesh, ESMF_MESHLOC_ELEMENT, addOrigCoords=addOrigCoords, &
               maskValues=maskValues, &
               rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return

          ! Record that we created the PointList
          createdTmpPointList=.true.

       else if (geomtype .eq. ESMF_GEOMTYPE_LOCSTREAM) then

          ! Get locstream from field
          call ESMF_FieldGet(field, locStream=tmpLocStream, rc=localrc)
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
            ESMF_CONTEXT, rcToReturn=rc)) return


          ! Create PointList 
          pointlist=ESMF_PointListCreate(tmpLocStream, &
               maskValues=maskValues, addOrigCoords=addOrigCoords, &
               rc=localrc)          
          if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
               ESMF_CONTEXT, rcToReturn=rc)) return

          ! Record that we created the PointList
          createdTmpPointList=.true.

       else
          call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_BAD, &
               msg=" Unrecognized geometry type in ESMF Field", &
               ESMF_CONTEXT, rcToReturn=rc)
          return
        endif


    end subroutine getPointListOnFieldLoc