117 if constexpr (isStatic) {
118 for (
int i=0; i<DESCRIPTOR::d; ++i) {
119 u[i] -= (V{1} - cell.template getField<descriptors::POROSITY>()) * u[i];
122 for (
int i=0; i<DESCRIPTOR::d; ++i) {
123 u[i] += (V{1} - cell.template getField<descriptors::POROSITY>())
124 * ( cell.template getFieldComponent<descriptors::VELOCITY_NUMERATOR>(i)
125 / cell.template getField<descriptors::VELOCITY_DENOMINATOR>() - u[i]);
134 const auto velDenominator = cell.template getField<descriptors::VELOCITY_DENOMINATOR>();
135 const auto statistic =
CollisionO().apply(cell, parameters);
136 const auto force = cell.template getField<descriptors::FORCE>();
137 V uPlusDeltaU[DESCRIPTOR::d];
138 for (
int iVel=0; iVel < DESCRIPTOR::d; ++iVel) {
139 uPlusDeltaU[iVel] = u[iVel] + force[iVel];
141 if (velDenominator > std::numeric_limits<V>::epsilon()) {
143 if constexpr (!isStatic) {
145 cell.template setField<descriptors::POROSITY>(1.);
146 cell.template setField<descriptors::VELOCITY_DENOMINATOR>(0.);
147 cell.template setField<descriptors::VELOCITY_NUMERATOR>({0.,0.,0.});
150 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
151 cell[iPop] +=
EquilibriumF().compute(iPop, statistic.rho, uPlusDeltaU)
156 if constexpr (DESCRIPTOR::template provides<descriptors::CONTACT_DETECTION>()) {
157 cell.template setField<descriptors::CONTACT_DETECTION>(0);