How to Implement Damping in Particle Simulation

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
3 replies · 2K views
TheDemx27
Gold Member
Messages
169
Reaction score
13
So I made this simulation of charged particles: https://github.com/TheDemx27/Charge-Simulator
My goal is to be able to put the charges on a line, as I've done, and see them tend toward a final state where there is more charge at the ends of the line and less towards the center. The problem is, the simulation runs like an elastically no matter what I try. At the moment, I've tried adding an acceleration in the opposing direction of motion, proportional to the velocity. This is the main loop for calculating the acceleration and setting the velocity:

Code:
            for (int i = 0; i < charges.Count; i++) {
                for (int j = i + 1; j < charges.Count; j++) {

                    distance = GetDistVec(charges[i], charges[j]);
                    f = charges[i].q * charges[j].q * k / (distance.Magnitude * distance.Magnitude);

                    acceleration1.Magnitude = Math.Abs(f / charges[i].m);
                    acceleration2.Magnitude = Math.Abs(f / charges[j].m);
                    acceleration1.Direction = distance.Direction;
                    acceleration2.Direction = distance.Direction += Math.PI;

                    // DAMPENING
                    double c = 10;

                    accel1 = PolarToComponent(acceleration1);
                    accel2 = PolarToComponent(acceleration2);

                    accel1.x -= c * charges[i].x;
                    accel1.y -= c * charges[i].y;
                    accel2.x -= c * charges[j].x;
                    accel2.y -= c * charges[j].y;
                    // DAMPENING

                    SetVelVec(charges[i], accel1);
                    SetVelVec(charges[j], accel2);
                }
            }

This doesn't seem to do anything. If I make c large enough, the oscillations get bigger, the sim eventually spirals out of control, and I get null values for the positions.
 
Physics news on Phys.org
Hi,I'm not quite certain but it looks like you are adding a spring, not damping, variable charges.x is an x position, not velocity. Change this to charges.vx

Hope this helps.
 
  • Like
Likes   Reactions: TheDemx27
Henryk said:
Hi,I'm not quite certain but it looks like you are adding a spring, not damping, variable charges.x is an x position, not velocity. Change this to charges.vx

Hope this helps.
Haha, yes that helped! Wow... ok then.
Thankyou!
 
https://media.giphy.com/media/xThuWlHZT7zEPGyYP6/giphy.gif
~success~
 
  • Like
Likes   Reactions: Twigg, cpscdave, JorisL and 1 other person