456 use netcdf,
only: nf90_enotvar, nf90_einval
460 public :: nf90_enotvar, nf90_einval
469 integer,
private,
save :: errno =
dc_noerr
472 integer,
private,
save :: cause_int =
dc_noerr
475 logical,
private,
save :: cause_int_valid = .false.
478 character(STRING),
private,
save :: cause_string =
""
481 character(STRING),
private,
save :: cause_location =
""
619 use netcdf,
only: nf90_strerror
620 character(len = *),
intent(out):: msg
621 character(len = STRING):: message
622 character(len = 20):: errno_c
623 character(len = 20):: cause_int_c
627 msg =
' function not implemented'
633 write(message,
"(': dimension number', i4, ' is out of range')") cause_int
636 msg =
'(' // trim(cause_string) //
'): unknown dimension name'
638 msg =
' variable not opened'
640 msg =
' allocate/deallocate error'
642 msg =
' dimension variable has no dimension'
644 msg =
' dimension variable has many dimensions'
646 msg =
' dimension variable has another dimension'
648 msg =
' specified dimensional variable not on the same file'
650 msg =
' arguments (' // trim(cause_string) //
') array size mismatch'
652 msg =
' dimension matching failed'
654 msg =
' variable already limited'
656 msg =
' variable type not supported'
658 msg =
' character length not enough'
660 msg =
' NC_UNLIMITED dimension is not found'
662 msg =
' invalid attribute name'
664 msg =
' invalid allocated size'
666 msg =
' rank of data and argument are mismatch (' // trim(cause_string) //
')'
668 msg =
' URL (' // trim(cause_string) //
') is not found'
670 msg =
' (' // trim(cause_string) //
') is not gtool4 comma-graphy (ex. "time=100.0,x=10:20,y=^1:^5")'
676 msg =
' invalid GrADS file'
682 msg =
' object (' // trim(cause_string) //
') is not initialized'
684 msg =
' object (' // trim(cause_string) //
') is already initialized'
686 msg =
' unit (' // trim(cause_string) //
') is invalid'
688 write(message,
'(" calendar type (", i4, ") is invalid")') cause_int
691 msg =
' time zone (' // trim(cause_string) //
') is invalid'
693 msg =
' filename is empty'
695 msg =
' file open mode (' // trim(cause_string) //
') is invalid'
697 msg =
' available unit number is not found within (' // trim(cause_string) //
')'
699 msg =
' file (' // trim(cause_string) //
') is not found'
701 msg =
' file (' // trim(cause_string) //
') is not readable'
703 msg =
' file (' // trim(cause_string) //
') is not writable'
705 msg =
' negative value is invalid for (' // trim(cause_string) //
')'
707 msg =
' lack of arguments (' // trim(cause_string) //
')'
709 msg =
' argument (' // trim(cause_string) //
') is not associated'
711 msg =
' entry of (' // trim(cause_string) //
') is not found'
713 msg =
' dimensional time can not be converted into nondimensional time'
715 msg =
' nondimensional time can not be converted into dimensional time'
717 msg =
' number is too large for time'
719 msg =
' invalid expression of date'
721 msg =
' calendar and date are inconsistent'
727 msg =
' operation (' // trim(cause_string) //
') not allowed in data mode'
729 msg =
' operation (' // trim(cause_string) //
') not allowed in define mode'
731 msg =
' different intervals are applied to a file (' // trim(cause_string) //
')'
733 msg =
' name (' // trim(cause_string) //
') is invalid'
735 msg =
' GT_HISTORY correspond to (' // trim(cause_string) //
') is not terminated'
737 msg =
' (' // trim(cause_string) //
') does not depend on time'
739 msg =
' variable name (' // trim(cause_string) //
') is invalid'
741 msg =
' time dimension is not found'
743 msg =
' axis or weight (' // trim(cause_string) //
') is not found'
745 msg =
' variable name (' // trim(cause_string) //
') is already used'
747 msg =
' already register of variables is fixed by (' // trim(cause_string) //
')'
749 msg =
' slice options are invalid (' // trim(cause_string) //
')'
751 msg =
' invalid newfile interval (' // trim(cause_string) //
')'
753 write(message,
'("(", i4, ")")') cause_int
755 msg =
' variable (' // trim(cause_string) //
') depends on ' // trim(message) //
' dimensions'
757 msg =
' (' // trim(cause_string) //
') can not be divided'
759 msg =
' terminus options are invalid (' // trim(cause_string) //
')'
761 msg =
' origin options are invalid (' // trim(cause_string) //
')'
763 msg =
' data of axis (' // trim(cause_string) //
') for MPI is lack'
771 if (len(trim(adjustl(cause_string))) < 1)
then
772 cause_string =
'Unknown error'
774 if (cause_int_valid)
then
775 write(cause_int_c,
"(i8)") cause_int
776 msg = trim(cause_string) //
' (' // trim(adjustl(cause_int_c)) //
')'
778 msg = trim(cause_string)
783 write(errno_c,
"(i8)") errno
784 msg =
'*** ERROR (Code ' // trim(adjustl(errno_c)) // &
785 &
') [' // trim(cause_location) //
'] *** ' // &
790 if (len(cause_string) > 0)
then
791 message = nf90_strerror(errno)
792 write(errno_c,
"(i8)") errno
793 msg =
'*** ERROR (Code ' // trim(adjustl(errno_c)) // &
794 &
') [' // trim(cause_location) // &
795 &
'(' // trim(cause_string) //
')] *** ' // &
797 else if (cause_int_valid)
then
798 message = nf90_strerror(errno)
799 write(errno_c,
"(i8)") errno
800 write(cause_int_c,
"(i8)") cause_int
801 msg =
'*** ERROR (Code ' // trim(adjustl(errno_c)) // &
802 &
') [' // trim(cause_location) // &
803 &
'(' // trim(adjustl(cause_int_c)) //
')] *** ' // &
806 message = nf90_strerror(errno)
807 write(errno_c,
"(i8)") errno
808 msg =
'*** ERROR (Code ' // trim(adjustl(errno_c)) // &
809 &
') [' // trim(cause_location) //
'] *** ' // &
891 integer,
intent(in) :: number
892 character(len = *),
intent(in) :: where
893 logical,
intent(out),
optional :: err
894 character(len = *),
intent(in),
optional :: cause_c
895 integer,
intent(in),
optional :: cause_i
897 if (
present(err))
then
903 cause_location =
where
904 if (
present(cause_c))
then
905 cause_string = trim(cause_c)
909 if (
present(cause_i))
then
911 cause_int_valid = .true.
913 cause_int_valid = .false.
929subroutine dumperror()
933 character(len = STRING):: message
937end subroutine dumperror
手続引用仕様. いずれ差し替えられるように外部関数にしておく。
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public gt_ebadhistory
integer, parameter, public gt_ebadvar
integer, parameter, public usr_errno
-1000 以下: ユーザー定義
integer, parameter, public gt_enomatchdim
integer, parameter, public gt_edimotherdim
integer, parameter, public gt_echarshort
integer, parameter, public gt_eotherfile
integer, parameter, public dc_ebadunit
integer, parameter, public hst_enottermgthist
integer, parameter, public gt_enomem
integer, parameter, public dc_enoassoc
integer, parameter, public hst_ebadslice
integer, parameter, public gr_enotgr
-300 以下: GrADS 入出力のエラー
integer, parameter, public dc_enodimtime
integer function, public errorcode()
integer, parameter, public hst_ebadvarname
integer, parameter, public dc_enotinit
-400 以下: dc ユーティリティのエラー
integer, parameter, public dc_ealreadyinit
integer, parameter, public gt_enounlimitdim
integer, parameter, public gt_efake
正のエラー番号は libc システムエラーメッセージのために あけてある。システム依存性が大きく、非常に大きな数値も 用いられるので空き領域を確保するのは困難である。
integer, parameter, public dc_ebadfileopmode
integer, parameter, public hst_eintfile
integer, parameter, public dc_earglack
integer, parameter, public gt_edimnodim
integer, parameter, public hst_enoaxisname
integer, parameter, public hst_ebadorigin
integer, parameter, public gt_ebaddimname
integer, parameter, public dc_noerr
エラー等を保持
integer, parameter, public dc_enegative
integer, parameter, public dc_etoolargetime
integer, parameter, public gt_erankmismatch
integer, parameter, public hst_ealreadyregvarfix
integer, parameter, public hst_eindefine
integer, parameter, public dc_enofileread
integer, parameter, public gt_ebadgt4commagraphy
integer, parameter, public hst_ebadterminus
integer, parameter, public hst_enodependtime
integer, parameter, public gt_eargsizemismatch
integer, parameter, public gt_ebadallocatesize
integer, parameter, public gt_edimmultidim
integer, parameter, public gt_ebadattrname
integer, parameter, public dc_efilenameempty
integer, parameter, public gt_elimited
integer, parameter, public gt_enotvar
integer, parameter, public hst_emaxdimsdepended
integer, parameter, public hst_eindivisible
integer, parameter, public dc_ebaddate
integer, parameter, public hst_empinoaxisdata
integer, parameter, public dc_ebadcaltype
integer, parameter, public hst_evarinuse
integer, parameter, public dc_ebadtimezone
integer, parameter, public hst_enotindefine
-500 以下: データ入出力層のエラー
integer, parameter, public dc_enofilewrite
integer, parameter, public dc_edimtime
integer, parameter, public dc_enofileexist
integer, parameter, public gt_enoturl
integer, parameter, public gt_enomoredims
-101 以下: データ構造のエラー
integer, parameter, public dc_enounitnum
integer, parameter, public hst_ebadname
integer, parameter, public dc_enoentry
subroutine, public geterrormessage(msg)
integer, parameter, public hst_enotimedim
integer, parameter, public dc_einconsistcaldate
integer, parameter, public hst_ebadnewfileint
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
システムに依存する手続きのインタフェースを提供します
subroutine, public abortprogram(message)
プログラムを異常終了させます