OpenLB 1.7
Loading...
Searching...
No Matches
setBoundary3D.h
Go to the documentation of this file.
1/* This file is part of the OpenLB library
2 *
3 * Copyright (C) 2021 Lennart Neukamm, Adrian Kummerlaender
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 SET_BOUNDARY_3D_H
25#define SET_BOUNDARY_3D_H
26
27namespace olb {
28
30template<typename T, typename DESCRIPTOR >
31void setBoundary(BlockLattice<T,DESCRIPTOR>& _block, int iX,int iY,int iZ,
33{
34 if (dynamics) {
35 _block.defineDynamics({iX, iY, iZ}, dynamics);
36 auto cell = _block.get(iX,iY,iZ);
37 dynamics->initialize(cell);
38 }
39 if (postProcessor && !_block.isPadding({iX,iY,iZ})) {
40 _block.addPostProcessor(*postProcessor);
41 }
42}
43
44template<typename T, typename DESCRIPTOR >
45void setBoundary(BlockLattice<T,DESCRIPTOR>& _block, int iX,int iY,int iZ,
46 Dynamics<T,DESCRIPTOR>* dynamics)
47{
48 if (dynamics) {
49 _block.defineDynamics({iX, iY, iZ}, dynamics);
50 auto cell = _block.get(iX,iY,iZ);
51 dynamics->initialize(cell);
52 }
53}
54
56template<typename T, typename DESCRIPTOR>
58{
59 /* local boundaries: _overlap = 0;
60 * interp boundaries: _overlap = 1;
61 * bouzidi boundaries: _overlap = 1;
62 * extField boundaries: _overlap = 1;
63 * advectionDiffusion boundaries: _overlap = 1;
64 */
65
66 if (_overlap == 0) {
67 return;
68 }
69
70 auto& communicator = sLattice.getCommunicator(stage::PostStream());
71 communicator.template requestField<descriptors::POPULATION>();
72
73 SuperGeometry<T,3>& superGeometry = indicator->getSuperGeometry();
74 for (int iCloc = 0; iCloc < sLattice.getLoadBalancer().size(); ++iCloc) {
75 const int nX = superGeometry.getBlockGeometry(iCloc).getNx();
76 const int nY = superGeometry.getBlockGeometry(iCloc).getNy();
77 const int nZ = superGeometry.getBlockGeometry(iCloc).getNz();
78
79 for (int iX = -_overlap; iX < nX+_overlap; ++iX) {
80 for (int iY = -_overlap; iY < nY+_overlap; ++iY) {
81 for (int iZ = -_overlap; iZ < nZ+_overlap; ++iZ) {
82 if (iX < 0 || iX > nX - 1 ||
83 iY < 0 || iY > nY - 1 ||
84 iZ < 0 || iZ > nZ - 1 ) { // if within overlap
85 if (superGeometry.getBlockGeometry(iCloc).getMaterial(iX,iY,iZ) != 0) {
86 bool found = false;
87 for (int iXo = -_overlap; iXo <= _overlap && !found; ++iXo) {
88 for (int iYo = -_overlap; iYo <= _overlap && !found; ++iYo) {
89 for (int iZo = -_overlap; iZo <= _overlap && !found; ++iZo) {
90 const int nextX = iXo + iX;
91 const int nextY = iYo + iY;
92 const int nextZ = iZo + iZ;
93 if (indicator->getBlockIndicatorF(iCloc)(nextX, nextY, nextZ)
94 && nextX >= -_overlap && nextX < nX+_overlap
95 && nextY >= -_overlap && nextY < nY+_overlap
96 && nextZ >= -_overlap && nextZ < nZ+_overlap) {
97 communicator.requestCell({iCloc, iX, iY, iZ});
98 found = true;
99 }
100 }
101 }
102 }
103 }
104 }
105 }
106 }
107 }
108 }
109
110 communicator.exchangeRequests();
111}
112
113namespace boundaryhelper {
114
115//Instatiates DYNAMICS with three normal values from discreteNormal vector n
116template <
117 typename T, typename DESCRIPTOR,
118 template <int...> typename DYNAMICS
119>
121{
122 if (n == Vector<int,3> {1, 1, 1}) {
123 return DynamicsPromise(meta::id<DYNAMICS<1,1,1>>{});
124 }
125 else if (n == Vector<int,3> {1, -1, 1}) {
126 return DynamicsPromise(meta::id<DYNAMICS<1,-1,1>>{});
127 }
128 else if (n == Vector<int,3> {1, 1, -1}) {
129 return DynamicsPromise(meta::id<DYNAMICS<1,1,-1>>{});
130 }
131 else if (n == Vector<int,3> {1, -1, -1}) {
132 return DynamicsPromise(meta::id<DYNAMICS<1,-1,-1>>{});
133 }
134 else if (n == Vector<int,3> {-1, 1, 1}) {
135 return DynamicsPromise(meta::id<DYNAMICS<-1,1,1>>{});
136 }
137 else if (n == Vector<int,3> {-1, -1, 1}) {
138 return DynamicsPromise(meta::id<DYNAMICS<-1,-1,1>>{});
139 }
140 else if (n == Vector<int,3> {-1, 1, -1}) {
141 return DynamicsPromise(meta::id<DYNAMICS<-1,1,-1>>{});
142 }
143 else if (n == Vector<int,3> {-1, -1, -1}) {
144 return DynamicsPromise(meta::id<DYNAMICS<-1,-1,-1>>{});
145 }
146 else {
147 throw std::runtime_error("Could not set Boundary.");
148 }
149}
150
151//Instatiates DYNAMICS with a plane and two normal values from discreteNormal vector n
152template <
153 typename T, typename DESCRIPTOR,
154 template <int...> typename DYNAMICS
155>
157{
158 if (n == Vector<int,3> {0, 1, 1}) {
159 return DynamicsPromise(meta::id<DYNAMICS<0,1,1>>{});
160 }
161 else if (n == Vector<int,3> {0, -1, 1}) {
162 return DynamicsPromise(meta::id<DYNAMICS<0,-1,1>>{});
163 }
164 else if (n == Vector<int,3> {0, 1, -1}) {
165 return DynamicsPromise(meta::id<DYNAMICS<0,1,-1>>{});
166 }
167 else if (n == Vector<int,3> {0, -1, -1}) {
168 return DynamicsPromise(meta::id<DYNAMICS<0,-1,-1>>{});
169 }
170 else if (n == Vector<int,3> {1, 0, 1}) {
171 return DynamicsPromise(meta::id<DYNAMICS<1,1,1>>{});
172 }
173 else if (n == Vector<int,3> {-1, 0, -1}) {
174 return DynamicsPromise(meta::id<DYNAMICS<1,-1,-1>>{});
175 }
176 else if (n == Vector<int,3> {-1, 0, 1}) {
177 return DynamicsPromise(meta::id<DYNAMICS<1,1,-1>>{});
178 }
179 else if (n == Vector<int,3> {1, 0, -1}) {
180 return DynamicsPromise(meta::id<DYNAMICS<1,-1,1>>{});
181 }
182 else if (n == Vector<int,3> {1, 1, 0}) {
183 return DynamicsPromise(meta::id<DYNAMICS<2,1,1>>{});
184 }
185 else if (n == Vector<int,3> {-1, 1, 0}) {
186 return DynamicsPromise(meta::id<DYNAMICS<2,-1,1>>{});
187 }
188 else if (n == Vector<int,3> {1, -1, 0}) {
189 return DynamicsPromise(meta::id<DYNAMICS<2,1,-1>>{});
190 }
191 else if (n == Vector<int,3> {-1, -1, 0}) {
192 return DynamicsPromise(meta::id<DYNAMICS<2,-1,-1>>{});
193 }
194 else {
195 throw std::invalid_argument("Invalid normal");
196 }
197}
198
199//Instatiates DYNAMICS with a direction and an orientation
200template <
201 typename T, typename DESCRIPTOR,
202 template <int...> typename DYNAMICS
203>
205{
206 if (n == Vector<int,3> {-1, 0, 0}) {
207 return DynamicsPromise(meta::id<DYNAMICS<0,-1>>{});
208 }
209 else if (n == Vector<int,3> {1, 0, 0}) {
210 return DynamicsPromise(meta::id<DYNAMICS<0,1>>{});
211 }
212 else if (n == Vector<int,3> {0, -1, 0}) {
213 return DynamicsPromise(meta::id<DYNAMICS<1,-1>>{});
214 }
215 else if (n == Vector<int,3> {0, 1, 0}) {
216 return DynamicsPromise(meta::id<DYNAMICS<1,1>>{});
217 }
218 else if (n == Vector<int,3> {0, 0, -1}) {
219 return DynamicsPromise(meta::id<DYNAMICS<2,-1>>{});
220 }
221 else if (n == Vector<int,3> {0, 0, 1}) {
222 return DynamicsPromise(meta::id<DYNAMICS<2,1>>{});
223 }
224 else {
225 throw std::runtime_error("Could not set Boundary.");
226 }
227}
228
229//constructs Dynamics with a Momenta, a plane and two normals as template args
230template <
231 typename T, typename DESCRIPTOR,
232 template <typename,typename,typename,int,int,int> typename DYNAMICS,
233 typename MOMENTA
234>
236 template <int x, int y, int z>
237 using ConcreteDynamics = DYNAMICS<T,DESCRIPTOR,MOMENTA,x,y,z>;
238
239 static auto construct(Vector<int,3> n) {
240 return constructConcreteDynamicsForNormalSpecial<T,DESCRIPTOR,ConcreteDynamics>(n);
241 }
242};
243
244//constructs Dynamics with template args MixinDynamics and a Momenta that expects a plane and two normals
245template <
246 typename T, typename DESCRIPTOR,
247 template <typename,typename,typename,typename> typename DYNAMICS,
248 typename MIXIN,
249 template <int...> typename MOMENTA
250>
252 template <int... PlaneAndNormal>
253 using ConcreteDynamics = DYNAMICS<T,DESCRIPTOR,MIXIN,MOMENTA<PlaneAndNormal...>>;
254
255 static auto construct(Vector<int,3> n) {
256 return constructConcreteDynamicsForNormalSpecial<T,DESCRIPTOR,ConcreteDynamics>(n);
257 }
258};
259
260//constructs Dynamics with template args MixinDynamics, Momenta, plane normal1 and normal2
261template <
262 typename T, typename DESCRIPTOR,
263 template <typename,typename,typename,typename,int,int,int> typename DYNAMICS,
264 typename MIXIN,
265 typename MOMENTA
266>
268 template <int x, int y, int z>
269 using ConcreteDynamics = DYNAMICS<T,DESCRIPTOR,MIXIN,MOMENTA,x,y,z>;
270
271 static auto construct(Vector<int,3> n) {
272 return constructConcreteDynamicsForNormalSpecial<T,DESCRIPTOR,ConcreteDynamics>(n);
273 }
274};
275
276//Instantiates TYPE derived from RESULT with values from descreteNormal Vector n
277//RESULT can be either Dynamics or PostProcessorGenerator3D
278template <
279 typename RESULT, typename T, typename DESCRIPTOR,
280 template <typename,typename,int,int,int> typename TYPE,
281 typename... ARGS
282>
283RESULT* constructForNormal(Vector<int,3> n, ARGS&&... args)
284{
285 if (n == Vector<int,3> {1, 1, 1}) {
286 return new TYPE<T,DESCRIPTOR,1,1,1>(std::forward<decltype(args)>(args)...);
287 }
288 else if (n == Vector<int,3> {1, -1, 1}) {
289 return new TYPE<T,DESCRIPTOR,1,-1,1>(std::forward<decltype(args)>(args)...);
290 }
291 else if (n == Vector<int,3> {1, 1, -1}) {
292 return new TYPE<T,DESCRIPTOR,1,1,-1>(std::forward<decltype(args)>(args)...);
293 }
294 else if (n == Vector<int,3> {1, -1, -1}) {
295 return new TYPE<T,DESCRIPTOR,1,-1,-1>(std::forward<decltype(args)>(args)...);
296 }
297 else if (n == Vector<int,3> {-1, 1, 1}) {
298 return new TYPE<T,DESCRIPTOR,-1,1,1>(std::forward<decltype(args)>(args)...);
299 }
300 else if (n == Vector<int,3> {-1, -1, 1}) {
301 return new TYPE<T,DESCRIPTOR,-1,-1,1>(std::forward<decltype(args)>(args)...);
302 }
303 else if (n == Vector<int,3> {-1, 1, -1}) {
304 return new TYPE<T,DESCRIPTOR,-1,1,-1>(std::forward<decltype(args)>(args)...);
305 }
306 else if (n == Vector<int,3> {-1, -1, -1}) {
307 return new TYPE<T,DESCRIPTOR,-1,-1,-1>(std::forward<decltype(args)>(args)...);
308 }
309 else {
310 return nullptr;
311 }
312}
313
314template <
315 typename RESULT, typename T, typename DESCRIPTOR,
316 template <typename,typename,int,int,int> typename TYPE
317>
319{
320 if (n == Vector<int,3> {1, 1, 1}) {
322 }
323 else if (n == Vector<int,3> {1, -1, 1}) {
324 return meta::id<TYPE<T,DESCRIPTOR,1,-1,1>>();
325 }
326 else if (n == Vector<int,3> {1, 1, -1}) {
327 return meta::id<TYPE<T,DESCRIPTOR,1,1,-1>>();
328 }
329 else if (n == Vector<int,3> {1, -1, -1}) {
330 return meta::id<TYPE<T,DESCRIPTOR,1,-1,-1>>();
331 }
332 else if (n == Vector<int,3> {-1, 1, 1}) {
333 return meta::id<TYPE<T,DESCRIPTOR,-1,1,1>>();
334 }
335 else if (n == Vector<int,3> {-1, -1, 1}) {
336 return meta::id<TYPE<T,DESCRIPTOR,-1,-1,1>>();
337 }
338 else if (n == Vector<int,3> {-1, 1, -1}) {
339 return meta::id<TYPE<T,DESCRIPTOR,-1,1,-1>>();
340 }
341 else if (n == Vector<int,3> {-1, -1, -1}) {
342 return meta::id<TYPE<T,DESCRIPTOR,-1,-1,-1>>();
343 }
344 else if (n == Vector<int,3> {-1, -1, 0}) {
345 return meta::id<TYPE<T,DESCRIPTOR,-1,-1,0>>();
346 }
347 else if (n == Vector<int,3> {-1, 0, 0}) {
348 return meta::id<TYPE<T,DESCRIPTOR,-1,0,0>>();
349 }
350 else if (n == Vector<int,3> {1, 0, 0}) {
352 }
353 else if (n == Vector<int,3> {0, -1, 0}) {
354 return meta::id<TYPE<T,DESCRIPTOR,0,-1,0>>();
355 }
356 else if (n == Vector<int,3> {-1, 0, -1}) {
357 return meta::id<TYPE<T,DESCRIPTOR,-1,0,-1>>();
358 }
359 else if (n == Vector<int,3> {0, 1, 0}) {
361 }
362 else if (n == Vector<int,3> {0, 0, -1}) {
363 return meta::id<TYPE<T,DESCRIPTOR,0,0,-1>>();
364 }
365 else if (n == Vector<int,3> {-1, 1, 0}) {
366 return meta::id<TYPE<T,DESCRIPTOR,-1,1,0>>();
367 }
368 else if (n == Vector<int,3> {0, -1, -1}) {
369 return meta::id<TYPE<T,DESCRIPTOR,0,-1,-1>>();
370 }
371 else if (n == Vector<int,3> {0, -1, 1}) {
372 return meta::id<TYPE<T,DESCRIPTOR,0,-1,1>>();
373 }
374 else if (n == Vector<int,3> {-1, 0, 1}) {
375 return meta::id<TYPE<T,DESCRIPTOR,-1,0,1>>();
376 }
377 else if (n == Vector<int,3> {1, 0, -1}) {
378 return meta::id<TYPE<T,DESCRIPTOR,1,0,-1>>();
379 }
380 else if (n == Vector<int,3> {0, 0, 1}) {
382 }
383 else if (n == Vector<int,3> {0, 1, -1}) {
384 return meta::id<TYPE<T,DESCRIPTOR,0,1,-1>>();
385 }
386 else if (n == Vector<int,3> {0, 1, 1}) {
388 }
389 else if (n == Vector<int,3> {1, 0, 1}) {
391 }
392 else if (n == Vector<int,3> {1, -1, 0}) {
393 return meta::id<TYPE<T,DESCRIPTOR,1,-1,0>>();
394 }
395 else if (n == Vector<int,3> {1, 1, 0}) {
397 }
398 else {
399 throw std::domain_error("Invalid normal");
400 }
401}
402
403//Instantiates TYPE derived from RESULT with values from descreteNormal Vector n
404//RESULT can be either Dynamics or PostProcessorGenerator3D
405template <
406 typename RESULT, typename T, typename DESCRIPTOR,
407 template <typename,typename,int,int,int> typename TYPE,
408 typename... ARGS
409>
410RESULT* constructForNormalSpecial(Vector<int,3> n, ARGS&&... args)
411{
412 if (n == Vector<int,3> {0, 1, 1}) {
413 return new TYPE<T,DESCRIPTOR,0,1,1>(std::forward<decltype(args)>(args)...);
414 }
415 else if (n == Vector<int,3> {0, -1, 1}) {
416 return new TYPE<T,DESCRIPTOR,0,-1,1>(std::forward<decltype(args)>(args)...);
417 }
418 else if (n == Vector<int,3> {0, 1, -1}) {
419 return new TYPE<T,DESCRIPTOR,0,1,-1>(std::forward<decltype(args)>(args)...);
420 }
421 else if (n == Vector<int,3> {0, -1, -1}) {
422 return new TYPE<T,DESCRIPTOR,0,-1,-1>(std::forward<decltype(args)>(args)...);
423 }
424 else if (n == Vector<int,3> {1, 0, 1}) {
425 return new TYPE<T,DESCRIPTOR,1,1,1>(std::forward<decltype(args)>(args)...);
426 }
427 else if (n == Vector<int,3> {-1, 0, -1}) {
428 return new TYPE<T,DESCRIPTOR,1,-1,-1>(std::forward<decltype(args)>(args)...);
429 }
430 else if (n == Vector<int,3> {-1, 0, 1}) {
431 return new TYPE<T,DESCRIPTOR,1,1,-1>(std::forward<decltype(args)>(args)...);
432 }
433 else if (n == Vector<int,3> {1, 0, -1}) {
434 return new TYPE<T,DESCRIPTOR,1,-1,1>(std::forward<decltype(args)>(args)...);
435 }
436 else if (n == Vector<int,3> {1, 1, 0}) {
437 return new TYPE<T,DESCRIPTOR,2,1,1>(std::forward<decltype(args)>(args)...);
438 }
439 else if (n == Vector<int,3> {-1, 1, 0}) {
440 return new TYPE<T,DESCRIPTOR,2,-1,1>(std::forward<decltype(args)>(args)...);
441 }
442 else if (n == Vector<int,3> {1, -1, 0}) {
443 return new TYPE<T,DESCRIPTOR,2,1,-1>(std::forward<decltype(args)>(args)...);
444 }
445 else if (n == Vector<int,3> {-1, -1, 0}) {
446 return new TYPE<T,DESCRIPTOR,2,-1,-1>(std::forward<decltype(args)>(args)...);
447 }
448 else {
449 return nullptr;
450 }
451}
452
453template <
454 typename PROMISE,
455 typename T, typename DESCRIPTOR,
456 template <typename,typename,int,int,int> typename TYPE
457>
459{
460 if (n == Vector<int,3> {0, 1, 1}) {
462 }
463 else if (n == Vector<int,3> {0, -1, 1}) {
464 return meta::id<TYPE<T,DESCRIPTOR,0,-1,1>>();
465 }
466 else if (n == Vector<int,3> {0, 1, -1}) {
467 return meta::id<TYPE<T,DESCRIPTOR,0,1,-1>>();
468 }
469 else if (n == Vector<int,3> {0, -1, -1}) {
470 return meta::id<TYPE<T,DESCRIPTOR,0,-1,-1>>();
471 }
472 else if (n == Vector<int,3> {1, 0, 1}) {
474 }
475 else if (n == Vector<int,3> {-1, 0, -1}) {
476 return meta::id<TYPE<T,DESCRIPTOR,1,-1,-1>>();
477 }
478 else if (n == Vector<int,3> {-1, 0, 1}) {
479 return meta::id<TYPE<T,DESCRIPTOR,1,1,-1>>();
480 }
481 else if (n == Vector<int,3> {1, 0, -1}) {
482 return meta::id<TYPE<T,DESCRIPTOR,1,-1,1>>();
483 }
484 else if (n == Vector<int,3> {1, 1, 0}) {
486 }
487 else if (n == Vector<int,3> {-1, 1, 0}) {
488 return meta::id<TYPE<T,DESCRIPTOR,2,-1,1>>();
489 }
490 else if (n == Vector<int,3> {1, -1, 0}) {
491 return meta::id<TYPE<T,DESCRIPTOR,2,1,-1>>();
492 }
493 else if (n == Vector<int,3> {-1, -1, 0}) {
494 return meta::id<TYPE<T,DESCRIPTOR,2,-1,-1>>();
495 }
496 else {
497 throw std::domain_error("Invalid normal");
498 }
499}
500
501//constructs TYPE derived from PostProcessorGenerator3D with three normals as template args
502template <
503 typename T, typename DESCRIPTOR,
504 template<typename,typename,int,int,int> typename TYPE,
505 typename... ARGS
506>
508{
509 return constructForNormal<PostProcessorGenerator3D<T,DESCRIPTOR>,T,DESCRIPTOR,TYPE>(n, std::forward<decltype(args)>(args)...);
510}
511
512template <
513 typename T, typename DESCRIPTOR,
514 template<typename,typename,int,int,int> typename TYPE
515>
517{
518 return promiseForNormal<PostProcessorPromise<T,DESCRIPTOR>,T,DESCRIPTOR,TYPE>(n);
519}
520
521//constructs TYPE derived from PostProcessorGenerator3D with a plane and two normals as template args
522template <
523 typename T, typename DESCRIPTOR,
524 template<typename,typename,int,int,int> typename TYPE,
525 typename... ARGS
526>
528{
529 return constructForNormalSpecial<PostProcessorGenerator3D<T,DESCRIPTOR>,T,DESCRIPTOR,TYPE>(n, std::forward<decltype(args)>(args)...);
530}
531
532template <
533 typename T, typename DESCRIPTOR,
534 template<typename,typename,int,int,int> typename TYPE
535>
537{
538 return promiseForNormalSpecial<PostProcessorPromise<T,DESCRIPTOR>,T,DESCRIPTOR,TYPE>(n);
539}
540
541}//namespace boundaryhelper
542
543}//namespace olb
544
546
547#endif
Platform-abstracted block lattice for external access and inter-block interaction.
virtual void addPostProcessor(std::type_index stage, LatticeR< DESCRIPTOR::d > latticeR, PostProcessorPromise< T, DESCRIPTOR > &&promise)=0
Schedule post processor for application to latticeR in stage.
void defineDynamics(LatticeR< DESCRIPTOR::d > latticeR, DynamicsPromise< T, DESCRIPTOR > &&promise)
Assign promised DYNAMICS to latticeR.
Cell< T, DESCRIPTOR > get(CellID iCell)
Get Cell interface for index iCell.
bool isPadding(LatticeR< D > latticeR) const
Return whether location is valid.
Factory for instances of a specific Dynamics type.
Smart pointer for managing the various ways of passing functors around.
Definition functorPtr.h:60
Factory for instances of a specific POST_PROCESSOR type.
Representation of a statistic for a parallel 2D geometry.
BlockGeometry< T, D > & getBlockGeometry(int locIC)
Read and write access to a single block geometry.
Base indicator functor (discrete)
Super class maintaining block lattices for a cuboid decomposition.
SuperCommunicator< T, SuperLattice > & getCommunicator(STAGE stage=STAGE())
Return communicator for given communication stage.
LoadBalancer< T > & getLoadBalancer()
Read and write access to the load balancer.
Plain old scalar vector.
Definition vector.h:47
DynamicsPromise< T, DESCRIPTOR > constructConcreteDynamicsForDirectionOrientation(Vector< int, 2 > n)
PostProcessorGenerator2D< T, DESCRIPTOR > * constructPostProcessorForNormal(Vector< int, 2 > n, ARGS &&... args)
RESULT * constructForNormalSpecial(Vector< int, 3 > n, ARGS &&... args)
PostProcessorPromise< T, DESCRIPTOR > promisePostProcessorForNormalSpecial(Vector< int, 3 > n)
RESULT * constructForNormal(Vector< int, 2 > n, ARGS &&... args)
PostProcessorPromise< T, DESCRIPTOR > promisePostProcessorForNormal(Vector< int, 2 > n)
PostProcessorGenerator3D< T, DESCRIPTOR > * constructPostProcessorForNormalSpecial(Vector< int, 3 > n, ARGS &&... args)
DynamicsPromise< T, DESCRIPTOR > constructConcreteDynamicsForNormalSpecial(Vector< int, 3 > n)
RESULT promiseForNormal(Vector< int, 2 > n)
DynamicsPromise< T, DESCRIPTOR > constructConcreteDynamicsForNormal(Vector< int, 2 > n)
PROMISE promiseForNormalSpecial(Vector< int, 3 > n)
Top level namespace for all of OpenLB.
void addPoints2CommBC(SuperLattice< T, DESCRIPTOR > &sLattice, FunctorPtr< SuperIndicatorF2D< T > > &&indicator, int _overlap)
Adds needed Cells to the Communicator _commBC in SuperLattice.
DynamicsPromise(meta::id< DYNAMICS >) -> DynamicsPromise< typename DYNAMICS::value_t, typename DYNAMICS::descriptor_t >
void setBoundary(BlockLattice< T, DESCRIPTOR > &block, int iX, int iY, Dynamics< T, DESCRIPTOR > *dynamics, PostProcessorGenerator2D< T, DESCRIPTOR > *postProcessor)
Interface for per-cell dynamics.
Definition interface.h:54
virtual void initialize(Cell< T, DESCRIPTOR > &cell)
Initialize dynamics-specific data for cell.
Definition interface.h:68
DYNAMICS< T, DESCRIPTOR, MOMENTA, x, y, z > ConcreteDynamics
DYNAMICS< T, DESCRIPTOR, MIXIN, MOMENTA, x, y, z > ConcreteDynamics
DYNAMICS< T, DESCRIPTOR, MIXIN, MOMENTA< PlaneAndNormal... > > ConcreteDynamics
Identity type to pass non-constructible types as value.
Definition meta.h:79
Communication after propagation.
Definition stages.h:36