1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 Write primitive and binary block from OPstream
27 \*---------------------------------------------------------------------------*/
31 #include "UOPstream.H"
32 #include "PstreamGlobals.H"
34 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
36 bool Foam::UOPstream::write
38 const commsTypes commsType,
41 const std::streamsize bufSize,
47 Pout<< "UOPstream::write : starting write to:" << toProcNo
48 << " tag:" << tag << " size:" << label(bufSize)
49 << " commsType:" << UPstream::commsTypeNames[commsType]
53 bool transferFailed = true;
55 if (commsType == blocking)
57 transferFailed = MPI_Bsend
59 const_cast<char*>(buf),
69 Pout<< "UOPstream::write : finished write to:" << toProcNo
70 << " tag:" << tag << " size:" << label(bufSize)
71 << " commsType:" << UPstream::commsTypeNames[commsType]
75 else if (commsType == scheduled)
77 transferFailed = MPI_Send
79 const_cast<char*>(buf),
89 Pout<< "UOPstream::write : finished write to:" << toProcNo
90 << " tag:" << tag << " size:" << label(bufSize)
91 << " commsType:" << UPstream::commsTypeNames[commsType]
95 else if (commsType == nonBlocking)
99 transferFailed = MPI_Isend
101 const_cast<char*>(buf),
112 Pout<< "UOPstream::write : started write to:" << toProcNo
113 << " tag:" << tag << " size:" << label(bufSize)
114 << " commsType:" << UPstream::commsTypeNames[commsType]
115 << " request:" << PstreamGlobals::outstandingRequests_.size()
119 PstreamGlobals::outstandingRequests_.append(request);
126 "(const int fromProcNo, char* buf, std::streamsize bufSize"
128 ) << "Unsupported communications type "
129 << UPstream::commsTypeNames[commsType]
130 << Foam::abort(FatalError);
133 return !transferFailed;
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 // ************************************************************************* //