64 std::vector<int> missInd =
65 util::subIndexOutgoing<L,direction,orientation>();
69 std::vector<int> missDiagInd = missInd;
71 for (
unsigned iPop = 0; iPop < missInd.size(); ++iPop) {
72 int numOfNonNullComp = 0;
73 for (
int iDim = 0; iDim < L::d; ++iDim) {
74 numOfNonNullComp +=
util::abs(descriptors::c<L>(missInd[iPop],iDim));
77 if (numOfNonNullComp == 1) {
78 missDiagInd.erase(missDiagInd.begin()+iPop);
85 std::vector<std::size_t> perpInd = util::populationsContributingToVelocity<L,direction,0>();
86 for (
unsigned iPop = 0; iPop < perpInd.size(); ++iPop) {
87 if (descriptors::c<L>(perpInd[iPop],0) == 0 && descriptors::c<L>(perpInd[iPop],1) == 0) {
88 perpInd.erase(perpInd.begin() + iPop);
94 MOMENTA().computeRhoU(cell, rho, u);
98 for (
int iDim = 0; iDim < L::d; ++iDim) {
103 for (
unsigned iPop = 0; iPop < missInd.size(); ++iPop) {
104 fSum += cell[descriptors::opposite<L>(missInd[iPop])];
108 rhoCs = ((T)6 * (-orientation * rho * u[direction] + fSum) + (T)1) /
109 ((T)3 * u[direction] * u[direction] - orientation * (T)3 * u[direction] + (T)1);
112 for (
unsigned iPop = 0; iPop < perpInd.size(); ++iPop) {
113 fDiffPerp += descriptors::c<L>(perpInd[iPop],(direction + 1)%2) * cell[perpInd[iPop]];
115 fDiffPerp *= orientation;
118 for (
unsigned iPop = 0; iPop < missDiagInd.size(); ++iPop)
119 fDiffDiag += descriptors::c<L>(descriptors::opposite<L>(missDiagInd[iPop]),(direction + 1)%2)
120 * cell[descriptors::opposite<L>(missDiagInd[iPop])];
121 fDiffDiag *= orientation;
123 uCs[(direction + 1)%L::d] = (
124 - orientation * (T)6 * rho * u[(direction+1)%L::d]
125 + orientation * rhoCs * u[(direction+1)%L::d]
126 - (T)3 * rhoCs * u[direction]*u[(direction+1)%L::d]
127 + (T)6*(fDiffPerp + fDiffDiag))
129 rhoCs * (-orientation + (T)3 * u[direction]));
131 for (
int iDim = 0; iDim < L::d; ++iDim) {
132 uCs[iDim] += u[iDim];
135 T uSqr = util::normSqr<T,L::d>(uCs);
137 for (
unsigned iPop = 0; iPop < missInd.size(); ++iPop) {
138 cell[missInd[iPop]] = computeEquilibrium(missInd[iPop], rhoCs, uCs, uSqr);
141 boundaryDynamics.collide(cell, statistics);