|
import pandas as pd |
|
import numpy as np |
|
|
|
class LowLevel(): |
|
|
|
def __init__(self, j): |
|
self.j = j |
|
|
|
def initial(self): |
|
j = self.j |
|
|
|
|
|
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 |