/* 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 POST_PROCESSING_HH #define POST_PROCESSING_HH #include "blockLattice2D.h" #include "blockLattice3D.h" //#include //#include //#include //#include "util.h" namespace olb { ////////////////////// Class PostProcessorGenerator2D ///////////////// template PostProcessorGenerator2D::PostProcessorGenerator2D ( int x0_, int x1_, int y0_, int y1_) : x0(x0_), x1(x1_), y0(y0_), y1(y1_) { } template void PostProcessorGenerator2D::shift(int deltaX, int deltaY) { x0 += deltaX; x1 += deltaX; y0 += deltaY; y1 += deltaY; } template bool PostProcessorGenerator2D:: extract(int x0_, int x1_, int y0_, int y1_) { int newX0, newX1, newY0, newY1; if ( util::intersect ( x0, x1, y0, y1, x0_, x1_, y0_, y1_, newX0, newX1, newY0, newY1 ) ) { x0 = newX0; x1 = newX1; y0 = newY0; y1 = newY1; return true; } else { return false; } } ////////////////////// Class LatticeCouplingGenerator2D ///////////////// template LatticeCouplingGenerator2D::LatticeCouplingGenerator2D ( int x0_, int x1_, int y0_, int y1_) : x0(x0_), x1(x1_), y0(y0_), y1(y1_) { } template void LatticeCouplingGenerator2D::shift(int deltaX, int deltaY) { x0 += deltaX; x1 += deltaX; y0 += deltaY; y1 += deltaY; } template bool LatticeCouplingGenerator2D::extract(int x0_, int x1_, int y0_, int y1_) { int newX0, newX1, newY0, newY1; if ( util::intersect ( x0, x1, y0, y1, x0_, x1_, y0_, y1_, newX0, newX1, newY0, newY1 ) ) { x0 = newX0; x1 = newX1; y0 = newY0; y1 = newY1; return true; } else { return false; } } template void LatticeCouplingGenerator2D::reset(int x0_, int x1_, int y0_, int y1_) { x0 = x0_; x1 = x1_; y0 = y0_; y1 = y1_; } ////////////////////// Class StatisticsPostProcessor2D ////////////// template StatisticsPostProcessor2D::StatisticsPostProcessor2D() { } #ifndef PARALLEL_MODE_OMP template void StatisticsPostProcessor2D::process ( BlockLattice2D& blockLattice ) { blockLattice.getStatistics().reset(); } #endif #ifdef PARALLEL_MODE_OMP template void StatisticsPostProcessor2D::process ( BlockLattice2D& blockLattice ) { #pragma omp parallel blockLattice.getStatistics().reset(); int numCells = 0; T avRho = T(); T avEnergy = T(); T maxU = T(); #pragma omp parallel { #pragma omp critical { numCells += blockLattice.getStatistics().getNumCells(); avRho += blockLattice.getStatistics().getAverageRho() *blockLattice.getStatistics().getNumCells(); avEnergy += blockLattice.getStatistics().getAverageEnergy() *blockLattice.getStatistics().getNumCells(); if (maxU StatPPGenerator2D::StatPPGenerator2D() : PostProcessorGenerator2D(-1,-1,-1,-1) { } template PostProcessor2D* StatPPGenerator2D::generate() const { return new StatisticsPostProcessor2D; } template PostProcessorGenerator2D* StatPPGenerator2D::clone() const { return new StatPPGenerator2D; } ////////////////////// Class PostProcessorGenerator3D ///////////////// template PostProcessorGenerator3D::PostProcessorGenerator3D ( int x0_, int x1_, int y0_, int y1_, int z0_, int z1_) : x0(x0_), x1(x1_), y0(y0_), y1(y1_), z0(z0_), z1(z1_) { } template void PostProcessorGenerator3D::shift ( int deltaX, int deltaY, int deltaZ ) { x0 += deltaX; x1 += deltaX; y0 += deltaY; y1 += deltaY; z0 += deltaZ; z1 += deltaZ; } template bool PostProcessorGenerator3D:: extract(int x0_, int x1_, int y0_, int y1_, int z0_, int z1_) { int newX0, newX1, newY0, newY1, newZ0, newZ1; if ( util::intersect ( x0, x1, y0, y1, z0, z1, x0_, x1_, y0_, y1_, z0_, z1_, newX0, newX1, newY0, newY1, newZ0, newZ1 ) ) { x0 = newX0; x1 = newX1; y0 = newY0; y1 = newY1; z0 = newZ0; z1 = newZ1; return true; } else { return false; } } ////////////////////// Class LatticeCouplingGenerator3D ///////////////// template LatticeCouplingGenerator3D::LatticeCouplingGenerator3D ( int x0_, int x1_, int y0_, int y1_, int z0_, int z1_) : x0(x0_), x1(x1_), y0(y0_), y1(y1_), z0(z0_), z1(z1_) { } template void LatticeCouplingGenerator3D::shift ( int deltaX, int deltaY, int deltaZ, int iC_) { x0 += deltaX; x1 += deltaX; y0 += deltaY; y1 += deltaY; z0 += deltaZ; z1 += deltaZ; iC = iC_; } template bool LatticeCouplingGenerator3D:: extract(int x0_, int x1_, int y0_, int y1_, int z0_, int z1_) { int newX0, newX1, newY0, newY1, newZ0, newZ1; if ( util::intersect ( x0, x1, y0, y1, z0, z1, x0_, x1_, y0_, y1_, z0_, z1_, newX0, newX1, newY0, newY1, newZ0, newZ1 ) ) { x0 = newX0; x1 = newX1; y0 = newY0; y1 = newY1; z0 = newZ0; z1 = newZ1; return true; } else { return false; } } template void LatticeCouplingGenerator3D:: reset(int x0_, int x1_, int y0_, int y1_, int z0_, int z1_) { x0 = x0_; x1 = x1_; y0 = y0_; y1 = y1_; z0 = z0_; z1 = z1_; } ////////////////////// Class StatisticsPostProcessor3D ////////////// template StatisticsPostProcessor3D::StatisticsPostProcessor3D() { } #ifndef PARALLEL_MODE_OMP template void StatisticsPostProcessor3D::process ( BlockLattice3D& blockLattice ) { blockLattice.getStatistics().reset(); } #endif #ifdef PARALLEL_MODE_OMP template void StatisticsPostProcessor3D::process ( BlockLattice3D& blockLattice ) { #pragma omp parallel blockLattice.getStatistics().reset(); int numCells = 0; T avRho = T(); T avEnergy = T(); T maxU = T(); #pragma omp parallel { #pragma omp critical { numCells += blockLattice.getStatistics().getNumCells(); avRho += blockLattice.getStatistics().getAverageRho() *blockLattice.getStatistics().getNumCells(); avEnergy += blockLattice.getStatistics().getAverageEnergy() *blockLattice.getStatistics().getNumCells(); if (maxU StatPPGenerator3D::StatPPGenerator3D() : PostProcessorGenerator3D(-1,-1,-1,-1,-1,-1) { } template PostProcessor3D* StatPPGenerator3D::generate() const { return new StatisticsPostProcessor3D; } template PostProcessorGenerator3D* StatPPGenerator3D::clone() const { return new StatPPGenerator3D; } } // namespace olb #endif