Skip to content

Instantly share code, notes, and snippets.

@haldean
Created December 7, 2011 20:43
Show Gist options
  • Save haldean/1444549 to your computer and use it in GitHub Desktop.
Save haldean/1444549 to your computer and use it in GitHub Desktop.
Pressure solve for velocity projection
for (int k=0; k<20; k++) {
for (int i=1; i<N+1; i++) {
for (int j=1; j<N+1; j++) {
if (!m_has_fluid(i, j)) continue;
int adj_fluid_cells = 0;
scalar p = pressure(i, j);
pressure(i, j) = div(i, j);
if (!m_has_solid(i-1, j)) {
pressure(i, j) += pressure(i-1, j) - p;
adj_fluid_cells++;
}
if (!m_has_solid(i+1, j)) {
pressure(i, j) += pressure(i+1, j) - p;
adj_fluid_cells++;
}
if (!m_has_solid(i, j-1)) {
pressure(i, j) += pressure(i, j-1) - p;
adj_fluid_cells++;
}
if (!m_has_solid(i, j+1)) {
pressure(i, j) += pressure(i, j+1) - p;
adj_fluid_cells++;
}
pressure(i, j) /= adj_fluid_cells;
}
}
for (int i=0; i<N+2; i++) {
pressure(i, 0) = pressure(i, 1);
pressure(i, N+1) = pressure(i, N);
pressure(0, i) = pressure(1, i);
pressure(N+1, i) = pressure(N, i);
}
pressure(0, 0) = pressure(0, 1);
pressure(0, N+1) = pressure(1, N);
pressure(N+1, 0) = pressure(N, 1);
pressure(N+1, N+1) = pressure(N, N);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment