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