4
4
! !
5
5
! ! FOO = BAR [N]
6
6
! !
7
- ! ! where
7
+ ! ! where
8
8
! !
9
9
! ! FOO BAR images
10
10
! ! character(len=20) character(len=10) N == me
@@ -41,6 +41,7 @@ program get_convert_char_array
41
41
character (kind= 1 , len= 5 ) :: str_k1_arr(1 :4 )
42
42
character (kind= 4 , len= 5 ), codimension[* ] :: co_str_k4_arr(1 :4 )
43
43
character (kind= 4 , len= 5 ) :: str_k4_arr(1 :4 )
44
+ logical :: error_printed= .false.
44
45
45
46
associate(me = > this_image(), np = > num_images())
46
47
if (np < 2 ) error stop ' Can not run with less than 2 images.'
@@ -55,80 +56,103 @@ program get_convert_char_array
55
56
if (me == 1 ) then
56
57
str_k1_scal = co_str_k1_scal[1 ]
57
58
print * , ' #' // str_k1_scal // ' #, len:' , len (str_k1_scal)
58
- if (co_str_k1_scal /= str_k1_scal // ' ' ) error stop ' get scalar kind=1 to kind=1 self failed.'
59
+ if (co_str_k1_scal /= str_k1_scal // ' ' ) call print_and_register( ' get scalar kind=1 to kind=1 self failed.' )
59
60
60
61
str_k4_scal = co_str_k4_scal[1 ]
61
62
print * , 4_ ' #' // str_k4_scal // 4_ ' #, len:' , len (str_k4_scal)
62
- if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) error stop ' get scalar kind=4 to kind=4 self failed.'
63
+ if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) call print_and_register( ' get scalar kind=4 to kind=4 self failed.' )
63
64
64
65
str_k4_scal = co_str_k1_scal[1 ]
65
66
print * , 4_ ' #' // str_k4_scal // 4_ ' #, len:' , len (str_k4_scal)
66
- if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) error stop ' get scalar kind=1 to kind=4 self failed.'
67
+ if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) call print_and_register( ' get scalar kind=1 to kind=4 self failed.' )
67
68
68
69
str_k1_scal = co_str_k4_scal[1 ]
69
70
print * , ' #' // str_k1_scal // ' #, len:' , len (str_k1_scal)
70
- if (co_str_k1_scal /= str_k1_scal // ' ' ) error stop ' get scalar kind=4 to kind=1 self failed.'
71
+ if (co_str_k1_scal /= str_k1_scal // ' ' ) call print_and_register( ' get scalar kind=4 to kind=1 self failed.' )
71
72
end if
72
73
73
74
! Do the same for arrays but on image 2
74
75
if (me == 2 ) then
75
76
str_k1_arr(:) = co_str_k1_arr(:)[2 ]
76
77
print * , ' #' // str_k1_arr(:) // ' #, len:' , len (str_k1_arr(1 ))
77
- if (any (str_k1_arr /= [' abc ' , ' EFG ' , ' klm ' , ' NOP ' ])) error stop ' get array kind=1 to kind=1 self failed.'
78
-
79
- print * , str_k4_arr
78
+ if (any (str_k1_arr /= [' abc ' , ' EFG ' , ' klm ' , ' NOP ' ])) &
79
+ call print_and_register( ' get array kind=1 to kind=1 self failed.' )
80
+
81
+ print * , str_k4_arr
80
82
str_k4_arr(:) = co_str_k4_arr(:)[2 ]
81
83
print * , 4_ ' #' // str_k4_arr(:) // 4_ ' #, len:' , len (str_k4_arr(1 ))
82
- if (any (str_k4_arr /= [4_ ' abc ' , 4_ ' EFG ' , 4_ ' klm ' , 4_ ' NOP ' ])) error stop ' get array kind=4 to kind=4 self failed.'
84
+ if (any (str_k4_arr /= [4_ ' abc ' , 4_ ' EFG ' , 4_ ' klm ' , 4_ ' NOP ' ])) &
85
+ call print_and_register( ' get array kind=4 to kind=4 self failed.' )
83
86
84
87
str_k4_arr(:) = co_str_k1_arr(:)[2 ]
85
88
print * , 4_ ' #' // str_k4_arr(:) // 4_ ' #, len:' , len (str_k4_arr(1 ))
86
- if (any (str_k4_arr /= [ 4_ ' abc ' , 4_ ' EFG ' , 4_ ' klm ' , 4_ ' NOP ' ])) error stop ' get array kind=1 to kind=4 self failed.'
89
+ if (any (str_k4_arr /= [ 4_ ' abc ' , 4_ ' EFG ' , 4_ ' klm ' , 4_ ' NOP ' ])) &
90
+ call print_and_register( ' get array kind=1 to kind=4 self failed.' )
87
91
88
92
str_k1_arr(:) = co_str_k4_arr(:)[2 ]
89
93
print * , ' #' // str_k1_arr(:) // ' #, len:' , len (str_k1_arr(1 ))
90
- if (any (str_k1_arr /= [' abc ' , ' EFG ' , ' klm ' , ' NOP ' ])) error stop ' get array kind=4 to kind=1 self failed.'
94
+ if (any (str_k1_arr /= [' abc ' , ' EFG ' , ' klm ' , ' NOP ' ])) &
95
+ call print_and_register( ' get array kind=4 to kind=1 self failed.' )
91
96
end if
92
97
93
98
sync all
94
99
if (me == 1 ) then
95
100
str_k1_scal = co_str_k1_scal[2 ]
96
101
print * , ' #' // str_k1_scal // ' #, len:' , len (str_k1_scal)
97
- if (co_str_k1_scal /= str_k1_scal // ' ' ) error stop ' get kind=1 to kind=1 image 2 failed.'
102
+ if (co_str_k1_scal /= str_k1_scal // ' ' ) call print_and_register( ' get kind=1 to kind=1 image 2 failed.' )
98
103
99
104
str_k4_scal = co_str_k4_scal[2 ]
100
105
print * , 4_ ' #' // str_k4_scal // 4_ ' #, len:' , len (str_k4_scal)
101
- if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) error stop ' get kind=4 to kind=4 image 2 failed.'
106
+ if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) call print_and_register( ' get kind=4 to kind=4 image 2 failed.' )
102
107
else if (me == 2 ) then
103
108
str_k4_scal = co_str_k1_scal[1 ]
104
109
print * , 4_ ' #' // str_k4_scal // 4_ ' #, len:' , len (str_k4_scal)
105
- if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) error stop ' get kind=1 to kind=4 from image 1 failed.'
110
+ if (co_str_k4_scal /= str_k4_scal // 4_ ' ' ) call print_and_register( ' get kind=1 to kind=4 from image 1 failed.' )
106
111
107
112
str_k1_scal = co_str_k4_scal[1 ]
108
113
print * , ' #' // str_k1_scal // ' #, len:' , len (str_k1_scal)
109
- if (co_str_k1_scal /= str_k1_scal // ' ' ) error stop ' get kind=4 to kind=1 from image 1 failed.'
114
+ if (co_str_k1_scal /= str_k1_scal // ' ' ) call print_and_register( ' get kind=4 to kind=1 from image 1 failed.' )
110
115
end if
111
116
112
117
str_k1_arr(:) = ' #####'
113
118
str_k4_arr(:) = 4_ ' #####'
114
-
119
+
115
120
sync all
116
121
117
122
if (me == 1 ) then
118
123
str_k1_arr(1 :2 ) = co_str_k1_arr(:: 2 )[2 ]
119
124
print * , str_k1_arr
120
125
if (any (str_k1_arr /= [' abc ' , ' klm ' , ' #####' , ' #####' ])) &
121
- & error stop " strided get char arr kind 1 to kind 1 failed."
126
+ & call print_and_register( " strided get char arr kind 1 to kind 1 failed." )
122
127
123
128
str_k4_arr(1 :2 ) = co_str_k4_arr(:: 2 )[2 ]
124
129
print * , str_k4_arr
125
130
if (any (str_k4_arr /= [4_ ' abc ' , 4_ ' klm ' , 4_ ' #####' , 4_ ' #####' ] )) &
126
- & error stop " strided get char arr kind 4 to kind 4 failed."
131
+ & call print_and_register( " strided get char arr kind 4 to kind 4 failed." )
127
132
end if
128
133
129
- sync all
130
- if (me == 1 ) print * , ' Test passed.'
134
+ select case (me)
135
+ case (1 )
136
+ if (error_printed) error stop
137
+ sync images(2 )
138
+ print * , ' Test passed.'
139
+ case (2 )
140
+ if (error_printed) error stop
141
+ sync images(1 )
142
+ end select
143
+
131
144
end associate
145
+
146
+ contains
147
+
148
+ subroutine print_and_register (error_message )
149
+ use iso_fortran_env, only : error_unit
150
+ character (len=* ), intent (in ) :: error_message
151
+ write (error_unit,* ) error_message
152
+ error_printed= .true.
153
+ end subroutine
154
+
132
155
end program get_convert_char_array
133
156
134
157
! vim:ts=2:sts=2:sw=2:
158
+
0 commit comments