Error handling module. More...
Data Types | |
| interface | dumperror |
| Procedure reference specification. Made as an external function to be replaceable in the future. More... | |
Functions/Subroutines | |
| integer function, public | errorcode () |
| subroutine, public | geterrormessage (msg) |
| subroutine, public | storeerror (number, where, err, cause_c, cause_i) |
Variables | |
| integer, parameter, public | dc_noerr = 0 |
| Error storage variables | |
| integer, parameter, public | gt_efake = -100 |
| Positive error numbers are reserved for libc system error messages. Due to high system dependency and very large values used, it is difficult to reserve empty space. | |
| integer, parameter, public | gt_enomoredims = -101 |
| -101 or less: Data structure errors | |
| integer, parameter, public | gt_edimnodim = -102 |
| integer, parameter, public | gt_edimmultidim = -103 |
| integer, parameter, public | gt_edimotherdim = -104 |
| integer, parameter, public | gt_ebaddimname = -105 |
| integer, parameter, public | gt_enotvar = -106 |
| integer, parameter, public | gt_enomem = -107 |
| integer, parameter, public | gt_eotherfile = -108 |
| integer, parameter, public | gt_eargsizemismatch = -109 |
| integer, parameter, public | gt_enomatchdim = -110 |
| integer, parameter, public | gt_elimited = -111 |
| integer, parameter, public | gt_ebadvar = -112 |
| integer, parameter, public | gt_echarshort = -113 |
| integer, parameter, public | gt_enounlimitdim = -114 |
| integer, parameter, public | gt_ebadattrname = -115 |
| integer, parameter, public | gt_ebadhistory = -116 |
| integer, parameter, public | gt_ebadallocatesize = -117 |
| integer, parameter, public | gt_erankmismatch = -118 |
| integer, parameter, public | gt_enoturl = -119 |
| integer, parameter, public | gt_ebadgt4commagraphy = -120 |
| integer, parameter, public | gr_enotgr = -300 |
| -300 or less: GrADS I/O errors | |
| integer, parameter, public | dc_enotinit = -400 |
| -400 or less: DC utilities errors | |
| integer, parameter, public | dc_ealreadyinit = -401 |
| integer, parameter, public | dc_ebadunit = -402 |
| integer, parameter, public | dc_ebadcaltype = -403 |
| integer, parameter, public | dc_ebadtimezone = -404 |
| integer, parameter, public | dc_efilenameempty = -405 |
| integer, parameter, public | dc_ebadfileopmode = -406 |
| integer, parameter, public | dc_enounitnum = -407 |
| integer, parameter, public | dc_enofileexist = -408 |
| integer, parameter, public | dc_enofileread = -409 |
| integer, parameter, public | dc_enofilewrite = -410 |
| integer, parameter, public | dc_enegative = -411 |
| integer, parameter, public | dc_earglack = -412 |
| integer, parameter, public | dc_enoassoc = -413 |
| integer, parameter, public | dc_enoentry = -414 |
| integer, parameter, public | dc_enodimtime = -415 |
| integer, parameter, public | dc_edimtime = -416 |
| integer, parameter, public | dc_etoolargetime = -417 |
| integer, parameter, public | dc_ebaddate = -418 |
| integer, parameter, public | dc_einconsistcaldate = -419 |
| integer, parameter, public | hst_enotindefine = -500 |
| -500 or less: Data I/O layer errors | |
| integer, parameter, public | hst_eindefine = -501 |
| integer, parameter, public | hst_eintfile = -502 |
| integer, parameter, public | hst_ebadname = -503 |
| integer, parameter, public | hst_enottermgthist = -504 |
| integer, parameter, public | hst_enodependtime = -505 |
| integer, parameter, public | hst_ebadvarname = -506 |
| integer, parameter, public | hst_enotimedim = -507 |
| integer, parameter, public | hst_enoaxisname = -508 |
| integer, parameter, public | hst_evarinuse = -509 |
| integer, parameter, public | hst_ealreadyregvarfix = -510 |
| integer, parameter, public | hst_ebadslice = -511 |
| integer, parameter, public | hst_ebadnewfileint = -512 |
| integer, parameter, public | hst_emaxdimsdepended = -513 |
| integer, parameter, public | hst_eindivisible = -514 |
| integer, parameter, public | hst_ebadterminus = -515 |
| integer, parameter, public | hst_ebadorigin = -516 |
| integer, parameter, public | hst_empinoaxisdata = -517 |
| integer, parameter, public | usr_errno = -1000 |
| -1000 or less: User-defined errors | |
Error handling module.
Error handling about parts of programs should be regulated definitely. Error means that input to the part of program is invalid, or expected operation can not be done, etc.
Procedures (procedures is generic name of subroutines and functions) provided to users by gtool5 library almost report error to invoker in the following two manner.
StoreError subroutine in dc_error module handle above all operations. See StoreError about the interface of it.
Programmers who add codes to gtool5 library must call StoreError with appropriate error code. And so values of error code and corresponding messages are listed as follows to figure out if a new error code is needed to declared. To use error codes mnemonic, require "netcdf_f77" module or include "netcdf.inc" (deprecated) about error codes with prefix NF_E, or require "dc_error" module about error codes with prefix GT_E and DC_E and HST_E. Error codes smaller than USR_ERRNO are saved as user-defined error codes.
Non error code that indicates normal (error-free) situation is DC_NOERR.
List of numerical values of error codes issues a guideline about declaration of new error codes. Give not numerical value but mnemonic of error code to source code.
Positive integer is not used as error codes.
NetCDF library might return "libc" error code "error". Numerical value of "errno" is no portable, so positive integer should be reserved for "errno".
Use following non error code by referring this "dc_error" module.
| Number | Mnemonic |
|---|---|
| 0 | DC_NOERR |
Use following error codes by referring this "netcdf_f77" module.
| Number | Mnemonic | Error message |
|---|---|---|
| 0 | NF_NOERR | No Error (non error code) |
| -33 | NF_EBADID | Not a netCDF id |
| -34 | NF_ENFILE | Too many netCDF files open |
| -35 | NF_EEXIST | netCDF file exists && NC_NOCLOBBER |
| -36 | NF_EINVAL | Invalid argument |
| -37 | NF_EPERM | Write to read only |
| -38 | NF_ENOTINDEFINE | Operation not allowed in data mode |
| -39 | NF_EINDEFINE | Operation not allowed in define mode |
| -40 | NF_EINVALCOORDS | Index exceeds dimension bound |
| -41 | NF_EMAXDIMS | NF_MAX_DIMS exceeded |
| -42 | NF_ENAMEINUSE | String match to name in use |
| -43 | NF_ENOTATT | Attribute not found |
| -44 | NF_EMAXATTS | NC_MAX_ATTRS exceeded |
| -45 | NF_EBADTYPE | Not a netCDF data type or _FillValue type mismatch |
| -46 | NF_EBADDIM | Invalid dimension id or name |
| -47 | NF_EUNLIMPOS | NC_UNLIMITED in the wrong index |
| -48 | NF_EMAXVARS | NF_MAX_VARS exceeded |
| -49 | NF_ENOTVAR | Variable not found |
| -50 | NF_EGLOBAL | Action prohibited on NC_GLOBAL varid |
| -51 | NF_ENOTNC | Not a netCDF file |
| -52 | NF_ESTS | In Fortran, string too short |
| -53 | NF_EMAXNAME | NC_MAX_NAME exceeded |
| -54 | NF_EUNLIMIT | NC_UNLIMITED size already in use |
| -55 | NF_ENORECVARS | NC_rec op when there are no record vars |
| -56 | NF_ECHAR | Attempt to convert between text & numbers |
| -57 | NF_EEDGE | Edge+start exceeds dimension bound |
| -58 | NF_ESTRIDE | Illegal stride |
| -59 | NF_EBADNAME | Attribute or variable name contains illegal characters |
| -60 | NF_ERANGE | Numeric conversion not representable |
| -61 | NF_ENOMEM | Memory allocation (malloc) failure |
| -62 | NF_EVARSIZE | One or more variable sizes violate format constraints |
| -63 | NF_EDIMSIZE | Invalid dimension size |
| -64 | NF_ETRUNC | File likely truncated or possibly corrupted |
| -62 to -99 | Reserved area for future extensions of netCDF |
Use following error codes by referring this "dc_error" module.
| Number | Mnemonic | Error message |
|---|---|---|
| -100 | GT_EFAKE | function not implemented |
| -101 | GT_ENOMOREDIMS | dimension number d is out of range |
| -102 | GT_EDIMNODIM | dimension variable has no dimension |
| -103 | GT_EDIMMULTIDIM | dimension variable has many dimensions |
| -104 | GT_EDIMOTHERDIM | dimension variable has another dimension |
| -105 | GT_EBADDIMNAME | cause_c: unknown dimension name |
| -106 | GT_ENOTVAR | variable not opened |
| -107 | GT_ENOMEM | allocate/deallocate error |
| -108 | GT_EOTHERFILE | specified dimensional variable not on the same file |
| -109 | GT_EARGSIZEMISMATCH | arguments (cause_c) array size mismatch |
| -110 | GT_ENOMATCHDIM | dimension matching failed |
| -111 | GT_ELIMITED | variable already limited |
| -112 | GT_EBADVAR | variable type not supported |
| -113 | GT_ECHARSHORT | character length not enough |
| -114 | GT_ENOUNLIMITDIM | NC_UNLIMITED dimension is not found |
| -115 | GT_EBADATTRNAME | invalid attribute name |
| -116 | GT_EBADHISTORY | invalid GT_HISTORY variable |
| -117 | GT_EBADALLOCATESIZE | invalid allocated size |
| -118 | GT_ERANKMISMATCH | rank of data and argument is mismatch (cause_c) |
| -119 | GT_ENOTURL | URL (cause_c) is not found |
| -120 | GT_EBADGT4COMMAGRAPHY | (cause_c) is not gtool4 comma-graphy |
| to -299 | Reserved area for future extensions of gtdata layer |
Use following error codes by referring this "dc_error" module.
| Number | Mnemonic | Error message |
|---|---|---|
| -300 | GR_ENOTGR | invalid GrADS file |
| to -399 | Reserved area for future extensions of GrADS data I/O layer |
Use following error codes by referring this "dc_error" module.
| Number | Mnemonic | Error message |
|---|---|---|
| -400 | DC_ENOTINIT | object (cause_c) is not initialized |
| -401 | DC_EALREADYINIT | object (cause_c) is already initialized |
| -402 | DC_EBADUNIT | unit (cause_c) is invalid |
| -403 | DC_EBADCALTYPE | calendar type (cause_i) is invalid |
| -404 | DC_EBADTIMEZONE | time zone (cause_c) is invalid |
| -405 | DC_EFILENAMEEMPTY | filename is empty |
| -406 | DC_EBADFILEOPMODE | file open mode (cause_c) is invalid |
| -407 | DC_ENOUNITNUM | available unit number is not found within (cause_c) |
| -408 | DC_ENOFILEEXIST | file (cause_c) is not found |
| -409 | DC_ENOFILEREAD | file (cause_c) is not readable |
| -410 | DC_ENOFILEWRITE | file (cause_c) is not writable |
| -411 | DC_ENEGATIVE | negative value is invalid for (cause_c) |
| -412 | DC_EARGLACK | lack of arguments (cause_c) |
| -413 | DC_ENOASSOC | argument (cause_c) is not associated |
| -414 | DC_ENOENTRY | entry of (cause_c) is not found |
| -415 | DC_ENODIMTIME | dimensional time can not be converted into nondimensional time |
| -416 | DC_EDIMTIME | nondimensional time can not be converted into dimensional time |
| -417 | DC_ETOOLARGETIME | number is too large for time |
| -418 | DC_EBADDATE | invalid expression of date |
| -419 | DC_EINCONSISTCALDATE | calendar and date are inconsistent |
| -420 to -499 | Reserved area for future extensions of DC utilities |
Use following error codes by referring this "dc_error" module.
| Number | Mnemonic | Error message |
|---|---|---|
| -500 | HST_ENOTINDEFINE | operation (cause_c) not allowed in data mode |
| -501 | HST_EINDEFINE | operation (cause_c) not allowed in define mode |
| -502 | HST_EINTFILE | different intervals are applied to a file (cause_c) |
| -503 | HST_EBADNAME | name (cause_c) is invalid |
| -504 | HST_ENOTTERMGTHIST | GT_HISTORY correspond to (cause_c) is not terminated |
| -505 | HST_ENODEPENDTIME | (cause_c) does not depend on time |
| -506 | HST_EBADVARNAME | variable name (cause_c) is invalid |
| -507 | HST_ENOTIMEDIM | time dimension is not found |
| -508 | HST_ENOAXISNAME | axis or weight (cause_c) is not found |
| -509 | HST_EVARINUSE | variable name (cause_c) is already used |
| -510 | HST_EALREADYREGVARFIX | already register of variables is fixed by (cause_c) |
| -511 | HST_EBADSLICE | slice options are invalid (cause_c) |
| -512 | HST_EBADNEWFILEINT | invalid newfile interval (cause_c) |
| -513 | HST_EMAXDIMSDEPENDED | variable (cause_c) depends on (cause_i) dimensions |
| -514 | HST_EINDIVISIBLE | (cause_c) can not be divided |
| -515 | HST_EBADTERMINUS | terminus options are invalid (cause_c) |
| -516 | HST_EBADORIGIN | origin options are invalid (cause_c) |
| -517 | HST_EMPINOAXISDATA | data of axis (cause_c) for MPI is lack |
Following error codes are reserved for future extensions.
| Number | Description |
|---|---|
| -600 to -999 | Reserved area for future extensions of gtool5 |
Error codes smaller than -1000 are saved for as user-defined error codes used by upper programs.
| Number | Mnemonic | Error message |
|---|---|---|
| -1000 to | USR_ERRNO | cause_c (cause_i) |
| integer function, public dc_error::errorcode |
Return an error code specified currently.
Definition at line 606 of file dc_error.f90.
| subroutine, public dc_error::geterrormessage | ( | character(len = *), intent(out) | msg | ) |
Return messages corresponding to an error code specified currently.
| [out] | msg | Error message string corresponding to the current error code |
Definition at line 618 of file dc_error.f90.
References dc_ealreadyinit, dc_earglack, dc_ebadcaltype, dc_ebaddate, dc_ebadfileopmode, dc_ebadtimezone, dc_ebadunit, dc_edimtime, dc_efilenameempty, dc_einconsistcaldate, dc_enegative, dc_enoassoc, dc_enodimtime, dc_enoentry, dc_enofileexist, dc_enofileread, dc_enofilewrite, dc_enotinit, dc_enounitnum, dc_etoolargetime, gr_enotgr, gt_eargsizemismatch, gt_ebadallocatesize, gt_ebadattrname, gt_ebaddimname, gt_ebadgt4commagraphy, gt_ebadvar, gt_echarshort, gt_edimmultidim, gt_edimnodim, gt_edimotherdim, gt_efake, gt_elimited, gt_enomatchdim, gt_enomem, gt_enomoredims, gt_enoturl, gt_enotvar, gt_enounlimitdim, gt_eotherfile, gt_erankmismatch, hst_ealreadyregvarfix, hst_ebadname, hst_ebadnewfileint, hst_ebadorigin, hst_ebadslice, hst_ebadterminus, hst_ebadvarname, hst_eindefine, hst_eindivisible, hst_eintfile, hst_emaxdimsdepended, hst_empinoaxisdata, hst_enoaxisname, hst_enodependtime, hst_enotimedim, hst_enotindefine, hst_enottermgthist, hst_evarinuse, and usr_errno.
| subroutine, public dc_error::storeerror | ( | 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 ) |
Error handling subroutine for typical procedures of library
Number of necessary arguments is two. Give integer error code to first argument number, and procedure name where the error occurs to second argument where. By default, like a following string is displayed to standard output, and the program aborts. Error message is determined by error code automatically. See error code list.
*** ERROR (Code number) [where] *** error_message *** ERROR (Code number) [where(cause_c)] *** error_message
In addition, for usage that users call StoreError as an error handling tool from the outside of gtool5 library, error codes smaller than USR_ERRNO is saved. When error codes smaller than USR_ERRNO is given, StoreError displays like a following string to standard output, and stops the program. dc_message module is prepared too. This module can be used more easily for message output and rise of error.
*** ERROR (Code number) [where] *** cause_c *** ERROR (Code number) [where] *** cause_c (cause_i)
| [in] | number | Error code |
| [in] | where | Place where error occurs |
| [out] | err | Exception handling flag. By default, when error code (excluding non error code) is given to number, the program display error message and aborts. If this err argument is given, .true. is substituted to err and the program does not abort. |
| [in] | cause_c | Character message |
| [in] | cause_i | Integer message |
Definition at line 890 of file dc_error.f90.
References sysdep::abortprogram(), dc_noerr, geterrormessage(), and dc_types::string.
| integer, parameter, public dc_error::dc_ealreadyinit = -401 |
Definition at line 535 of file dc_error.f90.
| integer, parameter, public dc_error::dc_earglack = -412 |
Definition at line 546 of file dc_error.f90.
| integer, parameter, public dc_error::dc_ebadcaltype = -403 |
Definition at line 537 of file dc_error.f90.
| integer, parameter, public dc_error::dc_ebaddate = -418 |
Definition at line 552 of file dc_error.f90.
| integer, parameter, public dc_error::dc_ebadfileopmode = -406 |
Definition at line 540 of file dc_error.f90.
| integer, parameter, public dc_error::dc_ebadtimezone = -404 |
Definition at line 538 of file dc_error.f90.
| integer, parameter, public dc_error::dc_ebadunit = -402 |
Definition at line 536 of file dc_error.f90.
| integer, parameter, public dc_error::dc_edimtime = -416 |
Definition at line 550 of file dc_error.f90.
| integer, parameter, public dc_error::dc_efilenameempty = -405 |
Definition at line 539 of file dc_error.f90.
| integer, parameter, public dc_error::dc_einconsistcaldate = -419 |
Definition at line 553 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enegative = -411 |
Definition at line 545 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enoassoc = -413 |
Definition at line 547 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enodimtime = -415 |
Definition at line 549 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enoentry = -414 |
Definition at line 548 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enofileexist = -408 |
Definition at line 542 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enofileread = -409 |
Definition at line 543 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enofilewrite = -410 |
Definition at line 544 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enotinit = -400 |
-400 or less: DC utilities errors
Definition at line 534 of file dc_error.f90.
| integer, parameter, public dc_error::dc_enounitnum = -407 |
Definition at line 541 of file dc_error.f90.
| integer, parameter, public dc_error::dc_etoolargetime = -417 |
Definition at line 551 of file dc_error.f90.
| integer, parameter, public dc_error::dc_noerr = 0 |
Error storage variables
Non-error code (no error)
Definition at line 468 of file dc_error.f90.
| integer, parameter, public dc_error::gr_enotgr = -300 |
-300 or less: GrADS I/O errors
Definition at line 530 of file dc_error.f90.
| integer, parameter, public dc_error::gt_eargsizemismatch = -109 |
Definition at line 515 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebadallocatesize = -117 |
Definition at line 523 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebadattrname = -115 |
Definition at line 521 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebaddimname = -105 |
Definition at line 511 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebadgt4commagraphy = -120 |
Definition at line 526 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebadhistory = -116 |
Definition at line 522 of file dc_error.f90.
| integer, parameter, public dc_error::gt_ebadvar = -112 |
Definition at line 518 of file dc_error.f90.
| integer, parameter, public dc_error::gt_echarshort = -113 |
Definition at line 519 of file dc_error.f90.
| integer, parameter, public dc_error::gt_edimmultidim = -103 |
Definition at line 509 of file dc_error.f90.
| integer, parameter, public dc_error::gt_edimnodim = -102 |
Definition at line 508 of file dc_error.f90.
| integer, parameter, public dc_error::gt_edimotherdim = -104 |
Definition at line 510 of file dc_error.f90.
| integer, parameter, public dc_error::gt_efake = -100 |
Positive error numbers are reserved for libc system error messages. Due to high system dependency and very large values used, it is difficult to reserve empty space.
Negative error numbers are used by netCDF. Allowing for some extensions, values up to -99 are not used.
Definition at line 503 of file dc_error.f90.
| integer, parameter, public dc_error::gt_elimited = -111 |
Definition at line 517 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enomatchdim = -110 |
Definition at line 516 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enomem = -107 |
Definition at line 513 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enomoredims = -101 |
-101 or less: Data structure errors
Definition at line 507 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enoturl = -119 |
Definition at line 525 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enotvar = -106 |
Definition at line 512 of file dc_error.f90.
| integer, parameter, public dc_error::gt_enounlimitdim = -114 |
Definition at line 520 of file dc_error.f90.
| integer, parameter, public dc_error::gt_eotherfile = -108 |
Definition at line 514 of file dc_error.f90.
| integer, parameter, public dc_error::gt_erankmismatch = -118 |
Definition at line 524 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ealreadyregvarfix = -510 |
Definition at line 567 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadname = -503 |
Definition at line 560 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadnewfileint = -512 |
Definition at line 569 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadorigin = -516 |
Definition at line 573 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadslice = -511 |
Definition at line 568 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadterminus = -515 |
Definition at line 572 of file dc_error.f90.
| integer, parameter, public dc_error::hst_ebadvarname = -506 |
Definition at line 563 of file dc_error.f90.
| integer, parameter, public dc_error::hst_eindefine = -501 |
Definition at line 558 of file dc_error.f90.
| integer, parameter, public dc_error::hst_eindivisible = -514 |
Definition at line 571 of file dc_error.f90.
| integer, parameter, public dc_error::hst_eintfile = -502 |
Definition at line 559 of file dc_error.f90.
| integer, parameter, public dc_error::hst_emaxdimsdepended = -513 |
Definition at line 570 of file dc_error.f90.
| integer, parameter, public dc_error::hst_empinoaxisdata = -517 |
Definition at line 574 of file dc_error.f90.
| integer, parameter, public dc_error::hst_enoaxisname = -508 |
Definition at line 565 of file dc_error.f90.
| integer, parameter, public dc_error::hst_enodependtime = -505 |
Definition at line 562 of file dc_error.f90.
| integer, parameter, public dc_error::hst_enotimedim = -507 |
Definition at line 564 of file dc_error.f90.
| integer, parameter, public dc_error::hst_enotindefine = -500 |
-500 or less: Data I/O layer errors
Definition at line 557 of file dc_error.f90.
| integer, parameter, public dc_error::hst_enottermgthist = -504 |
Definition at line 561 of file dc_error.f90.
| integer, parameter, public dc_error::hst_evarinuse = -509 |
Definition at line 566 of file dc_error.f90.
| integer, parameter, public dc_error::usr_errno = -1000 |
-1000 or less: User-defined errors
Definition at line 579 of file dc_error.f90.