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
CollideSweepDoublePrecisionLeesEdwardsAVX.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 CollideSweepDoublePrecisionLeesEdwardsAVX.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_,
59 double grid_size,
60 double omega_shear, double v_s)
61 : forceID(forceID_), pdfsID(pdfsID_), grid_size_(grid_size),
62 omega_shear_(omega_shear), v_s_(v_s) {}
63
64 void run(IBlock *block);
65
66 void runOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
67 const CellInterval &globalCellInterval,
68 cell_idx_t ghostLayers, IBlock *block);
69
70 void operator()(IBlock *block) { run(block); }
71
72 static std::function<void(IBlock *)> getSweep(
73 const shared_ptr<CollideSweepDoublePrecisionLeesEdwardsAVX> &kernel) {
74 return [kernel](IBlock *b) { kernel->run(b); };
75 }
76
77 static std::function<void(IBlock *)> getSweepOnCellInterval(
78 const shared_ptr<CollideSweepDoublePrecisionLeesEdwardsAVX> &kernel,
79 const shared_ptr<StructuredBlockStorage> &blocks,
80 const CellInterval &globalCellInterval, cell_idx_t ghostLayers = 1) {
81 return [kernel, blocks, globalCellInterval, ghostLayers](IBlock *b) {
82 kernel->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b);
83 };
84 }
85
86 std::function<void(IBlock *)> getSweep() {
87 return [this](IBlock *b) { this->run(b); };
88 }
89
90 std::function<void(IBlock *)>
91 getSweepOnCellInterval(const shared_ptr<StructuredBlockStorage> &blocks,
92 const CellInterval &globalCellInterval,
93 cell_idx_t ghostLayers = 1) {
94 return [this, blocks, globalCellInterval, ghostLayers](IBlock *b) {
95 this->runOnCellInterval(blocks, globalCellInterval, ghostLayers, b);
96 };
97 }
98
99 void configure(const shared_ptr<StructuredBlockStorage> & /*blocks*/,
100 IBlock * /*block*/) {}
101
102 inline double getGrid_size() const { return grid_size_; }
103 inline double getOmega_shear() const { return omega_shear_; }
104 inline double getV_s() const { return v_s_; }
105 inline void setGrid_size(const double value) { grid_size_ = value; }
106 inline void setOmega_shear(const double value) { omega_shear_ = value; }
107 inline void setV_s(const double value) { v_s_ = value; }
108
109private:
110 BlockDataID forceID;
111 BlockDataID pdfsID;
112 double grid_size_;
113 double omega_shear_;
114 double v_s_;
115};
116
117} // namespace pystencils
118} // namespace walberla
119
120#if (defined WALBERLA_CXX_COMPILER_IS_GNU) || \
121 (defined WALBERLA_CXX_COMPILER_IS_CLANG)
122#pragma GCC diagnostic pop
123#endif
void runOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers, IBlock *block)
std::function< void(IBlock *)> getSweepOnCellInterval(const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1)
static std::function< void(IBlock *)> getSweep(const shared_ptr< CollideSweepDoublePrecisionLeesEdwardsAVX > &kernel)
void configure(const shared_ptr< StructuredBlockStorage > &, IBlock *)
CollideSweepDoublePrecisionLeesEdwardsAVX(BlockDataID forceID_, BlockDataID pdfsID_, double grid_size, double omega_shear, double v_s)
static std::function< void(IBlock *)> getSweepOnCellInterval(const shared_ptr< CollideSweepDoublePrecisionLeesEdwardsAVX > &kernel, const shared_ptr< StructuredBlockStorage > &blocks, const CellInterval &globalCellInterval, cell_idx_t ghostLayers=1)
static double * block(double *p, std::size_t index, std::size_t size)
Definition elc.cpp:172
\file PackInfoPdfDoublePrecision.cpp \author pystencils