VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
InterpolationCoefficients.h
Go to the documentation of this file.
1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15//
16// This file is part of VirtualFluids. VirtualFluids is free software: you can
17// redistribute it and/or modify it under the terms of the GNU General Public
18// License as published by the Free Software Foundation, either version 3 of
19// the License, or (at your option) any later version.
20//
21// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24// for more details.
25//
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28//
32//=======================================================================================
33#ifndef LBM_SCALING_HELPER_FUNCTIONS_H
34#define LBM_SCALING_HELPER_FUNCTIONS_H
35
37
38#include "lbm/constants/D3Q27.h"
39
41
42namespace vf::lbm
43{
44
45// The Coefficients struct needs be created like this:
46// MomentsOnSourceNodeSet momentsSet;
47// momentsSet.calculatePPP(f, omega);
48// ... and so on
49// InterpolationCoefficients coeffs;
50// momentsSet.calculateCoefficients(coeffs);
51
52// Coefficients of the interpolation polynomial
62
63// Private struct - is only used within the MomentsOnSourceNodeSet
65{
75
76 constexpr void calculate(const real* const f, const real omega)
77 {
78 using namespace vf::basics::constant;
79 // const real f_000 = f[dir::d000];
80 const real fP00 = f[dir::dP00];
81 const real fM00 = f[dir::dM00];
82 const real f0P0 = f[dir::d0P0];
83 const real f0M0 = f[dir::d0M0];
84 const real f00P = f[dir::d00P];
85 const real f00M = f[dir::d00M];
86 const real fPP0 = f[dir::dPP0];
87 const real fMM0 = f[dir::dMM0];
88 const real fPM0 = f[dir::dPM0];
89 const real fMP0 = f[dir::dMP0];
90 const real fP0P = f[dir::dP0P];
91 const real fM0M = f[dir::dM0M];
92 const real fP0M = f[dir::dP0M];
93 const real fM0P = f[dir::dM0P];
94 const real f0PP = f[dir::d0PP];
95 const real f0MM = f[dir::d0MM];
96 const real f0PM = f[dir::d0PM];
97 const real f0MP = f[dir::d0MP];
98 const real fPPP = f[dir::dPPP];
99 const real fMPP = f[dir::dMPP];
100 const real fPMP = f[dir::dPMP];
101 const real fMMP = f[dir::dMMP];
102 const real fPPM = f[dir::dPPM];
103 const real fMPM = f[dir::dMPM];
104 const real fPMM = f[dir::dPMM];
105 const real fMMM = f[dir::dMMM];
106
107 real oneOverRho = 0.0;
108 getCompressibleMacroscopicValues(f, this->drho, oneOverRho, this->velocityX, this->velocityY, this->velocityZ);
109
113 // example: kxxMzz: moment, second derivative in x direction minus the second derivative in z direction
114
115 this->kxyFromfcNEQ = -c3o1 * omega *
116 ((((fMM0 + fPP0) - (fMP0 + fPM0)) + (((fMMM + fPPP) - (fMPM + fPMP)) + ((fMMP + fPPM) - (fMPP + fPMM)))) *
117 oneOverRho -
118 ((this->velocityX * this->velocityY)));
119 this->kyzFromfcNEQ = -c3o1 * omega *
120 ((((f0MM + f0PP) - (f0MP + f0PM)) + (((fPMM + fMPP) - (fPMP + fMPM)) + ((fMMM + fPPP) - (fMMP + fPPM)))) *
121 oneOverRho -
122 ((this->velocityY * this->velocityZ)));
123 this->kxzFromfcNEQ = -c3o1 * omega *
124 ((((fM0M + fP0P) - (fM0P + fP0M)) + (((fMMM + fPPP) - (fMMP + fPPM)) + ((fMPM + fPMP) - (fMPP + fPMM)))) *
125 oneOverRho -
126 ((this->velocityX * this->velocityZ)));
127 this->kxxMyyFromfcNEQ = -c3o2 * omega *
128 ((((fM00 + fP00) - (f0M0 + f0P0)) + (((fM0M + fP0P) - (f0MM + f0MP)) + ((fM0P + fP0M) - (f0PM + f0PP)))) *
129 oneOverRho -
130 ((this->velocityX * this->velocityX - this->velocityY * this->velocityY)));
131 this->kxxMzzFromfcNEQ = -c3o2 * omega *
132 ((((fM00 + fP00) - (f00M + f00P)) + (((fMM0 + fPP0) - (f0MM + f0MP)) + ((fMP0 + fPM0) - (f0PM + f0PP)))) *
133 oneOverRho -
134 ((this->velocityX * this->velocityX - this->velocityZ * this->velocityZ)));
135 }
136};
137
139{
140private:
149
150public:
151 constexpr void calculatePPP(const real* const f, const real omega)
152 {
153 momentsPPP.calculate(f, omega);
154 }
155
156 constexpr void calculateMPP(const real* const f, const real omega)
157 {
158 momentsMPP.calculate(f, omega);
159 }
160
161 constexpr void calculatePMP(const real* const f, const real omega)
162 {
163 momentsPMP.calculate(f, omega);
164 }
165
166 constexpr void calculateMMP(const real* const f, const real omega)
167 {
168 momentsMMP.calculate(f, omega);
169 }
170
171 constexpr void calculatePPM(const real* const f, const real omega)
172 {
173 momentsPPM.calculate(f, omega);
174 }
175
176 constexpr void calculateMPM(const real* const f, const real omega)
177 {
178 momentsMPM.calculate(f, omega);
179 }
180
181 constexpr void calculatePMM(const real* const f, const real omega)
182 {
183 momentsPMM.calculate(f, omega);
184 }
185
186 constexpr void calculateMMM(const real* const f, const real omega)
187 {
188 momentsMMM.calculate(f, omega);
189 }
190
192 {
193 using namespace vf::basics::constant;
194
195 real& a000 = coefficients.a000;
196 real& b000 = coefficients.b000;
197 real& c000 = coefficients.c000;
198 real& d000 = coefficients.d000;
199
200 real& a100 = coefficients.a100;
201 real& b100 = coefficients.b100;
202 real& c100 = coefficients.c100;
203 real& d100 = coefficients.d100;
204
205 real& a010 = coefficients.a010;
206 real& b010 = coefficients.b010;
207 real& c010 = coefficients.c010;
208 real& d010 = coefficients.d010;
209
210 real& a001 = coefficients.a001;
211 real& b001 = coefficients.b001;
212 real& c001 = coefficients.c001;
213 real& d001 = coefficients.d001;
214
215 real &d110 = coefficients.d110, &d101 = coefficients.d101, &d011 = coefficients.d011;
216
217 real &a200 = coefficients.a200, &a020 = coefficients.a020, &a002 = coefficients.a002;
218 real &b200 = coefficients.b200, &b020 = coefficients.b020, &b002 = coefficients.b002;
219 real &c200 = coefficients.c200, &c020 = coefficients.c020, &c002 = coefficients.c002;
220
221 real &a110 = coefficients.a110, &a101 = coefficients.a101, &a011 = coefficients.a011;
222 real &b110 = coefficients.b110, &b101 = coefficients.b101, &b011 = coefficients.b011;
223 real &c110 = coefficients.c110, &c101 = coefficients.c101, &c011 = coefficients.c011;
224
225 real &a111 = coefficients.a111, &b111 = coefficients.b111, &c111 = coefficients.c111, &d111 = coefficients.d111;
226
227 real& LaplaceRho = coefficients.LaplaceRho;
228
229 const real xoffsq = xoff * xoff;
230 const real yoffsq = yoff * yoff;
231 const real zoffsq = zoff * zoff;
232
233 const real drhoPPP = momentsPPP.drho, vx1PPP = momentsPPP.velocityX, vx2PPP = momentsPPP.velocityY,
234 vx3PPP = momentsPPP.velocityZ;
235 const real drhoMPP = momentsMPP.drho, vx1MPP = momentsMPP.velocityX, vx2MPP = momentsMPP.velocityY,
236 vx3MPP = momentsMPP.velocityZ;
237 const real drhoPMP = momentsPMP.drho, vx1PMP = momentsPMP.velocityX, vx2PMP = momentsPMP.velocityY,
238 vx3PMP = momentsPMP.velocityZ;
239 const real drhoMMP = momentsMMP.drho, vx1MMP = momentsMMP.velocityX, vx2MMP = momentsMMP.velocityY,
240 vx3MMP = momentsMMP.velocityZ;
241 const real drhoPPM = momentsPPM.drho, vx1PPM = momentsPPM.velocityX, vx2PPM = momentsPPM.velocityY,
242 vx3PPM = momentsPPM.velocityZ;
243 const real drhoMPM = momentsMPM.drho, vx1MPM = momentsMPM.velocityX, vx2MPM = momentsMPM.velocityY,
244 vx3MPM = momentsMPM.velocityZ;
245 const real drhoPMM = momentsPMM.drho, vx1PMM = momentsPMM.velocityX, vx2PMM = momentsPMM.velocityY,
246 vx3PMM = momentsPMM.velocityZ;
247 const real drhoMMM = momentsMMM.drho, vx1MMM = momentsMMM.velocityX, vx2MMM = momentsMMM.velocityY,
248 vx3MMM = momentsMMM.velocityZ;
249
250 // second order moments at the source nodes
251 const real kxyFromfcNEQPPP = momentsPPP.kxyFromfcNEQ, kyzFromfcNEQPPP = momentsPPP.kyzFromfcNEQ,
254 const real kxyFromfcNEQMPP = momentsMPP.kxyFromfcNEQ, kyzFromfcNEQMPP = momentsMPP.kyzFromfcNEQ,
257 const real kxyFromfcNEQPMP = momentsPMP.kxyFromfcNEQ, kyzFromfcNEQPMP = momentsPMP.kyzFromfcNEQ,
260 const real kxyFromfcNEQMMP = momentsMMP.kxyFromfcNEQ, kyzFromfcNEQMMP = momentsMMP.kyzFromfcNEQ,
263 const real kxyFromfcNEQPPM = momentsPPM.kxyFromfcNEQ, kyzFromfcNEQPPM = momentsPPM.kyzFromfcNEQ,
266 const real kxyFromfcNEQMPM = momentsMPM.kxyFromfcNEQ, kyzFromfcNEQMPM = momentsMPM.kyzFromfcNEQ,
269 const real kxyFromfcNEQPMM = momentsPMM.kxyFromfcNEQ, kyzFromfcNEQPMM = momentsPMM.kyzFromfcNEQ,
272 const real kxyFromfcNEQMMM = momentsMMM.kxyFromfcNEQ, kyzFromfcNEQMMM = momentsMMM.kyzFromfcNEQ,
275
276 a000 = c1o64 * (c2o1 * (((kxyFromfcNEQMMM - kxyFromfcNEQPPP) + (kxyFromfcNEQMMP - kxyFromfcNEQPPM)) +
280 ((vx2PPP + vx2MMM) + (vx2PPM + vx2MMP)) - ((vx2MPP + vx2PMM) + (vx2MPM + vx2PMP)) +
281 ((vx3PPP + vx3MMM) - (vx3PPM + vx3MMP)) + ((vx3PMP + vx3MPM) - (vx3MPP + vx3PMM))) +
282 c8o1 * (((vx1PPP + vx1MMM) + (vx1PPM + vx1MMP)) + ((vx1MPP + vx1PMM) + (vx1PMP + vx1MPM))) +
293 ((vx1PPP + vx1MMM) + (vx1PPM + vx1MMP)) - ((vx1MPM + vx1MPP) + (vx1PMM + vx1PMP)) +
294 ((vx3PPP + vx3MMM) - (vx3PPM + vx3MMP)) + ((vx3MPP + vx3PMM) - (vx3MPM + vx3PMP))) +
295 c8o1 * (((vx2PPP + vx2MMM) + (vx2PPM + vx2MMP)) + ((vx2MPP + vx2PMM) + (vx2MPM + vx2PMP))) +
304 ((vx1PPP + vx1MMM) - (vx1MMP + vx1PPM)) + ((vx1MPM + vx1PMP) - (vx1MPP + vx1PMM)) +
305 ((vx2PPP + vx2MMM) - (vx2MMP + vx2PPM)) + ((vx2MPP + vx2PMM) - (vx2MPM + vx2PMP))) +
306 c8o1 * (((vx3PPP + vx3MMM) + (vx3PPM + vx3MMP)) + ((vx3PMM + vx3MPP) + (vx3PMP + vx3MPM))) +
309
310 a100 = c1o4 * (((vx1PPP - vx1MMM) + (vx1PPM - vx1MMP)) + ((vx1PMM - vx1MPP) + (vx1PMP - vx1MPM)));
311 b100 = c1o4 * (((vx2PPP - vx2MMM) + (vx2PPM - vx2MMP)) + ((vx2PMM - vx2MPP) + (vx2PMP - vx2MPM)));
312 c100 = c1o4 * (((vx3PPP - vx3MMM) + (vx3PPM - vx3MMP)) + ((vx3PMM - vx3MPP) + (vx3PMP - vx3MPM)));
313
314 a200 = c1o16 * (c2o1 * (((vx2PPP + vx2MMM) + (vx2PPM - vx2MPP)) + ((vx2MMP - vx2PMM) - (vx2MPM + vx2PMP)) +
315 ((vx3PPP + vx3MMM) - (vx3PPM + vx3MPP)) + ((vx3MPM + vx3PMP) - (vx3MMP + vx3PMM))) +
320 b200 = c1o8 * (c2o1 * (-((vx1PPP + vx1MMM) + (vx1PPM + vx1MMP)) + ((vx1MPP + vx1PMM) + (vx1MPM + vx1PMP))) +
323 c200 = c1o8 * (c2o1 * (((vx1PPM + vx1MMP) - (vx1PPP + vx1MMM)) + ((vx1MPP + vx1PMM) - (vx1MPM + vx1PMP))) +
326
327 a010 = c1o4 * (((vx1PPP - vx1MMM) + (vx1PPM - vx1MMP)) + ((vx1MPP - vx1PMM) + (vx1MPM - vx1PMP)));
328 b010 = c1o4 * (((vx2PPP - vx2MMM) + (vx2PPM - vx2MMP)) + ((vx2MPP - vx2PMM) + (vx2MPM - vx2PMP)));
329 c010 = c1o4 * (((vx3PPP - vx3MMM) + (vx3PPM - vx3MMP)) + ((vx3MPP - vx3PMM) + (vx3MPM - vx3PMP)));
330
331 a020 = c1o8 * (c2o1 * (-((vx2PPP + vx2MMM) + (vx2MMP + vx2PPM)) + ((vx2MPP + vx2PMM) + (vx2MPM + vx2PMP))) +
336 ((vx1PPP + vx1MMM) + (vx1PPM + vx1MMP)) - ((vx1MPP + vx1PMM) + (vx1PMP + vx1MPM)) +
337 ((vx3PPP + vx3MMM) - (vx3PPM + vx3MMP)) + ((vx3MPP + vx3PMM) - (vx3MPM + vx3PMP))) +
340 c020 = c1o8 * (c2o1 * (((vx2MMP + vx2PPM) - (vx2PPP + vx2MMM)) + ((vx2PMP + vx2MPM) - (vx2MPP + vx2PMM))) +
343
344 a001 = c1o4 * (((vx1PPP - vx1MMM) + (vx1MMP - vx1PPM)) + ((vx1MPP - vx1PMM) + (vx1PMP - vx1MPM)));
345 b001 = c1o4 * (((vx2PPP - vx2MMM) + (vx2MMP - vx2PPM)) + ((vx2MPP - vx2PMM) + (vx2PMP - vx2MPM)));
346 c001 = c1o4 * (((vx3PPP - vx3MMM) + (vx3MMP - vx3PPM)) + ((vx3MPP - vx3PMM) + (vx3PMP - vx3MPM)));
347
348 a002 = c1o8 * (c2o1 * (((vx3PPM + vx3MMP) - (vx3PPP + vx3MMM)) + ((vx3MPP + vx3PMM) - (vx3PMP + vx3MPM))) +
351 b002 = c1o8 * (c2o1 * (((vx3PPM + vx3MMP) - (vx3PPP + vx3MMM)) + ((vx3MPM + vx3PMP) - (vx3PMM + vx3MPP))) +
356 ((vx1PPP + vx1MMM) - (vx1MMP + vx1PPM)) + ((vx1MPM + vx1PMP) - (vx1PMM + vx1MPP)) +
357 ((vx2PPP + vx2MMM) - (vx2MMP + vx2PPM)) + ((vx2PMM + vx2MPP) - (vx2MPM + vx2PMP))) +
360
361 a110 = c1o2 * (((vx1PPP + vx1MMM) + (vx1MMP + vx1PPM)) - ((vx1MPM + vx1PMP) + (vx1PMM + vx1MPP)));
362 b110 = c1o2 * (((vx2PPP + vx2MMM) + (vx2MMP + vx2PPM)) - ((vx2MPM + vx2PMP) + (vx2PMM + vx2MPP)));
363 c110 = c1o2 * (((vx3PPP + vx3MMM) + (vx3MMP + vx3PPM)) - ((vx3MPM + vx3PMP) + (vx3PMM + vx3MPP)));
364
365 a101 = c1o2 * (((vx1PPP + vx1MMM) - (vx1MMP + vx1PPM)) + ((vx1MPM + vx1PMP) - (vx1PMM + vx1MPP)));
366 b101 = c1o2 * (((vx2PPP + vx2MMM) - (vx2MMP + vx2PPM)) + ((vx2MPM + vx2PMP) - (vx2PMM + vx2MPP)));
367 c101 = c1o2 * (((vx3PPP + vx3MMM) - (vx3MMP + vx3PPM)) + ((vx3MPM + vx3PMP) - (vx3PMM + vx3MPP)));
368
369 a011 = c1o2 * (((vx1PPP + vx1MMM) - (vx1MMP + vx1PPM)) + ((vx1PMM + vx1MPP) - (vx1MPM + vx1PMP)));
370 b011 = c1o2 * (((vx2PPP + vx2MMM) - (vx2MMP + vx2PPM)) + ((vx2PMM + vx2MPP) - (vx2MPM + vx2PMP)));
371 c011 = c1o2 * (((vx3PPP + vx3MMM) - (vx3MMP + vx3PPM)) + ((vx3PMM + vx3MPP) - (vx3MPM + vx3PMP)));
372
373 a111 = ((vx1PPP - vx1MMM) + (vx1MMP - vx1PPM)) + ((vx1MPM - vx1PMP) + (vx1PMM - vx1MPP));
374 b111 = ((vx2PPP - vx2MMM) + (vx2MMP - vx2PPM)) + ((vx2MPM - vx2PMP) + (vx2PMM - vx2MPP));
375 c111 = ((vx3PPP - vx3MMM) + (vx3MMP - vx3PPM)) + ((vx3MPM - vx3PMP) + (vx3PMM - vx3MPP));
376
380 LaplaceRho =
381 ((xoff != c0o1) || (yoff != c0o1) || (zoff != c0o1))
382 ? c0o1
383 : -c3o1 * (a100 * a100 + b010 * b010 + c001 * c001) - c6o1 * (b100 * a010 + c100 * a001 + c010 * b001);
384 d000 = c1o8 * (((drhoPPP + drhoMMM) + (drhoPPM + drhoMMP)) + ((drhoPMM + drhoMPP) + (drhoPMP + drhoMPM)));
385 d100 = c1o4 * (((drhoPPP - drhoMMM) + (drhoPPM - drhoMMP)) + ((drhoPMM - drhoMPP) + (drhoPMP - drhoMPM)));
386 d010 = c1o4 * (((drhoPPP - drhoMMM) + (drhoPPM - drhoMMP)) + ((drhoMPP - drhoPMM) + (drhoMPM - drhoPMP)));
387 d001 = c1o4 * (((drhoPPP - drhoMMM) + (drhoMMP - drhoPPM)) + ((drhoMPP - drhoPMM) + (drhoPMP - drhoMPM)));
388 d110 = c1o2 * (((drhoPPP + drhoMMM) + (drhoPPM + drhoMMP)) - ((drhoPMM + drhoMPP) + (drhoPMP + drhoMPM)));
389 d101 = c1o2 * (((drhoPPP + drhoMMM) - (drhoPPM + drhoMMP)) + ((drhoPMP + drhoMPM) - (drhoPMM + drhoMPP)));
390 d011 = c1o2 * (((drhoPPP + drhoMMM) - (drhoPPM + drhoMMP)) + ((drhoPMM + drhoMPP) - (drhoPMP + drhoMPM)));
391
392 d111 = (((drhoPPP - drhoMMM) + (drhoMMP - drhoPPM)) + ((drhoPMM - drhoMPP) + (drhoMPM - drhoPMP)));
393
398 //
399 // x------x
400 // | |
401 // | ---+--->X
402 // | | |
403 // x------x |
404 // offset-vector
405 //
407 a000 = a000 + xoff * a100 + yoff * a010 + zoff * a001 + xoffsq * a200 + yoffsq * a020 + zoffsq * a002 +
408 xoff * yoff * a110 + xoff * zoff * a101 + yoff * zoff * a011;
409 a100 = a100 + c2o1 * xoff * a200 + yoff * a110 + zoff * a101;
410 a010 = a010 + c2o1 * yoff * a020 + xoff * a110 + zoff * a011;
411 a001 = a001 + c2o1 * zoff * a002 + xoff * a101 + yoff * a011;
412 b000 = b000 + xoff * b100 + yoff * b010 + zoff * b001 + xoffsq * b200 + yoffsq * b020 + zoffsq * b002 +
413 xoff * yoff * b110 + xoff * zoff * b101 + yoff * zoff * b011;
414 b100 = b100 + c2o1 * xoff * b200 + yoff * b110 + zoff * b101;
415 b010 = b010 + c2o1 * yoff * b020 + xoff * b110 + zoff * b011;
416 b001 = b001 + c2o1 * zoff * b002 + xoff * b101 + yoff * b011;
417 c000 = c000 + xoff * c100 + yoff * c010 + zoff * c001 + xoffsq * c200 + yoffsq * c020 + zoffsq * c002 +
418 xoff * yoff * c110 + xoff * zoff * c101 + yoff * zoff * c011;
419 c100 = c100 + c2o1 * xoff * c200 + yoff * c110 + zoff * c101;
420 c010 = c010 + c2o1 * yoff * c020 + xoff * c110 + zoff * c011;
421 c001 = c001 + c2o1 * zoff * c002 + xoff * c101 + yoff * c011;
422 d000 = d000 + xoff * d100 + yoff * d010 + zoff * d001 + xoff * yoff * d110 + xoff * zoff * d101 + yoff * zoff * d011;
423
424 d100 = d100 + yoff * d110 + zoff * d101;
425 d010 = d010 + xoff * d110 + zoff * d011;
426 d001 = d001 + xoff * d101 + yoff * d011;
427 }
428};
429
430} // namespace vf::lbm
431
432#endif
433
constexpr void calculatePPM(const real *const f, const real omega)
constexpr void calculatePPP(const real *const f, const real omega)
constexpr void calculatePMP(const real *const f, const real omega)
constexpr void calculateMMM(const real *const f, const real omega)
constexpr void calculateMPP(const real *const f, const real omega)
constexpr void calculatePMM(const real *const f, const real omega)
constexpr void calculateMPM(const real *const f, const real omega)
constexpr void calculateMMP(const real *const f, const real omega)
constexpr void calculateCoefficients(InterpolationCoefficients &coefficients, real xoff, real yoff, real zoff) const
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
constexpr void getCompressibleMacroscopicValues(const real *const &f, real &drho, real &oneOverRho, real &vx1, real &vx2, real &vx3)
constexpr void calculate(const real *const f, const real omega)