Peano
Loading...
Searching...
No Matches
MyObserver.cpp
Go to the documentation of this file.
1#include "MyObserver.h"
2
5
7
8
9
11
12
13examples::grid::MyObserver::MyObserver(int spacetreeId, int counter)
14 #if PeanoDebug>0
15 : TraversalVTKPlotter( "grid-construction", spacetreeId )
16 #endif
17 {
18 if (spacetreeId==0) {
19 _iterationCounter++;
20 }
21}
22
23
26
27
31) {
32 #if PeanoDebug>0
33 TraversalVTKPlotter::beginTraversal(x,h);
34 #endif
35}
36
37
41) {
42 #if PeanoDebug>0
43 TraversalVTKPlotter::endTraversal(x,h);
44 #endif
45}
46
47
50) {
51 #if PeanoDebug>0
52 TraversalVTKPlotter::enterCell(event);
53 #endif
54}
55
56
59) {
60 #if PeanoDebug>0
61 TraversalVTKPlotter::leaveCell(event);
62 #endif
63}
64
65
67 #if PeanoDebug>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
84std::vector< peano4::grid::GridControlEvent > examples::grid::MyObserver::getGridControlEvents() {
85 std::vector< peano4::grid::GridControlEvent > controlEvents;
86
87 if (_iterationCounter<GridRefinementIterations) {
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) {
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}
#define assertionMsg(expr, message)
MyObserver(int spacetreeId=-1, int counter=0)
void leaveCell(const peano4::grid::GridTraversalEvent &event) override
void beginTraversal(const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h) override
Begin the traversal.
void endTraversal(const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h) override
void enterCell(const peano4::grid::GridTraversalEvent &event) override
Event is invoked per cell.
std::vector< peano4::grid::GridControlEvent > getGridControlEvents() override
TraversalObserver * clone(int spacetreeId) override
I use the clone to create one observer object per traversal thread.
void setOffset(const tarch::la::Vector< Dimensions, double > &value)
void setH(const tarch::la::Vector< Dimensions, double > &value)
void setRefinementControl(RefinementControl value)
void setWidth(const tarch::la::Vector< Dimensions, double > &value)
Simple vector class.
Definition Vector.h:150