import math
# This first part is just an initialisation
# Edit below 
M_={}
Z_={}
Y_={}
K_={}
VWs_={}
LJs_={}
BMs_={}
BK_L={}
SM_L={}
BK_T={}
SM_T={}
BK_L['Cu_G0']={}
SM_L['Cu_G0']={}
BK_T['Cu_G0']={}
SM_T['Cu_G0']={}
SM_L['Cu_G0']['Cu_G0']={}
SM_T['Cu_G0']['Cu_G0']={}
SM_L['Cu_G0']['O_G0']={}
SM_T['Cu_G0']['O_G0']={}
SM_L['Cu_G0']['O_G1']={}
SM_T['Cu_G0']['O_G1']={}
SM_L['Cu_G0']['Nd_G0']={}
SM_T['Cu_G0']['Nd_G0']={}
BK_L['O_G0']={}
SM_L['O_G0']={}
BK_T['O_G0']={}
SM_T['O_G0']={}
SM_L['O_G0']['Cu_G0']={}
SM_T['O_G0']['Cu_G0']={}
SM_L['O_G0']['O_G0']={}
SM_T['O_G0']['O_G0']={}
SM_L['O_G0']['O_G1']={}
SM_T['O_G0']['O_G1']={}
SM_L['O_G0']['Nd_G0']={}
SM_T['O_G0']['Nd_G0']={}
BK_L['O_G1']={}
SM_L['O_G1']={}
BK_T['O_G1']={}
SM_T['O_G1']={}
SM_L['O_G1']['Cu_G0']={}
SM_T['O_G1']['Cu_G0']={}
SM_L['O_G1']['O_G0']={}
SM_T['O_G1']['O_G0']={}
SM_L['O_G1']['O_G1']={}
SM_T['O_G1']['O_G1']={}
SM_L['O_G1']['Nd_G0']={}
SM_T['O_G1']['Nd_G0']={}
BK_L['Nd_G0']={}
SM_L['Nd_G0']={}
BK_T['Nd_G0']={}
SM_T['Nd_G0']={}
SM_L['Nd_G0']['Cu_G0']={}
SM_T['Nd_G0']['Cu_G0']={}
SM_L['Nd_G0']['O_G0']={}
SM_T['Nd_G0']['O_G0']={}
SM_L['Nd_G0']['O_G1']={}
SM_T['Nd_G0']['O_G1']={}
SM_L['Nd_G0']['Nd_G0']={}
SM_T['Nd_G0']['Nd_G0']={}
# HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
# Edit the following part
# Masses : M  (g)
_mass_unit = 1.0 / 6.0221367e23  

M_['Cu_G0']= 63.546  * _mass_unit
M_['O_G0'] = 16      * _mass_unit
M_['O_G1'] = 16      * _mass_unit
M_['Nd_G0']= 144.24  * _mass_unit

# Coulomb interaction : Z(statcoulomb) 
e_to_stat= 1.0/2081923155.64

#take into account the A  to cm  factor
Zfactor= e_to_stat *1.0e12
 
Z_['Cu_G0']= 1.64 *Zfactor
Z_['O_G0'] =-1.56 *Zfactor
Z_['O_G1'] =-1.56 *Zfactor
Z_['Nd_G0']= 2.3  *Zfactor

# Shells Model : shell charge 
Y_['Cu_G0'] = 3.*Zfactor
Y_['O_G0']  =-3.*Zfactor
Y_['O_G1']  =-3.*Zfactor
Y_['Nd_G0'] =-4.*Zfactor

# Shells Model : polarizability  
Nm_dycm = 1.0e3

K_['Cu_G0']=2000.0 *Nm_dycm
K_['O_G0'] =1800.0 *Nm_dycm
K_['O_G1'] =1800.0 *Nm_dycm
K_['Nd_G0']=8000.0 *Nm_dycm

# Van der Walls  : sigma  
VW_V0=0.0
VWs_['Cu_G0'] =1.0
VWs_['O_G0']  =1.0
VWs_['O_G1']  =1.0
VWs_['Nd_G0'] =1.0

# Lenard Jones   : sigma  
LJ_V0=0.0
LJs_['Cu_G0']=1.0
LJs_['O_G0']=1.0
LJs_['O_G1']=1.0
LJs_['Nd_G0']=1.0

# Born-Mayer  : sigma  
BM_V0=0.0
BMs_['Cu_G0']=1.0
BMs_['O_G0']=1.0
BMs_['O_G1']=1.0
BMs_['Nd_G0']=1.0
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'Cu_G0' and 'Cu_G0' 
# Shell N0 going from 3.950000 to 3.950000  like Cu1 in 0 and Cu1 in -1 0 0 
# Shell N1 going from 5.586144 to 5.586144  like Cu1 in 0 and Cu1 in -1 1 0 

BK_L['Cu_G0']['Cu_G0']=[]
BK_T['Cu_G0']['Cu_G0']=[]
SM_L['Cu_G0']['Cu_G0']['SS']=[]
SM_T['Cu_G0']['Cu_G0']['SS']=[]
SM_L['Cu_G0']['Cu_G0']['SC']=[]
SM_T['Cu_G0']['Cu_G0']['SC']=[]
SM_L['Cu_G0']['Cu_G0']['CS']=[]
SM_T['Cu_G0']['Cu_G0']['CS']=[]


ev_erg = 1.602e-12
A_cm   = 1.0e-8

class BMpar:
  ZZ=0.0

def bm_L(x, BMpar=BMpar):
#  print x
#  print "ZL", BMpar.ZZ*1.0e-8/x/x/x *2.0
#  print "BML=", BMpar.A*math.exp(-x/BMpar.R)/BMpar.R  /BMpar.R
  return    BMpar.A*math.exp(-x/BMpar.R)/BMpar.R  /BMpar.R


def bm_T(x, BMpar=BMpar):
#  print x
#  print "ZT", -BMpar.ZZ*1.0e-8/x/x/x 
#  print "BMT=", - BMpar.A*math.exp(-x/BMpar.R)/BMpar.R  /x
  return  - BMpar.A*math.exp(-x/BMpar.R)/BMpar.R  /x


class VWpar:
   pass

VWpar.a=100 *ev_erg * 1.0e-48




def vw_L(x, VWpar=VWpar):
  return    -42*VWpar.a/(x*x*x* x*x*x) /x/x
           

def vw_T(x, VWpar=VWpar):
  return      6*VWpar.a/(x*x*x* x*x*x) /x        /x


def vwpbm_L(x,f1=bm_L, f2=vw_L):
  return f1(x)+f2(x)

def vwpbm_T(x,f1=bm_T, f2=vw_T):
  return f1(x)+f2(x)

# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'Cu_G0' and 'O_G0' 
# Shell N0 going from 1.975000 to 1.975000  like Cu1 in 0 and O5 in 0 0 0 
# Shell N1 going from 4.416234 to 4.416234  like Cu1 in 0 and O5 in -1 0 0 




BMpar.A= 3950.0 * ev_erg 
BMpar.R= 0.228  * A_cm
#BMpar.ZZ= Z_['Cu_G0']*Z_['O_G0' ]

distances= [  1.975000* A_cm ]

print "  ['Cu_G0']*Z_['O_G0' ]  " 

BK_L['Cu_G0']['O_G0']=map(bm_L, distances)
BK_T['Cu_G0']['O_G0']=map(bm_T, distances)
SM_L['Cu_G0']['O_G0']['SS']=[0.0]
SM_T['Cu_G0']['O_G0']['SS']=[0.0]
SM_L['Cu_G0']['O_G0']['SC']=[0.0]
SM_T['Cu_G0']['O_G0']['SC']=[0.0]
SM_L['Cu_G0']['O_G0']['CS']=[0.0]
SM_T['Cu_G0']['O_G0']['CS']=[0.0]

# just for symmetry 
SM_L['O_G0']['Cu_G0']=SM_L['Cu_G0']['O_G0']
SM_T['O_G0']['Cu_G0']=SM_T['Cu_G0']['O_G0']
BK_L['O_G0']['Cu_G0']=BK_L['Cu_G0']['O_G0']
BK_T['O_G0']['Cu_G0']=BK_T['Cu_G0']['O_G0']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'Cu_G0' and 'O_G1' 
# Shell N0 going from 3.605445 to 3.605445  like Cu0 in 0 and O7 in 0 -1 -1 
# Shell N1 going from 5.348059 to 5.348059  like Cu1 in 0 and O7 in -1 0 0 

BMpar.A= 460.0  * ev_erg 
BMpar.R= 0.353  * A_cm
BMpar.ZZ= Z_['Cu_G0']*Z_['O_G1' ]
distances= [  3.605445* A_cm ,5.348059* A_cm ]

print "  _['Cu_G0']*Z_['O_G1' ]    "

BK_L['Cu_G0']['O_G1']=map(bm_L, distances)
BK_T['Cu_G0']['O_G1']=map(bm_T, distances)
SM_L['Cu_G0']['O_G1']['SS']=[0.0,0.0]
SM_T['Cu_G0']['O_G1']['SS']=[0.0,0.0]
SM_L['Cu_G0']['O_G1']['SC']=[0.0,0.0]
SM_T['Cu_G0']['O_G1']['SC']=[0.0,0.0]
SM_L['Cu_G0']['O_G1']['CS']=[0.0,0.0]
SM_T['Cu_G0']['O_G1']['CS']=[0.0,0.0]
# just for symmetry 
SM_L['O_G1']['Cu_G0']=SM_L['Cu_G0']['O_G1']
SM_T['O_G1']['Cu_G0']=SM_T['Cu_G0']['O_G1']
BK_L['O_G1']['Cu_G0']=BK_L['Cu_G0']['O_G1']
BK_T['O_G1']['Cu_G0']=BK_T['Cu_G0']['O_G1']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'Cu_G0' and 'Nd_G0' 
# Shell N0 going from 3.315115 to 3.315115  like Cu0 in 0 and Nd1 in -1 0 0 
# Shell N1 going from 4.247077 to 4.247077  like Cu1 in 0 and Nd2 in 0 0 0 
BK_L['Cu_G0']['Nd_G0']=[]
BK_T['Cu_G0']['Nd_G0']=[]
SM_L['Cu_G0']['Nd_G0']['SS']=[]
SM_T['Cu_G0']['Nd_G0']['SS']=[]
SM_L['Cu_G0']['Nd_G0']['SC']=[]
SM_T['Cu_G0']['Nd_G0']['SC']=[]
SM_L['Cu_G0']['Nd_G0']['CS']=[]
SM_T['Cu_G0']['Nd_G0']['CS']=[]
# just for symmetry 
SM_L['Nd_G0']['Cu_G0']=SM_L['Cu_G0']['Nd_G0']
SM_T['Nd_G0']['Cu_G0']=SM_T['Cu_G0']['Nd_G0']
BK_L['Nd_G0']['Cu_G0']=BK_L['Cu_G0']['Nd_G0']
BK_T['Nd_G0']['Cu_G0']=BK_T['Cu_G0']['Nd_G0']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'O_G0' and 'O_G0' 
# Shell N0 going from 2.793072 to 2.793072  like O5 in 0 and O4 in -1 1 0 
# Shell N1 going from 3.950000 to 3.950000  like O5 in 0 and O5 in -1 0 0 

BMpar.A= 2000.0  * ev_erg 
BMpar.R= 0.284  * A_cm
BMpar.ZZ= Z_['O_G0']*Z_['O_G1' ]
distances= [ 2.793072* A_cm ,3.950000 * A_cm ]

print "  ['O_G0']*Z_['O_G0' ]   " 


BK_L['O_G0']['O_G0']=map(vwpbm_L, distances)
BK_T['O_G0']['O_G0']=map(vwpbm_T, distances)
SM_L['O_G0']['O_G0']['SS']=[0.0, 0.0]
SM_T['O_G0']['O_G0']['SS']=[0.0, 0.0]
SM_L['O_G0']['O_G0']['SC']=[0.0, 0.0]
SM_T['O_G0']['O_G0']['SC']=[0.0, 0.0]
SM_L['O_G0']['O_G0']['CS']=[0.0, 0.0]
SM_T['O_G0']['O_G0']['CS']=[0.0, 0.0]
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'O_G0' and 'O_G1' 
# Shell N0 going from 3.016390 to 3.016390  like O1 in 0 and O6 in -1 0 -1 
# Shell N1 going from 4.110944 to 4.110944  like O5 in 0 and O3 in 1 0 0 


distances= [ 3.016390* A_cm ,4.110944 * A_cm ]

print " ['O_G0']['O_G1']  "

BK_L['O_G0']['O_G1']=map(vwpbm_L, distances)
BK_T['O_G0']['O_G1']=map(vwpbm_T, distances)
SM_L['O_G0']['O_G1']['SS']=[0.0, 0.0]
SM_T['O_G0']['O_G1']['SS']=[0.0, 0.0]
SM_L['O_G0']['O_G1']['SC']=[0.0, 0.0]
SM_T['O_G0']['O_G1']['SC']=[0.0, 0.0]
SM_L['O_G0']['O_G1']['CS']=[0.0, 0.0]
SM_T['O_G0']['O_G1']['CS']=[0.0, 0.0]
# just for symmetry 
SM_L['O_G1']['O_G0']=SM_L['O_G0']['O_G1']
SM_T['O_G1']['O_G0']=SM_T['O_G0']['O_G1']
BK_L['O_G1']['O_G0']=BK_L['O_G0']['O_G1']
BK_T['O_G1']['O_G0']=BK_T['O_G0']['O_G1']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'O_G0' and 'Nd_G0' 
# Shell N0 going from 2.662585 to 2.662585  like O1 in 0 and Nd1 in -1 0 0 
# Shell N1 going from 4.683833 to 4.763597  like O5 in 0 and Nd2 in 0 0 0 

BMpar.A= 2000  * ev_erg 
BMpar.R= 0.316  * A_cm
BMpar.ZZ= Z_['O_G0']*Z_['Nd_G0' ]
distances= [ 2.662585 * A_cm ,4.683833* A_cm ]

print " ['O_G0']['Nd_G0']  "


BK_L['O_G0']['Nd_G0']=map(bm_L,distances)
BK_T['O_G0']['Nd_G0']=map(bm_T,distances)

SM_L['O_G0']['Nd_G0']['SS']=[0.0, 0.0]
SM_T['O_G0']['Nd_G0']['SS']=[0.0, 0.0]
SM_L['O_G0']['Nd_G0']['SC']=[0.0, 0.0]
SM_T['O_G0']['Nd_G0']['SC']=[0.0, 0.0]
SM_L['O_G0']['Nd_G0']['CS']=[0.0, 0.0]
SM_T['O_G0']['Nd_G0']['CS']=[0.0, 0.0]
# just for symmetry 
SM_L['Nd_G0']['O_G0']=SM_L['O_G0']['Nd_G0']
SM_T['Nd_G0']['O_G0']=SM_T['O_G0']['Nd_G0']
BK_L['Nd_G0']['O_G0']=BK_L['O_G0']['Nd_G0']
BK_T['Nd_G0']['O_G0']=BK_T['O_G0']['Nd_G0']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'O_G1' and 'O_G1' 
# Shell N0 going from 2.793072 to 2.793072  like O7 in 0 and O6 in -1 1 0 
# Shell N1 going from 3.950000 to 3.950000  like O7 in 0 and O7 in -1 0 0 

BMpar.A= 2000.0  * ev_erg 
BMpar.R= 0.284  * A_cm
BMpar.ZZ= Z_['O_G0']*Z_['O_G1' ]
distances= [ 2.793072* A_cm ,3.950000 * A_cm ]

print "  ['O_G0']*Z_['O_G0' ]   "


BK_L['O_G1']['O_G1']=map(vwpbm_L, distances)
BK_T['O_G1']['O_G1']=map(vwpbm_T, distances)

SM_L['O_G1']['O_G1']['SS']=[0.0,0.0 ]
SM_T['O_G1']['O_G1']['SS']=[0.0,0.0]
SM_L['O_G1']['O_G1']['SC']=[0.0,0.0]
SM_T['O_G1']['O_G1']['SC']=[0.0,0.0]
SM_L['O_G1']['O_G1']['CS']=[0.0,0.0]
SM_T['O_G1']['O_G1']['CS']=[0.0,0.0]
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'O_G1' and 'Nd_G0' 
# Shell N0 going from 2.327062 to 2.327062  like O7 in 0 and Nd2 in 0 0 0 
# Shell N1 going from 4.584508 to 4.584508  like O7 in 0 and Nd2 in -1 0 0 

BMpar.A= 2000  * ev_erg 
BMpar.R= 0.316  * A_cm
distances= [ 2.327062 * A_cm ,4.584508* A_cm ]
BMpar.ZZ= Z_['Nd_G0']*Z_['O_G0' ]
 
print " ['Nd_G0']*Z_['O_G0' ]  "

BK_L['O_G1']['Nd_G0']=map(bm_L,distances)
BK_T['O_G1']['Nd_G0']=map(bm_T,distances)

SM_L['O_G1']['Nd_G0']['SS']=[0.0, 0.0]
SM_T['O_G1']['Nd_G0']['SS']=[0.0, 0.0]
SM_L['O_G1']['Nd_G0']['SC']=[0.0, 0.0]
SM_T['O_G1']['Nd_G0']['SC']=[0.0, 0.0]
SM_L['O_G1']['Nd_G0']['CS']=[0.0, 0.0]
SM_T['O_G1']['Nd_G0']['CS']=[0.0, 0.0]
# just for symmtry 
SM_L['Nd_G0']['O_G1']=SM_L['O_G1']['Nd_G0']
SM_T['Nd_G0']['O_G1']=SM_T['O_G1']['Nd_G0']
BK_L['Nd_G0']['O_G1']=BK_L['O_G1']['Nd_G0']
BK_T['Nd_G0']['O_G1']=BK_T['O_G1']['Nd_G0']
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
# Interactions between 'Nd_G0' and 'Nd_G0' 
# Shell N0 going from 3.571406 to 3.571406  like Nd1 in 0 and Nd2 in 0 0 -1 
# Shell N1 going from 3.722850 to 3.722850  like Nd3 in 0 and Nd2 in 1 0 0 


BK_L['Nd_G0']['Nd_G0']=[]
BK_T['Nd_G0']['Nd_G0']=[]
SM_L['Nd_G0']['Nd_G0']['SS']=[]
SM_T['Nd_G0']['Nd_G0']['SS']=[]
SM_L['Nd_G0']['Nd_G0']['SC']=[]
SM_T['Nd_G0']['Nd_G0']['SC']=[]
SM_L['Nd_G0']['Nd_G0']['CS']=[]
SM_T['Nd_G0']['Nd_G0']['CS']=[]














