6 use mpp_mod,
only : mpp_error, note, warning, fatal
7 use mpp_mod,
only : mpp_pe, mpp_root_pe, stdlog, stdout
9 implicit none ;
private
11 public mom_error, mom_mesg, note, warning, fatal, is_root_pe, stdlog, stdout
12 public mom_set_verbosity, mom_get_verbosity, mom_verbose_enough
13 public calltree_showquery, calltree_enter, calltree_leave, calltree_waypoint
16 integer :: verbosity = 6
37 integer :: calltreeindentlevel = 0
47 if (mpp_pe() == mpp_root_pe()) is_root_pe = .true.
49 end function is_root_pe
52 subroutine mom_mesg(message, verb, all_print)
53 character(len=*),
intent(in) :: message
54 integer,
optional,
intent(in) :: verb
55 logical,
optional,
intent(in) :: all_print
61 write_msg = is_root_pe()
62 if (
present(all_print)) write_msg = write_msg .or. all_print
64 verb_msg = 2 ;
if (
present(verb)) verb_msg = verb
65 if (write_msg .and. (verbosity >= verb_msg))
call mpp_error(note, message)
67 end subroutine mom_mesg
71 subroutine mom_error(level, message, all_print)
72 integer,
intent(in) :: level
73 character(len=*),
intent(in) :: message
74 logical,
optional,
intent(in) :: all_print
80 write_msg = is_root_pe()
81 if (
present(all_print)) write_msg = write_msg .or. all_print
85 if (write_msg.and.verbosity>=2)
call mpp_error(note, message)
87 if (write_msg.and.verbosity>=1)
call mpp_error(warning, message)
89 if (verbosity>=0)
call mpp_error(fatal, message)
91 call mpp_error(level, message)
93 end subroutine mom_error
96 subroutine mom_set_verbosity(verb)
97 integer,
intent(in) :: verb
98 character(len=80) :: msg
99 if (verb>0 .and. verb<10)
then
102 write(msg(1:80),
'("Attempt to set verbosity outside of range (0-9). verb=",I0)') verb
103 call mom_error(fatal,msg)
105 end subroutine mom_set_verbosity
108 function mom_get_verbosity()
109 integer :: mom_get_verbosity
110 mom_get_verbosity = verbosity
111 end function mom_get_verbosity
115 function mom_verbose_enough(verb)
116 integer,
intent(in) :: verb
117 logical :: mom_verbose_enough
118 mom_verbose_enough = (verbosity >= verb)
119 end function mom_verbose_enough
122 function calltree_showquery()
124 logical :: calltree_showquery
125 calltree_showquery = (verbosity >= 6)
126 end function calltree_showquery
129 subroutine calltree_enter(mesg,n)
130 character(len=*),
intent(in) :: mesg
131 integer,
optional,
intent(in) :: n
133 character(len=8) :: nasstring
134 calltreeindentlevel = calltreeindentlevel + 1
135 if (verbosity<6)
return
136 if (is_root_pe())
then
139 write(nasstring(1:8),
'(i8)') n
140 call mpp_error(note,
'callTree: '// &
141 repeat(
' ',calltreeindentlevel-1)//
'loop '//trim(mesg)//trim(nasstring))
143 call mpp_error(note,
'callTree: '// &
144 repeat(
' ',calltreeindentlevel-1)//
'---> '//trim(mesg))
147 end subroutine calltree_enter
150 subroutine calltree_leave(mesg)
151 character(len=*) :: mesg
152 if (calltreeindentlevel<1)
write(0,*)
'callTree_leave: error callTreeIndentLevel=',calltreeindentlevel,trim(mesg)
153 calltreeindentlevel = calltreeindentlevel - 1
154 if (verbosity<6)
return
155 if (is_root_pe())
call mpp_error(note,
'callTree: '// &
156 repeat(
' ',calltreeindentlevel)//
'<--- '//trim(mesg))
157 end subroutine calltree_leave
160 subroutine calltree_waypoint(mesg,n)
161 character(len=*),
intent(in) :: mesg
162 integer,
optional,
intent(in) :: n
164 character(len=8) :: nasstring
165 if (calltreeindentlevel<0)
write(0,*)
'callTree_waypoint: error callTreeIndentLevel=',calltreeindentlevel,trim(mesg)
166 if (verbosity<6)
return
167 if (is_root_pe())
then
170 write(nasstring(1:8),
'(i8)') n
171 call mpp_error(note,
'callTree: '// &
172 repeat(
' ',calltreeindentlevel)//
'loop '//trim(mesg)//trim(nasstring))
174 call mpp_error(note,
'callTree: '// &
175 repeat(
' ',calltreeindentlevel)//
'o '//trim(mesg))
178 end subroutine calltree_waypoint
181 subroutine assert(logical_arg, msg)
182 logical,
intent(in) :: logical_arg
183 character(len=*),
intent(in) :: msg
185 if (.not. logical_arg)
then
186 call mom_error(fatal, msg)
189 end subroutine assert