chombo-discharge
Loading...
Searching...
No Matches
CD_MultiIndex.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_MULTIINDEX_H
14#define CD_MULTIINDEX_H
15
16// Std includes
17#include <map>
18
19// Chombo includes
20#include <IntVect.H>
21#include <RealVect.H>
22
23// Our includes
24#include <CD_NamespaceHeader.H>
25
32{
33public:
37 MultiIndex() = delete;
38
43 MultiIndex(const MultiIndex& a_index) = default;
44
49 MultiIndex(const int a_order);
50
54 ~MultiIndex() = default;
55
60 void
61 define(const int a_order);
62
67 int
68 factorial() const;
69
74 IntVect
75 getCurrentIndex() const;
76
81 int
82 getOrder() const;
83
89 int
90 getLinearIndex(const IntVect a_MultiIndex) const;
91
97 IntVect
98 getMultiIndex(const int a_linearIndex) const;
99
106 operator=(const MultiIndex& a_other) = default;
107
113 int
114 operator[](const int a_dir) const;
115
119 void
120 operator++();
121
125 void
126 reset();
127
132 bool
133 ok() const;
134
140 int
141 norm() const;
142
147 int
148 getNumIndices() const;
149
155 Real
156 pow(const RealVect& a_vec);
157
158protected:
163
167 IntVect m_curIndex;
168
172 std::vector<IntVect>::iterator m_iter;
173
177 std::vector<IntVect> m_indices;
178
182 std::map<IntVect, int> m_mapToLinearIndex;
183
187 std::map<int, IntVect> m_mapToMultiIndex;
188
194 int
195 factorial(const int a_n) const;
196
200 void
201 makeIndices();
202
206 void
207 makeMaps();
208
209private:
213 static int
214 norm(const IntVect a_iv);
215};
216
217#include <CD_NamespaceFooter.H>
218
219#endif
SpaceDim multi-index type for use with higher order Taylor series.
Definition CD_MultiIndex.H:32
void operator++()
Increment multi-index lexicographically.
Definition CD_MultiIndex.cpp:152
void makeMaps()
Fill maps.
Definition CD_MultiIndex.cpp:195
MultiIndex()=delete
Weak construction is bad.
int factorial() const
Factorial function.
Definition CD_MultiIndex.cpp:111
int norm() const
Get norm of multi-index.
Definition CD_MultiIndex.cpp:122
std::vector< IntVect >::iterator m_iter
Pointer to index.
Definition CD_MultiIndex.H:172
void makeIndices()
Fill m_indices.
Definition CD_MultiIndex.cpp:158
IntVect m_curIndex
Current idnex.
Definition CD_MultiIndex.H:167
void reset()
Reset multi-index to point to the first index.
Definition CD_MultiIndex.cpp:34
IntVect getCurrentIndex() const
Get index.
Definition CD_MultiIndex.cpp:40
~MultiIndex()=default
Destructor.
int m_order
Maximum order representable by this multi-index.
Definition CD_MultiIndex.H:162
int operator[](const int a_dir) const
Get one index.
Definition CD_MultiIndex.cpp:88
IntVect getMultiIndex(const int a_linearIndex) const
Get a multi-index corresponding to the linear index (i.e. column number)
Definition CD_MultiIndex.cpp:73
MultiIndex(const MultiIndex &a_index)=default
Copy constructor.
MultiIndex & operator=(const MultiIndex &a_other)=default
Assignment operator.
std::map< int, IntVect > m_mapToMultiIndex
Map going from linear index to multi-index.
Definition CD_MultiIndex.H:187
bool ok() const
Check that multi-index is ok.
Definition CD_MultiIndex.cpp:94
std::map< IntVect, int > m_mapToLinearIndex
Map for going from lexicographically ordered multi-index to linear index.
Definition CD_MultiIndex.H:182
int getLinearIndex(const IntVect a_MultiIndex) const
Get the linear index (i.e. column number) for a given multi-index.
Definition CD_MultiIndex.cpp:58
int getOrder() const
Get highest order for this index.
Definition CD_MultiIndex.cpp:46
void define(const int a_order)
Define function.
Definition CD_MultiIndex.cpp:23
std::vector< IntVect > m_indices
All indices.
Definition CD_MultiIndex.H:177
Real pow(const RealVect &a_vec)
Power function for multi-indices.
Definition CD_MultiIndex.cpp:139
int getNumIndices() const
Return number of indices in MultiIndex range.
Definition CD_MultiIndex.cpp:52