Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixed inline functions, updated README
- Loading branch information
hartsantler
committed
Dec 10, 2013
1 parent
843f74e
commit 5831872
Showing
4 changed files
with
220 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
<html> | ||
<head> | ||
<script src="pythonscript.js"></script> | ||
|
||
<script type="text/python"> | ||
# The Computer Language Shootout Benchmarks | ||
# http://shootout.alioth.debian.org/ | ||
# | ||
# contributed by Kevin Carson | ||
|
||
from time import time | ||
from math import sqrt | ||
|
||
|
||
pythonjs.configure( javascript=True ) | ||
|
||
pi = 3.14159265358979323 | ||
solar_mass = 4 * pi * pi | ||
days_per_year = 365.24 | ||
|
||
class body: | ||
def __init__(self, x,y,z, vx,vy,vz, mass): | ||
self.x = x | ||
self.y = y | ||
self.z = z | ||
self.vx = vx | ||
self.vy = vy | ||
self.vz = vz | ||
self.mass = mass | ||
|
||
|
||
def advance(bodies, dt): | ||
for na in range( bodies.length ): | ||
a = bodies[na]; | ||
nb = na + 1 | ||
for nb in range(na+1, bodies.length): | ||
b = bodies[nb]; | ||
|
||
dx = a.x - b.x | ||
dy = a.y - b.y | ||
dz = a.z - b.z | ||
d2 = dx * dx + dy * dy + dz * dz; | ||
mag = dt / (d2 * sqrt(d2)); | ||
|
||
a.vx -= dx * b.mass * mag; | ||
b.vx += dx * a.mass * mag; | ||
|
||
a.vy -= dy * b.mass * mag; | ||
b.vy += dy * a.mass * mag; | ||
|
||
a.vz -= dz * b.mass * mag; | ||
b.vz += dz * a.mass * mag; | ||
|
||
for b in bodies: | ||
b.x += dt * b.vx | ||
b.y += dt * b.vy | ||
b.z += dt * b.vz | ||
|
||
|
||
def energy( bodies ): | ||
e = 0.0; | ||
for i in range( bodies.length ): | ||
bi = bodies[ i ] | ||
e += 0.5 * bi.mass * (bi.vx * bi.vx + bi.vy * bi.vy + bi.vz * bi.vz) | ||
|
||
for j in range( i+1, bodies.length ): | ||
bj = bodies[ j ] | ||
dx = bi.x - bj.x | ||
dy = bi.y - bj.y | ||
dz = bi.z - bj.z | ||
e -= (bi.mass * bj.mass) / sqrt(dx * dx + dy * dy + dz * dz) | ||
return e | ||
|
||
|
||
def offset_momentum(bodies): | ||
global sun | ||
px = py = pz = 0.0 | ||
|
||
for b in bodies : | ||
px += b.vx * b.mass | ||
py += b.vy * b.mass | ||
pz += b.vz * b.mass | ||
|
||
sun.vx = - px / solar_mass | ||
sun.vy = - py / solar_mass | ||
sun.vz = - pz / solar_mass | ||
|
||
sun = body(0,0,0, 0,0,0, solar_mass) | ||
|
||
jupiter = body( | ||
4.84143144246472090e+00, | ||
-1.16032004402742839e+00, | ||
-1.03622044471123109e-01, | ||
1.66007664274403694e-03 * days_per_year, | ||
7.69901118419740425e-03 * days_per_year, | ||
-6.90460016972063023e-05 * days_per_year, | ||
9.54791938424326609e-04 * solar_mass | ||
) | ||
|
||
saturn = body( | ||
8.34336671824457987e+00, | ||
4.12479856412430479e+00, | ||
-4.03523417114321381e-01, | ||
-2.76742510726862411e-03 * days_per_year, | ||
4.99852801234917238e-03 * days_per_year, | ||
2.30417297573763929e-05 * days_per_year, | ||
2.85885980666130812e-04 * solar_mass | ||
) | ||
|
||
uranus = body( | ||
1.28943695621391310e+01, | ||
-1.51111514016986312e+01, | ||
-2.23307578892655734e-01, | ||
2.96460137564761618e-03 * days_per_year, | ||
2.37847173959480950e-03 * days_per_year, | ||
-2.96589568540237556e-05 * days_per_year, | ||
4.36624404335156298e-05 * solar_mass | ||
) | ||
|
||
neptune = body( | ||
1.53796971148509165e+01, | ||
-2.59193146099879641e+01, | ||
1.79258772950371181e-01, | ||
2.68067772490389322e-03 * days_per_year, | ||
1.62824170038242295e-03 * days_per_year, | ||
-9.51592254519715870e-05 * days_per_year, | ||
5.15138902046611451e-05 * solar_mass | ||
) | ||
|
||
def test() : | ||
n = 20000 | ||
bodies = [sun, jupiter, saturn, uranus, neptune] | ||
#offset_momentum(bodies) | ||
|
||
t0 = time() | ||
start_e = energy(bodies) | ||
for i in xrange(n) : | ||
advance(bodies, 0.01) | ||
end_e = energy(bodies) | ||
t1 = time()-t0 | ||
print 'start energy:', start_e | ||
print 'end energy:', end_e | ||
return t1 | ||
|
||
def main(): | ||
times = [] | ||
for i in range(5): | ||
t = test() | ||
times.append( t ) | ||
print 'seconds:', times | ||
|
||
|
||
</script> | ||
|
||
</head> | ||
<body> | ||
<button id="mybutton" onclick="main()">click me</button> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters