Peano
MyObserver.cpp
Go to the documentation of this file.
1 #include "MyObserver.h"
2 
3 #include "peano4/grid/GridControlEvent.h"
4 #include "peano4/parallel/Node.h"
5 
6 #include "tarch/logging/LogFilter.h"
7 
8 
9 
10 int examples::grid::MyObserver::_iterationCounter(0);
11 
12 
13 examples::grid::MyObserver::MyObserver(int spacetreeId, int counter)
14  #if PEANO_DEBUG>0
15  : TraversalVTKPlotter( "grid-construction", spacetreeId )
16  #endif
17  {
18  if (spacetreeId==0) {
19  _iterationCounter++;
20  }
21 }
22 
23 
24 examples::grid::MyObserver::~MyObserver() {
25 }
26 
27 
28 void examples::grid::MyObserver::beginTraversal(
29  const tarch::la::Vector<DIMENSIONS,double>& x,
30  const tarch::la::Vector<DIMENSIONS,double>& h
31 ) {
32  #if PEANO_DEBUG>0
33  TraversalVTKPlotter::beginTraversal(x,h);
34  #endif
35 }
36 
37 
38 void examples::grid::MyObserver::endTraversal(
39  const tarch::la::Vector<DIMENSIONS,double>& x,
40  const tarch::la::Vector<DIMENSIONS,double>& h
41 ) {
42  #if PEANO_DEBUG>0
43  TraversalVTKPlotter::endTraversal(x,h);
44  #endif
45 }
46 
47 
48 void examples::grid::MyObserver::enterCell(
49  const peano4::grid::GridTraversalEvent& event
50 ) {
51  #if PEANO_DEBUG>0
52  TraversalVTKPlotter::enterCell(event);
53  #endif
54 }
55 
56 
57 void examples::grid::MyObserver::leaveCell(
58  const peano4::grid::GridTraversalEvent& event
59 ) {
60  #if PEANO_DEBUG>0
61  TraversalVTKPlotter::leaveCell(event);
62  #endif
63 }
64 
65 
66 peano4::grid::TraversalObserver* examples::grid::MyObserver::clone(int spacetreeId) {
67  #if PEANO_DEBUG>0
68  MyObserver* result = new MyObserver( spacetreeId, _iterationCounter );
69 
70  if (_spacetreeId!=-1) {
71  assertionMsg( false, "clone() should not be called for particular spacetree plotter" );
72  }
73  else {
74  updateMetaFile(spacetreeId);
75  }
76 
77  return result;
78  #else
79  return new MyObserver( spacetreeId, _iterationCounter );
80  #endif
81 }
82 
83 
84 std::vector< peano4::grid::GridControlEvent > examples::grid::MyObserver::getGridControlEvents() {
85  std::vector< peano4::grid::GridControlEvent > controlEvents;
86 
87  if (_iterationCounter<GridRefinementIterations) {
88  peano4::grid::GridControlEvent newEvent;
89  newEvent.setRefinementControl( peano4::grid::GridControlEvent::RefinementControl::Refine );
90 #if DIMENSIONS==2
91  newEvent.setOffset( {0.0,0.0} );
92  newEvent.setWidth( {0.5,0.5} );
93  newEvent.setH( {0.02,0.02} );
94 #elif DIMENSIONS==3
95  newEvent.setOffset( {0.0,0.0,0.0} );
96  newEvent.setWidth( {0.5,0.5,0.5} );
97  newEvent.setH( {0.02,0.02,0.02} );
98 #endif
99  controlEvents.push_back(newEvent);
100  }
101 
102  if (_iterationCounter>GridRefinementIterations + StationaryIterations) {
103  peano4::grid::GridControlEvent newEvent;
104  newEvent.setRefinementControl( peano4::grid::GridControlEvent::RefinementControl::Erase );
105 #if DIMENSIONS==2
106  newEvent.setOffset( {0.01,0.01} );
107  newEvent.setWidth( {0.99,0.99} );
108  newEvent.setH( {0.4,0.4} );
109 #elif DIMENSIONS==3
110  newEvent.setOffset( {0.01,0.01,0.01} );
111  newEvent.setWidth( {0.99,0.99,0.99} );
112  newEvent.setH( {0.4,0.4,0.4} );
113 #endif
114  controlEvents.push_back(newEvent);
115  }
116 
117  return controlEvents;
118 }
h
Definition: swe.py:79