/* This file is part of the OpenLB library * * Copyright (C) 2018 Adrian Kummerlaender * 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 SUPER_LATTICE_REFINEMENT_METRIC_F_2D_HH #define SUPER_LATTICE_REFINEMENT_METRIC_F_2D_HH #include "superLatticeRefinementMetricF2D.h" #include "blockLatticeRefinementMetricF2D.h" namespace olb { template SuperLatticeKnudsen2D::SuperLatticeKnudsen2D( SuperLattice2D& lattice) : SuperLatticeF2D(lattice, 1) { this->getName() = "knudsen"; for (int iC = 0; iC < lattice.getLoadBalancer().size(); ++iC) { this->_blockF.emplace_back( new BlockLatticeKnudsen2D(lattice.getBlockLattice(iC)) ); } } template bool SuperLatticeKnudsen2D::operator()( T output[], const int input[]) { auto& load = this->_sLattice.getLoadBalancer(); if (load.isLocal(input[0])) { const int loc = load.loc(input[0]); return this->getBlockF(loc)(output, &input[1]); } else { return false; } } template SuperLatticeRefinementMetricKnudsen2D::SuperLatticeRefinementMetricKnudsen2D( SuperLattice2D& lattice, const UnitConverter& converter) : SuperLatticeF2D(lattice, 1) { this->getName() = "refinementMetricKnudsen"; for (int iC = 0; iC < lattice.getLoadBalancer().size(); ++iC) { this->_blockF.emplace_back( new BlockLatticeRefinementMetricKnudsen2D( lattice.getBlockLattice(iC), converter) ); } } template bool SuperLatticeRefinementMetricKnudsen2D::operator()(T output[], int glob) { auto& load = this->_sLattice.getLoadBalancer(); if (load.isLocal(glob)) { const int loc = load.loc(glob); return this->getBlockF(loc)(output); } else { return false; } } template bool SuperLatticeRefinementMetricKnudsen2D::operator()( T output[], const int input[]) { auto& load = this->_sLattice.getLoadBalancer(); if (load.isLocal(input[0])) { const int loc = load.loc(input[0]); return this->getBlockF(loc)(output, &input[1]); } else { return false; } } template void SuperLatticeRefinementMetricKnudsen2D::print() { const int nC = this->_sLattice.getCuboidGeometry().getNc(); std::vector factors(nC, T{}); T output[1] = { }; auto& load = this->_sLattice.getLoadBalancer(); for (int iC = 0; iC < load.size(); ++iC) { this->getBlockF(iC)(output, iC); factors[load.glob(iC)] = output[0]; } OstreamManager clout(std::cout, "refinement"); for (int i = 0; i < nC; ++i) { #ifdef PARALLEL_MODE_MPI singleton::mpi().sendToMaster(&factors[i], 1, load.isLocal(i)); #endif clout << "factors[" << i << "]: " << factors[i] << std::endl; } } } #endif