DOpE
timeiterator.h
Go to the documentation of this file.
1 
24 #ifndef TIMEITERATOR_H_
25 #define TIMEITERATOR_H_
26 
27 #include <deal.II/dofs/dof_handler.h>
28 #include <dofs/dof_accessor.h>
29 
30 #include <grid/tria_iterator.h>
31 
32 namespace DOpE
33 {
34  namespace IteratorState
35  {
36 
42  {
51  };
52  }
53 
54  typedef dealii::DoFHandler<1>::active_cell_iterator active_cell_it;
55 
56 
64  {
65  public:
66  //constructors
67 
72  {
73  present_index_ = -3;//i.e. invalid
74  }
75 
79  TimeIterator(const active_cell_it& element, int present_index) :
80  element_(element)
81  {
82  present_index_ = present_index;
83  }
84 
89  {
90  element_ = it.element_;
91  present_index_ = it.present_index_;
92  }
93 
98  GetState() const
99  {
100  if (present_index_ >= 0 && present_index_
101  < static_cast<int>(element_->get_triangulation().n_active_cells()))
102  return IteratorState::valid;
103  else
104  {
105  if (present_index_ == -1)
107  else
108  {
109  if (present_index_ == -2)
111  else
112  return IteratorState::invalid;
113  }
114  }
115  }
116 
122  int
123  GetIndex() const
124  {
125  return present_index_;
126  }
127 
128  TimeIterator&
129  operator=(const TimeIterator& element)
130  {
131  element_ = element.element_;
132  present_index_ = element.present_index_;
133  return *this;
134  }
135 
136  void
137  Initialize(const active_cell_it& element, int present_index)
138  {
139  element_ = element;
140  present_index_ = present_index;
141  }
142 
143  bool
144  operator==(const TimeIterator& element)
145  {
146  if (GetState() == element.GetState())
147  return (element_ == element.getelement_());
148  else
149  return false;
150  }
151 
152  bool
153  operator!=(const TimeIterator& element)
154  {
155  if (GetState() == element.GetState())
156  return (element_ != element.getelement_());
157  else
158  return true;
159  }
160 
164  double
165  get_center() const
166  {
167  assert(GetState()==IteratorState::valid);
168  return element_->center()(0);
169  }
170 
174  double
175  get_left() const
176  {
177  assert(GetState()==IteratorState::valid);
178  return element_->face(0)->center()(0);
179  }
180 
184  double
185  get_right() const
186  {
187  assert(GetState()==IteratorState::valid);
188  return element_->face(1)->center()(0);
189  }
190 
194  double
195  get_k() const
196  {
197  assert(GetState()==IteratorState::valid);
198  return element_->diameter();
199  }
200 
201  const active_cell_it&
202  getelement_() const
203  {
204  return element_;
205  }
206 
207  void
208  get_time_dof_indices(std::vector<unsigned int>& local_dof_indices) const
209  {
210  assert(GetState()==IteratorState::valid);
211  element_->get_dof_indices(local_dof_indices);
212  }
213 
217  TimeIterator &
219  {
220  assert(GetState()==IteratorState::valid);
221  ++present_index_;
222  if (present_index_ < static_cast<int>(element_->get_triangulation().n_active_cells()))
223  {
224  element_ = element_->neighbor(1);
225  }
226  else
227  {
228  present_index_ = -1;
229  }
230 
231  return *this;
232  }
233 
239  {
240  assert(GetState()==IteratorState::valid);
241  TimeIterator tmp(element_, present_index_);
242 
243  ++present_index_;
244  if (present_index_ < static_cast<int>(element_->get_triangulation().n_active_cells()))
245  {
246  element_ = element_->neighbor(1);
247  }
248  else
249  {
250  present_index_ = -1;
251  }
252  return tmp;
253  }
254 
258  TimeIterator&
260  {
261  assert(GetState()==IteratorState::valid);
262  --present_index_;
263  if (present_index_ >= 0)
264  {
265  element_ = element_->neighbor(0);
266  }
267  else
268  {
269  present_index_ = -2;
270  }
271 
272  return *this;
273  }
274 
280  {
281  assert(GetState()==IteratorState::valid);
282  TimeIterator tmp(element_, present_index_);
283  if (present_index_ >= 0)
284  {
285  element_ = element_->neighbor(0);
286  }
287  else
288  {
289  present_index_ = -2;
290  }
291  return tmp;
292  }
293  private:
294  active_cell_it element_;
295  int present_index_;
296  };
297 }
298 
299 #endif /* TIMEITERATOR_H_ */
IteratorState::IteratorStates GetState() const
Definition: timeiterator.h:98
TimeIterator(const active_cell_it &element, int present_index)
Definition: timeiterator.h:79
Iterator reached end of container.
Definition: timeiterator.h:46
TimeIterator & operator=(const TimeIterator &element)
Definition: timeiterator.h:129
bool operator==(const TimeIterator &element)
Definition: timeiterator.h:144
TimeIterator operator--(int)
Definition: timeiterator.h:279
dealii::DoFHandler< 1 >::active_cell_iterator active_cell_it
Definition: timeiterator.h:54
const active_cell_it & getelement_() const
Definition: timeiterator.h:202
TimeIterator & operator++()
Definition: timeiterator.h:218
Iterator is invalid, probably due to an error.
Definition: timeiterator.h:50
double get_center() const
Definition: timeiterator.h:165
TimeIterator operator++(int)
Definition: timeiterator.h:238
Definition: timeiterator.h:48
Definition: timeiterator.h:63
double get_k() const
Definition: timeiterator.h:195
bool operator!=(const TimeIterator &element)
Definition: timeiterator.h:153
TimeIterator()
Definition: timeiterator.h:71
void get_time_dof_indices(std::vector< unsigned int > &local_dof_indices) const
Definition: timeiterator.h:208
void Initialize(const active_cell_it &element, int present_index)
Definition: timeiterator.h:137
IteratorStates
Definition: timeiterator.h:41
double get_right() const
Definition: timeiterator.h:185
TimeIterator(const TimeIterator &it)
Definition: timeiterator.h:88
double get_left() const
Definition: timeiterator.h:175
Iterator points to a valid object.
Definition: timeiterator.h:44
int GetIndex() const
Definition: timeiterator.h:123
TimeIterator & operator--()
Definition: timeiterator.h:259