From 94d3e79a8617f88dc0219cfdeedfa3147833719d Mon Sep 17 00:00:00 2001
From: Adrian Kummerlaender
Date: Mon, 24 Jun 2019 14:43:36 +0200
Subject: Initialize at openlb-1-3
---
src/core/latticeStatistics.hh | 344 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 344 insertions(+)
create mode 100644 src/core/latticeStatistics.hh
(limited to 'src/core/latticeStatistics.hh')
diff --git a/src/core/latticeStatistics.hh b/src/core/latticeStatistics.hh
new file mode 100644
index 0000000..9fd15b2
--- /dev/null
+++ b/src/core/latticeStatistics.hh
@@ -0,0 +1,344 @@
+/* This file is part of the OpenLB library
+ *
+ * Copyright (C) 2006, 2007, 2008 Jonas Latt
+ * E-mail contact: info@openlb.net
+ * The most recent release of OpenLB can be downloaded at
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef LATTICE_STATISTICS_HH
+#define LATTICE_STATISTICS_HH
+
+#include "blockLattice2D.h"
+#include "blockLattice3D.h"
+#include "latticeStatistics.h"
+#include
+#include
+#include
+#include "util.h"
+
+namespace olb {
+
+////////////////////// Class LatticeStatistics /////////////////
+
+template
+LatticeStatistics::LatticeStatistics() : clout(std::cout,"LatticeStatistics")
+{
+ initialize();
+}
+
+template
+LatticeStatistics::~LatticeStatistics()
+{
+}
+
+template
+void LatticeStatistics::reset()
+{
+ // avoid division by zero
+ if (tmpNumCells == 0) {
+ for (unsigned iVect=0; iVect::max();
+ }
+ for (unsigned iVect=0; iVect::min();
+ }
+
+ tmpNumCells = 0;
+}
+
+template
+void LatticeStatistics::reset (
+ T average_rho_, T average_energy_, T maxU_, size_t numCells_ )
+{
+ averageVect[avRho] = average_rho_;
+ averageVect[avEnergy] = average_energy_;
+ maxVect[maxU] = maxU_;
+ numCells = numCells_;
+
+ tmpAv[avRho] = T();
+ tmpAv[avEnergy] = T();
+ tmpMax[maxU] = T();
+ tmpNumCells = 0;
+}
+
+template
+void LatticeStatistics::initialize()
+{
+ tmpAv.resize(2);
+ averageVect.resize(2);
+ tmpMax.resize(1);
+ maxVect.resize(1);
+
+ tmpAv[avRho] = T();
+ tmpAv[avEnergy] = T();
+ tmpMax[maxU] = T();
+ tmpNumCells = 0;
+
+ averageVect[avRho] = (T)1;
+ averageVect[avEnergy] = T();
+ maxVect[maxU] = T();
+
+ firstCall = true;
+
+ resetTime();
+}
+
+template
+int LatticeStatistics::subscribeAverage()
+{
+ int newSize = tmpAv.size()+1;
+ tmpAv.resize(newSize);
+ averageVect.resize(newSize);
+ return newSize-1;
+}
+
+template
+int LatticeStatistics::subscribeSum()
+{
+ int newSize = tmpSum.size()+1;
+ tmpSum.resize(newSize);
+ sumVect.resize(newSize);
+ return newSize-1;
+}
+
+template
+int LatticeStatistics::subscribeMin()
+{
+ int newSize = tmpMin.size()+1;
+ tmpMin.resize(newSize);
+ minVect.resize(newSize);
+ return newSize-1;
+}
+
+template
+int LatticeStatistics::subscribeMax()
+{
+ int newSize = tmpMax.size()+1;
+ tmpMax.resize(newSize);
+ maxVect.resize(newSize);
+ return newSize-1;
+}
+
+template
+void LatticeStatistics::incrementStats(T rho, T uSqr)
+{
+ tmpAv[avRho] += rho;
+ tmpAv[avEnergy] += uSqr;
+ if (uSqr > tmpMax[maxU]) {
+ tmpMax[maxU] = uSqr;
+ }
+ ++tmpNumCells;
+}
+
+template
+void LatticeStatistics::gatherAverage(int whichAverage, T value)
+{
+ OLB_PRECONDITION( whichAverage < (int) tmpAv.size() );
+ tmpAv[whichAverage] += value;
+}
+
+template
+void LatticeStatistics::gatherSum(int whichSum, T value)
+{
+ OLB_PRECONDITION( whichSum < (int) tmpSum.size() );
+ tmpSum[whichSum] += value;
+}
+
+template
+void LatticeStatistics::gatherMin(int whichMin, T value)
+{
+ OLB_PRECONDITION( whichMin < (int) tmpMin.size() );
+ if (value < tmpMin[whichMin]) {
+ tmpMin[whichMin] = value;
+ }
+}
+
+template
+void LatticeStatistics::gatherMax(int whichMax, T value)
+{
+ OLB_PRECONDITION( whichMax < (int) tmpMax.size() );
+ if (value > tmpMax[whichMax]) {
+ tmpMax[whichMax] = value;
+ }
+}
+
+template
+void LatticeStatistics::incrementStats()
+{
+ ++tmpNumCells;
+}
+
+template
+T LatticeStatistics::getAverageRho() const
+{
+ return averageVect[avRho];
+}
+
+template
+T LatticeStatistics::getAverageEnergy() const
+{
+ return averageVect[avEnergy];
+}
+
+template
+T LatticeStatistics::getMaxU() const
+{
+ return maxVect[maxU];
+}
+
+template
+size_t const& LatticeStatistics::getNumCells() const
+{
+ return numCells;
+}
+
+template
+T LatticeStatistics::getAverage(int whichAverage) const
+{
+ OLB_PRECONDITION( whichAverage < (int) tmpAv.size() );
+ return averageVect[whichAverage];
+}
+
+template
+T LatticeStatistics::getSum(int whichSum) const
+{
+ OLB_PRECONDITION( whichSum < (int) tmpSum.size() );
+ return sumVect[whichSum];
+}
+
+template
+T LatticeStatistics::getMin(int whichMin) const
+{
+ OLB_PRECONDITION( whichMin < (int) tmpMin.size() );
+ return minVect[whichMin];
+}
+
+template
+T LatticeStatistics::getMax(int whichMax) const
+{
+ OLB_PRECONDITION( whichMax < (int) tmpMax.size() );
+ return maxVect[whichMax];
+}
+
+template
+std::vector& LatticeStatistics::getAverageVect()
+{
+ return averageVect;
+}
+
+template
+std::vector& LatticeStatistics::getSumVect()
+{
+ return sumVect;
+}
+
+template
+std::vector& LatticeStatistics::getMinVect()
+{
+ return minVect;
+}
+
+template
+std::vector& LatticeStatistics::getMaxVect()
+{
+ return maxVect;
+}
+
+template
+void LatticeStatistics::incrementTime()
+{
+ ++latticeTime;
+}
+
+template
+void LatticeStatistics::resetTime(size_t value)
+{
+ latticeTime=value;
+}
+
+template
+size_t LatticeStatistics::getTime() const
+{
+ return latticeTime;
+}
+
+template
+void LatticeStatistics::print(int iterationStep, T physicalTime) const
+{
+ clout
+ << "step=" << iterationStep << "; "
+ << "t=" << physicalTime << "; "
+ << "uMax=" << getMaxU() << "; "
+ << "avEnergy=" << getAverageEnergy() << "; "
+ << "avRho=" << getAverageRho()
+ << std::endl;
+}
+
+} // namespace olb
+
+#endif
--
cgit v1.2.3