module_wrf_error.F
References to this file elsewhere.
1 !WRF:DRIVER_LAYER:UTIL
2 !
3
4 MODULE module_wrf_error
5 INTEGER :: wrf_debug_level = 0
6 CHARACTER*256 :: wrf_err_message
7 CONTAINS
8
9 LOGICAL FUNCTION wrf_at_debug_level ( level )
10 IMPLICIT NONE
11 INTEGER , INTENT(IN) :: level
12 wrf_at_debug_level = ( level .LE. wrf_debug_level )
13 RETURN
14 END FUNCTION wrf_at_debug_level
15
16 SUBROUTINE init_module_wrf_error
17 END SUBROUTINE init_module_wrf_error
18
19 END MODULE module_wrf_error
20
21 SUBROUTINE wrf_message( str )
22 IMPLICIT NONE
23 CHARACTER*(*) str
24 #if defined( DM_PARALLEL ) && ! defined( STUBMPI)
25 write(0,*) TRIM(str)
26 #endif
27 print*, TRIM(str)
28 END SUBROUTINE wrf_message
29
30 ! intentionally write to stderr only
31 SUBROUTINE wrf_message2( str )
32 IMPLICIT NONE
33 CHARACTER*(*) str
34 write(0,*) str
35 END SUBROUTINE wrf_message2
36
37 SUBROUTINE wrf_error_fatal3( file_str, line, str )
38 USE module_wrf_error
39 IMPLICIT NONE
40 CHARACTER*(*) file_str
41 INTEGER , INTENT (IN) :: line ! only print file and line if line > 0
42 CHARACTER*(*) str
43 CHARACTER*256 :: line_str
44
45 write(line_str,'(i6)') line
46 #if defined( DM_PARALLEL ) && ! defined( STUBMPI )
47 CALL wrf_message( '-------------- FATAL CALLED ---------------' )
48 ! only print file and line if line is positive
49 IF ( line > 0 ) THEN
50 CALL wrf_message( 'FATAL CALLED FROM FILE: '//file_str//' LINE: '//TRIM(line_str) )
51 ENDIF
52 CALL wrf_message( str )
53 CALL wrf_message( '-------------------------------------------' )
54 #else
55 CALL wrf_message2( '-------------- FATAL CALLED ---------------' )
56 ! only print file and line if line is positive
57 IF ( line > 0 ) THEN
58 CALL wrf_message( 'FATAL CALLED FROM FILE: '//file_str//' LINE: '//TRIM(line_str) )
59 ENDIF
60 CALL wrf_message2( str )
61 CALL wrf_message2( '-------------------------------------------' )
62 #endif
63 CALL wrf_abort
64 END SUBROUTINE wrf_error_fatal3
65
66 SUBROUTINE wrf_error_fatal( str )
67 USE module_wrf_error
68 IMPLICIT NONE
69 CHARACTER*(*) str
70 CALL wrf_error_fatal3 ( ' ', 0, str )
71 END SUBROUTINE wrf_error_fatal
72
73 ! Check to see if expected value == actual value
74 ! If not, print message and exit.
75 SUBROUTINE wrf_check_error( expected, actual, str, file_str, line )
76 USE module_wrf_error
77 IMPLICIT NONE
78 INTEGER , INTENT (IN) :: expected
79 INTEGER , INTENT (IN) :: actual
80 CHARACTER*(*) str
81 CHARACTER*(*) file_str
82 INTEGER , INTENT (IN) :: line
83 CHARACTER (LEN=512) :: rc_str
84 CHARACTER (LEN=512) :: str_with_rc
85
86 IF ( expected .ne. actual ) THEN
87 WRITE (rc_str,*) ' Routine returned error code = ',actual
88 str_with_rc = TRIM(str // rc_str)
89 CALL wrf_error_fatal3 ( file_str, line, str_with_rc )
90 ENDIF
91 END SUBROUTINE wrf_check_error
92
93