In [1]:
import numpy as np
import numpy.linalg as lg
import scipy.linalg as sg

In [2]:
#a=np.array([[0.159758,-0.000103486,-0.0270744,0.0281025],[-0.000103484,0.159758,0.0281025,-0.0270744],[-0.0270744,0.0281025,0.293894,-8.66569e-05],[0.0281025,-0.0270744,-8.66584e-05,0.293894]])

In [3]:
a=np.array([[0.15987,0.000574572,-0.0152401,0.0399866],[0.000574574,0.15987,0.0399866,-0.0152401],[-0.0152401,0.0399866,0.293519,0.00061436],[0.0399866,-0.0152401,0.00061436,0.293519]])

In [4]:
values,vectors=lg.eig(a)
print values
(values[1]-values[0])*13.6/2.0


[ 0.13942337  0.1560109   0.3127767   0.29856703]
Out[4]:
0.11279522468014359

In [5]:
print vectors


[[-0.66534451  0.69602395 -0.23940892  0.12470208]
 [ 0.66534459  0.69602402  0.23940891  0.12470208]
 [-0.23940892 -0.1247021   0.66534455  0.69602398]
 [ 0.23940891 -0.12470207 -0.66534455  0.69602399]]

In [6]:
#V_eff

In [7]:
Veff=a[1,0]-a[2,0]*a[2,1]/(a[2,2]-0.5*(a[0,0]+a[1,1]))-a[3,0]*a[3,1]/(a[3,3]-0.5*(a[0,0]+a[1,1]))

In [8]:
print Veff*13.6


0.131838135411

In [9]:
J=np.array([[0.15987,0.000574569,-0.0152401,0.0399866],[0.000574574,0.15987,0.0399866,-0.0152401],[-0.0152401,0.0399866,0.293519,0.00061436],[0.0399866,-0.0152401,0.00061436,0.293519]])

In [10]:
S=np.array([[0.999015,0.00295997,0.0517151,0.0528857],[0.00295997,0.999015,0.0528857,0.0517151],[0.0517151,0.0528857,0.999058,0.00293647],[0.0528857,0.0517151,0.00293647,0.999058]])

In [11]:
print J
print S


[[ 0.15987     0.00057457 -0.0152401   0.0399866 ]
 [ 0.00057457  0.15987     0.0399866  -0.0152401 ]
 [-0.0152401   0.0399866   0.293519    0.00061436]
 [ 0.0399866  -0.0152401   0.00061436  0.293519  ]]
[[ 0.999015    0.00295997  0.0517151   0.0528857 ]
 [ 0.00295997  0.999015    0.0528857   0.0517151 ]
 [ 0.0517151   0.0528857   0.999058    0.00293647]
 [ 0.0528857   0.0517151   0.00293647  0.999058  ]]

In [12]:
eigenvals=sg.eigvals(J,b=S).real
print eigenvals


[ 0.1400793   0.1596466   0.31376243  0.29381493]

In [13]:
Stilde=S-np.identity(4)

In [14]:
print Stilde


[[-0.000985    0.00295997  0.0517151   0.0528857 ]
 [ 0.00295997 -0.000985    0.0528857   0.0517151 ]
 [ 0.0517151   0.0528857  -0.000942    0.00293647]
 [ 0.0528857   0.0517151   0.00293647 -0.000942  ]]

In [15]:
def lowdintrans(J,S):
    values,vectors=lg.eigh(S) 
    print values
    sqrtS=np.zeros_like(S)+np.diag(np.sqrt(1/values))
    Sm1=np.dot(np.dot(vectors,sqrtS),vectors.T)
    Jeff=np.dot(np.dot(Sm1,J),Sm1)
    return Jeff

In [16]:
Jeff=lowdintrans(J,S)
#Jeff=J
print Jeff


[ 0.89738392  0.99491721  0.99725935  1.10658552]
[[  1.59757961e-01  -1.03483557e-04  -2.70743479e-02   2.81025538e-02]
 [ -1.03478532e-04   1.59757961e-01   2.81025537e-02  -2.70743480e-02]
 [ -2.70743480e-02   2.81025538e-02   2.93893668e-01  -8.66207618e-05]
 [  2.81025537e-02  -2.70743479e-02  -8.66207619e-05   2.93893668e-01]]

In [17]:
print Jeff
Jeff=0.5*(Jeff+Jeff.T)


[[  1.59757961e-01  -1.03483557e-04  -2.70743479e-02   2.81025538e-02]
 [ -1.03478532e-04   1.59757961e-01   2.81025537e-02  -2.70743480e-02]
 [ -2.70743480e-02   2.81025538e-02   2.93893668e-01  -8.66207618e-05]
 [  2.81025537e-02  -2.70743479e-02  -8.66207619e-05   2.93893668e-01]]

In [18]:
e1,vec1=lg.eig(Jeff[:2,:2])
e2,vec2=lg.eig(Jeff[2:,2:])
print e1, e2


[ 0.15986144  0.15965448] [ 0.29380705  0.29398029]

In [19]:
T=np.zeros((4,4))
T[:2,:2]=vec1
T[2:,2:]=vec2
print T
JP=np.dot(T.T,np.dot(Jeff,T))
print JP


[[ 0.70710678  0.70710678  0.          0.        ]
 [-0.70710678  0.70710678  0.          0.        ]
 [ 0.          0.         -0.70710678  0.70710678]
 [ 0.          0.         -0.70710678 -0.70710678]]
[[  1.59861442e-01   0.00000000e+00   4.33637501e-14  -5.51769017e-02]
 [  0.00000000e+00   1.59654480e-01  -1.02820582e-03   3.96731259e-14]
 [  4.33680869e-14  -1.02820582e-03   2.93807047e-01  -2.77555756e-17]
 [ -5.51769017e-02   3.96749690e-14   0.00000000e+00   2.93980289e-01]]

In [20]:
ep=np.zeros((2,2))
ep[0,0]=JP[0,0]+JP[0,3]*JP[3,0]/(JP[0,0]-JP[3,3])+JP[0,2]*JP[2,0]/(JP[0,0]-JP[2,2])
ep[1,1]=JP[1,1]+JP[1,3]*JP[3,1]/(JP[1,1]-JP[3,3])+JP[1,2]*JP[2,1]/(JP[1,1]-JP[2,2])

In [21]:
print ep
Jfinal=np.dot(vec1,np.dot(ep,vec1.T))


[[ 0.1371615  0.       ]
 [ 0.         0.1596466]]

In [22]:
print Jfinal


[[ 0.14840405  0.01124255]
 [ 0.01124255  0.14840405]]

In [23]:
print Jfinal[0,1]*13.6


0.152898697611

In [24]:
e,vec=lg.eig(Jeff)

In [25]:
print e
print vec
subT=vec[:2,:2]/np.sqrt(np.sum(vec[:2,:2]**2,axis=0))
print subT


[ 0.1400793   0.1596466   0.31376243  0.29381493]
[[ 0.66562081  0.70708602 -0.23863976  0.00541911]
 [-0.66562081  0.70708602  0.23863976  0.00541911]
 [ 0.23863976 -0.00541911  0.66562081  0.70708602]
 [-0.23863976 -0.00541911 -0.66562081  0.70708602]]
[[ 0.70710678  0.70710678]
 [-0.70710678  0.70710678]]

In [26]:
esub=np.diag(e[:2])
print esub


[[ 0.1400793  0.       ]
 [ 0.         0.1596466]]

In [27]:
Jfinal2=np.dot(subT,np.dot(esub,subT.T))
print Jfinal2


[[ 0.14986295  0.00978365]
 [ 0.00978365  0.14986295]]

In [28]:
print Jfinal2[0,1]*13.6


0.133057609777

In [29]:
(0.138920995861-0.136391729)/0.138920995861


Out[29]:
0.0182065125960566

In [30]:
q


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-30-c3be117041a1> in <module>()
----> 1 q

NameError: name 'q' is not defined

In [ ]: