chombo-discharge
Loading...
Searching...
No Matches
CD_CdrIteratorImplem.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_CDRITERATORIMPLEM_H
14#define CD_CDRITERATORIMPLEM_H
15
16// Our includes
17#include <CD_CdrIterator.H>
18#include <CD_NamespaceHeader.H>
19
20template <class T>
22{
23 CH_TIME("CdrIterator<T>::CdrIterator(CdrLayout<T>, SpeciesIteration)");
24
25 // Default settings
26 m_solvers = a_layout.getSolvers();
27 m_species = a_layout.getSpecies();
28 m_numSolvers = m_solvers.size();
29 m_mode = a_mode;
30
31 m_isDefined = true;
32
33 reset();
34}
35
36template <class T>
38{
39 CH_TIME("CdrIterator<T>::~CdrIterator()");
40}
41
42template <class T>
43int
45{
46 CH_TIME("CdrIterator<T>::getNumberOfSolvers()");
47
48 CH_assert(m_isDefined);
49
50 return m_numSolvers;
51}
52
53template <class T>
54int
56{
57 CH_TIME("CdrIterator<T>::index()");
58
59 CH_assert(m_isDefined);
60
61 return m_isolver;
62}
63
64template <class T>
65void
67{
68 CH_TIME("CdrIterator<T>::reset()");
69
70 CH_assert(m_isDefined);
71
72 m_isolver = 0;
73}
74
75template <class T>
76bool
78{
79 CH_TIME("CdrIterator<T>::ok()");
80
81 CH_assert(m_isDefined);
82
83 return (m_isolver < m_numSolvers);
84}
85
86template <class T>
87void
89{
90 CH_TIME("CdrIterator<T>::operator++()");
91
92 CH_assert(m_isDefined);
93
94 if (m_mode == SpeciesIteration::All) {
95 m_isolver++;
96 }
97 else {
98 m_isolver++;
99
100 for (int isolver = m_isolver; this->ok(); ++isolver) {
101 const RefCountedPtr<CdrSpecies>& species = m_species[isolver];
102
103 if (m_mode == SpeciesIteration::Charged) {
104 if (species->getChargeNumber() != 0) {
105 m_isolver = isolver;
106 break;
107 }
108 }
109 else if (m_mode == SpeciesIteration::Negative) {
110 if (species->getChargeNumber() < 0) {
111 m_isolver = isolver;
112 break;
113 }
114 }
115 else if (m_mode == SpeciesIteration::Positive) {
116 if (species->getChargeNumber() > 0) {
117 m_isolver = isolver;
118 break;
119 }
120 }
121 else if (m_mode == SpeciesIteration::Neutral) {
122 if (species->getChargeNumber() == 0) {
123 m_isolver = isolver;
124 break;
125 }
126 }
127 }
128 }
129}
130
131template <class T>
134{
135 CH_TIME("CdrIterator<T>::operator()");
136
137 CH_assert(m_isDefined);
138 CH_assert(m_isolver < m_numSolvers);
139
140 return m_solvers[m_isolver];
141}
142
143template <class T>
146{
147 CH_TIME("CdrIterator<T>::getSpecies()");
148
149 CH_assert(m_isDefined);
150 CH_assert(m_isolver < m_numSolvers);
151
152 return m_species[m_isolver];
153}
154
155#include <CD_NamespaceFooter.H>
156
157#endif
Declaration of an iterator class for CdrLayout (for iterating through subsets of solvers).
virtual void reset()
Reset iterator to the beginning.
Definition CD_CdrIteratorImplem.H:66
virtual bool ok() const
Check if the iterator is valid.
Definition CD_CdrIteratorImplem.H:77
virtual int index() const
Get current solver number (i.e. index in CdrLayouts solvers).
Definition CD_CdrIteratorImplem.H:55
virtual RefCountedPtr< CdrSpecies > & getSpecies()
Return the current species.
Definition CD_CdrIteratorImplem.H:145
virtual RefCountedPtr< T > & operator()()
Return the current solver.
Definition CD_CdrIteratorImplem.H:133
virtual void operator++()
Increment the iterator. Behavior depends on iteration mode.
Definition CD_CdrIteratorImplem.H:88
CdrIterator()=delete
Disallowed weak construction. Always use the full constructor.
SpeciesIteration
Enum class for iterating through subsets of species.
Definition CD_CdrIterator.H:34
virtual ~CdrIterator()
Destructor (does nothing).
Definition CD_CdrIteratorImplem.H:37
virtual int getNumberOfSolvers()
Get number of solvers.
Definition CD_CdrIteratorImplem.H:44
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26