28template <MInt nDim, MInt nDist>
32 const MFloat squaredVelocityB2 = p_squaredVelocity * F1B2;
34 const MFloat rhomulCSsq = p_rho * CSsq;
36 const MFloat preTerm = rhomulCSsq - squaredVelocityB2;
39 for(
MInt n = 0; n < nDim; n++) {
41 b[2 * n + 1] = p_u[n];
45 constexpr MFloat lb_tp_coef1 = Ld::tp(1) * F1BCSsq;
46 for(
MInt j = 0; j < Ld::distFld(0); j++) {
47 eqDist[j] = lb_tp_coef1 * (preTerm +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq);
51 constexpr MFloat lb_tp_coef2 = Ld::tp(2) * F1BCSsq;
52 for(
MInt j = 0; j < Ld::distFld(1); j++) {
53 const MFloat tmp = (
b[Ld::mFld1(2 * j)] +
b[Ld::mFld1(2 * j + 1)]);
54 eqDist[Ld::distFld(0) + j] = lb_tp_coef2 * (preTerm + tmp + tmp * tmp * F1B2mulF1BCSsq);
58 constexpr MFloat lb_tp_coef3 = Ld::tp(3) * F1BCSsq;
59 for(
MInt j = 0; j < Ld::distFld(2); j++) {
60 const MFloat tmp = (
b[Ld::mFld2(3 * j)] +
b[Ld::mFld2(3 * j + 1)] +
b[Ld::mFld2(3 * j + 2)]);
61 eqDist[Ld::distFld(0) + Ld::distFld(1) + j] = lb_tp_coef3 * (preTerm + tmp + tmp * tmp * F1B2mulF1BCSsq);
65 eqDist[Ld::lastId()] = Ld::tp(0) * (p_rho - F1B2mulF1BCSsq * p_squaredVelocity);
76template <MInt nDim, MInt nDist>
80 const MFloat squaredVelocityB2 = p_squaredVelocity * F1B2;
83 for(
MInt n = 0; n < nDim; n++) {
85 b[2 * n + 1] = p_u[n];
89 constexpr MFloat lb_tp_coef1 = Ld::tp(1) * F1BCSsq;
90 for(
MInt j = 0; j < Ld::distFld(0); j++) {
91 eqDist[j] = lb_tp_coef1 * (CSsq +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
95 constexpr MFloat lb_tp_coef2 = Ld::tp(2) * F1BCSsq;
96 for(
MInt j = 0; j < Ld::distFld(1); j++) {
97 const MFloat tmp = (
b[Ld::mFld1(2 * j)] +
b[Ld::mFld1(2 * j + 1)]);
98 eqDist[Ld::distFld(0) + j] = lb_tp_coef2 * (CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
102 constexpr MFloat lb_tp_coef3 = Ld::tp(3) * F1BCSsq;
103 for(
MInt j = 0; j < Ld::distFld(2); j++) {
104 const MFloat tmp = (
b[Ld::mFld2(3 * j)] +
b[Ld::mFld2(3 * j + 1)] +
b[Ld::mFld2(3 * j + 2)]);
105 eqDist[Ld::distFld(0) + Ld::distFld(1) + j] =
106 lb_tp_coef3 * (CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
110 eqDist[Ld::lastId()] = Ld::tp(0) * (1.0 - F1B2mulF1BCSsq * p_squaredVelocity) * p_rho;
121template <MInt nDim, MInt nDist, MBool compressible = false>
124 if constexpr(compressible)
125 calcEqDistsCompressible<nDim, nDist>(p_rho, p_squaredVelocity, p_u, eqDist);
127 calcEqDistsIncompressible<nDim, nDist>(p_rho, p_squaredVelocity, p_u, eqDist);
137template <MInt nDim, MInt nDist, MBool compressible = false>
139 const MFloat p_squaredVelocity = std::inner_product(&p_u[0], &p_u[nDim], &p_u[0], .0);
141 calcEqDists<nDim, nDist, compressible>(p_rho, p_squaredVelocity, p_u, eqDist);
151template <MInt nDim, MInt nDist>
156 const MFloat squaredVelocityB2 = p_squaredVelocity * F1B2;
158 const MFloat rhomulCSsq = p_rho * CSsq;
161 for(
MInt n = 0; n < nDim; n++) {
163 b[2 * n + 1] = p_u[n];
167 const MFloat lb_tp_coef1 = myTp[1] * F1BCSsq;
168 for(
MInt j = 0; j < myDistFld[0]; j++) {
169 eqDist[j] = lb_tp_coef1 * (rhomulCSsq +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq - squaredVelocityB2);
173 const MFloat lb_tp_coef2 = myTp[2] * F1BCSsq;
174 for(
MInt j = 0; j < myDistFld[1]; j++) {
175 const MFloat tmp = (
b[myMFld1[2 * j]] +
b[myMFld1[2 * j + 1]]);
176 eqDist[myDistFld[0] + j] = lb_tp_coef2 * (rhomulCSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2);
180 const MFloat lb_tp_coef3 = myTp[3] * F1BCSsq;
181 for(
MInt j = 0; j < myDistFld[2]; j++) {
182 const MFloat tmp = (
b[myMFld2[3 * j]] +
b[myMFld2[3 * j + 1]] +
b[myMFld2[3 * j + 2]]);
183 eqDist[myDistFld[0] + myDistFld[1] + j] =
184 lb_tp_coef3 * (rhomulCSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2);
188 eqDist[Ld::lastId()] = myTp[0] * (p_rho - F1B2mulF1BCSsq * p_squaredVelocity);
197template <MInt nDim, MInt nDist>
200 const MInt* myDistFld) {
202 const MFloat squaredVelocityB2 = p_squaredVelocity * F1B2;
205 for(
MInt n = 0; n < nDim; n++) {
207 b[2 * n + 1] = p_u[n];
211 const MFloat lb_tp_coef1 = myTp[1] * F1BCSsq;
212 for(
MInt j = 0; j < myDistFld[0]; j++) {
213 eqDist[j] = lb_tp_coef1 * (CSsq +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
217 const MFloat lb_tp_coef2 = myTp[2] * F1BCSsq;
218 for(
MInt j = 0; j < myDistFld[1]; j++) {
219 const MFloat tmp = (
b[myMFld1[2 * j]] +
b[myMFld1[2 * j + 1]]);
220 eqDist[myDistFld[0] + j] = lb_tp_coef2 * (CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
224 const MFloat lb_tp_coef3 = myTp[3] * F1BCSsq;
225 for(
MInt j = 0; j < myDistFld[2]; j++) {
226 const MFloat tmp = (
b[myMFld2[3 * j]] +
b[myMFld2[3 * j + 1]] +
b[myMFld2[3 * j + 2]]);
227 eqDist[myDistFld[0] + myDistFld[1] + j] =
228 lb_tp_coef3 * (CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2) * p_rho;
232 eqDist[Ld::lastId()] = myTp[0] * (1.0 - F1B2mulF1BCSsq * p_squaredVelocity) * p_rho;
243template <MInt nDim, MInt nDist, MBool compressible = false>
246 const MInt* myDistFld) {
247 if constexpr(compressible)
248 calcEqDistsCompressible<nDim, nDist>(p_rho, p_squaredVelocity, p_u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
250 calcEqDistsIncompressible<nDim, nDist>(p_rho, p_squaredVelocity, p_u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
260template <MInt nDim, MInt nDist, MBool compressible = false>
263 const MFloat p_squaredVelocity = std::inner_product(&p_u[0], &p_u[nDim], &p_u[0], .0);
265 calcEqDists<nDim, nDist, compressible>(p_rho, p_squaredVelocity, p_u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
281template <MInt nDim, MInt nDist, MBool compressible = false>
283 MFloat*
const nonEqDist) {
285 std::array<MFloat, nDist> eqDist{};
286 calcEqDists<nDim, nDist, compressible>(rho, u, eqDist.data());
289 for(
MInt j = 0; j < nDist; j++) {
290 nonEqDist[j] =
dist[j] - eqDist[j];
304template <MInt nDim, MInt nDist, MBool compressible = false>
308 std::array<MFloat, nDim> u{};
309 calcMacroscopicVars(
dist, rho, u.data());
311 calcNonEqDists<nDim, nDist, compressible>(rho, u.data(),
dist, nonEqDist);
324template <MInt nDim, MInt nDist>
328 for(
MInt d = 0; d < nDim * nDim; d++) {
329 momentumFlux[d] = F0;
331 for(
MInt j = 0; j < nDist; j++) {
332 for(
MInt k = 0; k < nDim; k++) {
333 for(
MInt l = 0; l < nDim; l++) {
334 momentumFlux[k * nDim + l] += nonEqDist[j] * Ld::ppdfDir(j, k) * Ld::ppdfDir(j, l);
352template <MInt nDim, MInt nDist, MBool compressible = false>
354 MFloat*
const momentumFlux) {
355 std::array<MFloat, nDist> nonEqDist{};
356 calcNonEqDists<nDim, nDist, compressible>(rho, u,
dist, nonEqDist.data());
358 calcMomentumFluxFromNonEq<nDim, nDist>(nonEqDist.data(), momentumFlux);
371template <MInt nDim, MInt nDist, MBool compressible = false>
373 std::array<MFloat, nDist> nonEqDist{};
374 calcNonEqDists<nDim, nDist, compressible>(
dist, nonEqDist.data());
376 calcMomentumFluxFromNonEq<nDim, nDist>(nonEqDist.data(), momentumFlux);
392template <MInt nDim, MInt nDist>
395 calcEqDists<nDim, nDist, true>(T, squaredVelocity, u, eqDist);
409template <MInt nDim, MInt nDist>
411 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
413 calcEqDists<nDim, nDist, true>(T, squaredVelocity, u, eqDist);
430template <MInt nDim, MInt nDist>
433 const MInt* myDistFld) {
434 calcEqDists<nDim, nDist, true>(T, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
448template <MInt nDim, MInt nDist>
451 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
453 calcEqDists<nDim, nDist, true>(T, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
457template <MInt nDim, MInt nDist>
462 const MFloat F1BD = F1 / nDim;
463 const MFloat squaredVelocityB2 = 0.5 * squaredVelocity;
464 const MFloat innerEnergy = rho * T * F1B2 * (
MFloat)nDim;
466 std::array<MFloat, 2 * nDim>
b{};
467 for(
MInt d = 0; d < nDim; d++) {
474 for(
MInt j = 0; j < Ld::distFld(0); j++) {
475 const MFloat l_innerterm_ie =
476 F1BCSsq * F1BD * CSsq + (F1BCSsq * F1BD - F2 * F1BD) *
b[j] +
b[j] *
b[j] * F1B2 * F1BCSsq - squaredVelocityB2;
477 eqDist[j] = Ld::tp(1) * F1BCSsq * innerEnergy * l_innerterm_ie;
481 for(
MInt j = 0; j < Ld::distFld(1); j++) {
482 const MFloat tmp = (
b[Ld::mFld1(2 * j)] +
b[Ld::mFld1(2 * j + 1)]);
483 const MFloat l_innerterm_ie = F2 * F1BCSsq * F1BD * CSsq + (F2 * F1BCSsq * F1BD - F2 * F1BD) * tmp
484 + tmp * tmp * F1B2 * F1BCSsq - squaredVelocityB2;
485 eqDist[Ld::distFld(0) + j] = Ld::tp(2) * F1BCSsq * innerEnergy * l_innerterm_ie;
489 for(
MInt j = 0; j < Ld::distFld(2); j++) {
490 const MFloat tmp = (
b[Ld::mFld2(3 * j)] +
b[Ld::mFld2(3 * j + 1)] +
b[Ld::mFld2(3 * j + 2)]);
491 const MFloat l_innerterm_ie = F3 * F1BCSsq * F1BD * CSsq + (F3 * F1BCSsq * F1BD - F2 * F1BD) * tmp
492 + tmp * tmp * F1B2 * F1BCSsq - squaredVelocityB2;
493 eqDist[Ld::distFld(0) + Ld::distFld(1) + j] = Ld::tp(3) * F1BCSsq * innerEnergy * l_innerterm_ie;
497 eqDist[Ld::lastId()] = -Ld::tp(0) * innerEnergy * F1B2 * F1BCSsq * squaredVelocity;
500template <MInt nDim, MInt nDist>
502 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
504 calcEqDistsInnerEnergy<nDim, nDist>(T, rho, squaredVelocity, u, eqDist);
508template <MInt nDim, MInt nDist>
514 const MFloat F1BD = F1 / nDim;
515 const MFloat squaredVelocityB2 = 0.5 * squaredVelocity;
516 const MFloat innerEnergy = rho * T * F1B2 * nDim;
518 std::array<MFloat, 2 * nDim>
b{};
519 for(
MInt d = 0; d < nDim; d++) {
526 const MFloat lb_tp_coef1 = myTp[1] * F1BCSsq;
527 for(
MInt j = 0; j < myDistFld[0]; j++) {
528 const MFloat l_innerterm_ie =
529 F1BCSsq * F1BD * CSsq + (F1BCSsq * F1BD - F2 * F1BD) *
b[j] +
b[j] *
b[j] * F1B2 * F1BCSsq - squaredVelocityB2;
530 eqDist[j] = lb_tp_coef1 * innerEnergy * l_innerterm_ie;
534 const MFloat lb_tp_coef2 = myTp[2] * F1BCSsq;
535 for(
MInt j = 0; j < myDistFld[1]; j++) {
536 const MFloat tmp = (
b[myMFld1[2 * j]] +
b[myMFld1[2 * j + 1]]);
537 const MFloat l_innerterm_ie = F2 * F1BCSsq * F1BD * CSsq + (F2 * F1BCSsq * F1BD - F2 * F1BD) * tmp
538 + tmp * tmp * F1B2 * F1BCSsq - squaredVelocityB2;
539 eqDist[myDistFld[0] + j] = lb_tp_coef2 * innerEnergy * l_innerterm_ie;
543 const MFloat lb_tp_coef3 = myTp[3] * F1BCSsq;
544 for(
MInt j = 0; j < myDistFld[2]; j++) {
545 const MFloat tmp = (
b[myMFld2[3 * j]] +
b[myMFld2[3 * j + 1]] +
b[myMFld2[3 * j + 2]]);
546 const MFloat l_innerterm_ie = F3 * F1BCSsq * F1BD * CSsq + (F3 * F1BCSsq * F1BD - F2 * F1BD) * tmp
547 + tmp * tmp * F1B2 * F1BCSsq - squaredVelocityB2;
548 eqDist[myDistFld[0] + myDistFld[1] + j] = lb_tp_coef3 * innerEnergy * l_innerterm_ie;
552 eqDist[Ld::lastId()] = -myTp[0] * innerEnergy * F1B2 * F1BCSsq * squaredVelocity;
555template <MInt nDim, MInt nDist>
558 const MInt* myDistFld) {
559 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
561 calcEqDistsInnerEnergy<nDim, nDist>(T, rho, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
565template <MInt nDim, MInt nDist>
570 const MFloat squaredVelocityB2 = 0.5 * squaredVelocity;
571 const MFloat p0 = rho * CSsq;
572 const MFloat totalEnergy = T * nDim * F1B2 + squaredVelocityB2;
574 std::array<MFloat, 2 * nDim>
b{};
575 for(
MInt d = 0; d < nDim; d++) {
582 constexpr MFloat lb_tp_coef1 = Ld::tp(1) * F1BCSsq;
583 for(
MInt j = 0; j < Ld::distFld(0); j++) {
584 const MFloat l_innerterm = CSsq +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq - squaredVelocityB2;
585 const MFloat eq_dist = lb_tp_coef1 * rho * l_innerterm;
586 const MFloat l_innerterm_te =
b[j] +
b[j] *
b[j] * F1BCSsq - squaredVelocity + F1B2 * (F1 - nDim * CSsq);
587 eqDistT[j] = lb_tp_coef1 * p0 * l_innerterm_te + totalEnergy * eq_dist;
591 constexpr MFloat lb_tp_coef2 = Ld::tp(2) * F1BCSsq;
592 for(
MInt j = 0; j < Ld::distFld(1); j++) {
593 const MFloat tmp = (
b[Ld::mFld1(2 * j)] +
b[Ld::mFld1(2 * j + 1)]);
594 const MFloat l_innerterm = CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2;
595 const MFloat eq_dist = lb_tp_coef2 * rho * l_innerterm;
596 const MFloat l_innerterm_te = tmp + tmp * tmp * F1BCSsq - squaredVelocity + F1B2 * (F2 - nDim * CSsq);
597 eqDistT[Ld::distFld(0) + j] = lb_tp_coef2 * p0 * l_innerterm_te + totalEnergy * eq_dist;
601 constexpr MFloat lb_tp_coef3 = Ld::tp(3) * F1BCSsq;
602 for(
MInt j = 0; j < Ld::distFld(2); j++) {
603 const MFloat tmp = (
b[Ld::mFld2(3 * j)] +
b[Ld::mFld2(3 * j + 1)] +
b[Ld::mFld2(3 * j + 2)]);
604 const MFloat l_innerterm = CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2;
605 const MFloat eq_dist = lb_tp_coef3 * rho * l_innerterm;
606 const MFloat l_innerterm_te = tmp + tmp * tmp * F1BCSsq - squaredVelocity + F1B2 * (F3 - nDim * CSsq);
607 eqDistT[Ld::distFld(0) + Ld::distFld(1) + j] = lb_tp_coef3 * p0 * l_innerterm_te + totalEnergy * eq_dist;
611 constexpr MFloat lb_tp_coef0 = Ld::tp(0);
612 const MFloat l_innerterm = F1 - F1B2mulF1BCSsq * squaredVelocity;
613 const MFloat eq_dist = lb_tp_coef0 * rho * l_innerterm;
614 const MFloat l_innerterm_te = -F1BCSsq * squaredVelocity + F1B2mulF1BCSsq * (F0 - nDim * CSsq);
615 eqDistT[Ld::lastId()] = lb_tp_coef0 * p0 * l_innerterm_te + totalEnergy * eq_dist;
618template <MInt nDim, MInt nDist>
620 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
622 calcEqDistsTotalEnergy<nDim, nDist>(T, rho, squaredVelocity, u, eqDist);
626template <MInt nDim, MInt nDist>
632 const MFloat squaredVelocityB2 = 0.5 * squaredVelocity;
633 const MFloat p0 = rho * CSsq;
634 const MFloat totalEnergy = T * nDim * F1B2 + squaredVelocityB2;
636 std::array<MFloat, 2 * nDim>
b{};
637 for(
MInt d = 0; d < nDim; d++) {
644 const MFloat lb_tp_coef1 = myTp[1] * F1BCSsq;
645 for(
MInt j = 0; j < myDistFld[0]; j++) {
646 const MFloat l_innerterm = CSsq +
b[j] +
b[j] *
b[j] * F1B2mulF1BCSsq - squaredVelocityB2;
647 const MFloat eq_dist = lb_tp_coef1 * rho * l_innerterm;
648 const MFloat l_innerterm_te =
b[j] +
b[j] *
b[j] * F1BCSsq - squaredVelocity + F1B2 * (F1 - nDim * CSsq);
649 eqDistT[j] = lb_tp_coef1 * p0 * l_innerterm_te + totalEnergy * eq_dist;
653 const MFloat lb_tp_coef2 = myTp[2] * F1BCSsq;
654 for(
MInt j = 0; j < myDistFld[1]; j++) {
655 const MFloat tmp = (
b[myMFld1[2 * j]] +
b[myMFld1[2 * j + 1]]);
656 const MFloat l_innerterm = CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2;
657 const MFloat eq_dist = lb_tp_coef2 * rho * l_innerterm;
658 const MFloat l_innerterm_te = tmp + tmp * tmp * F1BCSsq - squaredVelocity + F1B2 * (F2 - nDim * CSsq);
659 eqDistT[myDistFld[0] + j] = lb_tp_coef2 * p0 * l_innerterm_te + totalEnergy * eq_dist;
663 const MFloat lb_tp_coef3 = myTp[3] * F1BCSsq;
664 for(
MInt j = 0; j < myDistFld[2]; j++) {
665 const MFloat tmp = (
b[myMFld2[3 * j]] +
b[myMFld2[3 * j + 1]] +
b[myMFld2[3 * j + 2]]);
666 const MFloat l_innerterm = CSsq + tmp + tmp * tmp * F1B2mulF1BCSsq - squaredVelocityB2;
667 const MFloat eq_dist = lb_tp_coef3 * rho * l_innerterm;
668 const MFloat l_innerterm_te = tmp + tmp * tmp * F1BCSsq - squaredVelocity + F1B2 * (F3 - nDim * CSsq);
669 eqDistT[myDistFld[0] + myDistFld[1] + j] = lb_tp_coef3 * p0 * l_innerterm_te + totalEnergy * eq_dist;
673 const MFloat l_innerterm = F1 - F1B2mulF1BCSsq * squaredVelocity;
674 const MFloat eq_dist = myTp[0] * rho * l_innerterm;
675 const MFloat l_innerterm_te = -F1BCSsq * squaredVelocity + F1B2mulF1BCSsq * (F0 - nDim * CSsq);
676 eqDistT[Ld::lastId()] = myTp[0] * p0 * l_innerterm_te + totalEnergy * eq_dist;
679template <MInt nDim, MInt nDist>
682 const MInt* myDistFld) {
683 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
685 calcEqDistsTotalEnergy<nDim, nDist>(T, rho, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
702template <MInt nDim, MInt nDist>
705 calcEqDists<nDim, nDist, true>(C, squaredVelocity, u, eqDist);
719template <MInt nDim, MInt nDist>
721 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
723 calcEqDists<nDim, nDist, true>(C, squaredVelocity, u, eqDist);
740template <MInt nDim, MInt nDist>
743 const MInt* myDistFld) {
744 calcEqDists<nDim, nDist, true>(C, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
758template <MInt nDim, MInt nDist>
761 const MFloat squaredVelocity = std::inner_product(&u[0], &u[nDim], &u[0], .0);
763 calcEqDists<nDim, nDist, true>(C, squaredVelocity, u, eqDist, myMFld1, myMFld2, myTp, myDistFld);
774template <MInt nDim, MInt nDist, MBool compressible = false>
779 for(
MInt j = 0; j < nDist; j++) {
783 for(
MInt i = 0; i < nDim; i++) {
785 for(
MInt j = 0; j < Ld::dxQyFld(); j++) {
786 p_u[i] += p_dist[Ld::pFld(i, j)];
787 p_u[i] -= p_dist[Ld::nFld(i, j)];
789 if constexpr(compressible) p_u[i] /= p_rho;
801template <MInt nDim, MInt nDist, MBool compressible = false>
803 MInt*
const myNFld,
const MInt fldlen) {
807 for(
MInt j = 0; j < nDist; j++) {
811 for(
MInt i = 0; i < nDim; i++) {
813 for(
MInt j = 0; j < fldlen; j++) {
814 p_u[i] += p_dist[myPFld[i * fldlen + j]];
815 p_u[i] -= p_dist[myNFld[i * fldlen + j]];
817 if constexpr(compressible) p_u[i] /= p_rho;
void calcMacroVars(MFloat const *const p_dist, MFloat &p_rho, MFloat *const p_u)
Calculate macroscopic variables from distribution.
void calcEqDistsIncompressible(const MFloat &p_rho, const MFloat &p_squaredVelocity, MFloat const *const p_u, MFloat *const eqDist)
Calculate equilibrium function (incompressible version). Squared velocity has already been computed.
void calcMomentumFlux(const MFloat &rho, const MFloat *const u, const MFloat *const dist, MFloat *const momentumFlux)
Calculate the momentum flux for given macroscopic variables and distribution.
void calcEqDistsTotalEnergy(const MFloat &T, const MFloat &rho, const MFloat squaredVelocity, const MFloat *const u, MFloat *const eqDistT)
void calcEqDistsThermal(const MFloat &T, const MFloat squaredVelocity, const MFloat *const u, MFloat *const eqDist)
Calculate thermal equilibrium distribution.
void calcMomentumFluxFromNonEq(const MFloat *const nonEqDist, MFloat *const momentumFlux)
Calculate the momentum flux for a given non-equilibirum distribution.
void calcEqDists(const MFloat &p_rho, const MFloat &p_squaredVelocity, MFloat const *const p_u, MFloat *const eqDist)
Calculate equilibrium function. Squared velocity has already been computed.
void calcNonEqDists(const MFloat &rho, const MFloat *const u, const MFloat *const dist, MFloat *const nonEqDist)
Calculate the non-equilibrium part for given macroscopic variables and distribution.
void calcEqDistsInnerEnergy(const MFloat &T, const MFloat &rho, const MFloat squaredVelocity, const MFloat *const u, MFloat *const eqDist)
void calcEqDistsTransport(const MFloat &C, const MFloat squaredVelocity, const MFloat *const u, MFloat *const eqDist)
Calculate transport equilibrium distribution.
void calcEqDistsCompressible(const MFloat &p_rho, const MFloat &p_squaredVelocity, MFloat const *const p_u, MFloat *const eqDist)
Calculate equilibrium function (compressible version). Squared velocity has already been computed.
MFloat dist(const Point< DIM > &p, const Point< DIM > &q)
LB lattice descriptor for arrays depending on D and Q.