
Simulation Source Code (Python)
1 im port n umpy as np
2
3 # FCC nearest - ne ighbour bond vectors
4 NN = np . array ([
5 [1 ,1 ,0] ,[1 , -1 ,0] ,[ -1 ,1 ,0] ,[ -1 , -1 ,0] ,
6 [1 ,0 ,1] ,[1 ,0 , -1] ,[ -1 ,0 ,1] ,[ -1 ,0 , -1] ,
7 [0 ,1 ,1] ,[0 ,1 , -1] ,[0 , -1 ,1] ,[0 , -1 , -1]
8 ] , dt ype = f loat )
9
10 def d yn _matr ix (k , alpha =1.0 , beta =0.3) :
11 D = np . zeros ((3 , 3) )
12 for n in NN:
13 c = 1.0 - np.cos (np . dot (k, n ))
14 nh = n / np . lin al g . norm ( n )
15 D += alpha * np. ou ter (nh , nh ) * c
16 D += beta * ( np . eye (3) - np .outer (nh , nh )) * c
17 return D
18
19 # [110] face diagona l dis persion
20 e110 = np . arr ay ([1 , 1 , 0]) / np . sqrt (2)
21 k_max = np. sqrt (2) * np . pi
22 N_k = 4000
23 k_mag = np. linspace (1 e -4 , k_max , N_k )
24 omega_TA = np . zer os (N_k )
25 omega_LA = np . zer os (N_k )
26
27 for i , km in enumera te ( k_ma g ) :
28 eigs = np . sqrt ( np. maximum (
29 np . li na lg . eigvalsh ( dyn_ ma trix ( km * e110 ) ) , 0) )
30 o me ga _T A [ i ] = eigs [0]
31 o me ga _L A [ i ] = eigs [2]
32
33 # Sound vel oc ities
34 fit_n = 80
35 v_TA = np . polyfit ( k_ mag [: fi t_n ] , omega_TA [: fit_n ] , 1) [0]
36 v_LA = np . polyfit ( k_ mag [: fi t_n ] , omega_LA [: fit_n ] , 1) [0]
37
38 # D ev iation at lambda = 17
39 k17 = 2 * np . pi / 17.0
40 idx17 = np. argm in (np . abs ( k_mag - k17 ))
41 de v_TA = ( v_ TA * k_mag [ idx 17 ] - omega_T A [ idx 17 ]) / ( v_TA * k_ma g [ id x17 ])
42 de v_LA = ( v_ LA * k_mag [ idx 17 ] - omega_L A [ idx 17 ]) / ( v_LA * k_ma g [ id x17 ])
43 print (f" lambda =17: TA dev = { d ev_TA *100:.3 f }% , LA dev = { dev_LA *100:.3 f }% " )
8