class MidPoint(): def __init__(self, j): self.j = j def initial(self): j = self.j #init parameters h, b, n, u = 0.1, None, None, None x, y, z, px, py, pz = None, 0.1, 0.001, 0.01, None, 0.0001 xa, ya, za, pxa, pya, pza = None, None, None, None, None, None if j == 1: b = 5.0 / 4 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 10.0 py = 0.5 elif j == 2: b = 3.0 / 4 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 8.3 py = 0.6 elif j == 3: b = 3.0 / 2 x = 12.0 py = 0.4 elif j == 4: b = 7.0 / 4 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 15.0 py = 0.35 elif j == 5: b = 1.0 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 18.0 py = 0.3 elif j == 6: b = 3.0 / 5 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 20.0 py = 0.25 elif j == 7: b = 5.0 / 7 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 22.0 py = 0.22 elif j == 8: b = 2.0 x = 26.0 py = 0.2 elif j == 9: b = 0.5 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 30.0 y = 0.5 z = 0.1 pz = 0.01 elif j == 10: b = 5.0 n = b / (1 + b) ** 2 u = 1.0 / (1.0 / b + b + 2.0) x = 35.0 y = 2.0 z = 0.1 pz = 0.03 py = 0.15 xa, ya, za, pxa, pya, pza = x, y, z, px, py, pz return j, h, b, n, x, y, z, xa, ya, za, px, py, pz, pxa, pya, pza def f(self, x, y, z, px, py, pz, b): n = b / (1 + b) ** 2 u = 1 / (1 / b + b + 2) ht = px ** 2 / 2 + py ** 2 / 2 + pz ** 2 / 2 hv = -1 / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) h1pn = 1 / (2 * x ** 2 + 2 * y ** 2 + 2 * z ** 2) - (((u + 3) * (px ** 2 + py ** 2 + pz ** 2)) / 2 + (u * ( (px * x) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + (py * y) / (x ** 2 + y ** 2 + z ** 2) ** ( 1 / 2) + (pz * z) / (x ** 2 + y ** 2 + z ** 2) ** (1 / 2)) ** 2) / 2) / ( x ** 2 + y ** 2 + z ** 2) ** (1 / 2) + ((3 * u) / 8 - 1 / 8) * ( px ** 2 + py ** 2 + pz ** 2) ** 2 e = ht + hv + h1pn vnpx=px v1pnpx=4*px*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (px*(n + 3) + (n*x*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2) vpx=vnpx+v1pnpx vnpy=py v1pnpy=4*py*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (py*(n + 3) + (n*y*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2) vpy=vnpy+v1pnpy vnpz=pz v1pnpz=4*pz*((3*n)/8 - 1/8)*(px**2 + py**2 + pz**2) - (pz*(n + 3) + (n*z*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2)))/(x**2 + y**2 + z**2)**(1/2))/(x**2 + y**2 + z**2)**(1/2) vpz=vnpz+v1pnpz vnx=x/(x**2 + y**2 + z**2)**(3/2) v1pnx=(x*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*x)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((px*x**2)/(x**2 + y**2 + z**2)**(3/2) -px/(x**2 + y**2 + z**2)**(1/2) + (py*x*y)/(x**2 + y**2 + z**2)**(3/2) + (pz*x*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2) vx=vnx+v1pnx vny=y/(x**2 + y**2 + z**2)**(3/2) v1pny=(y*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*y)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((py*y**2)/(x**2 + y**2 + z**2)**(3/2) -py/(x**2 + y**2 + z**2)**(1/2) + (px*x*y)/(x**2 + y**2 + z**2)**(3/2) + (pz*y*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2) vy=vny+v1pny vnz=z/(x**2 + y**2 + z**2)**(3/2) v1pnz=(z*((n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 +y**2 + z**2)**(1/2))**2)/2 + ((n + 3)*(px**2 + py**2 + pz**2))/2))/(x**2 + y**2 + z**2)**(3/2) -(4*z)/(2*x**2 + 2*y**2 + 2*z**2)**2 + (n*((px*x)/(x**2 + y**2 + z**2)**(1/2) + (py*y)/(x**2 + y**2 + z**2)**(1/2) + (pz*z)/(x**2 + y**2 + z**2)**(1/2))*((pz*z**2)/(x**2 + y**2 + z**2)**(3/2) -pz/(x**2 + y**2 + z**2)**(1/2) + (px*x*z)/(x**2 + y**2 + z**2)**(3/2) + (py*y*z)/(x**2 + y**2 +z**2)**(3/2)))/(x**2 + y**2 + z**2)**(1/2) vz=vnz+v1pnz return vx,vy,vz,vpx,vpy,vpz,e def rejust(self, x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza): x = (x + xa) / 2 y = (y + ya) / 2 z = (z + za) / 2 px = (px + pxa) / 2 py = (py + pya) / 2 pz = (pz + pza) / 2 xa = x ya = y za = z pxa = px pya = py pza = pz return x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza def symplectic(self, h, x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza, b): vxa, vya, vza, vpx, vpy, vpz, e = self.f(xa, ya, za, px, py, pz, b) x = x + h / 2 * vpx y = y + h / 2 * vpy z = z + h / 2 * vpz pxa = pxa - h / 2 * vxa pya = pya - h / 2 * vya pza = pza - h / 2 * vza vx, vy, vz, vpxa, vpya, vpza, e = self.f(x, y, z, pxa, pya, pza, b) xa = xa + h * vpxa ya = ya + h * vpya za = za + h * vpza px = px - h * vx py = py - h * vy pz = pz - h * vz vxa, vya, vza, vpx, vpy, vpz, e = self.f(xa, ya, za, px, py, pz, b) x = x + h / 2 * vpx y = y + h / 2 * vpy z = z + h / 2 * vpz pxa = pxa - h / 2 * vxa pya = pya - h / 2 * vya pza = pza - h / 2 * vza return x, y, z, px, py, pz, xa, ya, za, pxa, pya, pza