def crash_test(method=1): code=Kepler(redirection="none") code.set_method(method) smu=1.224744871391589 mu=smu**2 r0=2.787802728537455 rv0=-0.9899959571994231 alpha=0.01380749549277993 smudt=2.809925892593303 v02=(mu*(2/r0-alpha)) vx=rv0 vy=(v02-vx**2)**0.5 sun=Particle() sun.mass=mu | nbody_system.mass sun.x=0. | nbody_system.length sun.y=0. | nbody_system.length sun.z=0. | nbody_system.length sun.vx=0. | nbody_system.speed sun.vy=0. | nbody_system.speed sun.vz=0. | nbody_system.speed comet=Particle() comet.mass= 0 | nbody_system.mass comet.x=r0| nbody_system.length comet.y=0. | nbody_system.length comet.z=0. | nbody_system.length comet.vx=vx | nbody_system.speed comet.vy=vy | nbody_system.speed comet.vz=0. | nbody_system.speed tend=(smudt/smu) | nbody_system.time print tend code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0,eps0=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) print orbital_elements_from_binary(code.particles[0:2]) t1=time.time() code.evolve_model(tend) t2=time.time() print orbital_elements_from_binary(code.particles[0:2]) print code.orbiters.position a,eps=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) da=abs((a-a0)/a0) deps=abs(eps-eps0)/eps0 print da,deps print "time:",t2-t1
def test_kepler_parabolic( tend=1,method=0, sign=+1): code=Kepler(redirection="none") code.set_method(method) sun=Particle() sun.mass=1. | nbody_system.mass sun.x=0. | nbody_system.length sun.y=0. | nbody_system.length sun.z=0. | nbody_system.length sun.vx=0. | nbody_system.speed sun.vy=0. | nbody_system.speed sun.vz=0. | nbody_system.speed comet=Particle() comet.mass= 0 | nbody_system.mass comet.x=1. | nbody_system.length comet.y=0. | nbody_system.length comet.z=0. | nbody_system.length comet.vx=0. | nbody_system.speed comet.vy=(1.0 + sign * 1.0e-10)*(2*nbody_system.G*sun.mass/comet.x)**0.5 comet.vz=0. | nbody_system.speed tend=tend | nbody_system.time print tend code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0,eps0=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) print orbital_elements_from_binary(code.particles[0:2]) t1=time.time() code.evolve_model(tend) t2=time.time() print orbital_elements_from_binary(code.particles[0:2]) print code.orbiters.position a,eps=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) da=abs((a-a0)/a0) deps=abs(eps-eps0)/eps0 print da,deps print "time:",t2-t1
def t_linear(tend=1, N=100, method=0): code = Kepler(redirection="none") code.set_method(method) mass = 1. | nbody_system.mass x = 1. | nbody_system.length vx = 0 | nbody_system.speed e = 0.5 * vx**2 - nbody_system.G * mass / x semimajor_axis = -nbody_system.G * mass / 2 / e p = 2 * numpy.pi * (semimajor_axis**3 / nbody_system.G / mass)**0.5 print(semimajor_axis) print(p) tend = tend * p dt = p / N sun = Particle() sun.mass = mass sun.x = 0. | nbody_system.length sun.y = 0. | nbody_system.length sun.z = 0. | nbody_system.length sun.vx = 0. | nbody_system.speed sun.vy = 0. | nbody_system.speed sun.vz = 0. | nbody_system.speed comet = Particle() comet.mass = 0 | nbody_system.mass comet.x = x comet.y = 0. | nbody_system.length comet.z = 0. | nbody_system.length comet.vx = vx comet.vy = 0. | nbody_system.speed comet.vz = 0. | nbody_system.speed code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0, eps0 = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) print(orbital_elements_from_binary(code.particles[0:2])) #pyplot.ion() #f=pyplot.figure(figsize=(8,6)) #pyplot.show() tnow = 0 * tend time = [] xs = [] while tnow < tend: tnow += dt print(tnow, int(tnow / dt)) code.evolve_model(tnow) #f.clf() time.append(tnow / tend) xs.append(code.orbiters.x[0].number) #pyplot.plot(time,xs,"r+") #pyplot.xlim(-0.1,1.1) #pyplot.ylim(-1.1,3.1) #pyplot.draw() print(orbital_elements_from_binary(code.particles[0:2])) print(code.orbiters.position) a, eps = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) da = abs((a - a0) / a0) deps = abs(eps - eps0) / eps0 print(da, deps) input()
def test_softening(method=1): code = Kepler(redirection="none") code.set_method(method) dt = float.fromhex("0x1.67b39e372f04dp+4") mu = float.fromhex("0x1.fffffffffffdfp-3") e2 = float.fromhex("0x1.0000000000003p+0") pos1 = float.fromhex("0x1.1b76542265052p-1") pos2 = float.fromhex("0x1.0c4dbda42097cp-6") pos3 = float.fromhex("0x1.54fd66cd1e212p-3") vel1 = float.fromhex("0x1.d6ef43d58ca7ep-2") vel2 = float.fromhex("0x1.7a85379e59794p-2") vel3 = float.fromhex("-0x1.5421044d1acffp-1") sun = Particle() sun.mass = mu | nbody_system.mass sun.x = 0. | nbody_system.length sun.y = 0. | nbody_system.length sun.z = 0. | nbody_system.length sun.vx = 0. | nbody_system.speed sun.vy = 0. | nbody_system.speed sun.vz = 0. | nbody_system.speed comet = Particle() comet.mass = 0 | nbody_system.mass comet.x = pos1 | nbody_system.length comet.y = pos2 | nbody_system.length comet.z = pos3 | nbody_system.length comet.vx = vel1 | nbody_system.speed comet.vy = vel2 | nbody_system.speed comet.vz = vel3 | nbody_system.speed tend = dt | nbody_system.time print(tend, mu) code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) code.parameters.epsilon_squared = e2 | nbody_system.length**2 a0, eps0 = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) print(orbital_elements_from_binary(code.particles[0:2])) t1 = time.time() code.evolve_model(tend) t2 = time.time() print(orbital_elements_from_binary(code.particles[0:2])) print(code.orbiters.position) a, eps = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) da = abs((a - a0) / a0) deps = abs(eps - eps0) / eps0 print(da, deps) print("time:", t2 - t1)
def crash_test2(method=1): code = Kepler(redirection="none") code.set_method(method) """ mu=struct.unpack('!d','3ff7ffffffffffff'.decode('hex'))[0] dt=struct.unpack('!d','40025ab746b00001'.decode('hex'))[0] pos1=struct.unpack('!d','bfed36dc82998ed4'.decode('hex'))[0] pos2=struct.unpack('!d','40051297fc6e5256'.decode('hex'))[0] pos3=struct.unpack('!d','0000000000000000'.decode('hex'))[0] vel1=struct.unpack('!d','3fb09d8008ba33b9'.decode('hex'))[0] vel2=struct.unpack('!d','bff06788b551b81d'.decode('hex'))[0] vel3=struct.unpack('!d','0000000000000000'.decode('hex'))[0] """ mu = float.fromhex("0x1.8p+0") dt = float.fromhex("0x1.25ab746bp+1") pos1 = float.fromhex("-0x1.d36dc82998ed4p-1") pos2 = float.fromhex("0x1.51297fc6e5256p+1") pos3 = float.fromhex("0x0p+0") vel1 = float.fromhex("0x1.09d8008ba33b9p-4") vel2 = float.fromhex("-0x1.06788b551b81ep+0") vel3 = float.fromhex("0x0p+0") sun = Particle() sun.mass = mu | nbody_system.mass sun.x = 0. | nbody_system.length sun.y = 0. | nbody_system.length sun.z = 0. | nbody_system.length sun.vx = 0. | nbody_system.speed sun.vy = 0. | nbody_system.speed sun.vz = 0. | nbody_system.speed comet = Particle() comet.mass = 0 | nbody_system.mass comet.x = pos1 | nbody_system.length comet.y = pos2 | nbody_system.length comet.z = pos3 | nbody_system.length comet.vx = vel1 | nbody_system.speed comet.vy = vel2 | nbody_system.speed comet.vz = vel3 | nbody_system.speed tend = dt | nbody_system.time print(tend, mu) code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0, eps0 = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) print(orbital_elements_from_binary(code.particles[0:2])) t1 = time.time() code.evolve_model(tend) t2 = time.time() print(orbital_elements_from_binary(code.particles[0:2])) print(code.orbiters.position) a, eps = elements(sun.mass, code.orbiters.x, code.orbiters.y, code.orbiters.z, code.orbiters.vx, code.orbiters.vy, code.orbiters.vz, G=nbody_system.G) da = abs((a - a0) / a0) deps = abs(eps - eps0) / eps0 print(da, deps) print("time:", t2 - t1)
def t_linear(tend=1,N=100,method=0): code=Kepler(redirection="none") code.set_method(method) mass=1. | nbody_system.mass x=1. | nbody_system.length vx=0 | nbody_system.speed e=0.5*vx**2-nbody_system.G*mass/x semimajor_axis=-nbody_system.G*mass/2/e p=2*numpy.pi*(semimajor_axis**3/nbody_system.G/mass)**0.5 print semimajor_axis print p tend=tend*p dt=p/N sun=Particle() sun.mass=mass sun.x=0. | nbody_system.length sun.y=0. | nbody_system.length sun.z=0. | nbody_system.length sun.vx=0. | nbody_system.speed sun.vy=0. | nbody_system.speed sun.vz=0. | nbody_system.speed comet=Particle() comet.mass= 0 | nbody_system.mass comet.x=x comet.y=0. | nbody_system.length comet.z=0. | nbody_system.length comet.vx=vx comet.vy=0. | nbody_system.speed comet.vz=0. | nbody_system.speed code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0,eps0=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) print orbital_elements_from_binary(code.particles[0:2]) #pyplot.ion() #f=pyplot.figure(figsize=(8,6)) #pyplot.show() tnow=0*tend time=[] xs=[] while tnow<tend: tnow+=dt print tnow,int(tnow/dt) code.evolve_model(tnow) #f.clf() time.append(tnow/tend) xs.append(code.orbiters.x[0].number) #pyplot.plot(time,xs,"r+") #pyplot.xlim(-0.1,1.1) #pyplot.ylim(-1.1,3.1) #pyplot.draw() print orbital_elements_from_binary(code.particles[0:2]) print code.orbiters.position a,eps=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) da=abs((a-a0)/a0) deps=abs(eps-eps0)/eps0 print da,deps raw_input()
def test_softening(method=1): code=Kepler(redirection="none") code.set_method(method) dt=float.fromhex("0x1.67b39e372f04dp+4") mu=float.fromhex("0x1.fffffffffffdfp-3") e2=float.fromhex("0x1.0000000000003p+0") pos1=float.fromhex("0x1.1b76542265052p-1") pos2=float.fromhex("0x1.0c4dbda42097cp-6") pos3=float.fromhex("0x1.54fd66cd1e212p-3") vel1=float.fromhex("0x1.d6ef43d58ca7ep-2") vel2=float.fromhex("0x1.7a85379e59794p-2") vel3=float.fromhex("-0x1.5421044d1acffp-1") sun=Particle() sun.mass=mu | nbody_system.mass sun.x=0. | nbody_system.length sun.y=0. | nbody_system.length sun.z=0. | nbody_system.length sun.vx=0. | nbody_system.speed sun.vy=0. | nbody_system.speed sun.vz=0. | nbody_system.speed comet=Particle() comet.mass= 0 | nbody_system.mass comet.x=pos1 | nbody_system.length comet.y=pos2 | nbody_system.length comet.z=pos3 | nbody_system.length comet.vx=vel1 | nbody_system.speed comet.vy=vel2 | nbody_system.speed comet.vz=vel3 | nbody_system.speed tend=dt | nbody_system.time print tend,mu code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) code.parameters.epsilon_squared = e2 | nbody_system.length**2 a0,eps0=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) print orbital_elements_from_binary(code.particles[0:2]) t1=time.time() code.evolve_model(tend) t2=time.time() print orbital_elements_from_binary(code.particles[0:2]) print code.orbiters.position a,eps=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) da=abs((a-a0)/a0) deps=abs(eps-eps0)/eps0 print da,deps print "time:",t2-t1
def crash_test2(method=1): code=Kepler(redirection="none") code.set_method(method) """ mu=struct.unpack('!d','3ff7ffffffffffff'.decode('hex'))[0] dt=struct.unpack('!d','40025ab746b00001'.decode('hex'))[0] pos1=struct.unpack('!d','bfed36dc82998ed4'.decode('hex'))[0] pos2=struct.unpack('!d','40051297fc6e5256'.decode('hex'))[0] pos3=struct.unpack('!d','0000000000000000'.decode('hex'))[0] vel1=struct.unpack('!d','3fb09d8008ba33b9'.decode('hex'))[0] vel2=struct.unpack('!d','bff06788b551b81d'.decode('hex'))[0] vel3=struct.unpack('!d','0000000000000000'.decode('hex'))[0] """ mu=float.fromhex("0x1.8p+0") dt=float.fromhex("0x1.25ab746bp+1") pos1=float.fromhex("-0x1.d36dc82998ed4p-1") pos2=float.fromhex("0x1.51297fc6e5256p+1") pos3=float.fromhex("0x0p+0") vel1=float.fromhex("0x1.09d8008ba33b9p-4") vel2=float.fromhex("-0x1.06788b551b81ep+0") vel3=float.fromhex("0x0p+0") sun=Particle() sun.mass=mu | nbody_system.mass sun.x=0. | nbody_system.length sun.y=0. | nbody_system.length sun.z=0. | nbody_system.length sun.vx=0. | nbody_system.speed sun.vy=0. | nbody_system.speed sun.vz=0. | nbody_system.speed comet=Particle() comet.mass= 0 | nbody_system.mass comet.x=pos1 | nbody_system.length comet.y=pos2 | nbody_system.length comet.z=pos3 | nbody_system.length comet.vx=vel1 | nbody_system.speed comet.vy=vel2 | nbody_system.speed comet.vz=vel3 | nbody_system.speed tend=dt | nbody_system.time print tend,mu code.central_particle.add_particle(sun) code.orbiters.add_particle(comet) a0,eps0=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) print orbital_elements_from_binary(code.particles[0:2]) t1=time.time() code.evolve_model(tend) t2=time.time() print orbital_elements_from_binary(code.particles[0:2]) print code.orbiters.position a,eps=elements(sun.mass,code.orbiters.x,code.orbiters.y,code.orbiters.z, code.orbiters.vx,code.orbiters.vy,code.orbiters.vz,G=nbody_system.G) da=abs((a-a0)/a0) deps=abs(eps-eps0)/eps0 print da,deps print "time:",t2-t1