diff --git a/src/Pstream/Allwmake b/src/Pstream/Allwmake
index a24dd16a5db6d9e5af462c67d9fd014c668852e9..a01538cc389e074a9e51c339fd9e8431ecc27999 100755
--- a/src/Pstream/Allwmake
+++ b/src/Pstream/Allwmake
@@ -5,7 +5,7 @@ set -x
 wmake libso dummy
 
 case "$WM_MPLIB" in
-LAM | *MPI* )
+*MPI*)
     set +x
     echo
     echo "Note: ignore spurious warnings about missing mpicxx.h headers"
diff --git a/src/Pstream/pvm/IPread.C b/src/Pstream/pvm/IPread.C
deleted file mode 100644
index 5a035bf388fd67bb0e7d36d1ebc3262ee66c719c..0000000000000000000000000000000000000000
--- a/src/Pstream/pvm/IPread.C
+++ /dev/null
@@ -1,114 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Description
-    Read token and binary block from IPstream using pvm.
-
-\*---------------------------------------------------------------------------*/
-
-#include "error.H"
-
-#include "IPstream.H"
-
-#include <pvm3.h>
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
-
-IPstream::IPstream
-(
-    const int fromProcNo,
-    const label bufSize,
-    streamFormat format,
-    versionNumber version
-)
-:
-    Pstream(bufSize),
-    Istream(format, version),
-    fromProcNo_(fromProcNo),
-    messageSize_(0)
-{
-    setOpened();
-    setGood();
-
-    int bufid, tag, tid;
-
-    // If the buffer size is not specified then probe the incomming message
-
-    if (!bufSize)
-    {
-        // Probe read buffer until message arrives.
-        while (!(bufid = pvm_probe(procID(fromProcNo_), msgType())));
-
-        // When the message arrives find its size
-        pvm_bufinfo(bufid, &messageSize_, &tag, &tid);
-
-        // Resize buffer to message size
-        buf_.setSize(messageSize_);
-    }
-
-
-    // Read message into buffer
-
-    if
-    (
-        pvm_precv
-        (
-            procID(fromProcNo_),
-            msgType(),
-            buf_.begin(),
-            buf_.size(),
-            PVM_BYTE,
-            &tid, &tag, &messageSize_
-        ) != PvmOk
-    )
-    {
-        FatalErrorIn("IPstream::IPstream(const int fromProcNo)")
-            << "pvm_precv cannot receive incomming message"
-            << ::abort;
-    }
-
-
-    // Check size of message read
-
-    if (messageSize_ > buf_.size())
-    {
-        FatalErrorIn("IPstream::IPstream(const int fromProcNo)")
-            << "buffer (" << buf_.size()
-            << ") not large enough for incomming message ("
-            << messageSize_ << ')'
-            << ::abort;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// ************************************************************************* //
diff --git a/src/Pstream/pvm/Make/files b/src/Pstream/pvm/Make/files
deleted file mode 100644
index 8a94fb2f059108a4681678dc4fe62dfdf98e86ad..0000000000000000000000000000000000000000
--- a/src/Pstream/pvm/Make/files
+++ /dev/null
@@ -1,5 +0,0 @@
-OPwrite.C
-IPread.C
-Pstream.C
-
-LIB = $(FOAM_LIBBIN)/pvm-$(LAM_VERSION)/libPstream
diff --git a/src/Pstream/pvm/Make/options b/src/Pstream/pvm/Make/options
deleted file mode 100644
index 90632e801ed7c6d9c7e0fdbcd09cc5327477b26f..0000000000000000000000000000000000000000
--- a/src/Pstream/pvm/Make/options
+++ /dev/null
@@ -1,4 +0,0 @@
-include $(RULES)/mplib$(WM_MPLIB)
-
-EXE_INC = $(PFLAGS) $(PINC)
-LIB_LIBS = $(PLIBS)
diff --git a/src/Pstream/pvm/OPwrite.C b/src/Pstream/pvm/OPwrite.C
deleted file mode 100644
index 454f6d1eb868b56a0f279f7333d6ff7409a58a62..0000000000000000000000000000000000000000
--- a/src/Pstream/pvm/OPwrite.C
+++ /dev/null
@@ -1,68 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Description
-    Write primitive and binary block from OPstream using pvm.
-
-\*---------------------------------------------------------------------------*/
-
-#include "error.H"
-
-#include "OPstream.H"
-
-#include <pvm3.h>
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-OPstream::~OPstream()
-{
-    if
-    (
-        pvm_psend
-        (
-            procID(toProcNo_),
-            msgType(),
-            buf_.begin(),
-            bufPosition_,
-            PVM_BYTE
-        ) != PvmOk
-    )
-    {
-        FatalErrorIn("OPstream::~OPstream()")
-            << "pvm_psend cannot send outgoing message"
-            << ::abort;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// ************************************************************************* //
diff --git a/src/Pstream/pvm/Pstream.C b/src/Pstream/pvm/Pstream.C
deleted file mode 100644
index c76e2df1159b360678bc039a13f9e9eca1ff6f4b..0000000000000000000000000000000000000000
--- a/src/Pstream/pvm/Pstream.C
+++ /dev/null
@@ -1,393 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "Pstream.H"
-#include "PstreamReduceOps.H"
-
-#include <cstring>
-#include <cstdlib>
-#include <csignal>
-
-#include <pvm3.h>
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-void Pstream::addValidParOptions(HashTable<string>& validParOptions)
-{
-    validParOptions.insert("np", "");
-    validParOptions.insert("p4pg", "PI file");
-    validParOptions.insert("p4wd", "directory");
-    validParOptions.insert("p4amslave", "");
-    validParOptions.insert("p4yourname", "hostname");
-}
-
-
-bool Pstream::init(int& argc, char**& argv)
-{
-    // Set the comunications options
-    pvm_setopt(PvmRoute, PvmRouteDirect);
-
-    // Get the ID of this processor
-    int mytid = pvm_mytid();
-
-#ifdef USECRAYSHMEM
-
-    // Get the size of the NULL group
-    procIDs_.setSize(pvm_gsize(NULL));
-
-    // For each processor of the NULL group get its ID
-    for (int proci=0; proci<ProcIDs.size(); proci++)
-    {
-        procIDs_[proci] = pvm_gettid(NULL, proci);
-    }
-
-#else
-
-    // Initialisation message type
-    int initMsgType = 0;
-
-    // If this is not a slave then it must be the master.
-    // Master spawns the rest of the child processes in the same manner as MPI
-    if (string(argv[argc-1]) != "-slave")
-    {
-        // Last argument is number of processors in parallel run
-        int nProcs = atoi(argv[argc-1]);
-
-        // If it is less than 2 this is not a parallel run!
-        if (nProcs < 2)
-        {
-            FatalErrorIn("Pstream::init(int& argc, char**& argv)")
-                << "Attempt to run parallel on < 2 processors ... stopping."
-                << abort(FatalError);
-        }
-
-
-        Info<< "Starting parallel run on " << nProcs << " processors ... "
-            << nl << endl;
-
-
-        // set size of ID list
-        procIDs_.setSize(nProcs);
-        procIDs_ = 0;
-
-        // I am the master
-        myProcNo_ = 1;
-
-        // Put my ID in the list
-        procIDs_[0] = mytid;
-
-        // Setup arguments of children
-        typedef char* charPtr;
-        char** Argv = new charPtr[argc + 1];
-
-        for (int i=0; i<argc-1; i++)
-        {
-            Argv[i] = new char[strlen(argv[i+1] + 1)];
-            strcpy(Argv[i], argv[i+1]);
-        }
-
-        Argv[argc-1] = new char[7];
-        strcpy(Argv[argc-1], "-slave");
-
-        Argv[argc] = NULL;
-
-        // Spawn children as copies of me
-        if
-        (
-            pvm_spawn
-            (
-                argv[0],
-                Argv,
-                PvmTaskDefault,
-                "",
-                nProcs-1,
-                &(procIDs_[1])
-            ) != nProcs-1
-        )
-        {
-            FatalErrorIn("Pstream::init(int& argc, char**& argv)")
-                << "Unable to spawn processes ... stopping."
-                << abort(FatalError);
-        }
-
-
-        // Broadcast task IDs to all children
-        pvm_setopt(PvmRoute, PvmRouteDirect);
-        pvm_initsend(PvmDataDefault);
-        pvm_pkint((int*)(&nProcs), 1, 1);
-        pvm_pkint(procIDs_.begin(), nProcs, 1);
-        pvm_mcast(procIDs_.begin(), nProcs, initMsgType);
-
-
-        Info<< "nProcs : " << nProcs << endl;
-        Info<< "TIDS   : ";
-        for (int proci=0; proci<procIDs_.size(); proci++)
-        {
-            cout<< hex << procIDs_[proci] << ' ';
-        }
-        cout<< dec << nl << std::endl;
-    }
-    else
-    {
-        // Receive processor data from master
-        pvm_recv(-1, initMsgType);
-
-        // Should have received the number of processors in the run
-        int nProcs;
-        pvm_upkint(&nProcs, 1, 1);
-
-        // ... set size of ID list
-        procIDs_.setSize(nProcs);
-
-        // ... and unpack the processor IDs
-        pvm_upkint(procIDs_.begin(), nProcs, 1);
-    }
-
-#endif
-
-    // Find which processor number this is
-    for (int proci=0; proci<procIDs_.size(); proci++)
-    {
-        if (procIDs_[proci] == mytid)
-        {
-            break;
-        }
-    }
-
-    // Set the processor numbers to start from 1
-    myProcNo_ = proci + 1;
-
-    /*
-    if (pvm_joingroup("foam") < 0)
-    {
-        FatalErrorIn("Pstream::init(int& argc, char**& argv)")
-            << "Pstream::init(int*, char **[]) : "
-            << "could not join group ... stopping."
-            << abort(FatalError);
-    }
-
-    pvm_barrier("foam", nProcs());
-    */
-
-    // Setup signal handler to catch an interupt (^C) and abort the run
-    // This doesn't work, it causes
-    // libpvm [t40003]: pvm_sendsig(): Not implemented
-    // libpvm [t40003]: pvm_kill(): Not implemented
-    // messages
-    //signal(SIGINT, stop);
-
-    if (master())
-    {
-        Sout<< "Master started successfully." << nl << endl;
-    }
-    else
-    {
-        Sout<< "Child " << myProcNo_ << " started successfully." << nl << endl;
-    }
-
-    setParRun();
-
-    // Everything is OK
-    return true;
-}
-
-
-void Pstream::exit(int errnum)
-{
-    //pvm_lvgroup("foam");
-
-    if (errnum != 0)
-    {
-        for (int proci=1; proci<=procIDs_.size(); proci++)
-        {
-            if (proci != myProcNo())
-            {
-                pvm_kill(procID(proci));
-            }
-        }
-    }
-
-    pvm_exit();
-    ::exit(errnum);
-}
-
-
-void Pstream::abort()
-{
-    for (int proci=1; proci<=procIDs_.size(); proci++)
-    {
-        if (proci != myProcNo())
-        {
-            pvm_kill(procID(proci));
-        }
-    }
-
-    pvm_exit();
-    //::abort();
-}
-
-
-void reduce(scalar& Value, const sumOp<scalar>& bop)
-{
-    if (Pstream::parRun())
-    {
-#       ifdef PVM_REDUCE
-        if
-        (
-            pvm_reduce
-            (
-                PvmSum,
-                &Value,
-                1,
-                PVM_DOUBLE,
-                Pstream::msgType(),
-                "foam",
-                0
-            ) != PvmOk
-        )
-        {
-            FatalErrorIn
-            (
-                "reduce(scalar& Value, const sumOp<scalar>& sumOp)"
-            )   << "pvm_reduce failed"
-                << abort(FatalError);
-        }
-#       endif
-
-        if (Pstream::master())
-        {
-            for
-            (
-                int slave=Pstream::firstSlave();
-                slave<=Pstream::lastSlave();
-                slave++
-            )
-            {
-                scalar value;
-                int atid, atag, alen;
-
-                if
-                (
-                    pvm_precv
-                    (
-                        Pstream::procID(slave),
-                        Pstream::msgType(),
-                        &value,
-                        1,
-                        PVM_DOUBLE,
-                        &atid, &atag, &alen
-                    ) != PvmOk
-                )
-                {
-                    FatalErrorIn
-                    (
-                        "reduce(scalar& Value, const sumOp<scalar>& sumOp)"
-                    )   << "pvm_precv failed"
-                        << abort(FatalError);
-                }
-
-                Value = bop(Value, value);
-            }
-        }
-        else
-        {
-            if
-            (
-                pvm_psend
-                (
-                    Pstream::procID(Pstream::masterNo()),
-                    Pstream::msgType(),
-                    &Value,
-                    1,
-                    PVM_DOUBLE
-                ) != PvmOk
-            )
-            {
-                FatalErrorIn
-                (
-                    "reduce(scalar& Value, const sumOp<scalar>& sumOp)"
-                )   << "pvm_psend failed"
-                    << abort(FatalError);
-            }
-        }
-
-
-        if (Pstream::master())
-        {
-            pvm_initsend(PvmDataDefault);
-            pvm_pkdouble(&Value, 1, 1);
-
-            if
-            (
-                pvm_mcast
-                (
-                    (int*)Pstream::procIDs().begin(),
-                    Pstream::nProcs(),
-                    Pstream::msgType()
-                ) != PvmOk
-            )
-            {
-                FatalErrorIn
-                (
-                    "reduce(scalar& Value, const sumOp<scalar>& sumOp)"
-                )   << "pvm_mcast failed"
-                    << abort(FatalError);
-            }
-        }
-        else
-        {
-            if
-            (
-                pvm_recv
-                (
-                    Pstream::procID(Pstream::masterNo()),
-                    Pstream::msgType()
-                ) <= 0
-            )
-            {
-                FatalErrorIn
-                (
-                    "reduce(scalar& Value, const sumOp<scalar>& sumOp)"
-                )   << "pvm_psend failed"
-                    << abort(FatalError);
-            }
-
-            pvm_upkdouble(&Value, 1, 1);
-        }
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// ************************************************************************* //