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