Guest User

Untitled

a guest
Jun 22nd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. /* nbody.us */
  2.  
  3. final import Math.sqrt;
  4. final import Number.parse as num;
  5. final import Shell.args as args;
  6.  
  7. var PI = 3.141592653589793;
  8. var SOLAR_MASS = 4 * PI * PI;
  9. var DAYS_PER_YEAR = 365.24;
  10.  
  11. var sun = {
  12. x: 0,
  13. y: 0,
  14. z: 0,
  15. vx: 0,
  16. vy: 0,
  17. vz: 0,
  18. mass: SOLAR_MASS
  19. };
  20.  
  21. function advance(bodies, nbody, dt) {
  22. for (var i = 0; i < nbody; i++) {
  23. var bi = bodies[i];
  24. for (var j = i + 1; j < nbody; j++) {
  25. var bj = bodies[j];
  26. var dx = bi.x - bj.x, dy = bi.y - bj.y, dz = bi.z - bj.z;
  27. var distance = sqrt(dx * dx + dy * dy + dz * dz);
  28. var mag = dt / (distance * distance * distance);
  29. var bim = bi.mass * mag, bjm = bj.mass * mag);
  30. bi.vx -= dx * bj.m;
  31. bi.vy -= dy * bj.m;
  32. bi.vz -= dz * bj.m;
  33. bj.vx += dx * bi.m;
  34. bj.vy += dy * bi.m;
  35. bj.vz += dz * bi.m;
  36. }
  37. }
  38. for (var i = 0; i < nbody; i++) {
  39. var bi = bodies[i];
  40. bi.x += dt * bi.vx;
  41. bi.y += dt * bi.vy;
  42. bi.z += dt * bi.vz;
  43. }
  44. }
  45.  
  46. var N;
  47. if (args.length > 0)
  48. N = args[0];
  49. else
  50. N = 1000;
  51.  
  52. var bodies = [ Sun ];
  53. var nbody = bodies.length;
  54.  
  55. offsetMomentum(bodies, nbody);
  56.  
  57. print(String.format("%0.9f\n", energy(bodies, nbody)));
  58. for (var i = 0; i < N; i++)
  59. advance(bodies, nbody, 0.01);
  60. print(String.format("%0.9f\n", energy(bodies, nbody)));
Add Comment
Please, Sign In to add comment