ABLATE Source Documentation
0.12.34
reverseRange.hpp
1
#ifndef ABLATELIBRARY_REVERSERANGE_HPP
2
#define ABLATELIBRARY_REVERSERANGE_HPP
3
#include <vector>
4
#include "petsc.h"
5
#include "range.hpp"
6
namespace
ablate::domain {
7
11
struct
ReverseRange
{
12
private
:
13
PetscInt rangeStart = 0;
14
PetscInt pointStart = 0;
15
std::vector<PetscInt> indices;
16
17
public
:
18
explicit
ReverseRange
(
const
ablate::domain::Range
& range) {
19
rangeStart = range.start;
20
if
(range.points && (range.start != range.end)) {
21
// find the min/max point
22
PetscInt maxPoint = rangeStart;
23
for
(PetscInt i = range.start; i < range.end; ++i) {
24
pointStart = PetscMin(pointStart, range.
GetPoint
(i));
25
maxPoint = PetscMax(maxPoint, range.
GetPoint
(i));
26
}
27
28
// size to the maximum location, set default to -1
29
indices.resize(maxPoint - pointStart + 1, -1);
30
31
// store the index at each point
32
for
(PetscInt i = range.start; i < range.end; ++i) {
33
indices[range.
GetPoint
(i) - pointStart] = i;
34
}
35
}
36
}
37
38
ReverseRange
() : rangeStart(-1), pointStart(-1) {}
39
45
inline
PetscInt
GetIndex
(PetscInt point)
const
{
return
indices.empty() ? point : indices[point - pointStart]; }
46
52
inline
PetscInt
GetAbsoluteIndex
(PetscInt point)
const
{
return
GetIndex
(point) - rangeStart; }
53
};
54
}
// namespace ablate::domain
55
#endif
// ABLATELIBRARY_RANGE_HPP
ablate::domain::Range
Definition:
range.hpp:11
ablate::domain::Range::GetPoint
PetscInt GetPoint(PetscInt i) const
Definition:
range.hpp:22
ablate::domain::ReverseRange
Definition:
reverseRange.hpp:11
ablate::domain::ReverseRange::GetAbsoluteIndex
PetscInt GetAbsoluteIndex(PetscInt point) const
Definition:
reverseRange.hpp:52
ablate::domain::ReverseRange::GetIndex
PetscInt GetIndex(PetscInt point) const
Definition:
reverseRange.hpp:45
src
domain
reverseRange.hpp
Generated by
1.9.1