Class | dc_error |
In: |
src/dc_error.f90
|
msg : | character(len = *), intent(out) |
subroutine GetErrorMessage(msg) character(len = *), intent(out):: msg character(len = 180):: message continue select case(errno) case(GT_EFAKE) msg = " function not implemented" ! ! -101 以下: データ構造のエラー ! case(GT_ENOMOREDIMS) write(message, "(': dimension number', i4, ' is out of range')") cause_int msg = trim(message) case(GT_EBADDIMNAME) msg = '(' // trim(cause_string) // '): unknown dimension name' case(GT_ENOTVAR) msg = " variable not opened" case(GT_ENOMEM) msg = " allocate/deallocate error" case(GT_EDIMNODIM) msg = " dimension variable has no dimension" case(GT_EDIMMULTIDIM) msg = " dimension variable has many dimensions" case(GT_EDIMOTHERDIM) msg = " dimension variable has another dimension" case(GT_EOTHERFILE) msg = " specified dimensional variable not on the same file" case(GT_EARGSIZEMISMATCH) msg = " argument array size mismatch" case(GT_ENOMATCHDIM) msg = " dimension matching failed" case(GT_ELIMITED) msg = " variable already limited" case(GT_EBADVAR) msg = " variable type not supported" case(GT_ECHARSHORT) msg = " character length not enough" case(GT_ENOUNLIMITDIM) msg = " NC_UNLIMITED dimension is not found" case(GT_EBADATTRNAME) msg = " invalid attribute name" ! ! -200 以下: 可視化構造のエラー ! case(GT_EFIGNOHAXIS) msg = " hozirontal axis is missing" case(GT_EFIGNOVAXIS) msg = " vertical axis is missing" case(GT_EBADLINK) msg = " bad variable reference" ! ! -300 以下: GrADS 入出力のエラー ! case(GR_ENOTGR) msg = " invalid GrADS file" ! ! -1000 以下: ユーザー定義 ! case(USR_ECHAR) msg = trim(cause_string) case(USR_EINT) msg = trim(cause_string) // ' (' // trim(toChar(cause_int)) // ')' case default goto 1000 end select msg = '*** ERROR (Code ' // trim(toChar(errno)) // ') [' // trim(cause_location) // '] *** ' // trim(msg) return 1000 continue if (len(cause_string) > 0) then message = nf_strerror(errno) msg = '*** ERROR (Code ' // trim(toChar(errno)) // ') [' // trim(cause_location) // '(' // trim(cause_string) // ')] *** ' // trim(message) else if (cause_int /= 0) then message = nf_strerror(errno) msg = '*** ERROR (Code ' // trim(toChar(errno)) // ') [' // trim(cause_location) // '(' // trim(toChar(cause_int)) // ')] *** ' // trim(message) else message = nf_strerror(errno) msg = '*** ERROR (Code ' // trim(toChar(errno)) // ') [' // trim(cause_location) // '] *** ' // trim(message) endif end subroutine
number : | integer, intent(in)
| ||
where : | character(len = *), intent(in)
| ||
err : | logical, intent(out), optional | ||
cause_c : | character(len = *), intent(in), optional
| ||
cause_i : | integer, intent(in), optional
|
プログラムを終了する。
subroutine StoreError(number, where, err, cause_c, cause_i) integer, intent(in) :: number ! エラーコード character(len = *), intent(in) :: where ! エラー発生個所 logical, intent(out), optional :: err character(len = *), intent(in), optional :: cause_c! 文字型メッセージ integer, intent(in), optional :: cause_i! 整数型メッセージ continue errno = number cause_location = where if (present(cause_c)) then cause_string = trim(cause_c) else cause_string = "" endif if (present(cause_i)) cause_int = cause_i if (present(err)) then err = (number /= DC_NOERR) return endif if (number == DC_NOERR) return call DumpError end subroutine