gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dc_message.f90
Go to the documentation of this file.
1! -*- mode: f90; coding: utf-8 -*-
2!-----------------------------------------------------------------------
3! Copyright (c) 2000-2026 Gtool Development Group. All rights reserved.
4!-----------------------------------------------------------------------
56 ! MPI ライブラリ
57 ! MPI library
58 !
59 use mpi
60 implicit none
61 private
62 public:: messagenotify
63 public:: messagesuppressmpi
64 interface messagenotify
65 module procedure messagenotifyc
66 module procedure messagenotifyi
67 end interface
69 module procedure messagesuppressmpi0
70 end interface
71 integer, save:: output_rank = -1
72 integer, save:: save_myrank = -1
73contains
147 subroutine messagenotifyc(level, where, message, &
148 & i, r, d, L, n, c1, c2, c3, ca, rank_mpi )
149 use dc_types ,only: string, dp
150 use dc_string ,only: uchar, strhead, printf, cprintf
151 use dc_error ,only: storeerror, usr_errno
152 implicit none
153 character(*), intent(in) :: level
154 character(*), intent(in) :: where
155 character(*), intent(in) :: message
156 integer , intent(in), optional:: i(:), n(:)
157 real , intent(in), optional:: r(:)
158 real(DP) , intent(in), optional:: d(:)
159 logical , intent(in), optional:: L(:)
160 character(*), intent(in), optional:: c1, c2, c3
161 character(*), intent(in), optional:: ca(:)
162 integer , intent(in), optional:: rank_mpi
163 character(string) :: msg
164 continue
165 if ( invalid_rank_number( rank_mpi ) ) return
166 if ( strhead( 'ERROR', trim( uchar(level) ) ) ) then
167 msg = cprintf(message, &
168 & i=i, r=r, d=d, l=l, n=n, c1=c1, c2=c2, c3=c3, ca=ca)
169 call storeerror(usr_errno, where, cause_c=msg)
170 elseif ( strhead( 'WARNING', trim( uchar(level) ) ) ) then
171 msg = cprintf(message, &
172 & i=i, r=r, d=d, l=l, n=n, c1=c1, c2=c2, c3=c3, ca=ca)
173 msg=' *** WARNING [' // trim(where) // '] *** '// trim(msg)
174 call printf(fmt='%c', c1=msg)
175 else
176 msg = cprintf(message, &
177 & i=i, r=r, d=d, l=l, n=n, c1=c1, c2=c2, c3=c3, ca=ca)
178 msg=' *** MESSAGE [' // trim(where) // '] *** ' // trim(msg)
179 call printf(fmt='%c', c1=msg)
180 endif
181 return
182 end subroutine messagenotifyc
232 subroutine messagenotifyi(number, where, message, &
233 & i, r, d, L, n, c1, c2, c3, ca, rank_mpi )
234 use dc_types ,only: dp
235 use dc_string ,only: cprintf
236 use dc_error ,only: storeerror
237 implicit none
238 integer, intent(in) :: number
239 character(*), intent(in) :: where
240 character(*), intent(in), optional:: message
241 integer , intent(in), optional:: i(:), n(:)
242 real , intent(in), optional:: r(:)
243 real(DP) , intent(in), optional:: d(:)
244 logical , intent(in), optional:: L(:)
245 character(*), intent(in), optional:: c1, c2, c3
246 character(*), intent(in), optional:: ca(:)
247 integer , intent(in), optional:: rank_mpi
248 continue
249 if ( invalid_rank_number( rank_mpi ) ) return
250 if (.not. present(message)) then
251 call storeerror(number, where)
252 else
253 call storeerror(number, where, &
254 & cause_c=cprintf( message, &
255 & i=i, r=r, d=d, l=l, n=n, c1=c1, c2=c2, c3=c3, ca=ca ) )
256 endif
257 return
258 end subroutine messagenotifyi
280 subroutine messagesuppressmpi0( rank )
281 implicit none
282 integer, intent(in):: rank
283 continue
284 output_rank = rank
285 end subroutine messagesuppressmpi0
310 logical function invalid_rank_number( rank_mpi ) result(result)
311 implicit none
312 integer , intent(in), optional:: rank_mpi
313 logical:: initflag_mpi
314 integer:: err_mpi
315 continue
316 if ( save_myrank < 0 ) then
317 call mpi_initialized(initflag_mpi, err_mpi)
318 if ( initflag_mpi ) then
319 call mpi_comm_rank(mpi_comm_world, save_myrank, err_mpi)
320 else
321 result = .false.
322 return
323 end if
324 end if
325 if ( .not. present(rank_mpi) ) then
326 if ( output_rank > -1 ) then
327 if ( output_rank == save_myrank ) then
328 result = .false.
329 return
330 else
331 result = .true.
332 return
333 end if
334 end if
335 result = .false.
336 return
337 end if
338 if ( rank_mpi < 0 ) then
339 result = .false.
340 return
341 end if
342 if ( rank_mpi == save_myrank ) then
343 result = .false.
344 else
345 result = .true.
346 end if
347 end function invalid_rank_number
349end module dc_message
エラー処理用モジュール
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public usr_errno
-1000 以下: ユーザー定義
Definition dc_error.f90:579
メッセージの出力
文字型変数の操作
Definition dc_string.f90:83
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:92
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:137