libMesh
Loading...
Searching...
No Matches
parallel_object.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18
19
20#ifndef LIBMESH_PARALLEL_OBJECT_H
21#define LIBMESH_PARALLEL_OBJECT_H
22
23
24// libMesh includes
25#include "libmesh/libmesh_common.h" // libmesh_dbg_var
26#include "libmesh/parallel_only.h"
27
28// TIMPI includes
29#include "timpi/communicator.h"
30
31
32// Macro to identify and debug functions which should only be called in
33// parallel on every processor at once
34#undef parallel_object_only
35#undef exceptionless_parallel_object_only
36#ifndef NDEBUG
37#define parallel_object_only() libmesh_parallel_only(this->comm())
38#define exceptionless_parallel_object_only() libmesh_exceptionless_parallel_only(this->comm())
39#else
40#define parallel_object_only() ((void) 0)
41#define exceptionless_parallel_object_only() ((void) 0)
42#endif
43
44
45namespace libMesh
46{
59{
60public:
61
67 _communicator(comm_in)
68 {}
69
75 {}
76
82 ParallelObject & operator= (const ParallelObject & libmesh_dbg_var(other))
83 {
84 libmesh_assert_equal_to (&_communicator, &other._communicator);
85 return *this;
86 }
87
91 virtual ~ParallelObject () = default;
92
98 { return _communicator; }
99
104 {
105 processor_id_type returnval =
106 cast_int<processor_id_type>(_communicator.size());
107 libmesh_assert(returnval); // We never have an empty comm
108 return returnval;
109 }
110
115 { return cast_int<processor_id_type>(_communicator.rank()); }
116
117
118protected:
119
121};
122} // namespace libMesh
123
124#endif // LIBMESH_PARALLEL_OBJECT_H
processor_id_type size() const
processor_id_type rank() const
An object whose state is distributed along a set of processors.
const Parallel::Communicator & _communicator
ParallelObject(const Parallel::Communicator &comm_in)
Constructor.
processor_id_type processor_id() const
ParallelObject & operator=(const ParallelObject &libmesh_dbg_var(other))
"Assignment" operator.
const Parallel::Communicator & comm() const
processor_id_type n_processors() const
virtual ~ParallelObject()=default
Destructor.
ParallelObject(const ParallelObject &other)
Copy Constructor.
The libMesh namespace provides an interface to certain functionality in the library.
libmesh_assert(ctx)
uint8_t processor_id_type
Definition id_types.h:104