Simple particles simulation (gravity)

qwe
Messages
25
Reaction score
0
i believe I'm using the correct equations, but the orbit won't work. here is the relevant code for a 2 particle simple orbit simulation. I'm not sure what I'm doing wrong

Code:
...

timeStep = 1.0
gravityConstant = 6.67384 * 10.0 ^ -11.0

...

// (initialize particles)
// p[n].m: mass, p[n].x: initial x position, p[n].vz: initial velocity vector along z axis

            p[0].m = 1.0
            p[1].m = 1.0

            p[0].t = 0
            p[0].x = 10.0

            p[1].t = 0
            p[1].x = -10.0

// initial velocity = sqrt(m2 ^2 * G / m1 + m2 * distance)

            p[0].vz = sqrt( ( p[1].m * p[1].m * gravityConstant ) / ( p[0].m + p[1].m * 10.0 ) )
            p[1].vz = sqrt( ( p[0].m * p[0].m * gravityConstant ) / ( p[1].m + p[0].m * 10.0 ) ) * -1

...

// (each loop, for each particle... p[n] is current particle, p[m] is other particle)

                        // calculate distance
                        dx# = p[m].x - p[n].x
                        dy# = p[m].y - p[n].y
                        dz# = p[m].z - p[n].z
                        distance# = sqrt( dx# * dx# + dy# * dy# + dz# * dz# )
                        // calculate force
                        force# = (gravityConstant * p[n].m * p[m].m) / (distance# * distance#)
                        // calculate acceleration, include timestep
                        acceleration# = (force# / p[n].m) * timeStep
                        // calculate unit vector and calculate magnitude of vector (acceleration)
                        p[n].vx = p[n].vx + dx# * (acceleration# / distance# )
                        p[n].vy = p[n].vy + dy# * (acceleration# / distance# )
                        p[n].vz = p[n].vz + dz# * (acceleration# / distance# )
 
Last edited:
Physics news on Phys.org
Without going through the code in details:
1. I don't see where you update particle position. I assume you just omitted it for brevity.
2. Gravitation force between 2 1kg masses at 10 meters is not exactly very strong.
3. With a time step of 1s your are going to have a lot of very small steps, running into precision and error accumulation issues
4. Euler method sux. Bite the bullet and code up 4th order Runge-Kutta, then you can increase your step size to a sensible value.
 
am i doing the timestep correctly? the bigger the timestep, the more acceleration applied. that doesn't seem right, the orbit shape changes based on the timestep, but it shouldn't
 
Numerical integration suffers problems with accuracy and stability. The simple method you are using is called Euler method and isn't good. As Delta said, you should try 4th order Runge-Kutta.
 
Toponium is a hadron which is the bound state of a valance top quark and a valance antitop quark. Oversimplified presentations often state that top quarks don't form hadrons, because they decay to bottom quarks extremely rapidly after they are created, leaving no time to form a hadron. And, the vast majority of the time, this is true. But, the lifetime of a top quark is only an average lifetime. Sometimes it decays faster and sometimes it decays slower. In the highly improbable case that...
I'm following this paper by Kitaev on SL(2,R) representations and I'm having a problem in the normalization of the continuous eigenfunctions (eqs. (67)-(70)), which satisfy \langle f_s | f_{s'} \rangle = \int_{0}^{1} \frac{2}{(1-u)^2} f_s(u)^* f_{s'}(u) \, du. \tag{67} The singular contribution of the integral arises at the endpoint u=1 of the integral, and in the limit u \to 1, the function f_s(u) takes on the form f_s(u) \approx a_s (1-u)^{1/2 + i s} + a_s^* (1-u)^{1/2 - i s}. \tag{70}...
Back
Top