OpenLB 1.7
Loading...
Searching...
No Matches
latticeCellList.hh
Go to the documentation of this file.
1/* This file is part of the OpenLB library
2 *
3 * Copyright (C) 2022 Nicolas Hafen, Mathias J. Krause
4 * E-mail contact: info@openlb.net
5 * The most recent release of OpenLB can be downloaded at
6 * <http://www.openlb.net/>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program; if not, write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22*/
23
24#ifndef LATTICE_CELL_LIST_HH
25#define LATTICE_CELL_LIST_HH
26
27namespace olb {
28
29template<typename T, typename DESCRIPTOR, typename U>
32 std::vector<LatticeR<4>>& cellList)
33 : SuperLatticeF<T, DESCRIPTOR>(sLattice, 1)
34{
35 this->getName() = "cellListF";
36 auto& loadBalancer = this->_sLattice.getLoadBalancer();
37 int maxC = loadBalancer.size();
38 this->_blockF.reserve(maxC);
39 for (int iC = 0; iC < maxC; iC++) {
40 this->_blockF.emplace_back( new BlockLatticeCellList<T,DESCRIPTOR>(
41 this->_sLattice.getBlock(iC),
42 loadBalancer.glob(iC), cellList ));
43 }
44}
45
46template<typename T, typename DESCRIPTOR, typename U>
48 BlockLattice<T,DESCRIPTOR>& blockLattice, int globiC,
49 std::vector<LatticeR<4>>& cellList)
50 : BlockLatticeF<T,DESCRIPTOR>(blockLattice, 1),
51 _blockData(static_cast<BlockStructure<DESCRIPTOR>>(blockLattice))
52{
53 this->getName() = "cellListF";
54 for (auto latticeRlist : cellList){
55 int globiCList = latticeRlist[0];
56 if (globiCList==globiC){
58 latticeRlist[1],
59 latticeRlist[2],
60 latticeRlist[3]
61 );
62 auto& dataPoint = _blockData.get(latticeR);
63 dataPoint = true;
64 }
65 }
66}
67
68template<typename T, typename DESCRIPTOR, typename U>
69bool BlockLatticeCellList<T, DESCRIPTOR, U>::operator()(T output[], const int input[])
70{
71 if constexpr (std::is_same_v<U,bool>){
72 _blockData(output,input);
73 return bool(output[0]);
74 }
75}
76
77}
78#endif
bool operator()(T output[], const int input[]) override
BlockLatticeCellList(BlockLattice< T, DESCRIPTOR > &blockLattice, int globiC, std::vector< LatticeR< 4 > > &cellList)
Platform-abstracted block lattice for external access and inter-block interaction.
Base of a regular block.
SuperLatticeCellList(SuperLattice< T, DESCRIPTOR > &sLattice, std::vector< LatticeR< 4 > > &cellList)
Super class maintaining block lattices for a cuboid decomposition.
Plain old scalar vector.
Definition vector.h:47
Top level namespace for all of OpenLB.
std::conditional_t< DESCRIPTOR::d==2, SuperLatticeF2D< T, DESCRIPTOR >, SuperLatticeF3D< T, DESCRIPTOR > > SuperLatticeF
Definition aliases.h:148
std::conditional_t< DESCRIPTOR::d==2, BlockLatticeF2D< T, DESCRIPTOR >, BlockLatticeF3D< T, DESCRIPTOR > > BlockLatticeF
Definition aliases.h:158