Loading [MathJax]/extensions/TeX/AMSmath.js
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
CollideSweepSinglePrecisionLeesEdwardsCUDA.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 CollideSweepSinglePrecisionLeesEdwardsCUDA.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 "gpu/GPUField.h"
29#include "gpu/GPUWrapper.h"
30
31#include "domain_decomposition/BlockDataID.h"
32#include "domain_decomposition/IBlock.h"
33#include "domain_decomposition/StructuredBlockStorage.h"
34#include "field/SwapableCompare.h"
35
36#include <functional>
37#include <unordered_map>
38
39#ifdef __GNUC__
40#define RESTRICT __restrict__
41#elif _MSC_VER
42#define RESTRICT __restrict
43#else
44#define RESTRICT
45#endif
46
47#if (defined WALBERLA_CXX_COMPILER_IS_GNU) || \
48 (defined WALBERLA_CXX_COMPILER_IS_CLANG)
49#pragma GCC diagnostic push
50#pragma GCC diagnostic ignored "-Wunused-parameter"
51#pragma GCC diagnostic ignored "-Wreorder"
52#endif
53
54namespace walberla {
55namespace pystencils {
56
58public:
60 BlockDataID pdfsID_,
61 float grid_size, float omega_shear,
62 float v_s)
63 : forceID(forceID_), pdfsID(pdfsID_), grid_size_(grid_size),
64 omega_shear_(omega_shear), v_s_(v_s) {}
65
66 void run(IBlock *block, gpuStream_t stream = nullptr);
67
68 void runOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
69 const CellInterval &globalCellInterval,
70 cell_idx_t ghostLayers, IBlock *block,
71 gpuStream_t stream = nullptr);
72
73 void operator()(IBlock *block, gpuStream_t stream = nullptr) {
75 }
76
77 static std::function<void(IBlock *)> getSweep(
78 const shared_ptr<CollideSweepSinglePrecisionLeesEdwardsCUDA> &kernel) {
79 return [kernel](IBlock *b) { kernel->run(b); };
80 }
81
82 static std::function<void(IBlock *, gpuStream_t)> getSweepOnCellInterval(
83 const shared_ptr<CollideSweepSinglePrecisionLeesEdwardsCUDA> &kernel,
84 const shared_ptr<StructuredBlockStorage> &blocks,
85 const CellInterval &globalCellInterval, cell_idx_t ghostLayers = 1) {
86 return [kernel, blocks, globalCellInterval,
87 ghostLayers](IBlock *b, gpuStream_t stream = nullptr) {
88 kernel->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b,
89 stream);
90 };
91 }
92
93 std::function<void(IBlock *)> getSweep(gpuStream_t stream = nullptr) {
94 return [this, stream](IBlock *b) { this->run(b, stream); };
95 }
96
97 std::function<void(IBlock *)>
98 getSweepOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
99 const CellInterval &globalCellInterval,
100 cell_idx_t ghostLayers = 1,
101 gpuStream_t stream = nullptr) {
102 return [this, blocks, globalCellInterval, ghostLayers, stream](IBlock *b) {
103 this->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b,
104 stream);
105 };
106 }
107
108 void configure(const shared_ptr<StructuredBlockStorage> & /*blocks*/,
109 IBlock * /*block*/) {}
110
111 inline float getGrid_size() const { return grid_size_; }
112 inline float getOmega_shear() const { return omega_shear_; }
113 inline float getV_s() const { return v_s_; }
114 inline void setGrid_size(const float value) { grid_size_ = value; }
115 inline void setOmega_shear(const float value) { omega_shear_ = value; }
116 inline void setV_s(const float value) { v_s_ = value; }
117
118private:
119 BlockDataID forceID;
120 BlockDataID pdfsID;
121 float grid_size_;
122 float omega_shear_;
123 float v_s_;
124};
125
126} // namespace pystencils
127} // namespace walberla
128
129#if (defined WALBERLA_CXX_COMPILER_IS_GNU) || \
130 (defined WALBERLA_CXX_COMPILER_IS_CLANG)
131#pragma GCC diagnostic pop
132#endif
void runOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers, IBlock *block, gpuStream_t stream=nullptr)
static std::function< void(IBlock *)> getSweep(const shared_ptr< CollideSweepSinglePrecisionLeesEdwardsCUDA > &kernel)
static std::function< void(IBlock *, gpuStream_t)> getSweepOnCellInterval(const shared_ptr< CollideSweepSinglePrecisionLeesEdwardsCUDA > &kernel, const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1)
std::function< void(IBlock *)> getSweepOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1, gpuStream_t stream=nullptr)
CollideSweepSinglePrecisionLeesEdwardsCUDA(BlockDataID forceID_, BlockDataID pdfsID_, float grid_size, float omega_shear, float v_s)
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
static double * block(double *p, std::size_t index, std::size_t size)
Definition elc.cpp:172
\file PackInfoPdfDoublePrecision.cpp \author pystencils