openPMD-api
 
Loading...
Searching...
No Matches
MeshRecordComponent.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/RecordComponent.hpp"
24
25#include <vector>
26
27namespace openPMD
28{
29namespace internal
30{
31 template <typename, typename>
32 class BaseRecordData;
33}
34
35class MeshRecordComponent : public RecordComponent
36{
37 template <typename T, typename T_key, typename T_container>
38 friend class Container;
39 template <typename>
40 friend class BaseRecord;
41 template <typename, typename>
42 friend class internal::BaseRecordData;
43
44 friend class Mesh;
45
46private:
47 MeshRecordComponent();
48 MeshRecordComponent(NoInit);
49 void read();
50 void flush(std::string const &, internal::FlushParams const &);
51
52public:
53 ~MeshRecordComponent() override = default;
54
62 MeshRecordComponent(BaseRecord<MeshRecordComponent> const &);
63
70 template <typename T>
71 std::vector<T> position() const;
72
79 template <typename T>
80 MeshRecordComponent &setPosition(std::vector<T> pos);
81
92 template <typename T>
93 MeshRecordComponent &makeConstant(T);
94};
95
96template <typename T>
97std::vector<T> MeshRecordComponent::position() const
98{
99 return readVectorFloatingpoint<T>("position");
100}
101
102template <typename T>
103inline MeshRecordComponent &MeshRecordComponent::makeConstant(T value)
104{
106 return *this;
107}
108} // namespace openPMD
std::vector< T > readVectorFloatingpoint(std::string const &key) const
Retrieve a vector of values of a floating point Attributes of user-defined precision with ensured typ...
Definition Attributable.hpp:669
MeshRecordComponent & setPosition(std::vector< T > pos)
Position on an element.
Definition MeshRecordComponent.cpp:88
std::vector< T > position() const
Position on an element.
Definition MeshRecordComponent.hpp:97
MeshRecordComponent & makeConstant(T)
Create a dataset with regular extent and constant value.
Definition MeshRecordComponent.hpp:103
RecordComponent(BaseRecord< RecordComponent > const &)
Avoid object slicing when using a Record as a scalar Record Component.
Definition RecordComponent.cpp:190
RecordComponent & makeConstant(T)
Create a dataset with regular extent and constant value.
Definition RecordComponent.cpp:733
Definition BaseRecord.hpp:52
Public definitions of openPMD-api.
Definition Date.cpp:29
@ T
time
Definition UnitDimension.hpp:41
Definition Attributable.hpp:251
Parameters recursively passed through the openPMD hierarchy when flushing.
Definition AbstractIOHandler.hpp:106