ddx 0.6.0
Libary for domain-decomposition methods for polarizable continuum models
ddx_errors.f90
1module ddx_errors
2
4
8 integer :: flag = 0
10 integer :: max_length = 2047
11 character(len=2047) :: message
12 integer :: message_length = 0
13end type ddx_error_type
14
15contains
16
17subroutine print_error(ddx_error)
18 implicit none
19 type(ddx_error_type), intent(in) :: ddx_error
20 write(6, "(A)") ddx_error % message(1:1+ddx_error % message_length)
21end subroutine print_error
22
23subroutine check_error(ddx_error)
24 implicit none
25 type(ddx_error_type), intent(in) :: ddx_error
26 if (ddx_error % flag .ne. 0) then
27 call print_error(ddx_error)
28 stop 1
29 end if
30end subroutine check_error
31
32subroutine update_error(ddx_error, message)
33 implicit none
34 type(ddx_error_type), intent(inout) :: ddx_error
35 character(len=*) :: message
36 integer :: message_start, message_stop, message_length, total_length
37 ! update the ddx_error flag by summing one
38 ddx_error % flag = ddx_error % flag + 1
39 message_length = len(message)
40 total_length = message_length + 2
41 message_start = 1 + ddx_error % message_length
42 message_stop = message_start + total_length
43 ! update the message
44 if (message_stop .lt. ddx_error % max_length) then
45 ddx_error % message(message_start:message_start) = " "
46 ddx_error % message(message_start+1:message_stop-2) = message(1:message_length)
47 ddx_error % message(message_stop-1:message_stop-1) = achar(10)
48 ddx_error % message_length = ddx_error % message_length + total_length
49 else if (message_stop - ddx_error % max_length .gt. 3) then
50 message_length = ddx_error % max_length - message_start
51 ddx_error % message(message_start:message_start) = " "
52 ddx_error % message(message_start+1:ddx_error % max_length-2) = message(1:message_length-3)
53 ddx_error % message(ddx_error % max_length-1:ddx_error%max_length-1) = achar(10)
54 ddx_error % message_length = ddx_error % message_length + message_length
55 end if
56end subroutine update_error
57
58subroutine reset_error(ddx_error)
59 implicit none
60 type(ddx_error_type), intent(inout) :: ddx_error
61 integer :: i
62 ddx_error % flag = 0
63 ddx_error % message_length = 0
64 do i = 1, ddx_error % max_length
65 ddx_error % message(i:i) = " "
66 end do
67end subroutine reset_error
68
69end module ddx_errors
Compile-time constants and definitions.
ddX type for containing ddx_error information
Definition: ddx_errors.f90:6