1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
! { dg-do run }
!
! CO_BROADCAST
!
program test
implicit none
intrinsic co_broadcast
type t
integer :: i
character(len=1) :: c
real(8) :: x(3), y(3)
end type t
integer :: i, j(10), stat
complex :: a(5,5)
character(kind=1, len=5) :: str1, errstr
character(kind=4, len=8) :: str2(2)
type(t) :: dt(4)
i = 1
j = 55
a = 99.0
str1 = 1_"XXXXX"
str2 = 4_"YYYYYYYY"
dt = t(1, 'C', [1.,2.,3.], [3,3,3])
errstr = "ZZZZZ"
if (this_image() == num_images()) then
i = 2
j = 66
a = -99.0
str1 = 1_"abcd"
str2 = 4_"12 3 4 5"
dt = t(-1, 'a', [3.,1.,8.], [99,24,5])
end if
sync all
call co_broadcast(i, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (i /= 2) call abort()
call co_broadcast(j, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (any (j /= 66)) call abort
call co_broadcast(a, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (any (a /= -99.0)) call abort
call co_broadcast(str1, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (str1 /= "abcd") call abort()
call co_broadcast(str2, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (any (str2 /= 4_"12 3 4 5")) call abort
call co_broadcast(dt, source_image=num_images(), stat=stat, errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (any (dt(:)%i /= -1)) call abort()
if (any (dt(:)%c /= 'a')) call abort()
if (any (dt(:)%x(1) /= 3.)) call abort()
if (any (dt(:)%x(2) /= 1.)) call abort()
if (any (dt(:)%x(3) /= 8.)) call abort()
if (any (dt(:)%y(1) /= 99.)) call abort()
if (any (dt(:)%y(2) /= 24.)) call abort()
if (any (dt(:)%y(3) /= 5.)) call abort()
sync all
dt = t(1, 'C', [1.,2.,3.], [3,3,3])
sync all
if (this_image() == num_images()) then
str2 = 4_"001122"
dt(2:4) = t(-2, 'i', [9.,2.,3.], [4,44,321])
end if
call co_broadcast(str2(::2), source_image=num_images(), stat=stat, &
errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (str2(1) /= 4_"001122") call abort()
if (this_image() == num_images()) then
if (str2(1) /= 4_"001122") call abort()
else
if (str2(2) /= 4_"12 3 4 5") call abort()
end if
call co_broadcast(dt(2::2), source_image=num_images(), stat=stat, &
errmsg=errstr)
if (stat /= 0) call abort()
if (errstr /= "ZZZZZ") call abort()
if (this_image() == num_images()) then
if (any (dt(1:1)%i /= 1)) call abort()
if (any (dt(1:1)%c /= 'C')) call abort()
if (any (dt(1:1)%x(1) /= 1.)) call abort()
if (any (dt(1:1)%x(2) /= 2.)) call abort()
if (any (dt(1:1)%x(3) /= 3.)) call abort()
if (any (dt(1:1)%y(1) /= 3.)) call abort()
if (any (dt(1:1)%y(2) /= 3.)) call abort()
if (any (dt(1:1)%y(3) /= 3.)) call abort()
if (any (dt(2:)%i /= -2)) call abort()
if (any (dt(2:)%c /= 'i')) call abort()
if (any (dt(2:)%x(1) /= 9.)) call abort()
if (any (dt(2:)%x(2) /= 2.)) call abort()
if (any (dt(2:)%x(3) /= 3.)) call abort()
if (any (dt(2:)%y(1) /= 4.)) call abort()
if (any (dt(2:)%y(2) /= 44.)) call abort()
if (any (dt(2:)%y(3) /= 321.)) call abort()
else
if (any (dt(1::2)%i /= 1)) call abort()
if (any (dt(1::2)%c /= 'C')) call abort()
if (any (dt(1::2)%x(1) /= 1.)) call abort()
if (any (dt(1::2)%x(2) /= 2.)) call abort()
if (any (dt(1::2)%x(3) /= 3.)) call abort()
if (any (dt(1::2)%y(1) /= 3.)) call abort()
if (any (dt(1::2)%y(2) /= 3.)) call abort()
if (any (dt(1::2)%y(3) /= 3.)) call abort()
if (any (dt(2::2)%i /= -2)) call abort()
if (any (dt(2::2)%c /= 'i')) call abort()
if (any (dt(2::2)%x(1) /= 9.)) call abort()
if (any (dt(2::2)%x(2) /= 2.)) call abort()
if (any (dt(2::2)%x(3) /= 3.)) call abort()
if (any (dt(2::2)%y(1) /= 4.)) call abort()
if (any (dt(2::2)%y(2) /= 44.)) call abort()
if (any (dt(2::2)%y(3) /= 321.)) call abort()
endif
end program test
|