Sending a message comprises three steps in PVM.
First, a send buffer must be initialized by a call to pvm_initsend()
or pvm_mkbuf().
Second, the message must be ``packed'' into this buffer using
any number and combination of pvm_pk*() routines.
(In Fortran all message packing is done with the pvmfpack() subroutine.)
Third, the completed message is sent to another process by
calling the pvm_send() routine or multicast with the pvm_mcast() routine.

A message is received by calling either a blocking or nonblocking
receive routine and then ``unpacking'' each of the packed items from
the receive buffer. The receive routines can be set to
accept any message, or any message from a specified source, or
any message with a specified message tag,
or only messages with a given message tag from a given source.
There is also a probe function that returns whether a message has
arrived, but does not actually receive it.

If required, other receive contexts can be handled by PVM 3.
The routine pvm_recvf() allows users to define their own
receive contexts that will be used by the subsequent PVM receive routines.