Now integrate() can return the full trajectory and plotted in the Python; improved readablity
This commit is contained in:
parent
a2219af116
commit
a624814a0c
5 changed files with 144 additions and 106 deletions
30
plot.py
30
plot.py
|
|
@ -4,21 +4,33 @@ import ctypes, subprocess
|
|||
recompile = True
|
||||
|
||||
if recompile:
|
||||
p = subprocess.Popen('g++ -shared -o libmain.so -fPIC main.cpp -lgsl'.split())
|
||||
p = subprocess.Popen('g++ -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):
|
||||
y0 = (ctypes.c_double*6)(*y0)
|
||||
y = (ctypes.c_double*6)()
|
||||
status = libmain.integrate(y0, ctypes.c_double(t_max), y)
|
||||
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
|
||||
|
||||
gsl_success = libmain.gsl_success()
|
||||
|
||||
#t_array = linspace(plot_tmin, plot_tmax, plot_points)
|
||||
#r_array = empty_like(t_array)
|
||||
from pylab import *
|
||||
t_max = 10
|
||||
ic = [80,0,0,0,80,0]
|
||||
res = integrate(ic, t_max, step_size=1/4096)
|
||||
x, y, z, vx, vy, vz = res[0].T
|
||||
zzz = x[-1]
|
||||
plot(x,y)
|
||||
|
||||
res = integrate([10,0,0,0,200,0], 2.245)
|
||||
print(res, gsl_success)
|
||||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue