function ESMF_MeshCreateFromIntPtr(mesh_pointer, rc)
!
! !RETURN VALUE:
type(ESMF_Mesh) :: ESMF_MeshCreateFromIntPtr
! !ARGUMENTS:
type(ESMF_Pointer), intent(in) :: mesh_pointer
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Create an empty mesh.
!
! \begin{description}
! \item [parametricDim]
! Dimension of the topology of the Mesh. (E.g. a mesh constructed of squares would
! have a parametric dimension of 2, whereas a Mesh constructed of cubes would have one
! of 3.)
! \item[spatialDim]
! The number of coordinate dimensions needed to describe the locations of the nodes
! making up the Mesh. For a manifold, the spatial dimension can be larger than the
! parametric dim (e.g. the 2D surface of a sphere in 3D space), but it can't be smaller.
! \item [{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOPI
!------------------------------------------------------------------------------
integer :: localrc
integer :: numNode, numElem
if(present(rc)) rc = ESMF_RC_NOT_IMPL
! initialize return code; assume routine not implemented
! Create internal structure and Set pointer
call C_ESMC_MeshCreateFromIntPtr(ESMF_MeshCreateFromIntPtr%this, &
mesh_pointer, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Check init status of arguments
ESMF_INIT_SET_CREATED(ESMF_MeshCreateFromIntPtr)
! Create two distgrids, one for nodes and one for elements
call C_ESMC_MeshCreateNodeDistGrid(ESMF_MeshCreateFromIntPtr, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call C_ESMC_MeshCreateElemDistGrid(ESMF_MeshCreateFromIntPtr, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Set as fully created
call C_ESMC_MeshSetStatus(ESMF_MeshCreateFromIntPtr, ESMF_MESHSTATUS_COMPLETE)
if(present(rc)) rc = ESMF_SUCCESS
end function ESMF_MeshCreateFromIntPtr