# C/++/# How to Implement Damping in Particle Simulation

Tags:
1. Mar 21, 2016

### TheDemx27

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 (Text):

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.

2. Mar 21, 2016

### Henryk

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.

3. Mar 21, 2016

### TheDemx27

Haha, yes that helped! Wow... ok then.
Thankyou!

4. Mar 21, 2016

### TheDemx27

https://media.giphy.com/media/xThuWlHZT7zEPGyYP6/giphy.gif
~success~