public PICGrid(float gravity, int nx, int ny, float domainSize) { this.gravity = gravity; domainx = domainSize; domainy = ny * domainx / nx; h = domainx / nx; invH = 1 / h; u = new Array2Df(nx + 1, ny); v = new Array2Df(nx, ny + 1); pressure = new Array2Df(nx, ny); marker = new Array2Di(nx, ny); phi = new Array2Df(nx, ny); du = new Array2Df(nx, ny); dv = new Array2Df(nx, ny); poisson = new Array2Dx3f(nx, ny); preconditioner = new Array2Df(nx, ny); m = new Array2Df(nx, ny); r = new Array2Df(nx, ny); z = new Array2Df(nx, ny); s = new Array2Df(nx, ny); rhsB = new Array2Df(nx, ny); }
float GetPressureCoeff(Array2Df press, Array2Di marker, int u, int v) { u = Mathf.Max(0, u); v = Mathf.Max(0, v); u = Mathf.Min(this.pressure.nx - 1, u); v = Mathf.Min(this.pressure.ny - 1, v); if (marker[u, v] == SOLID) { return(1); } else { return(0); } }
float GetNeighborPressureCoeff(Array2Df press, Array2Di marker, int u, int v) { u = Mathf.Max(0, u); v = Mathf.Max(0, v); u = Mathf.Min(this.pressure.nx - 1, u); v = Mathf.Min(this.pressure.ny - 1, v); if (marker[u, v] == FLUID) { return(-press[u, v]); } else { return(0); } }