gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
dc_error.f90
Go to the documentation of this file.
1!-----------------------------------------------------------------------
2! Copyright (c) 2000-2026 Gtool Development Group. All rights reserved.
3!-----------------------------------------------------------------------
453
455
456 use netcdf, only: nf90_enotvar, nf90_einval
457 use dc_types, only: string
458 implicit none
459 private
460 public :: nf90_enotvar, nf90_einval
461
464
468 integer, public, parameter :: dc_noerr = 0
469 integer, private, save :: errno = dc_noerr
470
472 integer, private, save :: cause_int = dc_noerr
473
475 logical, private, save :: cause_int_valid = .false.
476
478 character(STRING), private, save :: cause_string = ""
479
481 character(STRING), private, save :: cause_location = ""
482
484
502
503 integer, parameter, public:: gt_efake = -100
504
507 integer, parameter, public:: gt_enomoredims = -101
508 integer, parameter, public:: gt_edimnodim = -102
509 integer, parameter, public:: gt_edimmultidim = -103
510 integer, parameter, public:: gt_edimotherdim = -104
511 integer, parameter, public:: gt_ebaddimname = -105
512 integer, parameter, public:: gt_enotvar = -106
513 integer, parameter, public:: gt_enomem = -107
514 integer, parameter, public:: gt_eotherfile = -108
515 integer, parameter, public:: gt_eargsizemismatch = -109
516 integer, parameter, public:: gt_enomatchdim = -110
517 integer, parameter, public:: gt_elimited = -111
518 integer, parameter, public:: gt_ebadvar = -112
519 integer, parameter, public:: gt_echarshort = -113
520 integer, parameter, public:: gt_enounlimitdim = -114
521 integer, parameter, public:: gt_ebadattrname = -115
522 integer, parameter, public:: gt_ebadhistory = -116
523 integer, parameter, public:: gt_ebadallocatesize = -117
524 integer, parameter, public:: gt_erankmismatch = -118
525 integer, parameter, public:: gt_enoturl = -119
526 integer, parameter, public:: gt_ebadgt4commagraphy = -120
527
530 integer, parameter, public:: gr_enotgr = -300
531
534 integer, parameter, public:: dc_enotinit = -400
535 integer, parameter, public:: dc_ealreadyinit = -401
536 integer, parameter, public:: dc_ebadunit = -402
537 integer, parameter, public:: dc_ebadcaltype = -403
538 integer, parameter, public:: dc_ebadtimezone = -404
539 integer, parameter, public:: dc_efilenameempty = -405
540 integer, parameter, public:: dc_ebadfileopmode = -406
541 integer, parameter, public:: dc_enounitnum = -407
542 integer, parameter, public:: dc_enofileexist = -408
543 integer, parameter, public:: dc_enofileread = -409
544 integer, parameter, public:: dc_enofilewrite = -410
545 integer, parameter, public:: dc_enegative = -411
546 integer, parameter, public:: dc_earglack = -412
547 integer, parameter, public:: dc_enoassoc = -413
548 integer, parameter, public:: dc_enoentry = -414
549 integer, parameter, public:: dc_enodimtime = -415
550 integer, parameter, public:: dc_edimtime = -416
551 integer, parameter, public:: dc_etoolargetime = -417
552 integer, parameter, public:: dc_ebaddate = -418
553 integer, parameter, public:: dc_einconsistcaldate = -419
554
557 integer, parameter, public:: hst_enotindefine = -500
558 integer, parameter, public:: hst_eindefine = -501
559 integer, parameter, public:: hst_eintfile = -502
560 integer, parameter, public:: hst_ebadname = -503
561 integer, parameter, public:: hst_enottermgthist = -504
562 integer, parameter, public:: hst_enodependtime = -505
563 integer, parameter, public:: hst_ebadvarname = -506
564 integer, parameter, public:: hst_enotimedim = -507
565 integer, parameter, public:: hst_enoaxisname = -508
566 integer, parameter, public:: hst_evarinuse = -509
567 integer, parameter, public:: hst_ealreadyregvarfix = -510
568 integer, parameter, public:: hst_ebadslice = -511
569 integer, parameter, public:: hst_ebadnewfileint = -512
570 integer, parameter, public:: hst_emaxdimsdepended = -513
571 integer, parameter, public:: hst_eindivisible = -514
572 integer, parameter, public:: hst_ebadterminus = -515
573 integer, parameter, public:: hst_ebadorigin = -516
574 integer, parameter, public:: hst_empinoaxisdata = -517
575
576
579 integer, parameter, public:: usr_errno = -1000
580
582
591 interface
592 subroutine dumperror()
593 end subroutine dumperror
594 end interface
595
596contains
597
606 integer function errorcode() result(result)
607 result = errno
608 end function errorcode
609
618 subroutine geterrormessage(msg)
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
624 continue
625 select case(errno)
626 case(gt_efake)
627 msg = ' function not implemented'
628 !
629 ! -101 以下: データ構造のエラー
630 ! -101 or less: Error of data structure
631 !
632 case(gt_enomoredims)
633 write(message, "(': dimension number', i4, ' is out of range')") cause_int
634 msg = trim(message)
635 case(gt_ebaddimname)
636 msg = '(' // trim(cause_string) // '): unknown dimension name'
637 case(gt_enotvar)
638 msg = ' variable not opened'
639 case(gt_enomem)
640 msg = ' allocate/deallocate error'
641 case(gt_edimnodim)
642 msg = ' dimension variable has no dimension'
643 case(gt_edimmultidim)
644 msg = ' dimension variable has many dimensions'
645 case(gt_edimotherdim)
646 msg = ' dimension variable has another dimension'
647 case(gt_eotherfile)
648 msg = ' specified dimensional variable not on the same file'
650 msg = ' arguments (' // trim(cause_string) //') array size mismatch'
651 case(gt_enomatchdim)
652 msg = ' dimension matching failed'
653 case(gt_elimited)
654 msg = ' variable already limited'
655 case(gt_ebadvar)
656 msg = ' variable type not supported'
657 case(gt_echarshort)
658 msg = ' character length not enough'
659 case(gt_enounlimitdim)
660 msg = ' NC_UNLIMITED dimension is not found'
661 case(gt_ebadattrname)
662 msg = ' invalid attribute name'
664 msg = ' invalid allocated size'
665 case(gt_erankmismatch)
666 msg = ' rank of data and argument are mismatch (' // trim(cause_string) // ')'
667 case(gt_enoturl)
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")'
671 !
672 ! -300 以下: GrADS 入出力のエラー
673 ! -300 or less: Error of GrADS I/O
674 !
675 case(gr_enotgr)
676 msg = ' invalid GrADS file'
677 !
678 ! -400 以下: DC ユーティリティのエラー
679 ! -400 or less: Error of DC utilities
680 !
681 case(dc_enotinit)
682 msg = ' object (' // trim(cause_string) // ') is not initialized'
683 case(dc_ealreadyinit)
684 msg = ' object (' // trim(cause_string) // ') is already initialized'
685 case(dc_ebadunit)
686 msg = ' unit (' // trim(cause_string) // ') is invalid'
687 case(dc_ebadcaltype)
688 write(message, '(" calendar type (", i4, ") is invalid")') cause_int
689 msg = trim(message)
690 case(dc_ebadtimezone)
691 msg = ' time zone (' // trim(cause_string) // ') is invalid'
693 msg = ' filename is empty'
695 msg = ' file open mode (' // trim(cause_string) // ') is invalid'
696 case(dc_enounitnum)
697 msg = ' available unit number is not found within (' // trim(cause_string) // ')'
698 case(dc_enofileexist)
699 msg = ' file (' // trim(cause_string) // ') is not found'
700 case(dc_enofileread)
701 msg = ' file (' // trim(cause_string) // ') is not readable'
702 case(dc_enofilewrite)
703 msg = ' file (' // trim(cause_string) // ') is not writable'
704 case(dc_enegative)
705 msg = ' negative value is invalid for (' // trim(cause_string) // ')'
706 case(dc_earglack)
707 msg = ' lack of arguments (' // trim(cause_string) // ')'
708 case(dc_enoassoc)
709 msg = ' argument (' // trim(cause_string) // ') is not associated'
710 case(dc_enoentry)
711 msg = ' entry of (' // trim(cause_string) // ') is not found'
712 case(dc_enodimtime)
713 msg = ' dimensional time can not be converted into nondimensional time'
714 case(dc_edimtime)
715 msg = ' nondimensional time can not be converted into dimensional time'
716 case(dc_etoolargetime)
717 msg = ' number is too large for time'
718 case(dc_ebaddate)
719 msg = ' invalid expression of date'
721 msg = ' calendar and date are inconsistent'
722 !
723 ! -500 以下: データ入出力層のエラー
724 ! -500 or less: Error of data I/O layer
725 !
726 case(hst_enotindefine)
727 msg = ' operation (' // trim(cause_string) // ') not allowed in data mode'
728 case(hst_eindefine)
729 msg = ' operation (' // trim(cause_string) // ') not allowed in define mode'
730 case(hst_eintfile)
731 msg = ' different intervals are applied to a file (' // trim(cause_string) // ')'
732 case(hst_ebadname)
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'
738 case(hst_ebadvarname)
739 msg = ' variable name (' // trim(cause_string) // ') is invalid'
740 case(hst_enotimedim)
741 msg = ' time dimension is not found'
742 case(hst_enoaxisname)
743 msg = ' axis or weight (' // trim(cause_string) // ') is not found'
744 case(hst_evarinuse)
745 msg = ' variable name (' // trim(cause_string) // ') is already used'
747 msg = ' already register of variables is fixed by (' // trim(cause_string) // ')'
748 case(hst_ebadslice)
749 msg = ' slice options are invalid (' // trim(cause_string) // ')'
751 msg = ' invalid newfile interval (' // trim(cause_string) // ')'
753 write(message, '("(", i4, ")")') cause_int
754 msg = trim(message)
755 msg = ' variable (' // trim(cause_string) // ') depends on ' // trim(message) // ' dimensions'
756 case(hst_eindivisible)
757 msg = ' (' // trim(cause_string) // ') can not be divided'
758 case(hst_ebadterminus)
759 msg = ' terminus options are invalid (' // trim(cause_string) // ')'
760 case(hst_ebadorigin)
761 msg = ' origin options are invalid (' // trim(cause_string) // ')'
763 msg = ' data of axis (' // trim(cause_string) // ') for MPI is lack'
764
765 !
766 !
767 ! -1000 以下: ユーザー定義
768 ! -1000 or less: User-defined error
769 !
770 case(:usr_errno)
771 if (len(trim(adjustl(cause_string))) < 1) then
772 cause_string = 'Unknown error'
773 end if
774 if (cause_int_valid) then
775 write(cause_int_c, "(i8)") cause_int
776 msg = trim(cause_string) // ' (' // trim(adjustl(cause_int_c)) // ')'
777 else
778 msg = trim(cause_string)
779 end if
780 case default
781 goto 999
782 end select
783 write(errno_c, "(i8)") errno
784 msg = '*** ERROR (Code ' // trim(adjustl(errno_c)) // &
785 & ') [' // trim(cause_location) // '] *** ' // &
786 & trim(msg)
787 return
788
789999 continue
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) // ')] *** ' // &
796 & trim(message)
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)) // ')] *** ' // &
804 & trim(message)
805 else
806 message = nf90_strerror(errno)
807 write(errno_c, "(i8)") errno
808 msg = '*** ERROR (Code ' // trim(adjustl(errno_c)) // &
809 & ') [' // trim(cause_location) // '] *** ' // &
810 & trim(message)
811 endif
812 end subroutine geterrormessage
813
890 subroutine storeerror(number, where, err, cause_c, cause_i)
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
896 continue
897 if (present(err)) then
898 err = (number /= dc_noerr)
899 return
900 endif
901 if (number == dc_noerr) return
902 errno = number
903 cause_location = where
904 if (present(cause_c)) then
905 cause_string = trim(cause_c)
906 else
907 cause_string = ""
908 endif
909 if (present(cause_i)) then
910 cause_int = cause_i
911 cause_int_valid = .true.
912 else
913 cause_int_valid = .false.
914 end if
915 call dumperror
916 end subroutine storeerror
917
919end module dc_error
920
929subroutine dumperror()
930 use dc_types, only: string
931 use dc_error, only: geterrormessage
932 use sysdep, only: abortprogram
933 character(len = STRING):: message
934continue
935 call geterrormessage(message)
936 call abortprogram(message)
937end subroutine dumperror
Procedure reference specification. Made as an external function to be replaceable in the future.
Definition dc_error.f90:592
Error handling module.
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public gt_ebadhistory
Definition dc_error.f90:522
integer, parameter, public gt_ebadvar
Definition dc_error.f90:518
integer, parameter, public usr_errno
-1000 or less: User-defined errors
Definition dc_error.f90:579
integer, parameter, public gt_enomatchdim
Definition dc_error.f90:516
integer, parameter, public gt_edimotherdim
Definition dc_error.f90:510
integer, parameter, public gt_echarshort
Definition dc_error.f90:519
integer, parameter, public gt_eotherfile
Definition dc_error.f90:514
integer, parameter, public dc_ebadunit
Definition dc_error.f90:536
integer, parameter, public hst_enottermgthist
Definition dc_error.f90:561
integer, parameter, public dc_noerr
Error storage variables
Definition dc_error.f90:468
integer, parameter, public gt_enomem
Definition dc_error.f90:513
integer, parameter, public dc_enoassoc
Definition dc_error.f90:547
integer, parameter, public hst_ebadslice
Definition dc_error.f90:568
integer, parameter, public gr_enotgr
-300 or less: GrADS I/O errors
Definition dc_error.f90:530
integer, parameter, public dc_enodimtime
Definition dc_error.f90:549
integer function, public errorcode()
Definition dc_error.f90:607
integer, parameter, public hst_ebadvarname
Definition dc_error.f90:563
integer, parameter, public dc_enotinit
-400 or less: DC utilities errors
Definition dc_error.f90:534
integer, parameter, public dc_ealreadyinit
Definition dc_error.f90:535
integer, parameter, public gt_enounlimitdim
Definition dc_error.f90:520
integer, parameter, public gt_efake
Positive error numbers are reserved for libc system error messages. Due to high system dependency and...
Definition dc_error.f90:503
integer, parameter, public dc_ebadfileopmode
Definition dc_error.f90:540
integer, parameter, public hst_eintfile
Definition dc_error.f90:559
integer, parameter, public dc_earglack
Definition dc_error.f90:546
integer, parameter, public gt_edimnodim
Definition dc_error.f90:508
integer, parameter, public hst_enoaxisname
Definition dc_error.f90:565
integer, parameter, public hst_ebadorigin
Definition dc_error.f90:573
integer, parameter, public gt_ebaddimname
Definition dc_error.f90:511
integer, parameter, public dc_enegative
Definition dc_error.f90:545
integer, parameter, public dc_etoolargetime
Definition dc_error.f90:551
integer, parameter, public gt_erankmismatch
Definition dc_error.f90:524
integer, parameter, public hst_ealreadyregvarfix
Definition dc_error.f90:567
integer, parameter, public hst_eindefine
Definition dc_error.f90:558
integer, parameter, public dc_enofileread
Definition dc_error.f90:543
integer, parameter, public gt_ebadgt4commagraphy
Definition dc_error.f90:526
integer, parameter, public hst_ebadterminus
Definition dc_error.f90:572
integer, parameter, public hst_enodependtime
Definition dc_error.f90:562
integer, parameter, public gt_eargsizemismatch
Definition dc_error.f90:515
integer, parameter, public gt_ebadallocatesize
Definition dc_error.f90:523
integer, parameter, public gt_edimmultidim
Definition dc_error.f90:509
integer, parameter, public gt_ebadattrname
Definition dc_error.f90:521
integer, parameter, public dc_efilenameempty
Definition dc_error.f90:539
integer, parameter, public gt_elimited
Definition dc_error.f90:517
integer, parameter, public gt_enotvar
Definition dc_error.f90:512
integer, parameter, public hst_emaxdimsdepended
Definition dc_error.f90:570
integer, parameter, public hst_eindivisible
Definition dc_error.f90:571
integer, parameter, public dc_ebaddate
Definition dc_error.f90:552
integer, parameter, public hst_empinoaxisdata
Definition dc_error.f90:574
integer, parameter, public dc_ebadcaltype
Definition dc_error.f90:537
integer, parameter, public hst_evarinuse
Definition dc_error.f90:566
integer, parameter, public dc_ebadtimezone
Definition dc_error.f90:538
integer, parameter, public hst_enotindefine
-500 or less: Data I/O layer errors
Definition dc_error.f90:557
integer, parameter, public dc_enofilewrite
Definition dc_error.f90:544
integer, parameter, public dc_edimtime
Definition dc_error.f90:550
integer, parameter, public dc_enofileexist
Definition dc_error.f90:542
integer, parameter, public gt_enoturl
Definition dc_error.f90:525
integer, parameter, public gt_enomoredims
-101 or less: Data structure errors
Definition dc_error.f90:507
integer, parameter, public dc_enounitnum
Definition dc_error.f90:541
integer, parameter, public hst_ebadname
Definition dc_error.f90:560
integer, parameter, public dc_enoentry
Definition dc_error.f90:548
subroutine, public geterrormessage(msg)
Definition dc_error.f90:619
integer, parameter, public hst_enotimedim
Definition dc_error.f90:564
integer, parameter, public dc_einconsistcaldate
Definition dc_error.f90:553
integer, parameter, public hst_ebadnewfileint
Definition dc_error.f90:569
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public string
Character length for string
Definition dc_types.f90:137
Provides interface for system dependent procedures.
Definition sysdep.f90:54
subroutine, public abortprogram(message)
Abort program execution.
Definition sysdep.f90:90