public SPHSimulation(float cellSpace, Rect domain) { CellSpace = cellSpace; Domain = domain; Viscosity = 0.2f; m_grid = new IndexGrid(CellSpace, Domain); SKGeneral = new Poly6(CellSpace); SKPressure = new Spiky(CellSpace); SKViscosity = new Viscosity(CellSpace); }
public void Test_VerifyPageIndex_Keep_Fraction() { IndexGrid grid = new IndexGrid(); grid.CurrentPageIndex = 1; grid.PageSize = 10; grid.VirtualItemCount = 19; int pageIndex = grid.GetValidPageIndex(); Assert.AreEqual(1, pageIndex, "The valid page index wasn't kept."); }
public void Test_GetValidPageIndex_ZeroItems_Adjust() { IndexGrid grid = new IndexGrid(); grid.CurrentPageIndex = 1; grid.PageSize = 10; grid.VirtualItemCount = 0; int pageIndex = grid.GetValidPageIndex(); Assert.AreEqual(0, pageIndex, "Invalid page index."); }
/// <summary> /// Initializes the page and the controller for the specified type. /// </summary> /// <param name="type"></param> /// <param name="isPaged"></param> public void Initialize(Type type, IndexGrid indexGrid, bool isPaged) { Command = new IndexCommandInfo(type.Name); Grid = indexGrid; controller = IndexController.New(this, new PagingLocation(Grid.CurrentPageIndex, Grid.PageSize)); Grid.SortCommand += new DataGridSortCommandEventHandler(Grid_SortCommand); Grid.PageIndexChanged += new DataGridPageChangedEventHandler(Grid_PageIndexChanged); SortExpression = indexGrid.CurrentSort; }
public void Test_VerifyPageIndex_Adjust_Fraction() { IndexGrid grid = new IndexGrid(); grid.CurrentPageIndex = 2; grid.PageSize = 10; grid.VirtualItemCount = 11; int pageIndex = grid.GetValidPageIndex(); // Check that the page index was moved from 1 (an invalid index) to 0 (which is valid) Assert.AreEqual(1, pageIndex, "The page index wasn't adjusted according to the maximum number of pages."); }
private void CalculatePressureAndDensities(ref ArrayList particles, ref IndexGrid grid) { Vector3 dist; foreach (FluidParticle particle in particles) { particle.Density = 0.0f; foreach (int nIdx in grid.GetNeighbourIndex(particle)) { if (particle != (FluidParticle)particles[nIdx]) { dist = particle.Position - ((FluidParticle)particles[nIdx]).Position; particle.Density += particle.Mass * (float)this.SKGeneral.Calculate(ref dist); } } particle.UpdatePressure(); } }
private void CheckParticleDistance(ref ArrayList particles, ref IndexGrid grid) { float minDist = 0.5f * CellSpace; float minDistSq = minDist * minDist; Vector3 dist; for (int i = 0; i < particles.Count; i++) { FluidParticle p = (FluidParticle)particles[i]; foreach (int nIdx in grid.GetNeighbourIndex(p)) { FluidParticle pn = (FluidParticle)particles[nIdx]; if (p != pn) { dist = pn.Position - p.Position; float distLenSq = dist.sqrMagnitude; if (distLenSq < minDistSq) { if (distLenSq > Mathf.Epsilon) { float distLen = (float)Math.Sqrt((double)distLenSq); dist = dist * 0.5f * (distLen - minDist) / distLen; pn.Position = pn.Position - dist; pn.PositionOld = pn.PositionOld - dist; p.Position = p.Position + dist; p.PositionOld = p.PositionOld + dist; } else { float diff = 0.5f * minDist; pn.Position.x -= diff; pn.Position.y -= diff; p.Position.x += diff; p.PositionOld.y += diff; } } } } } }
private void CalculateForces(ref ArrayList particles, ref IndexGrid grid, Vector3 globalForce) { Vector3 f, dist; float scalar; for (int i = 0; i < particles.Count; i++) { FluidParticle p = (FluidParticle)particles[i]; p.Force += globalForce; foreach (int nIdx in grid.GetNeighbourIndex(p)) { if (nIdx < i) { FluidParticle pn = (FluidParticle)particles[nIdx]; if (pn.Density > Mathf.Epsilon && p != pn) { dist = p.Position - pn.Position; scalar = pn.Mass * (p.Pressure + pn.Pressure) / (2.0f * pn.Density); f = SKPressure.CalculateGradient(ref dist); f = f * scalar; p.Force -= f; pn.Force += f; scalar = pn.Mass * (float)this.SKViscosity.CalculateLaplacian(ref dist) * Viscosity * 1 / pn.Density; f = pn.Velocity - p.Velocity; f = f * scalar; p.Force += f; pn.Force -= f; } } } } }
/// <summary> /// Initializes the page and the controller for the specified type. /// </summary> /// <param name="type"></param> /// <param name="indexGrid"></param> public void Initialize(Type type, IndexGrid indexGrid) { Initialize(type, indexGrid, false); }