70 constexpr auto missingIndexesTmp = util::subIndexOutgoing<DESCRIPTOR,direction,orientation>();
71 std::vector<int> missingIndexes(missingIndexesTmp.cbegin(), missingIndexesTmp.cend());
75 std::vector<int> missingDiagonalIndexes = missingIndexes;
76 for (
unsigned iPop = 0; iPop < missingIndexes.size(); ++iPop) {
77 int numOfNonNullComp = 0;
78 for (
int iDim = 0; iDim < DESCRIPTOR::d; ++iDim) {
79 numOfNonNullComp +=
util::abs(descriptors::c<DESCRIPTOR>(missingIndexes[iPop],iDim));
82 if (numOfNonNullComp == 1) {
83 missingDiagonalIndexes.erase(missingDiagonalIndexes.begin()+iPop);
88 V rho, u[DESCRIPTOR::d];
89 V falseRho, falseU[DESCRIPTOR::d];
90 MomentaF().computeRhoU(cell, rho, u);
91 V uSqr = util::normSqr<V,DESCRIPTOR::d>(u);
96 for (
unsigned iPop = 0; iPop < missingIndexes.size(); ++iPop) {
97 cell[missingIndexes[iPop]] = cell[descriptors::opposite<DESCRIPTOR>(missingIndexes[iPop])]
107 V diff[DESCRIPTOR::d] {};
108 for (
int iDim = 0; iDim < DESCRIPTOR::d; ++iDim) {
109 diff[iDim] = (rho*u[iDim] - falseRho*falseU[iDim])/ V(missingDiagonalIndexes.size());
112 for (
unsigned iPop = 0; iPop < missingDiagonalIndexes.size(); ++iPop) {
113 for (
int iDim = 1; iDim < DESCRIPTOR::d; ++iDim) {
114 cell[missingDiagonalIndexes[iPop]] +=
115 descriptors::c<DESCRIPTOR>(missingDiagonalIndexes[iPop],(direction+iDim)%DESCRIPTOR::d) * diff[(direction+iDim)%DESCRIPTOR::d];
119 typename CORRECTED_DYNAMICS::CollisionO().apply(cell,
parameters);