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 - -// ************************************************************************* //