48 lines
No EOL
1.4 KiB
Python
48 lines
No EOL
1.4 KiB
Python
#pylint: disable=W0401,W0614,W0622
|
|
#All pylint codes: http://pylint.pycqa.org/en/latest/technical_reference/features.html
|
|
|
|
import numpy as np
|
|
import ctypes, subprocess
|
|
|
|
recompile = True
|
|
|
|
if recompile:
|
|
p = subprocess.Popen('g++ -I/home/meiron/boost_1_72_0 -shared -o libmain.so -fPIC loadtxt.cpp main.cpp -lgsl'.split())
|
|
p.wait()
|
|
if p.returncode != 0: raise RuntimeError(p.returncode)
|
|
|
|
libmain = ctypes.CDLL('./libmain.so')
|
|
def integrate(y0, t_max, step_size=None):
|
|
y0 = (ctypes.c_double*6)(*y0)
|
|
if step_size is None: step_size = t_max
|
|
size = int(t_max // step_size) + 1
|
|
y = (ctypes.c_double*size*6)()
|
|
status = libmain.integrate(y0, ctypes.c_double(t_max), ctypes.c_double(step_size), y)
|
|
y = np.array(y).reshape(size,6)
|
|
return np.array(y), status
|
|
|
|
def integrate_boost(y0, t_max, step_size=None):
|
|
y0 = (ctypes.c_double*6)(*y0)
|
|
if step_size is None: step_size = t_max
|
|
size = int(t_max // step_size) + 1
|
|
y = (ctypes.c_double*size*6)()
|
|
libmain.integrate_boost(y0, ctypes.c_double(t_max), ctypes.c_double(step_size), y)
|
|
y = np.array(y).reshape(size,6)
|
|
return np.array(y), 0
|
|
|
|
#gsl_success = libmain.gsl_success()
|
|
|
|
from pylab import *
|
|
t_max = 10
|
|
ic = [80,0,0,0,80,0]
|
|
res = integrate(ic, t_max, step_size=32/4096)
|
|
x, y, z, vx, vy, vz = res[0].T
|
|
zzz = x[-1]
|
|
plot(x,y)
|
|
|
|
res = integrate(ic, t_max)
|
|
x, y, z, vx, vy, vz = res[0].T
|
|
plot(x,y,'o')
|
|
print(zzz - x[-1])
|
|
gca().set_aspect('equal')
|
|
show() |