# User-defined operation example

$union = MPI::Op.create(Proc.new {|a, b| a | b}, true)

$rank = MPI::Comm::WORLD.rank
# Note that since we are passing an array in to be reduced, the allreduce
# assumes that we intend to give a list of things to be reduced, so this
# must be done by an array of an array of 1 element
$rankary = [[$rank]]

$rankary = MPI::Comm::WORLD.allreduce($rankary, $union)

class Array
	def to_s
		s = "["
		self.each { |e|
			s += e.to_s + ", "
		}
		s = s[0...-2]
		s += "]"
	end
end
puts "#{$rank}: #{$rankary}"


syntax highlighted by Code2HTML, v. 0.9.1