function ESMF_MeshCreateFromFileOld(filename, fileformat, keywordEnforcer, &
convertToDual, addUserArea, maskFlag, varname, &
nodalDistgrid, elementDistgrid, name, rc)
!
!
! !RETURN VALUE:
type(ESMF_Mesh) :: ESMF_MeshCreateFromFileOld
! !ARGUMENTS:
character(len=*), intent(in) :: filename
type(ESMF_FileFormat_Flag), intent(in) :: fileformat
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
logical, intent(in), optional :: convertToDual
logical, intent(in), optional :: addUserArea
type(ESMF_MeshLoc), intent(in), optional :: maskFlag
character(len=*), intent(in), optional :: varname
type(ESMF_DistGrid), intent(in), optional :: nodalDistgrid
type(ESMF_DistGrid), intent(in), optional :: elementDistgrid
character(len=*), intent(in), optional :: name
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
!
! {\em WARNING:} This is the deprecated ESMF\_MeshCreateFromFileOld() interface. It is being kept
! as a backup during the 8.3 release in case there are issues with the new implementation. However,
! this interface will be removed in the 8.4 release.
!
! Create a Mesh from a file. Provides options to convert to 3D and in the case of SCRIP
! format files, allows the dual of the mesh to be created.
!
! This call is {\em collective} across the current VM.
!
! \begin{description}
! \item [filename]
! The name of the grid file
! \item[fileformat]
! The file format. The valid options are {\tt ESMF\_FILEFORMAT\_SCRIP}, {\tt ESMF\_FILEFORMAT\_ESMFMESH} and
! {\tt ESMF\_FILEFORMAT\_UGRID}.
! Please see Section~\ref{const:fileformatflag} for a detailed description of the options.
! \item[{[convertToDual]}]
! if {\tt .true.}, the mesh will be converted to its dual. If not specified,
! defaults to {\tt .false.}.
! \item[{[addUserArea]}]
! if {\tt .true.}, the cell area will be read in from the GRID file. This feature is
! only supported when the grid file is in the SCRIP or ESMF format. If not specified,
! defaults to {\tt .false.}.
! \item[{[maskFlag]}]
! If maskFlag is present, generate the mask using the missing\_value attribute defined in 'varname'
! This flag is only supported when the grid file is in the UGRID format.
! The value could be either {\tt ESMF\_MESHLOC\_NODE} or {\tt ESMF\_MESHLOC\_ELEMENT}. If the value is
! {\tt ESMF\_MESHLOC\_NODE}, the node mask will be generated and the variable has to be
! defined on the "node" (specified by its {\tt location} attribute). If the value is
! {\tt ESMF\_MESHLOC\_ELEMENT}, the element mask will be generated and the variable has to be
! defined on the "face" of the mesh. If the variable is not defined on the right location,
! no mask will be generated. If not specified, no mask will be generated.
! \item[{[varname]}]
! If maskFlag is present, provide a variable name stored in the UGRID file and
! the mask will be generated using the missing value of the data value of
! this variable. The first two dimensions of the variable has to be the
! the longitude and the latitude dimension and the mask is derived from the
! first 2D values of this variable even if this data is 3D, or 4D array. If not
! specified, defaults to empty string.
! \item [{[nodalDistgrid]}]
! A Distgrid describing the user-specified distribution of
! the nodes across the PETs.
! \item [{[elementDistgrid]}]
! A Distgrid describing the user-specified distribution of
! the elements across the PETs.
! \item [{[name]}]
! The name of the Mesh.
! \item [{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOPI
!------------------------------------------------------------------------------
logical:: localConvertToDual ! local flag
logical:: localAddUserArea
type(ESMF_Mesh) :: myMesh
integer:: localrc
! Set Defaults
if (present(convertToDual)) then
localConvertToDual = convertToDual
else
localConvertToDual = .false.
endif
if (present(addUserArea)) then
localAddUserArea = addUserArea
else
localAddUserArea = .false.
endif
if (present(maskFlag) .and. .not. present(varname)) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, &
msg="- need varname argument to create mask", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
if (fileformat == ESMF_FILEFORMAT_SCRIP) then
myMesh = ESMF_MeshCreateFromScrip(filename, localConvertToDual, &
addUserArea=localAddUserArea, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
elseif (fileformat == ESMF_FILEFORMAT_ESMFMESH) then
myMesh = ESMF_MeshCreateFromUnstruct(filename, &
addUserArea=localAddUserArea, &
convertToDual=localConvertToDual, &
fileformat=fileformat, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
elseif (fileformat == ESMF_FILEFORMAT_UGRID) then
! Warning message about add user area
if (localAddUserArea) then
call ESMF_LogWrite("ESMF does not currently support " // &
"user areas in UGRID format, so user areas will " // &
"not be used for the UGRID file.", &
ESMF_LOGMSG_WARNING, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
endif
if (present(maskFlag)) then
myMesh = ESMF_MeshCreateFromUnstruct(filename, &
fileformat=fileformat, &
convertToDual=localConvertToDual, &
maskFlag=maskFlag, varname=varname, &
rc=localrc)
else
myMesh = ESMF_MeshCreateFromUnstruct(filename, &
fileformat=fileformat, &
convertToDual=localConvertToDual, &
rc=localrc)
endif
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
else
call ESMF_LogSetError(rcToCheck=ESMF_RC_ARG_WRONG, &
msg="- unrecognized fileformat", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
if (present(elementDistgrid) .and. present(nodalDistgrid)) then
ESMF_MeshCreateFromFileOld = ESMF_MeshCreateRedist(myMesh, &
nodalDistgrid=nodalDistgrid, &
elementDistgrid=elementDistgrid, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_MeshDestroy(myMesh)
elseif (present(elementDistgrid)) then
ESMF_MeshCreateFromFileOld = ESMF_MeshCreateRedist(myMesh, &
elementDistgrid=elementDistgrid, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_MeshDestroy(myMesh)
elseif (present(nodalDistgrid)) then
ESMF_MeshCreateFromFileOld = ESMF_MeshCreateRedist(myMesh, &
nodalDistgrid=nodalDistgrid, rc=localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
call ESMF_MeshDestroy(myMesh)
else
ESMF_MeshCreateFromFileOld = myMesh
endif
! Set the name in Base object
if (present(name)) then
call c_ESMC_SetName(ESMF_MeshCreateFromFileOld, "Mesh", name, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
endif
if (present(rc)) rc=ESMF_SUCCESS
return
end function ESMF_MeshCreateFromFileOld