Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* nbody.us */
- final import Math.sqrt;
- final import Number.parse as num;
- final import Shell.args as args;
- var PI = 3.141592653589793;
- var SOLAR_MASS = 4 * PI * PI;
- var DAYS_PER_YEAR = 365.24;
- var sun = {
- x: 0,
- y: 0,
- z: 0,
- vx: 0,
- vy: 0,
- vz: 0,
- mass: SOLAR_MASS
- };
- function advance(bodies, nbody, dt) {
- for (var i = 0; i < nbody; i++) {
- var bi = bodies[i];
- for (var j = i + 1; j < nbody; j++) {
- var bj = bodies[j];
- var dx = bi.x - bj.x, dy = bi.y - bj.y, dz = bi.z - bj.z;
- var distance = sqrt(dx * dx + dy * dy + dz * dz);
- var mag = dt / (distance * distance * distance);
- var bim = bi.mass * mag, bjm = bj.mass * mag);
- bi.vx -= dx * bj.m;
- bi.vy -= dy * bj.m;
- bi.vz -= dz * bj.m;
- bj.vx += dx * bi.m;
- bj.vy += dy * bi.m;
- bj.vz += dz * bi.m;
- }
- }
- for (var i = 0; i < nbody; i++) {
- var bi = bodies[i];
- bi.x += dt * bi.vx;
- bi.y += dt * bi.vy;
- bi.z += dt * bi.vz;
- }
- }
- var N;
- if (args.length > 0)
- N = args[0];
- else
- N = 1000;
- var bodies = [ Sun ];
- var nbody = bodies.length;
- offsetMomentum(bodies, nbody);
- print(String.format("%0.9f\n", energy(bodies, nbody)));
- for (var i = 0; i < N; i++)
- advance(bodies, nbody, 0.01);
- print(String.format("%0.9f\n", energy(bodies, nbody)));
Add Comment
Please, Sign In to add comment