Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
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);
            }
        }