subroutine ESMF_GridCommit(grid, status, defaultflag, rc)
!
! !ARGUMENTS:
type(ESMF_Grid), intent(inout) :: grid
type(ESMF_GridStatus_Flag), optional :: status ! NOT IMPLEMENTED
type(ESMF_DefaultFlag), optional :: defaultflag ! NOT IMPLEMENTED
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! This call is used to complete the {\tt grid} so that it is usable at
! the level indicated by the {\tt status} flag. For example, once committed
! with a {\tt status} value of {\tt ESMF\_GRIDSTATUS\_SHAPE\_READY}, the
! {\tt grid} will have sufficient size, dimCount, and distribution information to be
! used as the basis for allocating Field data. (The integration of
! Field and Grid classes has't yet happened, so you can't currently
! allocate Fields based on Grids no matter what the status.)
!
! It is necessary to call the {\tt ESMF\_GridCommit()} method after
! creating a Grid object using the {\tt ESMF\_GridEmptyCreate()} method
! and incrementally filling it in with {\tt ESMF\_GridSet()} calls. The
! {\tt EMF\_GridCommit()} call is a signal to the Grid that it can combine
! the pieces of information that it's received and finish building any
! necessary internal structures. For example, an {\tt ESMF\_GridCommit()}
! call with the {\tt status} flag set to
! {\tt ESMF\_GRIDSTATUS\_SHAPE\_READY} will trigger the {\tt grid} to
! build an internal DistGrid object that contains topology and distribution
! information.
!
! It's possible using the {\tt ESMF\_GridEmptyCreate()/ESMF\_GridSet()}
! approach that not all information is present when the {\tt ESMF\_GridCommit}
! call is made. If this is the case and the {\tt defaultflag} is set to
! {\tt ESMF\_USE\_DEFAULTS} the Grid will attempt to build any internal
! objects necessary to get to the desired {\tt status} by using reasonable
! defaults. If the {\tt defaultflag} is set to {\tt ESMF\_NO\_DEFAULTS} and
! any information is missing, the {\tt ESMF\_GridCommit} call will fail.
! If the {\tt defaultflag} argument is not passed in, {\it no} defaults
! are used.
!
! The arguments are:
! \begin{description}
! \item[{grid}]
! Grid object to commit.
! \item[{status}]
! Grid status to commit to. For valid values see section
! \ref{const:gridstatus}. [CURRENTLY NOT IMPLEMENTED]
! \item[{[defaultFlag]}]
! Indicates whether to use default values to achieve the desired
! grid status. The default value is {\tt ESMF\_NO\_DEFAULTS}.
! [CURRENTLY NOT IMPLEMENTED]
! \item[{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOPI
integer :: localrc ! local error status
! Initialize return code; assume failure until success is certain
localrc = ESMF_RC_NOT_IMPL
if (present(rc)) rc = ESMF_RC_NOT_IMPL
! Check init status of arguments
ESMF_INIT_CHECK_DEEP_SHORT(ESMF_GridGetInit, grid, rc)
! Check for Not Implemented options
if (present(status)) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_NOT_IMPL, &
msg="- status not yet implemented", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
if (present(defaultflag)) then
call ESMF_LogSetError(rcToCheck=ESMF_RC_NOT_IMPL, &
msg="- defaultflag not yet implemented", &
ESMF_CONTEXT, rcToReturn=rc)
return
endif
! Call C++ Subroutine to do the create
call c_ESMC_gridcommit(grid%this, localrc)
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! Return successfully
if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_GridCommit