build/pgo/js-input/access-nbody.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/build/pgo/js-input/access-nbody.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,219 @@
     1.4 +<!DOCTYPE html>
     1.5 +<head>
     1.6 +<!--
     1.7 + Copyright (C) 2007 Apple Inc.  All rights reserved.
     1.8 +
     1.9 + Redistribution and use in source and binary forms, with or without
    1.10 + modification, are permitted provided that the following conditions
    1.11 + are met:
    1.12 + 1. Redistributions of source code must retain the above copyright
    1.13 +    notice, this list of conditions and the following disclaimer.
    1.14 + 2. Redistributions in binary form must reproduce the above copyright
    1.15 +    notice, this list of conditions and the following disclaimer in the
    1.16 +    documentation and/or other materials provided with the distribution.
    1.17 +
    1.18 + THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
    1.19 + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.20 + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    1.21 + PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
    1.22 + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    1.23 + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    1.24 + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    1.25 + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
    1.26 + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    1.27 + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    1.28 + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
    1.29 +-->
    1.30 +
    1.31 +<title>SunSpider access-nbody</title>
    1.32 +
    1.33 +</head>
    1.34 +
    1.35 +<body>
    1.36 +<h3>access-nbody</h3>
    1.37 +<div id="console">
    1.38 +</div>
    1.39 +
    1.40 +<script>
    1.41 +
    1.42 +var _sunSpiderStartDate = new Date();
    1.43 +
    1.44 +/* The Great Computer Language Shootout
    1.45 +   http://shootout.alioth.debian.org/
    1.46 +   contributed by Isaac Gouy */
    1.47 +
    1.48 +var PI = 3.141592653589793;
    1.49 +var SOLAR_MASS = 4 * PI * PI;
    1.50 +var DAYS_PER_YEAR = 365.24;
    1.51 +
    1.52 +function Body(x,y,z,vx,vy,vz,mass){
    1.53 +   this.x = x;
    1.54 +   this.y = y;
    1.55 +   this.z = z;
    1.56 +   this.vx = vx;
    1.57 +   this.vy = vy;
    1.58 +   this.vz = vz;
    1.59 +   this.mass = mass;
    1.60 +}
    1.61 +
    1.62 +Body.prototype.offsetMomentum = function(px,py,pz) {
    1.63 +   this.vx = -px / SOLAR_MASS;
    1.64 +   this.vy = -py / SOLAR_MASS;
    1.65 +   this.vz = -pz / SOLAR_MASS;
    1.66 +   return this;
    1.67 +}
    1.68 +
    1.69 +function Jupiter(){
    1.70 +   return new Body(
    1.71 +      4.84143144246472090e+00,
    1.72 +      -1.16032004402742839e+00,
    1.73 +      -1.03622044471123109e-01,
    1.74 +      1.66007664274403694e-03 * DAYS_PER_YEAR,
    1.75 +      7.69901118419740425e-03 * DAYS_PER_YEAR,
    1.76 +      -6.90460016972063023e-05 * DAYS_PER_YEAR,
    1.77 +      9.54791938424326609e-04 * SOLAR_MASS
    1.78 +   );
    1.79 +}
    1.80 +
    1.81 +function Saturn(){
    1.82 +   return new Body(
    1.83 +      8.34336671824457987e+00,
    1.84 +      4.12479856412430479e+00,
    1.85 +      -4.03523417114321381e-01,
    1.86 +      -2.76742510726862411e-03 * DAYS_PER_YEAR,
    1.87 +      4.99852801234917238e-03 * DAYS_PER_YEAR,
    1.88 +      2.30417297573763929e-05 * DAYS_PER_YEAR,
    1.89 +      2.85885980666130812e-04 * SOLAR_MASS
    1.90 +   );
    1.91 +}
    1.92 +
    1.93 +function Uranus(){
    1.94 +   return new Body(
    1.95 +      1.28943695621391310e+01,
    1.96 +      -1.51111514016986312e+01,
    1.97 +      -2.23307578892655734e-01,
    1.98 +      2.96460137564761618e-03 * DAYS_PER_YEAR,
    1.99 +      2.37847173959480950e-03 * DAYS_PER_YEAR,
   1.100 +      -2.96589568540237556e-05 * DAYS_PER_YEAR,
   1.101 +      4.36624404335156298e-05 * SOLAR_MASS
   1.102 +   );
   1.103 +}
   1.104 +
   1.105 +function Neptune(){
   1.106 +   return new Body(
   1.107 +      1.53796971148509165e+01,
   1.108 +      -2.59193146099879641e+01,
   1.109 +      1.79258772950371181e-01,
   1.110 +      2.68067772490389322e-03 * DAYS_PER_YEAR,
   1.111 +      1.62824170038242295e-03 * DAYS_PER_YEAR,
   1.112 +      -9.51592254519715870e-05 * DAYS_PER_YEAR,
   1.113 +      5.15138902046611451e-05 * SOLAR_MASS
   1.114 +   );
   1.115 +}
   1.116 +
   1.117 +function Sun(){
   1.118 +   return new Body(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, SOLAR_MASS);
   1.119 +}
   1.120 +
   1.121 +
   1.122 +function NBodySystem(bodies){
   1.123 +   this.bodies = bodies;
   1.124 +   var px = 0.0;
   1.125 +   var py = 0.0;
   1.126 +   var pz = 0.0;
   1.127 +   var size = this.bodies.length;
   1.128 +   for (var i=0; i<size; i++){
   1.129 +      var b = this.bodies[i];
   1.130 +      var m = b.mass;
   1.131 +      px += b.vx * m;
   1.132 +      py += b.vy * m;
   1.133 +      pz += b.vz * m;
   1.134 +   }
   1.135 +   this.bodies[0].offsetMomentum(px,py,pz);
   1.136 +}
   1.137 +
   1.138 +NBodySystem.prototype.advance = function(dt){
   1.139 +   var dx, dy, dz, distance, mag;
   1.140 +   var size = this.bodies.length;
   1.141 +
   1.142 +   for (var i=0; i<size; i++) {
   1.143 +      var bodyi = this.bodies[i];
   1.144 +      for (var j=i+1; j<size; j++) {
   1.145 +         var bodyj = this.bodies[j];
   1.146 +         dx = bodyi.x - bodyj.x;
   1.147 +         dy = bodyi.y - bodyj.y;
   1.148 +         dz = bodyi.z - bodyj.z;
   1.149 +
   1.150 +         distance = Math.sqrt(dx*dx + dy*dy + dz*dz);
   1.151 +         mag = dt / (distance * distance * distance);
   1.152 +
   1.153 +         bodyi.vx -= dx * bodyj.mass * mag;
   1.154 +         bodyi.vy -= dy * bodyj.mass * mag;
   1.155 +         bodyi.vz -= dz * bodyj.mass * mag;
   1.156 +
   1.157 +         bodyj.vx += dx * bodyi.mass * mag;
   1.158 +         bodyj.vy += dy * bodyi.mass * mag;
   1.159 +         bodyj.vz += dz * bodyi.mass * mag;
   1.160 +      }
   1.161 +   }
   1.162 +
   1.163 +   for (var i=0; i<size; i++) {
   1.164 +      var body = this.bodies[i];
   1.165 +      body.x += dt * body.vx;
   1.166 +      body.y += dt * body.vy;
   1.167 +      body.z += dt * body.vz;
   1.168 +   }
   1.169 +}
   1.170 +
   1.171 +NBodySystem.prototype.energy = function(){
   1.172 +   var dx, dy, dz, distance;
   1.173 +   var e = 0.0;
   1.174 +   var size = this.bodies.length;
   1.175 +
   1.176 +   for (var i=0; i<size; i++) {
   1.177 +      var bodyi = this.bodies[i];
   1.178 +
   1.179 +      e += 0.5 * bodyi.mass *
   1.180 +         ( bodyi.vx * bodyi.vx
   1.181 +         + bodyi.vy * bodyi.vy
   1.182 +         + bodyi.vz * bodyi.vz );
   1.183 +
   1.184 +      for (var j=i+1; j<size; j++) {
   1.185 +         var bodyj = this.bodies[j];
   1.186 +         dx = bodyi.x - bodyj.x;
   1.187 +         dy = bodyi.y - bodyj.y;
   1.188 +         dz = bodyi.z - bodyj.z;
   1.189 +
   1.190 +         distance = Math.sqrt(dx*dx + dy*dy + dz*dz);
   1.191 +         e -= (bodyi.mass * bodyj.mass) / distance;
   1.192 +      }
   1.193 +   }
   1.194 +   return e;
   1.195 +}
   1.196 +
   1.197 +var ret;
   1.198 +
   1.199 +for ( var n = 3; n <= 24; n *= 2 ) {
   1.200 +    (function(){
   1.201 +        var bodies = new NBodySystem( Array(
   1.202 +           Sun(),Jupiter(),Saturn(),Uranus(),Neptune()
   1.203 +        ));
   1.204 +        var max = n * 100;
   1.205 +        
   1.206 +        ret = bodies.energy();
   1.207 +        for (var i=0; i<max; i++){
   1.208 +            bodies.advance(0.01);
   1.209 +        }
   1.210 +        ret = bodies.energy();
   1.211 +    })();
   1.212 +}
   1.213 +
   1.214 +
   1.215 +var _sunSpiderInterval = new Date() - _sunSpiderStartDate;
   1.216 +
   1.217 +document.getElementById("console").innerHTML = _sunSpiderInterval;
   1.218 +</script>
   1.219 +
   1.220 +
   1.221 +</body>
   1.222 +</html>

mercurial