4
4
! !
5
5
! ! FOO = BAR [N]
6
6
! !
7
- ! ! where
7
+ ! ! where
8
8
! !
9
9
! ! FOO BAR images
10
10
! ! scalar scalar N == me
@@ -80,6 +80,8 @@ program get_convert_nums
80
80
81
81
type (t), save , codimension[* ] :: obj
82
82
83
+ logical :: error_printed= .false.
84
+
83
85
associate(me = > this_image(), np = > num_images())
84
86
if (np < 2 ) error stop ' Can not run with less than 2 images.'
85
87
@@ -97,202 +99,223 @@ program get_convert_nums
97
99
if (me == 1 ) then
98
100
int_scal_k1 = obj[1 ]% int_scal_k1
99
101
print * , int_scal_k1
100
- if (obj% int_scal_k1 /= int_scal_k1) error stop ' get scalar int kind=1 from kind=1 self failed.'
102
+ if (obj% int_scal_k1 /= int_scal_k1) call print_and_register( ' get scalar int kind=1 from kind=1 self failed.' )
101
103
102
104
int_scal_k4 = obj[1 ]% int_scal_k4
103
105
print * , int_scal_k4
104
- if (obj% int_scal_k4 /= int_scal_k4) error stop ' get scalar int kind=4 to kind=4 self failed.'
106
+ if (obj% int_scal_k4 /= int_scal_k4) call print_and_register( ' get scalar int kind=4 to kind=4 self failed.' )
105
107
106
108
int_scal_k4 = obj[1 ]% int_scal_k1
107
109
print * , int_scal_k4
108
- if (obj% int_scal_k4 /= int_scal_k4) error stop ' get scalar int kind=1 to kind=4 self failed.'
110
+ if (obj% int_scal_k4 /= int_scal_k4) call print_and_register( ' get scalar int kind=1 to kind=4 self failed.' )
109
111
110
112
int_scal_k1 = obj[1 ]% int_scal_k4
111
113
print * , int_scal_k1
112
- if (obj% int_scal_k1 /= int_scal_k1) error stop ' get scalar int kind=4 to kind=1 self failed.'
114
+ if (obj% int_scal_k1 /= int_scal_k1) call print_and_register( ' get scalar int kind=4 to kind=1 self failed.' )
113
115
114
116
int_k1(:) = obj[1 ]% int_k1(:)
115
117
print * , int_k1
116
- if (any (obj% int_k1 /= int_k1)) error stop ' get int kind=1 to kind=1 self failed.'
118
+ if (any (obj% int_k1 /= int_k1)) call print_and_register( ' get int kind=1 to kind=1 self failed.' )
117
119
118
120
int_k4(:) = obj[1 ]% int_k4(:)
119
121
print * , int_k4
120
- if (any (obj% int_k4 /= int_k4)) error stop ' get int kind=4 to kind=4 self failed.'
122
+ if (any (obj% int_k4 /= int_k4)) call print_and_register( ' get int kind=4 to kind=4 self failed.' )
121
123
122
124
int_k4(:) = obj[1 ]% int_k1(:)
123
125
print * , int_k4
124
- if (any (obj% int_k4 /= int_k4)) error stop ' get int kind=1 to kind=4 self failed.'
126
+ if (any (obj% int_k4 /= int_k4)) call print_and_register( ' get int kind=1 to kind=4 self failed.' )
125
127
126
128
int_k1(:) = obj[1 ]% int_k4(:)
127
129
print * , int_k1
128
- if (any (obj% int_k1 /= int_k1)) error stop ' get int kind=4 to kind=1 self failed.'
130
+ if (any (obj% int_k1 /= int_k1)) call print_and_register( ' get int kind=4 to kind=1 self failed.' )
129
131
else if (me == 2 ) then ! Do the real copy to self checks on image 2
130
132
real_scal_k4 = obj[2 ]% real_scal_k4
131
133
print * , real_scal_k4
132
- if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) error stop ' get scalar real kind=4 to kind=4 self failed.'
134
+ if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) &
135
+ call print_and_register( ' get scalar real kind=4 to kind=4 self failed.' )
136
+
133
137
134
138
real_scal_k8 = obj[2 ]% real_scal_k8
135
139
print * , real_scal_k8
136
- if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance8) error stop ' get scalar real kind=8 to kind=8 self failed.'
140
+ if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance8) &
141
+ call print_and_register( ' get scalar real kind=8 to kind=8 self failed.' )
142
+
137
143
138
144
real_scal_k8 = obj[2 ]% real_scal_k4
139
145
print * , real_scal_k8
140
- if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance4to8) error stop ' get scalar real kind=4 to kind=8 self failed.'
146
+ if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance4to8) &
147
+ call print_and_register( ' get scalar real kind=4 to kind=8 self failed.' )
148
+
141
149
142
150
real_scal_k4 = obj[2 ]% real_scal_k8
143
151
print * , real_scal_k4
144
- if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) error stop ' get scalar real kind=8 to kind=4 self failed.'
152
+ if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) &
153
+ call print_and_register( ' get scalar real kind=8 to kind=4 self failed.' )
145
154
146
155
real_k4(:) = obj[2 ]% real_k4(:)
147
156
print * , real_k4
148
- if (any (abs (obj% real_k4 - real_k4) > tolerance4)) error stop ' get real kind=4 to kind=4 self failed.'
157
+ if (any (abs (obj% real_k4 - real_k4) > tolerance4)) call print_and_register( ' get real kind=4 to kind=4 self failed.' )
149
158
150
159
real_k8(:) = obj[2 ]% real_k8(:)
151
160
print * , real_k8
152
- if (any (abs (obj% real_k8 - real_k8) > tolerance8)) error stop ' get real kind=8 to kind=8 self failed.'
161
+ if (any (abs (obj% real_k8 - real_k8) > tolerance8)) call print_and_register( ' get real kind=8 to kind=8 self failed.' )
153
162
154
163
real_k8(:) = obj[2 ]% real_k4(:)
155
164
print * , real_k8
156
- if (any (abs (obj% real_k8 - real_k8) > tolerance4to8)) error stop ' get real kind=4 to kind=8 self failed.'
165
+ if (any (abs (obj% real_k8 - real_k8) > tolerance4to8)) call print_and_register( ' get real kind=4 to kind=8 self failed.' )
157
166
158
167
real_k4(:) = obj[2 ]% real_k8(:)
159
168
print * , real_k4
160
- if (any (abs (obj% real_k4 - real_k4) > tolerance4)) error stop ' get real kind=8 to kind=4 self failed.'
169
+ if (any (abs (obj% real_k4 - real_k4) > tolerance4)) call print_and_register( ' get real kind=8 to kind=4 self failed.' )
161
170
end if
162
171
163
172
sync all
164
173
if (me == 1 ) then
165
174
int_scal_k1 = obj[2 ]% int_scal_k1
166
175
print * , int_scal_k1
167
- if (obj% int_scal_k1 /= int_scal_k1) error stop ' get scalar int kind=1 to kind=1 to image 2 failed.'
176
+ if (obj% int_scal_k1 /= int_scal_k1) call print_and_register( ' get scalar int kind=1 to kind=1 to image 2 failed.' )
168
177
169
178
int_scal_k4 = obj[2 ]% int_scal_k4
170
179
print * , int_scal_k4
171
- if (obj% int_scal_k4 /= int_scal_k4) error stop ' get scalar int kind=4 to kind=4 to image 2 failed.'
180
+ if (obj% int_scal_k4 /= int_scal_k4) call print_and_register( ' get scalar int kind=4 to kind=4 to image 2 failed.' )
172
181
173
182
int_k1(:) = obj[2 ]% int_k1(:)
174
183
print * , int_k1
175
- if (any (obj% int_k1 /= int_k1)) error stop ' get int kind=1 to kind=1 to image 2 failed.'
184
+ if (any (obj% int_k1 /= int_k1)) call print_and_register( ' get int kind=1 to kind=1 to image 2 failed.' )
176
185
177
186
int_k4(:) = obj[2 ]% int_k4(:)
178
187
print * , int_k4
179
- if (any (obj% int_k4 /= int_k4)) error stop ' get int kind=4 to kind=4 to image 2 failed.'
188
+ if (any (obj% int_k4 /= int_k4)) call print_and_register( ' get int kind=4 to kind=4 to image 2 failed.' )
180
189
181
190
else if (me == 2 ) then
182
191
real_scal_k4 = obj[1 ]% real_scal_k4
183
192
print * , real_scal_k4
184
- if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) error stop ' get scalar real kind=4 to kind=4 to image 2 failed.'
193
+ if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) &
194
+ call print_and_register( ' get scalar real kind=4 to kind=4 to image 2 failed.' )
185
195
186
196
real_scal_k8 = obj[1 ]% real_scal_k8
187
197
print * , real_scal_k8
188
- if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance8) error stop ' get scalar real kind=8 to kind=8 to image 2 failed.'
198
+ if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance8) &
199
+ call print_and_register( ' get scalar real kind=8 to kind=8 to image 2 failed.' )
189
200
190
201
real_k4(:) = obj[1 ]% real_k4(:)
191
202
print * , real_k4
192
- if (any (abs (obj% real_k4 - real_k4) > tolerance4)) error stop ' get real kind=4 to kind=4 to image 2 failed.'
203
+ if (any (abs (obj% real_k4 - real_k4) > tolerance4)) call print_and_register( ' get real kind=4 to kind=4 to image 2 failed.' )
193
204
194
205
real_k8(:) = obj[1 ]% real_k8(:)
195
206
print * , real_k8
196
- if (any (abs (obj% real_k8 - real_k8) > tolerance8)) error stop ' get real kind=8 to kind=8 to image 2 failed.'
207
+ if (any (abs (obj% real_k8 - real_k8) > tolerance8)) call print_and_register( ' get real kind=8 to kind=8 to image 2 failed.' )
197
208
end if
198
209
199
210
sync all
200
211
if (me == 1 ) then
201
212
int_scal_k4 = obj[2 ]% int_scal_k1
202
213
print * , int_scal_k4
203
- if (obj% int_scal_k4 /= int_scal_k4) error stop ' get scalar int kind=1 to kind=4 to image 2 failed.'
214
+ if (obj% int_scal_k4 /= int_scal_k4) call print_and_register( ' get scalar int kind=1 to kind=4 to image 2 failed.' )
204
215
205
216
int_scal_k1 = obj[2 ]% int_scal_k4
206
217
print * , int_scal_k1
207
- if (obj% int_scal_k1 /= int_scal_k1) error stop ' get scalar int kind=4 to kind=1 to image 2 failed.'
218
+ if (obj% int_scal_k1 /= int_scal_k1) call print_and_register( ' get scalar int kind=4 to kind=1 to image 2 failed.' )
208
219
209
220
int_k4(:) = obj[2 ]% int_k1(:)
210
221
print * , int_k4
211
- if (any (obj% int_k4 /= int_k4)) error stop ' get int kind=1 to kind=4 to image 2 failed.'
222
+ if (any (obj% int_k4 /= int_k4)) call print_and_register( ' get int kind=1 to kind=4 to image 2 failed.' )
212
223
213
224
int_k1(:) = obj[2 ]% int_k4(:)
214
225
print * , int_k1
215
- if (any (obj% int_k1 /= int_k1)) error stop ' get int kind=4 to kind=1 to image 2 failed.'
226
+ if (any (obj% int_k1 /= int_k1)) call print_and_register( ' get int kind=4 to kind=1 to image 2 failed.' )
216
227
217
228
elseif (me == 2 ) then
218
229
real_scal_k8 = obj[1 ]% real_scal_k4
219
230
print * , real_scal_k8
220
- if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance4to8) error stop ' get scalar real kind=4 to kind=8 to image 2 failed.'
231
+ if (abs (obj% real_scal_k8 - real_scal_k8) > tolerance4to8) &
232
+ call print_and_register( ' get scalar real kind=4 to kind=8 to image 2 failed.' )
221
233
222
234
real_scal_k4 = obj[1 ]% real_scal_k8
223
235
print * , real_scal_k4
224
- if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) error stop ' get scalar real kind=8 to kind=4 to image 2 failed.'
236
+ if (abs (obj% real_scal_k4 - real_scal_k4) > tolerance4) &
237
+ call print_and_register( ' get scalar real kind=8 to kind=4 to image 2 failed.' )
225
238
226
239
real_k8(:) = obj[1 ]% real_k4(:)
227
240
print * , real_k8
228
- if (any (abs (obj% real_k8 - real_k8) > tolerance4to8)) error stop ' get real kind=4 to kind=8 to image 2 failed.'
241
+ if (any (abs (obj% real_k8 - real_k8) > tolerance4to8)) &
242
+ call print_and_register( ' get real kind=4 to kind=8 to image 2 failed.' )
229
243
230
244
real_k4(:) = obj[1 ]% real_k8(:)
231
245
print * , real_k4
232
- if (any (abs (obj% real_k4 - real_k4) > tolerance4)) error stop ' get real kind=8 to kind=4 to image 2 failed.'
246
+ if (any (abs (obj% real_k4 - real_k4) > tolerance4)) call print_and_register( ' get real kind=8 to kind=4 to image 2 failed.' )
233
247
end if
234
248
235
249
! Scalar to array replication
236
250
sync all
237
251
if (me == 1 ) then
238
252
int_k4(:) = obj[2 ]% int_scal_k4
239
253
print * , int_k4
240
- if (any (obj% int_scal_k4 /= int_k4)) error stop ' get int scal kind=4 to array kind=4 to image 2 failed.'
254
+ if (any (obj% int_scal_k4 /= int_k4)) call print_and_register( ' get int scal kind=4 to array kind=4 to image 2 failed.' )
241
255
242
256
int_k1(:) = obj[2 ]% int_scal_k1
243
257
print * , int_k1
244
- if (any (obj% int_scal_k1 /= int_k1)) error stop ' get int scal kind=1 to array kind=1 to image 2 failed.'
258
+ if (any (obj% int_scal_k1 /= int_k1)) call print_and_register( ' get int scal kind=1 to array kind=1 to image 2 failed.' )
245
259
246
260
else if (me == 2 ) then
247
261
real_k8(:) = obj[1 ]% real_scal_k8
248
262
print * , real_k8
249
- if (any (abs (obj% real_scal_k8 - real_k8) > tolerance8)) error stop ' get real kind=8 to array kind=8 to image 2 failed.'
263
+ if (any (abs (obj% real_scal_k8 - real_k8) > tolerance8)) &
264
+ call print_and_register( ' get real kind=8 to array kind=8 to image 2 failed.' )
250
265
251
266
real_k4(:) = obj[1 ]% real_scal_k4
252
267
print * , real_k4
253
- if (any (abs (obj% real_scal_k4 - real_k4) > tolerance4)) error stop ' get real kind=4 to array kind=4 to image 2 failed.'
268
+ if (any (abs (obj% real_scal_k4 - real_k4) > tolerance4)) &
269
+ call print_and_register( ' get real kind=4 to array kind=4 to image 2 failed.' )
254
270
end if
255
271
256
272
! and with kind conversion
257
273
sync all
258
274
if (me == 1 ) then
259
275
int_k4(:) = obj[2 ]% int_scal_k1
260
276
print * , int_k4
261
- if (any (obj% int_scal_k4 /= int_k4)) error stop ' get int scal kind=1 to array kind=4 to image 2 failed.'
277
+ if (any (obj% int_scal_k4 /= int_k4)) call print_and_register( ' get int scal kind=1 to array kind=4 to image 2 failed.' )
262
278
263
279
int_k1(:) = obj[2 ]% int_scal_k4
264
280
print * , int_k1
265
- if (any (obj% int_scal_k1 /= int_k1)) error stop ' get int scal kind=4 to array kind=1 to image 2 failed.'
281
+ if (any (obj% int_scal_k1 /= int_k1)) call print_and_register( ' get int scal kind=4 to array kind=1 to image 2 failed.' )
266
282
267
283
else if (me == 2 ) then
268
284
real_k8(:) = obj[1 ]% real_scal_k4
269
285
print * , real_k8
270
- if (any (abs (obj% real_scal_k8 - real_k8) > tolerance8)) error stop ' get real kind=4 to array kind=8 to image 2 failed.'
286
+ if (any (abs (obj% real_scal_k8 - real_k8) > tolerance8)) &
287
+ call print_and_register( ' get real kind=4 to array kind=8 to image 2 failed.' )
271
288
272
289
real_k4(:) = obj[1 ]% real_scal_k8
273
290
print * , real_k4
274
- if (any (abs (obj% real_scal_k4 - real_k4) > tolerance4)) error stop ' get real kind=8 to array kind=4 to image 2 failed.'
291
+ if (any (abs (obj% real_scal_k4 - real_k4) > tolerance4)) &
292
+ call print_and_register( ' get real kind=8 to array kind=4 to image 2 failed.' )
275
293
end if
276
294
277
295
! and with type conversion
278
296
sync all
279
297
if (me == 1 ) then
280
298
int_k4(:) = obj[2 ]% real_scal_k4
281
299
print * , int_k4
282
- if (any (int_k4 /= INT (obj% real_scal_k4, 4 ))) error stop ' get real scal kind=4 to int array kind=4 to image 2 failed.'
300
+ if (any (int_k4 /= INT (obj% real_scal_k4, 4 ))) &
301
+ call print_and_register( ' get real scal kind=4 to int array kind=4 to image 2 failed.' )
283
302
284
303
int_k1(:) = obj[2 ]% real_scal_k4
285
304
print * , int_k1
286
- if (any (int_k1 /= INT (obj% real_scal_k4, 1 ))) error stop ' get real scal kind=1 to int array kind=1 to image 2 failed.'
305
+ if (any (int_k1 /= INT (obj% real_scal_k4, 1 ))) &
306
+ call print_and_register( ' get real scal kind=1 to int array kind=1 to image 2 failed.' )
287
307
288
308
else if (me == 2 ) then
289
309
real_k8(:) = obj[1 ]% int_scal_k4
290
310
print * , real_k8
291
- if (any (abs (real_k8 - obj% int_scal_k4) > tolerance4to8)) error stop ' get int kind=4 to real array kind=8 to image 2 failed.'
311
+ if (any (abs (real_k8 - obj% int_scal_k4) > tolerance4to8)) &
312
+ call print_and_register( ' get int kind=4 to real array kind=8 to image 2 failed.' )
313
+
292
314
293
315
real_k4(:) = obj[1 ]% int_scal_k4
294
316
print * , real_k4
295
- if (any (abs (real_k4 - obj% int_scal_k4) > tolerance4)) error stop ' get int kind=4 to real array kind=4 to image 2 failed.'
317
+ if (any (abs (real_k4 - obj% int_scal_k4) > tolerance4)) &
318
+ call print_and_register( ' get int kind=4 to real array kind=4 to image 2 failed.' )
296
319
end if
297
320
298
321
sync all
@@ -311,24 +334,24 @@ program get_convert_nums
311
334
int_k4(1 :3 ) = obj[2 ]% int_k4(:: 2 )
312
335
print * , int_k4
313
336
if (any (int_k4 /= [obj% int_k4(1 ), obj% int_k4(3 ), obj% int_k4(5 ), - 1 , - 1 ])) &
314
- & error stop ' strided get int kind=4 to kind=4 to image 2 failed.'
337
+ & call print_and_register( ' strided get int kind=4 to kind=4 to image 2 failed.' )
315
338
316
339
int_k1(3 :5 ) = obj[2 ]% int_k1(:: 2 )
317
340
print * , int_k1
318
341
if (any (int_k1 /= [INT (- 1 , 1 ), INT (- 1 , 1 ), obj% int_k1(1 ), obj% int_k1(3 ), obj% int_k1(5 )])) &
319
- & error stop ' strided get int kind=1 to kind=1 to image 2 failed.'
342
+ & call print_and_register( ' strided get int kind=1 to kind=1 to image 2 failed.' )
320
343
321
344
real_k8(1 :3 ) = obj[2 ]% real_k8(:: 2 )
322
345
print * , real_k8
323
346
if (any (abs (real_k8 - [obj% real_k8(1 ), obj% real_k8(3 ), obj% real_k8(5 ), REAL (- 1.0 , 8 ), REAL (- 1.0 , 8 )]) > tolerance8)) &
324
- & error stop ' strided get real kind=8 to kind=8 to image 2 failed.'
347
+ & call print_and_register( ' strided get real kind=8 to kind=8 to image 2 failed.' )
325
348
326
349
real_k4(3 :5 ) = obj[2 ]% real_k4(:: 2 )
327
350
print * , real_k4
328
351
if (any (abs (real_k4 - [- 1.0 , - 1.0 , obj% real_k4(1 ), obj% real_k4(3 ), obj% real_k4(5 )]) > tolerance4)) &
329
- & error stop ' strided get real kind=4 to kind=4 to image 2 failed.'
352
+ & call print_and_register( ' strided get real kind=4 to kind=4 to image 2 failed.' )
330
353
end if
331
-
354
+
332
355
! now with strides and kind conversion
333
356
sync all
334
357
int_k4 = - 1
@@ -343,48 +366,63 @@ program get_convert_nums
343
366
if (me == 1 ) then
344
367
int_k4(1 :3 ) = obj[2 ]% int_k1(:: 2 )
345
368
print * , int_k4
346
- if (any (int_k4 /= [15 , 13 , 11 , - 1 , - 1 ])) error stop ' strided get int kind=1 to kind=4 to image 2 failed.'
369
+ if (any (int_k4 /= [15 , 13 , 11 , - 1 , - 1 ])) call print_and_register( ' strided get int kind=1 to kind=4 to image 2 failed.' )
347
370
348
- int_k1(1 :3 ) = obj[2 ]% int_k4(:: 2 )
371
+ int_k1(1 :3 ) = obj[2 ]% int_k4(:: 2 )
349
372
print * , int_k1
350
373
if (any (int_k1 /= INT ([105 , 103 , 101 , - 1 , - 1 ], 1 ))) &
351
- & error stop ' strided get int kind=4 to kind=1 to image 2 failed.'
374
+ & call print_and_register( ' strided get int kind=4 to kind=1 to image 2 failed.' )
352
375
353
376
real_k8(1 :3 ) = obj[2 ]% real_k4(:: 2 )
354
377
print * , real_k8
355
378
if (any (abs (real_k8 - [- 5.1 , - 3.3 , - 1.5 , - 1.0 , - 1.0 ]) > tolerance8)) &
356
- & error stop ' strided get real kind=4 to kind=8 to image 2 failed.'
379
+ & call print_and_register( ' strided get real kind=4 to kind=8 to image 2 failed.' )
357
380
358
381
real_k4(1 :3 ) = obj[2 ]% real_k8(:: 2 )
359
382
print * , real_k4
360
383
if (any (abs (real_k4 - REAL ([5.1 , 3.3 , 1.5 , - 1.0 , - 1.0 ], 4 )) > tolerance4)) &
361
- & error stop ' strided get real kind=8 to kind=4 to image 2 failed.'
384
+ & call print_and_register( ' strided get real kind=8 to kind=4 to image 2 failed.' )
362
385
363
386
else if (me == 2 ) then
364
387
! now with strides and type conversion
365
388
int_k4(1 :3 ) = obj[1 ]% real_k8(:: 2 )
366
389
print * , int_k4
367
- if (any (int_k4 /= [5 , 3 , 1 , - 1 , - 1 ])) error stop ' strided get real kind=4 to int kind=4 to image 2 failed.'
390
+ if (any (int_k4 /= [5 , 3 , 1 , - 1 , - 1 ])) call print_and_register( ' strided get real kind=4 to int kind=4 to image 2 failed.' )
368
391
369
392
int_k1(1 :3 ) = obj[1 ]% real_k4(:: 2 )
370
393
print * , int_k1
371
394
if (any (int_k1 /= INT ([- 5 , - 3 , - 1 , - 1 , - 1 ], 1 ))) &
372
- & error stop ' strided get real kind=4 to int kind=1 to image 2 failed.'
395
+ & call print_and_register( ' strided get real kind=4 to int kind=1 to image 2 failed.' )
373
396
374
397
real_k8(1 :3 ) = obj[1 ]% int_k4(:: 2 )
375
398
print * , real_k8
376
399
if (any (abs (real_k8 - [105.0 , 103.0 , 101.0 , - 1.0 , - 1.0 ]) > tolerance8)) &
377
- & error stop ' strided get int kind=4 to real kind=8 to image 2 failed.'
400
+ & call print_and_register( ' strided get int kind=4 to real kind=8 to image 2 failed.' )
378
401
379
402
real_k4(1 :3 ) = obj[1 ]% int_k1(:: 2 )
380
403
print * , real_k4
381
404
if (any (abs (real_k4 - [15.0 , 13.0 , 11.0 , - 1.0 , - 1.0 ]) > tolerance4)) &
382
- & error stop ' strided get int kind=1 to real kind=4 to image 2 failed.'
405
+ & call print_and_register( ' strided get int kind=1 to real kind=4 to image 2 failed.' )
383
406
end if
384
407
385
- sync all
386
- if (me == 1 ) print * , " Test passed."
408
+ if (error_printed) error stop
409
+ if (me== 2 ) sync images(1 )
410
+ if (me== 1 ) then
411
+ sync images(2 )
412
+ print * , " Test passed."
413
+ end if
387
414
end associate
415
+
416
+
417
+ contains
418
+
419
+ subroutine print_and_register (error_message )
420
+ use iso_fortran_env, only : error_unit
421
+ character (len=* ), intent (in ) :: error_message
422
+ write (error_unit,* ) error_message
423
+ error_printed= .true.
424
+ end subroutine
425
+
388
426
end program get_convert_nums
389
427
390
428
! vim:ts=2:sts=2:sw=2:
0 commit comments