1! caf -o bcast bcast.f90
2! cafrun -np 2 ./bcast
3! mwe for issue github.com/sourceryinstitute/OpenCoarrays/issues/503
4
5program main
6   real, allocatable, dimension(:, :, :) :: arr1, arr2
7   integer :: i, me, nimg
8   real :: red1, sum1, red2, sum2
9
10   allocate(arr1(10, 20, 8))
11   allocate(arr2(10, 20, 30))
12
13   me = this_image()
14   nimg = num_images()
15
16   if (me == 1) then
17      arr1 = reshape([(i, i=1, size(arr1))], shape(arr1))
18      arr2 = reshape([(i, i=1, size(arr2))], shape(arr2))
19   end if
20
21   call co_broadcast(arr1, source_image=1)
22   call co_broadcast(arr2, source_image=1)
23
24   sum1 = sum(arr1)
25   sum2 = sum(arr2)
26
27   red1 = sum1
28   red2 = sum2
29
30   call co_sum(red1)
31   call co_sum(red2)
32
33   sync all
34   print *, me, ' sum1=', sum1, ' red1=', red1
35   print *, me, ' sum2=', sum2, ' red2=', red2
36
37   if (abs(red1 - nimg * sum1) > epsilon(0.) .or. abs(red2 - nimg * sum2) > epsilon(0.)) then
38      write(*,*) 'Test failed!'
39      error stop 5
40   else
41      write(*,*) 'Test passed.'
42   end if
43   deallocate(arr1, arr2)
44end program
45