Type | Intent | Optional | Attributes | Name | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type(ESMF_GridComp), | intent(inout) | :: | gridcomp | ||||||||||||||||||||||||
private subroutine userRoutine(gridcomp, rc)Arguments
|
|||||||||||||||||||||||||||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | ||||||||||||||||||||||||
integer, | intent(out), | optional | :: | userRc | |||||||||||||||||||||||
integer, | intent(out), | optional | :: | rc |
recursive subroutine ESMF_GridCompSetVM(gridcomp, userRoutine, keywordEnforcer, & userRc, rc) ! !ARGUMENTS: type(ESMF_GridComp), intent(inout) :: gridcomp interface subroutine userRoutine(gridcomp, rc) use ESMF_CompMod implicit none type(ESMF_GridComp) :: gridcomp ! must not be optional integer, intent(out) :: rc ! must not be optional end subroutine end interface type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below integer, intent(out), optional :: userRc integer, intent(out), optional :: rc ! ! !STATUS: ! \begin{itemize} ! \item\apiStatusCompatibleVersion{5.2.0r} ! \end{itemize} ! ! !DESCRIPTION: ! Optionally call into user provided {\tt userRoutine} which is responsible ! for setting Component's VM properties. ! ! The arguments are: ! \begin{description} ! \item[gridcomp] ! Gridded Component. ! \item[userRoutine] ! The Component writer must supply a subroutine with the exact interface ! shown above for the {\tt userRoutine} argument. Arguments in {\tt userRoutine} ! must not be declared as optional, and the types, intent and order must match. ! Prior to Fortran-2008, the subroutine must be either a module scope procedure, ! or an external procedure that has a matching interface block specified for it. ! An internal procedure which is contained within another procedure must not be used. ! From Fortran-2008 onwards, an internal procedure contained within either a main program ! or a module procedure may be used. If the internal procedure is contained within a ! module procedure, it is subject to initialization requirements. See: \ref{sec:AppDriverIntProc} ! ! The subroutine, when called by the framework, is expected to use any of the ! {\tt ESMF\_GridCompSetVMxxx()} methods to set the properties of the VM ! associated with the Gridded Component. ! \item[{[userRc]}] ! Return code set by {\tt userRoutine} before returning. ! \item[{[rc]}] ! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors. ! \end{description} ! !EOP !------------------------------------------------------------------------------ integer :: localrc ! local error status integer :: localUserRc ! initialize return code; assume routine not implemented if (present(rc)) rc = ESMF_RC_NOT_IMPL localrc = ESMF_RC_NOT_IMPL ESMF_INIT_CHECK_DEEP(ESMF_GridCompGetInit, gridcomp, rc) call c_ESMC_SetVM(gridcomp, userRoutine, localUserRc, localrc) if (ESMF_LogFoundError(localrc, & ESMF_ERR_PASSTHRU, & ESMF_CONTEXT, rcToReturn=rc)) return ! pass back userRc if (present(userRc)) userRc = localUserRc ! return successfully if (present(rc)) rc = ESMF_SUCCESS end subroutine ESMF_GridCompSetVM