openPMD-api
ParticleSpecies.hpp
1 /* Copyright 2017-2025 Fabian Koller, Axel Huebl, Franz Poeschel
2  *
3  * This file is part of openPMD-api.
4  *
5  * openPMD-api is free software: you can redistribute it and/or modify
6  * it under the terms of of either the GNU General Public License or
7  * the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * openPMD-api is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License and the GNU Lesser General Public License
15  * for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * and the GNU Lesser General Public License along with openPMD-api.
19  * If not, see <http://www.gnu.org/licenses/>.
20  */
21 #pragma once
22 
23 #include "openPMD/ParticlePatches.hpp"
24 #include "openPMD/Record.hpp"
25 #include "openPMD/backend/Attributable.hpp"
26 #include "openPMD/backend/Container.hpp"
27 #include "openPMD/backend/HierarchyVisitor.hpp"
28 #include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
29 #include "openPMD/backend/scientific_defaults/ScientificDefaults_auxiliary.hpp"
30 
31 #include <string>
32 
33 namespace openPMD
34 {
35 
37  : public Container<Record>
39 {
40  friend class Container<ParticleSpecies>;
41  friend class Container<Record>;
42  friend class Iteration;
43  template <typename T>
44  friend T &internal::makeOwning(T &self, Series);
45  friend class internal::ScientificDefaults;
46  friend class Attributable;
47 
48 public:
49  ParticlePatches particlePatches;
50 
51  void visitHierarchy(HierarchyVisitor &v, bool recursive) override;
52 
53 private:
55 
56  void read();
57  void flush(std::string const &, internal::FlushParams const &) override;
58 
60 
61  inline std::shared_ptr<Data_t> getShared()
62  {
63  return m_containerData;
64  }
65 
66 protected:
67  void scientificDefaults_impl(
68  internal::WriteOrRead, OpenpmdStandard) override;
69 };
70 
71 namespace traits
72 {
73  template <>
75  {
76  constexpr static bool is_noop = false;
77  template <typename T>
78  void operator()(T &it)
79  {
80  it->second.particlePatches.linkHierarchy(it->second.writable());
81  }
82  };
83 } // namespace traits
84 } // namespace openPMD
Layer to manage storage of attributes associated with file objects.
Definition: Attributable.hpp:225
Map-like container that enforces openPMD requirements and handles IO.
Definition: Container.hpp:106
Definition: HierarchyVisitor.hpp:20
Logical compilation of data from one snapshot (e.g.
Definition: Iteration.hpp:172
Definition: ParticlePatches.hpp:32
Definition: ParticleSpecies.hpp:39
void visitHierarchy(HierarchyVisitor &v, bool recursive) override
Visitor pattern for the openPMD object hierarchy in postfix traversal.
Definition: ParticleSpecies.cpp:30
Definition: Record.hpp:34
Implementation for the root level of the openPMD hierarchy.
Definition: Series.hpp:288
Definition: Attributable.hpp:110
Definition: ScientificDefaults.hpp:23
Public definitions of openPMD-api.
Definition: Date.cpp:29
Parameters recursively passed through the openPMD hierarchy when flushing.
Definition: AbstractIOHandler.hpp:106
Container Element Creation Policy.
Definition: Container.hpp:54