5#include "peano4/parallel/Tasks.h"
21 _spacetreeId(spacetreeId),
23 _flopsPerCell(flopsPerCell),
37 _taskAccumulator = 0.0;
45 tarch::multicore::processPendingTasks();
46 logDebug(
"endTraversal", _accumulator );
54 event.getIsRefined()==
false
58 for (
int i=0; i<_flopsPerCell; i++) {
62 if (_spacetreeId==0) {
66 if (_taskAccumulator>=1.0) {
67 _taskAccumulator -= 1.0;
69 peano4::parallel::Tasks(
73 event.
getX(), event.
getH(), IntegrationAccuracy,
75 const double Theta = 32.0;
77 + 0.3/Dimensions * std::exp(-Theta * x(0)) * std::cos( tarch::la::PI * x(0) * Theta )
78 + 0.3/Dimensions * std::exp(-Theta * x(1)) * std::cos( tarch::la::PI * x(1) * Theta );
85 FractionOfCellsYieldingIntegrationTask<0 ? peano4::parallel::Tasks::TaskType::Sequential : peano4::parallel::Tasks::TaskType::Task,
86 peano4::parallel::Tasks::getLocationIdentifier(
"examples::regulargridupscaling::MyObserver::enterCell" )
100 return new MyObserver( spacetreeId, _h, _flopsPerCell );
105 std::vector< peano4::grid::GridControlEvent > controlEvents;
112 newEvent.
setH( {_h,_h} );
116 newEvent.
setH( {_h,_h,_h} );
118 controlEvents.push_back(newEvent);
120 return controlEvents;
#define logDebug(methodName, logMacroMessageStream)
static tarch::logging::Log _log
void enterCell(const peano4::grid::GridTraversalEvent &event) override
Event is invoked per cell.
static double FractionOfCellsYieldingIntegrationTask
std::vector< peano4::grid::GridControlEvent > getGridControlEvents() override
void leaveCell(const peano4::grid::GridTraversalEvent &event) override
void endTraversal(const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h) override
static int IntegrationAccuracy
MyObserver(int spacetreeId, double h, int flopsPerCell)
TraversalObserver * clone(int spacetreeId) override
I use the clone to create one observer object per traversal thread.
void beginTraversal(const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h) override
Begin the traversal.
static Core & getInstance()
int getNumberOfThreads() const
Returns the number of threads that is used.
Scalar frobeniusNorm(const Matrix< Rows, Cols, Scalar > &matrix)
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)
tarch::la::Vector< Dimensions, double > getH() const
tarch::la::Vector< Dimensions, double > getX() const