chombo-discharge
Loading...
Searching...
No Matches
CD_ItoIteratorImplem.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_ITOITERATORIMPLEM_H
14#define CD_ITOITERATORIMPLEM_H
15
16// Chombo includes
17#include <CH_Timer.H>
18
19// Our includes
20#include <CD_ItoIterator.H>
21#include <CD_NamespaceHeader.H>
22
23template <class T>
25{
26 CH_TIME("ItoIterator<T>::ItoIterator<T>");
27
28 m_solvers = a_layout.getSolvers();
29 m_species = a_layout.getSpecies();
30 m_numSolvers = m_solvers.size();
31 m_mode = a_mode;
32 m_isDefined = true;
33
34 this->reset();
35}
36
37template <class T>
39{
40 CH_TIME("ItoIterator<T>::~ItoIterator<T>");
41}
42
43template <class T>
44int
46{
47 CH_assert(m_isDefined);
48
49 return m_numSolvers;
50}
51
52template <class T>
53int
55{
56 CH_assert(m_isDefined);
57
58 return m_isolver;
59}
60
61template <class T>
62void
64{
65 CH_assert(m_isDefined);
66
67 m_isolver = 0;
68}
69
70template <class T>
71bool
73{
74 return (m_isolver < m_numSolvers);
75}
76
77template <class T>
78void
80{
81 CH_assert(m_isDefined);
82
83 if (m_mode == SpeciesIteration::All) {
84 m_isolver++;
85 }
86 else {
87 m_isolver++;
88
89 for (int isolver = m_isolver; this->ok(); ++isolver) {
90 const RefCountedPtr<ItoSpecies>& species = m_species[isolver];
91
92 if (m_mode == SpeciesIteration::Charged) {
93 if (species->getChargeNumber() != 0) {
94 m_isolver = isolver;
95
96 break;
97 }
98 }
99 else if (m_mode == SpeciesIteration::Negative) {
100 if (species->getChargeNumber() < 0) {
101 m_isolver = isolver;
102
103 break;
104 }
105 }
106 else if (m_mode == SpeciesIteration::Positive) {
107 if (species->getChargeNumber() > 0) {
108 m_isolver = isolver;
109
110 break;
111 }
112 }
113 else if (m_mode == SpeciesIteration::Neutral) {
114 if (species->getChargeNumber() == 0) {
115 m_isolver = isolver;
116
117 break;
118 }
119 }
120 }
121 }
122}
123
124template <class T>
127{
128 CH_assert(m_isDefined);
129 CH_assert(m_isolver < m_numSolvers);
130
131 return m_solvers[m_isolver];
132}
133
134template <class T>
137{
138 CH_assert(m_isDefined);
139 CH_assert(m_isolver < m_numSolvers);
140
141 return m_species[m_isolver];
142}
143
144#include <CD_NamespaceFooter.H>
145
146#endif
Declaration of an iterator class for ItoLayout.
"Iterator" class for going through solvers in an ItoLayout.
Definition CD_ItoIterator.H:25
virtual void operator++()
Increment. This is different for different iteration modes.
Definition CD_ItoIteratorImplem.H:79
virtual bool ok()
Ok or not.
Definition CD_ItoIteratorImplem.H:72
virtual RefCountedPtr< T > & operator()()
Get current solver.
Definition CD_ItoIteratorImplem.H:126
virtual int index() const
Get current solver number.
Definition CD_ItoIteratorImplem.H:54
virtual RefCountedPtr< ItoSpecies > & getSpecies()
Get current species.
Definition CD_ItoIteratorImplem.H:136
virtual void reset()
Reset iterator to the first solver.
Definition CD_ItoIteratorImplem.H:63
virtual int getNumberOfSolvers()
Get number of solvers.
Definition CD_ItoIteratorImplem.H:45
ItoIterator()=delete
Disallowed constructor – use the full constructor.
SpeciesIteration
Enum which specifies which species to iterate through.
Definition CD_ItoIterator.H:31
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