Example #1
0
        public void NormalizeProbabilities()
        {
            var x = VelocityProbability.X.Total != 0
                                ? VelocityProbability.X.Normalized.GetValues()
                                : GetEqualProbabilityDistribution();
            var y = VelocityProbability.Y.Total != 0
                                ? VelocityProbability.Y.Normalized.GetValues()
                                : GetEqualProbabilityDistribution();

            VelocityProbability = new Velocity2dProbability(x, y);
        }
Example #2
0
        protected void TakeSingleStep()
        {
            var next = new FluidLayer(Size, Quantizations);

            foreach (var fluidCell in Layer.GetCells())
            {
                var position = fluidCell.Position;
                var grid     = new VelocityGrid(fluidCell.VelocityProbability);
                foreach (var distribution in grid.Distributions)
                {
                    var x = position.X + distribution.Velocity.X;
                    var y = position.Y + distribution.Velocity.Y;
                    if (x < 0)
                    {
                        x = 0;
                    }
                    if (x >= Width)
                    {
                        x = Width - 1;
                    }
                    if (y < 0)
                    {
                        y = 0;
                    }
                    if (y >= Height)
                    {
                        y = Height - 1;
                    }
                    var nextPos = new Point(x, y);
                    next[nextPos].NumberOfParticles = (int)Math.Round(fluidCell.NumberOfParticles * distribution.Probability);

                    var nextVelocity = new Velocity2dProbability(next[nextPos].VelocityProbability
                                                                 + distribution.VelocityProbability
                                                                 * distribution.Probability
                                                                 * fluidCell.NumberOfParticles);
                    next[nextPos].VelocityProbability = nextVelocity;
                }

                next[position].NumberOfParticles   = fluidCell.NumberOfParticles;
                next[position].VelocityProbability = fluidCell.VelocityProbability;
            }

            Layer = next;
        }
Example #3
0
 public FluidCell(Point position, int quantizations)
 {
     Position            = position;
     Quantizations       = quantizations;
     VelocityProbability = new Velocity2dProbability(quantizations);
 }