public void AddParticles(IParticleFactory2D factory, int count = 1) { var pt = factory.PopulateRandomDistributed(count); Particles = Particles.Concat(pt); }
public OneDemExample(double dx_gr = 0d) : base() { dx_granica = dx_gr; int n_pm = perc * scaler; var dx1 = boardL / n_pm; for (int i = 0; i < n_pm; i++) { Particles.Add(new Particle() { Name = i.ToString(), X = -boardL + i * dx1, Ro = 1, P = 1, E = 2.5, V = 0 }); } var dx2 = boardL / (Np - n_pm); for (int i = n_pm; i < Np; i++) { Particles.Add(new Particle() { Name = i.ToString(), X = (i - n_pm) * dx2 + dx_granica, Ro = 0.25, P = 0.1795, E = 1.795, V = 0 }); } for (int i = -1; i > -Np_wall - 1; i--) { Wall.Add(new Particle() { Name = (i).ToString(), X = -boardL + (i) * dx1, Ro = 1, P = 1, E = 2.5, V = 0, IsWall = true }); } for (int i = Np + 1; i <= Np + Np_wall; i++) { Wall.Add(new Particle() { Name = (i).ToString(), X = (i - n_pm - 1) * dx2 + dx_granica, Ro = 0.25, P = 0.1795, E = 1.795, V = 0, IsWall = true }); } var all = Particles.Concat(Wall).OrderBy(p => p.X); AllParticles.AddRange(all); AllParticles.ForEach(p => p.M = 0.6 / n_pm); for (int i = 0; i < AllParticles.Count; i++) { AllParticles[i].MInd = i; } var xs = AllParticles.Select(p => p.X).ToArray(); var walls = AllParticles.Select(p => p.IsWall).ToArray(); SynchMeBefore += SynchMeAfterAct; foreach (var p in Particles) { AddChild(p); } Particles.ForEach(p => p.SetDts()); var mhi = Particles.Where(p => p.P > 0.3).Sum(p => p.M); var mlo = Particles.Where(p => p.P < 0.3).Sum(p => p.M); var mall = Particles.Sum(p => p.M); foreach (var part in AllParticles) { part.Ro = AllParticles.Sum(p => p.M * KernelF.W(part.X - p.X, h)); } foreach (var p in Particles) { p.P = GetP(p); } SynchMeAfter += SynchMeAfterAct; //SynchMeForNext += t => { // foreach(var p in Particles) { // p.P = GetP(p); // } //}; particles_par = Particles.AsParallel(); }