Loading [MathJax]/extensions/tex2jax.js
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
CollideSweepSinglePrecisionThermalized.h
Go to the documentation of this file.
1//======================================================================================================================
2//
3// This file is part of waLBerla. waLBerla is free software: you can
4// redistribute it and/or modify it under the terms of the GNU General Public
5// License as published by the Free Software Foundation, either version 3 of
6// the License, or (at your option) any later version.
7//
8// waLBerla is distributed in the hope that it will be useful, but WITHOUT
9// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11// for more details.
12//
13// You should have received a copy of the GNU General Public License along
14// with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
15//
16//! \\file CollideSweepSinglePrecisionThermalized.h
17//! \\author pystencils
18//======================================================================================================================
19
20// kernel generated with pystencils v1.3.7, lbmpy v1.3.7, sympy v1.12.1,
21// lbmpy_walberla/pystencils_walberla from waLBerla commit
22// f36fa0a68bae59f0b516f6587ea8fa7c24a41141
23
24#pragma once
25#include "core/DataTypes.h"
26#include "core/logging/Logging.h"
27
28#include "domain_decomposition/BlockDataID.h"
29#include "domain_decomposition/IBlock.h"
30#include "domain_decomposition/StructuredBlockStorage.h"
31#include "field/GhostLayerField.h"
32#include "field/SwapableCompare.h"
33
34#include <functional>
35#include <unordered_map>
36
37#ifdef __GNUC__
38#define RESTRICT __restrict__
39#elif _MSC_VER
40#define RESTRICT __restrict
41#else
42#define RESTRICT
43#endif
44
45#if (defined WALBERLA_CXX_COMPILER_IS_GNU) || \
46 (defined WALBERLA_CXX_COMPILER_IS_CLANG)
47#pragma GCC diagnostic push
48#pragma GCC diagnostic ignored "-Wunused-parameter"
49#pragma GCC diagnostic ignored "-Wreorder"
50#endif
51
52namespace walberla {
53namespace pystencils {
54
56public:
58 BlockDataID pdfsID_, float kT,
59 float omega_bulk, float omega_even,
60 float omega_odd, float omega_shear,
61 uint32_t seed, uint32_t time_step)
62 : forceID(forceID_), pdfsID(pdfsID_), kT_(kT), omega_bulk_(omega_bulk),
63 omega_even_(omega_even), omega_odd_(omega_odd),
64 omega_shear_(omega_shear), seed_(seed), time_step_(time_step),
65 block_offset_0_(uint32_t(0)), block_offset_1_(uint32_t(0)),
66 block_offset_2_(uint32_t(0)), configured_(false) {}
67
68 void run(IBlock *block);
69
70 void runOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
71 const CellInterval &globalCellInterval,
72 cell_idx_t ghostLayers, IBlock *block);
73
74 void operator()(IBlock *block) { run(block); }
75
76 static std::function<void(IBlock *)>
77 getSweep(const shared_ptr<CollideSweepSinglePrecisionThermalized> &kernel) {
78 return [kernel](IBlock *b) { kernel->run(b); };
79 }
80
81 static std::function<void(IBlock *)> getSweepOnCellInterval(
82 const shared_ptr<CollideSweepSinglePrecisionThermalized> &kernel,
83 const shared_ptr<StructuredBlockStorage> &blocks,
84 const CellInterval &globalCellInterval, cell_idx_t ghostLayers = 1) {
85 return [kernel, blocks, globalCellInterval, ghostLayers](IBlock *b) {
86 kernel->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b);
87 };
88 }
89
90 std::function<void(IBlock *)> getSweep() {
91 return [this](IBlock *b) { this->run(b); };
92 }
93
94 std::function<void(IBlock *)>
95 getSweepOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
96 const CellInterval &globalCellInterval,
97 cell_idx_t ghostLayers = 1) {
98 return [this, blocks, globalCellInterval, ghostLayers](IBlock *b) {
99 this->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b);
100 };
101 }
102
103 void configure(const shared_ptr<StructuredBlockStorage> &blocks,
104 IBlock *block) {
105 Cell BlockCellBB = blocks->getBlockCellBB(*block).min();
106 block_offset_0_ = uint32_t(BlockCellBB[0]);
107 block_offset_1_ = uint32_t(BlockCellBB[1]);
108 block_offset_2_ = uint32_t(BlockCellBB[2]);
109 configured_ = true;
110 }
111
112 inline uint32_t getBlock_offset_0() const { return block_offset_0_; }
113 inline uint32_t getBlock_offset_1() const { return block_offset_1_; }
114 inline uint32_t getBlock_offset_2() const { return block_offset_2_; }
115 inline float getKt() const { return kT_; }
116 inline float getOmega_bulk() const { return omega_bulk_; }
117 inline float getOmega_even() const { return omega_even_; }
118 inline float getOmega_odd() const { return omega_odd_; }
119 inline float getOmega_shear() const { return omega_shear_; }
120 inline uint32_t getSeed() const { return seed_; }
121 inline uint32_t getTime_step() const { return time_step_; }
122 inline void setBlock_offset_0(const uint32_t value) {
123 block_offset_0_ = value;
124 }
125 inline void setBlock_offset_1(const uint32_t value) {
126 block_offset_1_ = value;
127 }
128 inline void setBlock_offset_2(const uint32_t value) {
129 block_offset_2_ = value;
130 }
131 inline void setKt(const float value) { kT_ = value; }
132 inline void setOmega_bulk(const float value) { omega_bulk_ = value; }
133 inline void setOmega_even(const float value) { omega_even_ = value; }
134 inline void setOmega_odd(const float value) { omega_odd_ = value; }
135 inline void setOmega_shear(const float value) { omega_shear_ = value; }
136 inline void setSeed(const uint32_t value) { seed_ = value; }
137 inline void setTime_step(const uint32_t value) { time_step_ = value; }
138
139private:
140 BlockDataID forceID;
141 BlockDataID pdfsID;
142 uint32_t block_offset_0_;
143 uint32_t block_offset_1_;
144 uint32_t block_offset_2_;
145 float kT_;
146 float omega_bulk_;
147 float omega_even_;
148 float omega_odd_;
149 float omega_shear_;
150 uint32_t seed_;
151 uint32_t time_step_;
152
153 bool configured_;
154};
155
156} // namespace pystencils
157} // namespace walberla
158
159#if (defined WALBERLA_CXX_COMPILER_IS_GNU) || \
160 (defined WALBERLA_CXX_COMPILER_IS_CLANG)
161#pragma GCC diagnostic pop
162#endif
Definition Cell.hpp:96
void runOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers, IBlock *block)
void configure(const shared_ptr< StructuredBlockStorage > &blocks, IBlock *block)
std::function< void(IBlock *)> getSweepOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1)
CollideSweepSinglePrecisionThermalized(BlockDataID forceID_, BlockDataID pdfsID_, float kT, float omega_bulk, float omega_even, float omega_odd, float omega_shear, uint32_t seed, uint32_t time_step)
static std::function< void(IBlock *)> getSweepOnCellInterval(const shared_ptr< CollideSweepSinglePrecisionThermalized > &kernel, const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1)
static std::function< void(IBlock *)> getSweep(const shared_ptr< CollideSweepSinglePrecisionThermalized > &kernel)
static double * block(double *p, std::size_t index, std::size_t size)
Definition elc.cpp:172
\file PackInfoPdfDoublePrecision.cpp \author pystencils