#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 = False 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 from pylab import * t_max = 10 x_max = 85 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 figure(figsize=(8,8)) subplot(221) plot(x, y) plot(x[0], y[0], 'x') gca().set_aspect('equal') xlabel('x') ylabel('y') xlim(-x_max,x_max) ylim(-x_max,x_max) subplot(223) plot(x, z) plot(x[0], z[0], 'x') gca().set_aspect('equal') xlabel('x') ylabel('z') xlim(-x_max,x_max) ylim(-x_max,x_max) subplot(224) plot(y, z) plot(y[0], z[0], 'x') gca().set_aspect('equal') xlabel('z') ylabel('y') xlim(-x_max,x_max) ylim(-x_max,x_max) subplots_adjust(wspace=0.25) savefig('test_orbit.png') show()