UPstreamCommunicator.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2024 OpenCFD Ltd.
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "UPstream.H"
29 #include "PstreamGlobals.H"
30 
31 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
32 
34 :
35  UPstream::Communicator(MPI_COMM_NULL)
36 {}
37 
38 
39 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
40 
43 {
44  if (comm < 0 || comm >= PstreamGlobals::MPICommunicators_.size())
45  {
47  << "Illegal communicator " << comm << nl
48  << "Should be within range [0,"
50  << ')' << endl;
51 
52  return UPstream::Communicator(MPI_COMM_NULL);
53  }
54 
55  return UPstream::Communicator(PstreamGlobals::MPICommunicators_[comm]);
56 }
57 
58 
59 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
60 
62 {
63  return MPI_COMM_NULL != PstreamUtils::Cast::to_mpi(*this);
64 }
65 
66 
68 {
69  *this = UPstream::Communicator(MPI_COMM_NULL);
70 }
71 
72 
73 // ************************************************************************* //
An opaque wrapper for MPI_Comm with a vendor-independent representation without any <mpi...
Definition: UPstream.H:1598
constexpr char nl
The newline &#39;\n&#39; character (0x0a)
Definition: Ostream.H:50
DynamicList< MPI_Comm > MPICommunicators_
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:531
bool good() const noexcept
True if not equal to MPI_COMM_NULL.
Communicator() noexcept
Default construct as MPI_COMM_NULL.
const direction noexcept
Definition: Scalar.H:258
static Communicator lookup(const label comm)
Transcribe internally indexed communicator to wrapped value.
#define WarningInFunction
Report a warning using Foam::Warning.
void reset() noexcept
Reset to default constructed value (MPI_COMM_NULL)
static std::enable_if< std::is_pointer< Type >::value, Type >::type to_mpi(const UPstream::Communicator &arg) noexcept
Definition: openfoam_mpi.H:53