The main documentation of the Broadcast Procedure contains additional explanation of this code listing.
define([BROADCAST_ROUTINE],[
ifelse([$1], [character],
[pushdef([TYPE], [character,*])],
[pushdef([TYPE], [$1])])
pushdef([DIM], [$2])
pushdef([Broadcast_TYPE_DIM], expand(Broadcast_$1_DIM))
subroutine Broadcast_TYPE_DIM (Variable)
! Input/Output variable.
type(TYPE,DIM,np), intent(inout) :: Variable ! Variable to be broadcast.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements - none.
! Do the global broadcast.
ifdef([USE_PGSLIB],[
! PGSLib parallel broadcast.
call PGSLib_BCast (Variable)
],[
! Serial broadcast - no op.
])
! Verify guarantees - none.
return
end subroutine Broadcast_TYPE_DIM
popdef([TYPE])
popdef([DIM])
popdef([Broadcast_TYPE_DIM])
])
forloop([Dim],[0],[3],[
fortext([Type],[real integer logical],[
BROADCAST_ROUTINE(Type, Dim)
])
])
forloop([Dim],[0],[2],[
BROADCAST_ROUTINE(character, Dim)
])