Receive(data, source_process);
Receives a value into the variable or array data from the specified 
source process.
Broadcast(data, source_process);
The specified process sends the data with all of the other processes. 
Each process must call this function with a variable of the same type and 
size as the first argument.
Barrier();
When a process encounters this function call, it must wait until all
of the other processes have reached a call of the same function. After
that they can all continue with the execution of the program.
int main()
{
  int my_id;
  ... // Initialize and get process id.
  if (my_id == 0)
    Master();
  else
    Slave();
  ... // Some final statements.
  return 0;
}
Send-Receive. For each process i1 calling the function
Send(data1, i2);the process i2 must call the function
Receive(data2, i1);Unless specified otherwise, these are blocking send and receive: each process must wait until the matching call has been issued by the second process for the Send/Receive calls to be finished.
In these function calls, data1 and data2 must have the same type and size. The combination of the two function calls has the effect that
| Master function (id = 0) | Slave function (id = 1 to n-1) | 
| Input(a);
 Broadcast(a, 0); Input(b); Broadcast(b, 0); sum_i = Integral(a, a+(b-a)/n, F); integral = sum_i; for (i=0; i<n; i++) { Receive(sum_i, i); integral = integral + sum_i; } Output(integral);  | 
Broadcast(a, 0);
 Broadcast(b, 0); 
 Send(sum_i, 0);
  | 
Second example: the IVP solver. s0 and s, are real arrays of size n, which is both the number of dimensions of the curve s and the number of processes. We have a different function to compute the derivative of the curve for each dimension.
if (id == 0)
  Read(s0); // master
Broadcast(s0, 0);
Copy(s0, s);
for (t=0.0; t<c; t=t+delta_t) {
  sprime=Fid(s);
  s[id] = s[id]+sprime* delta_t;
  for (i=0; i<n; i++)
    Broadcast(s[i],
i);
  if (id == 0)
    Write(s); // master
}