Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in), | optional | :: | rcToCheck | ||
type(ESMF_KeywordEnforcer), | optional | :: | keywordEnforcer | |||
character(len=*), | intent(in), | optional | :: | msg | ||
integer, | intent(in), | optional | :: | line | ||
character(len=*), | intent(in), | optional | :: | file | ||
character(len=*), | intent(in), | optional | :: | method | ||
integer, | intent(inout), | optional | :: | rcToReturn | ||
type(ESMF_Log), | intent(inout), | optional | :: | log |
recursive function ESMF_LogFoundError(rcToCheck, keywordEnforcer, & msg, line, file, method, & rcToReturn, log) result (LogFoundError) ! ! !RETURN VALUE: logical :: LogFoundError ! ! !ARGUMENTS: ! integer, intent(in), optional :: rcToCheck type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below character(len=*), intent(in), optional :: msg integer, intent(in), optional :: line character(len=*), intent(in), optional :: file character(len=*), intent(in), optional :: method integer, intent(inout), optional :: rcToReturn type(ESMF_Log), intent(inout), optional :: log ! ! !STATUS: ! \begin{itemize} ! \item\apiStatusCompatibleVersion{5.2.0r} ! \end{itemize} ! ! !DESCRIPTION: ! This function returns {\tt .true.} when {\tt rcToCheck} indicates ! an return code other than {\tt ESMF\_SUCCESS}, otherwise it returns ! {\tt .false.}. ! If an error is indicated, a ESMF predefined error message ! will be written to the {\tt ESMF\_Log} along with a user added {\tt msg}, ! {\tt line}, {\tt file} and {\tt method}. ! ! The arguments are: ! \begin{description} ! ! \item [{[rcToCheck]}] ! Return code to check. Default is {\tt ESMF\_SUCCESS}. ! \item [{[msg]}] ! User-provided message string. ! \item [{[line]}] ! Integer source line number. Expected to be set by ! using the preprocessor {\tt \_\_LINE\_\_} macro. ! \item [{[file]}] ! User-provided source file name. ! \item [{[method]}] ! User-provided method string. ! \item [{[rcToReturn]}] ! If specified, when {\tt rcToCheck} indicates an error, ! set the {\tt rcToReturn} to the value of {\tt rcToCheck}. ! Otherwise, {\tt rcToReturn} is not modified. ! This is not the return code for this function; it allows ! the calling code to do an assignment of the error code ! at the same time it is testing the value. ! \item [{[log]}] ! An optional {\tt ESMF\_Log} object that can be used instead ! of the default Log. ! ! \end{description} ! !EOP integer:: rcToCheckInternal integer:: i logical:: masked type(ESMF_LogPrivate), pointer :: alog character(len=ESMF_MAXSTR) :: errmsg integer :: msglen ! set default return LogFoundError = .FALSE. if (.not.present(rcToCheck)) then rcToCheckInternal = ESMF_SUCCESS else rcToCheckInternal = rcToCheck endif ESMF_INIT_CHECK_SET_SHALLOW(ESMF_LogGetInit,ESMF_LogInit,log) nullify(alog) ! ensure that the association status is well defined if (present(log)) then if (log%logTableIndex > 0) then alog => ESMF_LogTable(log%logTableIndex) endif else if (ESMF_LogDefault%logTableIndex > 0) then alog => ESMF_LogTable(ESMF_LogDefault%logTableIndex) end if endif if (associated(alog)) then ESMF_INIT_CHECK_SET_SHALLOW(ESMF_LogPrivateGetInit,ESMF_LogPrivateInit,alog) if (alog%traceFlag) then call ESMF_LogWrite ('called: ' // ESMF_METHOD, ESMF_LOGMSG_TRACE, & line=line, file=file, method=method, log=log) end if ! check the error code if (rcToCheckInternal /= ESMF_SUCCESS) then masked = .false. do i=1, alog%errorMaskCount if (alog%errorMask(i) == rcToCheckInternal) masked = .true. enddo if (.not.masked) then call ESMF_Breakpoint() ! no-op to assist debugging call ESMF_LogRc2Msg (rcToCheckInternal, errmsg, msglen) if (present(msg)) then errmsg = errmsg(:msglen) // " - " // msg msglen = len_trim (errmsg) end if call ESMF_LogWrite(errmsg(:msglen), ESMF_LOGMSG_ERROR, & line=line, file=file, method=method, log=log) LogFoundError=.TRUE. if (present(rcToReturn)) rcToReturn = rcToCheckInternal endif endif else if (rcToCheckInternal /= ESMF_SUCCESS) then LogFoundError=.TRUE. if (present(rcToReturn)) rcToReturn = rcToCheckInternal end if endif end function ESMF_LogFoundError