36#ifndef PlanarAverageProbe_H
37#define PlanarAverageProbe_H
52class CudaMemoryManager;
80 const std::string&
probeName,
uint tStartSampling,
uint tStartTemporalAveraging,
uint tBetweenSamples,
81 uint tStartWritingOutput,
uint tBetweenWriting,
Axis planeNormal,
bool computeTimeAverages,
82 bool sampleScalar =
false,
bool sampleSubgridScaleFluxes =
false)
83 : para(std::
move(para)), cudaMemoryManager(std::
move(cudaMemoryManager)), tStartSampling(tStartSampling),
84 tStartTemporalAveraging(tStartTemporalAveraging), tBetweenSamples(tBetweenSamples),
85 tStartWritingOutput(tStartWritingOutput), tBetweenWriting(tBetweenWriting),
86 computeTimeAverages(computeTimeAverages), planeNormal(planeNormal), sampleScalar(sampleScalar),
89 if (tBetweenSamples == 0)
90 throw std::runtime_error(
"PlanarAverageProbe: tBetweenSamples is 0! tBetweenSamples must be larger than 0");
91 if (tBetweenWriting == 0)
92 throw std::runtime_error(
"PlanarAverageProbe: tBetweenWriting is 0! tBetweenWriting must be larger than 0");
93 if (tStartTemporalAveraging < tStartSampling && computeTimeAverages)
94 throw std::runtime_error(
"PlaneAverageProbe: tStartTemporalAveraging must be larger than tStartSampling!");
97 "Created planar averaging probe, output path: " +
outputPath +
", probe name: " +
probeName +
98 " start sampling: {}, time steps between sampling: {}, start writing: {}, time steps between writing: {}",
99 tStartSampling, tBetweenSamples, tStartWritingOutput, tBetweenWriting);
102 if(sampleSubgridScaleFluxes)
112 return &levelData[level];
124 nameFilesWithFileCount =
true;
133 void copyDataToNodedata(std::vector<std::vector<real>>& data, std::vector<std::vector<double>>&
nodeData);
135 void findCoordinatesForPlanes(
int level, std::vector<real>& coordinateX, std::vector<real>& coordinateY,
136 std::vector<real>& coordinateZ, std::vector<uint>& numberOfNodesPerPlane);
137 std::vector<real> computePlaneStatistics(
int level,
uint nNodes);
139 std::vector<std::string> getAllVariableNames();
140 const uint* getNeighborIndicesInPlaneNormal(
int level);
141 const real* getPlaneNormalCoordinatesH(
int level);
142 const real* getPlaneNormalCoordinatesD(
int level);
149 const uint tStartSampling, tStartTemporalAveraging, tBetweenSamples, tStartWritingOutput, tBetweenWriting;
150 const bool computeTimeAverages, sampleScalar, sampleSubgridScaleFluxes;
151 bool nameFilesWithFileCount =
false;
152 const Axis planeNormal;
153 std::vector<Statistic> statistics;
154 std::vector<LevelData> levelData;
155 std::vector<std::string> fileNamesForCollectionFile;
Computes spatial statistics across x, y or z-normal planes defined by planeNormal....
void sample(int level, uint t) override
bool getSampleScalar() const
~PlanarAverageProbe() override
void getTaggedFluidNodes(GridProvider *) override
void addAllAvailableStatistics()
PlanarAverageProbe(SPtr< Parameter > para, SPtr< CudaMemoryManager > cudaMemoryManager, const std::string &outputPath, const std::string &probeName, uint tStartSampling, uint tStartTemporalAveraging, uint tBetweenSamples, uint tStartWritingOutput, uint tBetweenWriting, Axis planeNormal, bool computeTimeAverages, bool sampleScalar=false, bool sampleSubgridScaleFluxes=false)
LevelData * getLevelData(int level)
void addStatistic(Statistic statistic)
Base class for all samplers.
std::shared_ptr< T > SPtr
bool isStatisticIn(PlanarAverageProbe::Statistic statistic, std::vector< PlanarAverageProbe::Statistic > statistics)
real * subgridScaleFluxZZ
real * subgridScaleFluxXX
real * subgridScaleFluxYY
std::vector< real > coordinateY
real * subgridScaleFluxXY
std::vector< real > coordinateX
real * subgridScaleFluxPhiY
std::vector< real > coordinateZ
uint numberOfTimestepsInTimeAverage
std::vector< uint > numberOfNodesPerPlane
std::vector< std::vector< real > > timeAverages
real * subgridScaleFluxPhiZ
uint maxNumberOfPointsPerPlane
real * subgridScaleFluxPhiX
std::vector< std::vector< real > > instantaneous
real * subgridScaleFluxXZ
real * subgridScaleFluxYZ