from mpmath import mp
from mpmath import mpf,mpc
import sage.libs.mpmath.all as a
mp.pretty = True
from timeit import default_timer as timer
# start=timer()
# end=timer()
Each ode is parametrized by two numbers, $\sigma$ and $\alpha$ which are functions of
The limit $j\rightarrow \infty$ is taken with $\sigma$ fixed.
def process_sigma_list():
global jval,epsilonb,sigmaval,alphaval
global data_asymp
set_precision()
initialize_ode()
for sigma_arg in sigma_list:
epsilonb=0.0
set_Jacobi_parameters()
sigmaval=myR(sigma_arg)
jval=Infinity
alphaval = myR(limit(alphaexp,j=jval))
#
analyze_monodromy()
if GOOD:
data[ode_name]['asymp'][sigmaval]=data_dict
def process_j_list():
global jval,sigmaval,alphaval
global data_j
set_precision()
initialize_ode()
set_Jacobi_parameters()
eps_string = epsilonb.str(digits=4,skip_zeroes=True)
for j_arg in j_list:
jval = j_arg
alphaval = myR(alphaexp.subs(j=jval))
sigmaval = myR(sigmaexp.subs(j=jval,epsb=myR(epsilonb)))
#
analyze_monodromy()
if GOOD:
if eps_string not in data[ode_name]['finite']:
data[ode_name]['finite'][eps_string]={}
data[ode_name]['finite'][eps_string][jval]=data_dict
def process_ode2_epsilonb_list():
global jval,epsilonb,sigmaval,alphaval,ode_decimal_precision
global data_small_j
set_precision()
initialize_ode()
jval=None
for epsilonb_arg in epsilonb_list:
epsilonb=epsilonb_arg
eps_string = epsilonb.str(digits=4,skip_zeroes=True)
set_Jacobi_parameters()
alphaval = myR(alphaexp)
sigmaval = myR(sigmaexp.subs(epsb=myR(epsilonb)))
#
analyze_monodromy()
if GOOD:
data[ode_name][eps_string]=data_dict
def analyze_monodromy():
global data_dict,GOOD
start = timer()
GOOD=True
if gauged:
construct_gauge()
mp.dps=ode_decimal_precision
create_ode()
start_ode=timer()
calculate_Mi()
end_ode=timer();
ode_time = end_ode-start_ode
mp.dps=high_decimal_precision
check_Mi()
if gauged:
check_gauge_invariance()
construct_Vphys()
construct_Mi_phys()
check_property_P()
if property_P:
calculate_frequencies()
end=timer()
total_time = end-start
eps_string = epsilonb.str(digits=4,skip_zeroes=True)
pretty_print(LE('\\epsilon ='), eps_string,LE('\\quad j ='), jval,\
LE('\\quad\\sigma ='), n(sigmaval,digits=3), LE('\\quad(\\omega/\\sigma)^{2}='), mpstr(fs_ratio),\
' (', ode_decimal_precision,', ', decimal_tol, ')', \
' ode time = ', n(ode_time,digits=5), ' other time = ', n(total_time-ode_time,digits=5) )
if GOOD:
data_dict = dictify_vars('jval','sigmaval','epsilonb','fs_ratio','Mi','Mi_phys','H','Vmat',\
'ode_decimal_precision','high_decimal_precision',\
'N','gauged','H_eigenvalues','min_H_eigenvalue','positive_frequencies','negative_frequencies',\
'MiR','Mi_eigenvalues')
def calculate_Mi():
global Mi4,Mi2,Mi
Mi4 = cP(Jac_Kp)
Mi2 = cR*Omega*Mi4.transpose()*Omega*cR*Mi4
Mi = Omega*Mi2.transpose_conj()*Omega*Mi2
def check_Mi():
global GOOD
if not aeq(mp.det(Mi),1):
GOOD=False
print ('FAIL: Mi does not have det 1')
if not aeq(Mi.transpose()*Omega*Mi,Omega):
GOOD=False
print ('FAIL: Mi is not symplectic')
def check_gauge_invariance():
global GOOD
if not aeq(Wgauge,Mi*Wgauge):
GOOD = False
print('Mi FAILS gauge invariance check')
def construct_Vphys():
global Vmat,GOOD
Proj_rem = Proj_phys
Nphys = N-1
vlist=[]
vplist=[]
for ii in range(Nphys):
v = mp.matrix(int(Crank),int(1))
v[ii]=1
vphys = Proj_rem*v
vphys = (1/mp.norm(vphys))*vphys
vpphys = mp.j*Omega*vphys
vlist.append(vphys)
vplist.append(vpphys)
Proj_rem = Proj_rem - vphys*vphys.transpose()- vpphys*vpphys.transpose()
Vmat = mp.matrix(int(Crank),int(0))
for ii in range(Nphys):
Vmat=mp.extend(Vmat,vlist[ii])
for ii in range(Nphys):
Vmat=mp.extend(Vmat,vplist[ii])
if not aeq(Vmat.transpose()*Vmat,mp.eye(int(2*Nphys))):
GOOD=False
print('FAIL Vmat^t Vmat not = 1')
def construct_Mi_phys():
global Mi_phys, Omega_phys,GOOD
if gauged:
Mi_phys = Vmat.transpose()*Mi*Vmat
Omega_phys = Vmat.transpose()*Omega*Vmat
if not aeq(mp.det(Mi_phys),1):
GOOD=False
print('FAIL Mi_phys not det 1')
if not aeq(Mi_phys.transpose()*Omega_phys*Mi_phys,Omega_phys):
GOOD=False
print('FAIL Mi_phys not symplectic')
else:
Mi_phys = Mi
Omega_phys = Omega
def check_property_P():
global H,H_eigenvalues,property_P,min_H_eigenvalue,HR,GOOD
H=Omega_phys*Mi_phys-Omega_phys
H_eigenvalues_complex,HR = mp.eig(H)
property_P = False
if not aeq(H,H.transpose_conj()):
GOOD=False
print('H FAILS to be hermitian')
return
H_eigenvalues=[]
for x in H_eigenvalues_complex:
if a0(mp.im(x)):
H_eigenvalues.append(mp.re(x))
else:
GOOD=False
print('H FAILS with non-real eigenvalue')
H_eigenvalues.sort()
min_H_eigenvalue = H_eigenvalues[0]
if min_H_eigenvalue > 0:
property_P = True
else:
GOOD=False
print('FAILS Property P')
return
def calculate_frequencies():
global Mi_phys,Mi_eigenvalues,positive_frequencies,negative_frequencies,min_frequency,MiR,GOOD,fs_ratio
if not aeq(Mi_phys.transpose_conj()*H, H*Mi_phys):
GOOD=False
print('FAIL Mi_phys is not H-hermitian')
Mi_eigenvalues_complex,MiR = mp.eig(Mi_phys)
Mi_eigenvalues=[]
for x in Mi_eigenvalues_complex:
if a0(mp.im(x)):
Mi_eigenvalues.append(mp.re(x))
else:
GOOD=False
pretty_print('Mi FAILS: non-real eigenvalue')
positive_frequencies =[]
negative_frequencies =[]
for x in Mi_eigenvalues:
if x < 0:
GOOD=False
print('FAIL: Mi_phys negative eigenvalue')
else:
freq = mp.ln(x)/(4*Jac_Kp)
if freq == 0:
GOOD=False
print('FAIL zero frequency')
if freq < 0:
negative_frequencies.append(freq)
else:
positive_frequencies.append(freq)
if(len(negative_frequencies) != len(positive_frequencies)):
GOOD=False
print('FAIL Mi_phys number of positive and negative frequencies differ')
negative_frequencies.sort(reverse=True)
positive_frequencies.sort()
for neg,pos in zip(negative_frequencies,positive_frequencies):
if not aeq(-neg,pos):
GOOD=False
print('FAIL frequencies not in +- pairs')
min_frequency = positive_frequencies[0]
fs_ratio= (min_frequency/sigmaval)^2
if N == 3:
if not aeq(positive_frequencies[0],positive_frequencies[1]):
print('DEGENERACY BROKEN')
def create_ode():
global cPlist,K0,K1,K2
K0matval = K0mat.subs(alpha=alphaval)
K2 = mpify_matrix(K2mat)
K1 = mpify_matrix(K1mat*sigmaval)
K0 = mpify_matrix(K0matval*sigmaval^2)
# create ode
cPlist = mp.odefun(y_deriv ,0,y_init,tol=ode_tol,degree=ode_degree)
def construct_gauge():
global Wgauge, Wpgauge, Proj_gauge, Proj_phys
w0matval = w0mat.subs(alpha=alphaval)
w1 = w1mat.change_ring(myC)
w0 = (w0matval * sigmaval).change_ring(myC)
zeroNvector = matrix(N,1)
W0 = mpify_matrix(block_matrix(2,1,[w0,zeroNvector]))
W1 = mpify_matrix(block_matrix(2,1,[w1,zeroNvector]))
W1p = mpify_matrix(block_matrix(2,1,[zeroNvector,w1]))
Wgauge = W0 + W1*F_at_K+ W1p*Fp_at_K
Wpgauge = mp.j*Omega*Wgauge
Proj_gauge = mp.eye(int(Crank)) - Wpgauge * mp.inverse(Wpgauge.transpose()*Wpgauge) * Wpgauge.transpose()
Proj_phys = Proj_gauge - Wgauge* mp.inverse(Wgauge.transpose()*Wgauge) * Wgauge.transpose()
def y_deriv(tau,y):
# y is a list of length 4N * Crank
# representing wr, wr', wi, wi'
#
Fi = -Jac_k * Jac_kp * mp.ellipfun('sd',u=tau,m=Jac_mp)
Kr = K2*Fi^2 - K0
Ny_4= N*Crank
Ny_2= 2* Ny_4
y1 = y[:Ny_2]
y2 = y[Ny_2:]
wr = matrixify_list(y1[:Ny_4],N,Crank)
wpr = matrixify_list(y1[Ny_4:],N,Crank)
wi = matrixify_list(y2[:Ny_4],N,Crank)
wpi = matrixify_list(y2[Ny_4:],N,Crank)
dwr = -wpi
dwi = wpr
dwpr = -Kr*wi+ Fi*(K1*wr)
dwpi = Kr*wr + Fi*(K1*wi)
dylist = listify_matrix(dwr) + listify_matrix(dwpr) + listify_matrix(dwi) + listify_matrix(dwpi)
return dylist
def cP(tau):
cPl = cPlist(tau)
cPreal = mp.matrix([cPl[nn:nn+Crank] for nn in range(0,Crank*Crank,Crank)])
cPimag = mp.matrix([cPl[nn:nn+Crank] for nn in range(Crank*Crank,Crank*Rrank,Crank)])
cP_mp = cPreal+mp.j*cPimag
return (cP_mp)
def set_ranks():
global Crank, Rrank, IN, ZN, Z2N, Omega, cR, y_init
Crank = 2*N
Rrank = 2*Crank
IN = identity_matrix(Reals,N)
ZN = matrix(Reals,N,N)
I2N = identity_matrix(Reals,2*N)
Z2N = matrix(Reals,2*N,2*N)
Omega_sage = I*block_matrix([[ZN,IN],[-IN,ZN]])
cR_sage= block_matrix([[IN,ZN],[ZN,-IN]])
Omega = mpify_matrix(Omega_sage)
cR = mpify_matrix(cR_sage)
y_init_matrix_sage = block_matrix([[I2N],[Z2N]])
y_init_matrix = mpify_matrix(y_init_matrix_sage)
y_init = listify_matrix(y_init_matrix)
def initialize_ode():
global ode,K2mat,K1mat,K0mat,K1coeff,K0coeff,alphaexp,sigmaexp,gauged,w1mat,w0mat,w0coeff,N
ode = odes[ode_name]
K2mat = ode['K2mat']
K1mat = ode['K1mat']
K0mat = ode['K0mat']
alphaexp = ode['alphaexp']
sigmaexp = ode['sigmaexp']
gauged = ode['gauged']
if gauged:
w1mat = ode['w1mat']
w0mat = ode['w0mat']
N=K2mat.nrows()
set_ranks()
def set_precision():
global binary_precision,Reals, RealNumber, myR, Complexes, ComplexNumber, myC, I, J
global mptol, ode_tol,ode_degree
# mp.dps = decimal_precision
# binary_precision = mp.prec
#
binary_precision=mp.prec
Reals = RealField(binary_precision)
RealNumber = Reals
myR = Reals
Complexes = ComplexField(binary_precision)
ComplexNumber = Complexes
myC = Complexes
I = myC(I)
# set_tolerances
mptol = mpf(10^(-decimal_tol))
ode_tol = None
ode_degree = None
# print ('mp decimal precision =',decimal_precision, ' mp binary precision = sage binary precision =', binary_precision )
def set_Jacobi_parameters():
global epsilonb,Jac_m,Jac_mp,Jac_k,Jac_kp,Jac_K,Jac_Kp,F_at_K,Fp_at_K
Jac_m = mpf(1/2) + mpf(epsilonb)^2
Jac_mp = mpf(1)-Jac_m
Jac_k = mp.sqrt(Jac_m)
Jac_kp = mp.sqrt(Jac_mp)
Jac_K = mp.ellipk(Jac_m)
Jac_Kp = mp.ellipk(Jac_mp)
F_at_K = 0.0
Fp_at_K = - Jac_k* Jac_kp
%display latex
def LE(str):
return(LatexExpr(r''+ str))
def flatten_list(L):
return [val for sublist in L for val in sublist]
def mpify_matrix(matrix_sage):
return mp.matrix(list(map(list,list(matrix_sage))))
def sagify(x):
return a.mpmath_to_sage(x,binary_precision)
def sagify_matrix(matrix_mp):
return matrix([list(map(sagify,sublist)) for sublist in matrix_mp.tolist()])
def matrixify_list(ylist,nrows,ncols):
return mp.matrix([[ylist[ii+jj] for jj in range(ncols)] for ii in range(0,nrows*ncols,ncols)])
def listify_matrix(mp_matrix):
return flatten_list(mp_matrix.tolist())
print_digits = 20
def mpstr(x):
if type(x) is list:
return list(map(mpstr,x))
return mp.nstr(x,print_digits)
dictify_vars = lambda *args: {i:eval(i) for i in args}
multby = lambda n,x: [n*item for item in x]
$\text{mptol} = $ approximate equality tolerance $z\approx 0 \equiv |z| < \text{mptol}$
$\mathbf{a0(x)}\quad\mathrm{ iff \quad x.norm()\;<\;tol}{}^{2}$
def almosteq(x,y):
return(mp.almosteq(x,y,mptol))
#
def aeq(x,y):
if isinstance(x,mp.mpf) or isinstance(x,mp.mpc):
return(almosteq(x,y))
if isinstance(x,mp.matrix):
return(almosteq(mp.norm(x-y),0))
def a0(x):
if isinstance(x,mp.mpf) or isinstance(x,mp.mpc):
return(almosteq(x,0))
if isinstance(x,mp.matrix):
return(almosteq(mp.norm(x),0))
def clean(x):
if isinstance(x,mpf):
y=x
if a0(y):
y = mpf(0)
if aeq(y,1.0):
y = mpf(1.0)
if aeq(y,-1.0):
y = mpf(-1.0)
return y
if isinstance(x,mpc):
xRe=clean(mp.re(x))
xIm=clean(mp.im(x))
if xIm == mpf(0):
return(xRe)
elif xRe == mpf(0):
return(mp.j*xIm)
else:
return (xRe + mp.j* xIm)
if type(x) is list:
return(list(map(clean,x)))
if isinstance(x,mp.matrix):
xrows=x.rows
xcols=x.cols
y = mp.matrix(xrows,xcols)
for i in range(xrows):
for j in range(xcols):
y[i,j]= clean(x[i,j])
return y
# global Crank, Rrank, IN, ZN, Z2N, Omega, cR, y_init
# global ode,K2mat,K1mat,K0mat,K1coeff,K0coeff,alphaexp,sigmaexp,gauged,w1mat,w0mat,w0coeff,N
# global alpha_asymp, K0mat_asymp, w0mat_asymp
# global binary_precision,Reals, RealNumber, myR, Complexes, ComplexNumber, myC, I, J
# global epsilonb,Jac_m,Jac_mp,Jac_k,Jac_kp,Jac_K,Jac_Kp,F_at_t,Fp_at_t
# global mptol, ode_tol,ode_degree
# global cPlist,K0,K1,K2, Wgauge, Wpgauge, Proj_gauge, Proj_phys
# global Mi4,Mi2,Mi
# global GOOD
# global Vmat,GOOD
# global Mi_phys, Omega_phys,GOOD
# global H,H_eigenvalues,property_P,min_H_eigenvalue,HR,GOOD
# global Mi_phys,Mi_eigenvalues,positive_frequencies,negative_frequencies,min_frequency,MiR,GOOD
This can be used after a run, i.e. after an ode solution is found.
def F(tau):
return(Jac_k* mp.ellipfun('cn',u=Jac_K+mp.j*tau,m=Jac_m))
def Fp(tau):
return(- Jac_k* mp.ellipfun('sn',u=Jac_K+mp.j*tau,m=Jac_m)* mp.ellipfun('dn',u=Jac_K+mp.j*tau,m=Jac_m))
def Fi(tau):
return(-Jac_k * Jac_kp * mp.ellipfun('sd',u=tau,m=Jac_mp))
def Wg(tau):
w0matval = w0mat.subs(alpha=alphaval)
w1 = w1mat.change_ring(myC)
w0 = (w0matval * w0coeff.subs(sigma=sigmaval)).change_ring(myC)
zeroNvector = matrix(N,1)
W0 = mpify_matrix(block_matrix(2,1,[w0,zeroNvector]))
W1 = mpify_matrix(block_matrix(2,1,[w1,zeroNvector]))
W1p = mpify_matrix(block_matrix(2,1,[zeroNvector,w1]))
return(W0 + W1*F(tau)+ W1p*Fp(tau))
Integrating the ode requires a certain decimal precision in the ode solver.
For each calculation below the decimal precision has been set by trial and error.
Various consistency checks were made on each calculation.
The decimal precision was raised until all the consistency checks were passed.
odes=load('odes')
high_decimal_precision=300
mp.dps= high_decimal_precision
decimal_tol = 20
data = {}
ode_name='2'
data[ode_name]={}
ode_decimal_precision = 30
epsilonb_list = [0.001,0.002,0.003,0.004,0.005,0.01,0.02,0.03,0.04,0.05,0.1,0.2,0.3,0.4,0.5,0.6,0.7071]
process_ode2_epsilonb_list()
ode_name='3j'
data[ode_name]={}
data[ode_name]['asymp']={}
data[ode_name]['finite']={}
epsilonb = 0.7071
ode_decimal_precision = 30
j_list = [3/2]
process_j_list()
ode_decimal_precision = 40
j_list = [2,5/2]
process_j_list()
ode_decimal_precision = 50
j_list = [3,7/2,4]
process_j_list()
ode_decimal_precision = 60
j_list = [9/2,5]
process_j_list()
epsilonb = 0.55
ode_decimal_precision = 30
j_list = [3/2,2]
process_j_list()
ode_decimal_precision = 40
j_list = [5/2,3,7/2]
process_j_list()
epsilonb = 0.4
ode_decimal_precision = 30
j_list = [3/2,2,5/2]
process_j_list()
ode_decimal_precision = 40
j_list = [3,7/2]
process_j_list()
epsilonb = 0.3
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3]
process_j_list()
ode_decimal_precision = 40
j_list = [7/2]
process_j_list()
epsilonb = 0.01
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2,5,10,15,20,30,40,50,60,70,80,90]
process_j_list()
ode_decimal_precision = 40
j_list = [100,120,140,160]
process_j_list()
ode_decimal_precision = 50
j_list = [180,200,230]
process_j_list()
ode_decimal_precision = 70
j_list = [260,290,320,350]
process_j_list()
ode_decimal_precision = 30
sigma_list = [0.02,0.04,.06,.08,.10,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,.6,0.65,0.7,0.75]
process_sigma_list()
ode_decimal_precision = 40
sigma_list = [0.8,0.85,0.9,0.95,1,1.2]
process_sigma_list()
ode_decimal_precision = 50
sigma_list = [1.4,1.6,1.8]
process_sigma_list()
ode_decimal_precision = 60
sigma_list = [2.0,2.2,2.4,2.6]
process_sigma_list()
ode_decimal_precision = 70
sigma_list = [2.8,3.0]
process_sigma_list()
ode_name='2j'
data[ode_name]={}
data[ode_name]['asymp']={}
data[ode_name]['finite']={}
epsilonb = 0.7071
ode_decimal_precision = 30
j_list = [3/2]
process_j_list()
ode_decimal_precision = 40
j_list = [2,5/2]
process_j_list()
ode_decimal_precision = 50
j_list = [3,7/2,4]
process_j_list()
ode_decimal_precision = 60
j_list = [9/2,5]
process_j_list()
ode_decimal_precision = 70
j_list = [11/2]
process_j_list()
epsilonb = 0.6
ode_decimal_precision = 30
j_list = [3/2]
process_j_list()
ode_decimal_precision = 40
j_list = [2,5/2,3]
process_j_list()
ode_decimal_precision = 50
j_list = [7/2]
process_j_list()
ode_decimal_precision = 50
j_list = [4]
process_j_list()
epsilonb = 0.5
ode_decimal_precision = 30
j_list = [3/2,2]
process_j_list()
ode_decimal_precision = 40
j_list = [5/2,3,7/2]
process_j_list()
ode_decimal_precision = 50
j_list = [9/2]
process_j_list()
ode_decimal_precision = 60
j_list = [6]
process_j_list()
ode_decimal_precision = 70
j_list = [8]
process_j_list()
epsilonb = 0.4
ode_decimal_precision = 30
j_list = [3/2,2,5/2]
process_j_list()
ode_decimal_precision = 40
j_list = [3,7/2,9/2]
process_j_list()
ode_decimal_precision = 50
j_list = [11/2]
process_j_list()
epsilonb = 0.325
ode_decimal_precision = 30
j_list = [3/2,2,5/2]
process_j_list()
ode_decimal_precision = 40
j_list = [3,7/2]
process_j_list()
epsilonb = 0.25
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]
process_j_list()
ode_decimal_precision = 40
j_list = [9/2,13/2]
process_j_list()
ode_decimal_precision = 50
j_list = [8,10]
process_j_list()
ode_decimal_precision = 70
j_list = [23/2,13,29/2]
process_j_list()
ode_decimal_precision = 70
j_list = [16]
process_j_list()
epsilonb = 0.2
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]
process_j_list()
epsilonb = 0.15
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]
process_j_list()
epsilonb = 0.125
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]
process_j_list()
epsilonb = 0.1
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2,4]
process_j_list()
epsilonb = 0.08
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2,4]
process_j_list()
epsilonb = 0.01
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]+[m/2 for m in range(12,32,5)]+[m/2 for m in range(32,122,10)]
process_j_list()
j_list = [m/2 for m in range(122,182,20)]
process_j_list()
ode_decimal_precision = 40
j_list = [m/2 for m in range(182,342,20)]
process_j_list()
ode_decimal_precision = 50
j_list = [m/2 for m in range(342,502,40)]
process_j_list()
ode_decimal_precision = 60
j_list = [m/2 for m in range(500,660,80)]
process_j_list()
ode_decimal_precision = 80
j_list = [m/2 for m in range(660,820,80)]
process_j_list()
ode_decimal_precision = 30
sigma_list = [0.02,0.04,.06,.08,.10,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,.6,0.65,0.7,0.75,0.8,0.85,0.9]
process_sigma_list()
ode_decimal_precision = 40
sigma_list = [0.95,1,1.15,1.3,1.45,1.6]
process_sigma_list()
ode_decimal_precision = 50
sigma_list = [1.85,2.1]
process_sigma_list()
ode_decimal_precision = 60
sigma_list = [2.35,2.65,3.0]
process_sigma_list()
ode_decimal_precision = 70
sigma_list = [3.35,3.7]
process_sigma_list()
ode_decimal_precision = 80
sigma_list = [4.0]
process_sigma_list()
ode_name='1j'
data[ode_name]={}
data[ode_name]['asymp']={}
data[ode_name]['finite']={}
data['1j']['finite']={}
epsilonb = 0.7071
ode_decimal_precision = 40
j_list = [3/2]
process_j_list()
ode_decimal_precision = 40
j_list = [2,5/2]
process_j_list()
ode_decimal_precision = 50
j_list = [3,7/2,4]
process_j_list()
epsilonb = 0.5
ode_decimal_precision = 30
j_list = [3/2]
process_j_list()
ode_decimal_precision = 40
j_list = [2,5/2,3,7/2]
process_j_list()
epsilonb = 0.35
ode_decimal_precision = 30
j_list = [3/2,2,5/2]
process_j_list()
ode_decimal_precision = 40
j_list = [3,7/2]
process_j_list()
epsilonb = 0.25
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]
process_j_list()
epsilonb = 0.15
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2,4]
process_j_list()
epsilonb = 0.01
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]+[m/2 for m in range(12,32,5)]+[m/2 for m in range(32,122,10)]
process_j_list()
j_list = [m/2 for m in range(122,182,20)]
process_j_list()
ode_decimal_precision = 40
j_list = [m/2 for m in range(182,342,20)]
process_j_list()
ode_decimal_precision = 50
j_list = [m/2 for m in range(342,502,40)]
process_j_list()
ode_decimal_precision = 60
j_list = [m/2 for m in range(500,660,80)]
process_j_list()
ode_name='1j'
epsilonb = 0.001
ode_decimal_precision = 30
j_list = [3/2,2,5/2,3,7/2]+[m/2 for m in range(12,32,5)]+[m/2 for m in range(32,122,10)]
process_j_list()
ode_decimal_precision = 30
sigma_list = [0.001,0.01,0.02,0.04,.06,.08,.10,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,.6,0.7,0.8]
process_sigma_list()
ode_decimal_precision = 40
sigma_list = [0.9,1.00,1.15,1.30,1.45,1.6]
process_sigma_list()
ode_decimal_precision = 50
sigma_list = [1.85,2.10,2.35]
process_sigma_list()
ode_decimal_precision = 60
sigma_list = [2.65,3.0]
process_sigma_list()
ode_name='3j'
plot_data_j ={}
for eps_string,eps_data in data[ode_name]['finite'].items():
if eps_string not in plot_data_j:
plot_data_j[eps_string]=[]
for jval,item in eps_data.items():
sigmaval = item['sigmaval']
pval = sqrt(6)*sigmaval
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_j[eps_string].append((p,fs_ratio))
epsvals= list(plot_data_j.keys())
epsvals.sort()
print(epsvals)
['0.01', '0.3', '0.4', '0.55', '0.7071']
p=\
list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.3'],legend_label=r'$\epsilon=.3$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.4'],legend_label=r'$\epsilon=.4$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.55'],legend_label=r'$\epsilon=.55$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.7071'],legend_label=r'$\epsilon=.7071$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+text(r"${\bf ode~3_j}$",(3,.6),fontsize=18,color='black')\
+line([(0,1),(7.2,1)],linestyle=":")
p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.axes_labels_size(1.5)
p.show(ticks_integer=True,ymin=0.3)
p.save('3j_finite.pdf',dpi=600,ticks_integer=True,ymin=0.3)
ode_name='3j'
plot_data_asymp =[]
for key,item in data[ode_name]['asymp'].items():
sigmaval = item['sigmaval']
pval = sqrt(6)*sigmaval
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_asymp.append((p,fs_ratio))
p=\
list_plot(plot_data_asymp,legend_label=r'$\epsilon=0$',marker=r'$\circ$',size=10)\
+list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',size=8)\
+text(r"${\bf ode~3_j}$",(3,.6),fontsize=18,color='black')\
+line([(0,1),(7.5,1)],linestyle=":")
p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.axes_labels_size(1.5)
p.show(ticks_integer=True,ymin=0.3)
p.save('3j_asymp.pdf',dpi=600,ticks_integer=True,ymin=0.3)
ode_name='2j'
plot_data_j ={}
for eps_string,eps_data in data[ode_name]['finite'].items():
if eps_string not in plot_data_j:
plot_data_j[eps_string]=[]
for jval,item in eps_data.items():
sigmaval = item['sigmaval']
pval = 2*sigmaval
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_j[eps_string].append((p,fs_ratio))
epsvals= list(plot_data_j.keys())
epsvals.sort()
print(epsvals)
['0.01', '0.08', '0.1', '0.125', '0.15', '0.2', '0.25', '0.325', '0.4', '0.5', '0.6', '0.7071']
p=\
list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.08'],legend_label=r'$\epsilon=.08$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.1'],legend_label=r'$\epsilon=.1$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.125'],legend_label=r'$\epsilon=.125$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.15'],legend_label=r'$\epsilon=.15$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.2'],legend_label=r'$\epsilon=.2$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.25'],legend_label=r'$\epsilon=.25$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.325'],legend_label=r'$\epsilon=.325$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.4'],legend_label=r'$\epsilon=.4$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.5'],legend_label=r'$\epsilon=.5$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.6'],legend_label=r'$\epsilon=.6$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.7071'],legend_label=r'$\epsilon=.7071$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+text(r"${\bf ode~2_j}$",(4.5,.85),fontsize=18,color='black')\
+line([(0,1),(8,1)],linestyle=":")
p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.axes_labels_size(1.5)
p.show(ticks_integer=True,xmin=0)
p.save('2j_finite.pdf',dpi=600,ticks_integer=True,xmin=0)
ode_name='2j'
plot_data_asymp =[]
for key,item in data[ode_name]['asymp'].items():
sigmaval = item['sigmaval']
pval = 2*sigmaval
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_asymp.append((p,fs_ratio))
p=list_plot(plot_data_asymp,legend_label=r'$\epsilon=0$',marker=r'$\circ$',size=10)\
+list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',size=8)\
+text(r"${\bf ode~2_j}$",(4.5,.85),fontsize=18,color='black')\
+line([(0,1),(8.0,1)],linestyle=":")
p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.axes_labels_size(1.5)
p.show(ticks_integer=True)
p.save('2j_asymp.pdf',dpi=600,ticks_integer=True)
ode_name='1j'
plot_data_j ={}
for eps_string,eps_data in data[ode_name]['finite'].items():
if eps_string not in plot_data_j:
plot_data_j[eps_string]=[]
for jval,item in eps_data.items():
sigmaval = item['sigmaval']
epsval = item['epsilonb']
pval = sqrt(4*sigmaval^2+3*epsval^2)
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_j[eps_string].append((p,fs_ratio))
epsvals= list(plot_data_j.keys())
epsvals.sort()
print(epsvals)
['0.001', '0.01', '0.15', '0.25', '0.35', '0.5', '0.7071']
p=\
list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.15'],legend_label=r'$\epsilon=.15$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.25'],legend_label=r'$\epsilon=.25$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.35'],legend_label=r'$\epsilon=.35$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.5'],legend_label=r'$\epsilon=.5$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+list_plot(plot_data_j['0.7071'],legend_label=r'$\epsilon=.7071$',marker='.',markersize=2,plotjoined=True,linestyle=":",thickness=0.5)\
+text(r"${\bf ode~1_j}$",(2.5,1.5),fontsize=18,color='black')
p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.axes_labels_size(1.5)
p.show(ticks_integer=True)
p.save('1j_finite.pdf',dpi=600,ticks_integer=True)
ode_name='1j'
plot_data_asymp =[]
for key,item in data[ode_name]['asymp'].items():
sigmaval = item['sigmaval']
pval = 2*sigmaval
# pval = sqrt(4*sigmaval^2+3*epsval^2)
p = RDF(pval)
fs_ratio = RDF(item['fs_ratio']*sigmaval^2/pval^2)
plot_data_asymp.append((p,fs_ratio))
p=list_plot(plot_data_asymp,legend_label=r'$\epsilon=0$',marker=r'$\circ$',size=10)\
+list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='.',size=8)\
+text(r"${\bf ode~1_j}$",(2.5,1.5),fontsize=18,color='black')\
+line([(0,1),(6.0,1)],linestyle=":")
#p.set_legend_options(loc='center right',markerscale=1,numpoints=1,shadow=False)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.set_legend_options(loc='center right',markerscale=1.5,shadow=False)
p.axes_labels_size(1.5)
p.show(ticks_integer=True,ymin=1)
p.save('1j_asymp.pdf',dpi=600,ticks_integer=True,ymin=1)
p=list_plot(plot_data_asymp,legend_label=r'$\epsilon=0$',marker=r'$\circ$',size=24)\
+list_plot(plot_data_j['0.001'],legend_label=r'$\epsilon=.001$',marker='.',markersize=3,plotjoined=True,thickness=0.5)\
+text(r"${\bf ode~1_j}$",(0.1,1.8),fontsize=18,color='black')\
+list_plot(plot_data_j['0.01'],legend_label=r'$\epsilon=.01$',marker='x',markersize=3,plotjoined=True,thickness=0.5)
p.axes_labels(['$p$','$\\omega_{\\min}^2/p^2$'])
p.set_legend_options(shadow=False)
#p.set_legend_options(loc='center right',markerscale=1.5,shadow=False)
p.axes_labels_size(1.5)
p.show(xmax=.2,ymin=1.7)
p.save('1j_smallp.pdf',dpi=600,xmax=.2,ymin=1.7)