Spin wave spectrum of the honeycomb lattice Na2IrO3
we reproduce the spin wave calculation of the paper S. K. Choi, et al. PRL, 108(12), 127204 (2012), [[http://link.aps.org/doi/10.1103/PhysRevLett.108.127204]].
Contents
Crystal structure
We define the crystal structure using the space group C2/m, and taking the crystallographic parameters at 300 K (parameters are only slightly different at 5 K) and we add not only the magnetic Ir4+ ions with effective spin quantum number of 1/2 but also the non-magnetic atoms for plotting the structure.
nairo = spinw; nairo.genlattice('lat_const',[5.427 9.395 5.614],'angled',[90 109.037 90],'spgr','C 2/m') nairo.addatom('label','MIr4','r',[1/2; 0.167; 0],'S',1/2,'color','DarkCyan'); nairo.addatom('r',[0 1/2 1/2;0 0 0.340; 0 1/2 1/2],'S',[0 0 0],'label',{'Na1 Na1+' 'Na2 Na1+' 'Na3 Na1+'},'color',{'lightGray' 'lightGray' 'lightGray'}); nairo.addatom('r',[0.748 0.711; 0.178 0; 0.789 0.204],'S',[0 0],'label',{'O1 O2-', 'O2 O2-'},'color',{'r' 'r'}); plot(nairo,'baseShift',[-2;0;0]) swplot.zoom(1.3) % We generate all bonds up to 8 Angstrom length. nairo.gencoupling('maxDistance',8);
Magnetic Hamiltonian
We define the three anisotropic exchange interactions and Heisenberg exchange J1, J2 and J3 and assign them according to the paper. We assign a constant 1 meV for all exchange matrix, that we will change later for every model. J1 is plotted with dashed line to see both J1 and the kitaev coupling on the plot ('-' at the end of the matrix label will be plotted with dashed line). The Jxx and Jyy Kitaev terms are assigned to symmetry equivalent bonds, but they don't transform according to the space group symmetry. Thus we use a second option 'subIdx' to subselect from the symmetry equivalent bonds. In this case SpinW won't apply the symmetry transformation on exchange matrices on these bonds, it can be also forced setting the 'sym' option false in the spinw.addcoupling() function.
% Kitaev term nairo.addmatrix('label','Jxx','value',1,'color','r'); nairo.addmatrix('label','Jyy','value',1,'color','g'); nairo.addmatrix('label','Jzz','value',1,'color','b'); % Heisenberg terms nairo.addmatrix('label','J1-','value',1,'color','gray'); nairo.addmatrix('label','J2','value',1,'color','orange'); nairo.addmatrix('label','J3','value',1,'color','cyan'); % add J1, J2 and J3 and JK couplings nairo.addcoupling('mat','J1-','bond',[1 2]); nairo.addcoupling('mat','J2','bond',[3 4]); nairo.addcoupling('mat','J3','bond',[7 8]); % Plot all couplings. plot(nairo,'range',[2 2 0.5],'atomMode','mag','cellMode','inside',... 'atomLegend',false,'cellcolor','gray','bondMode','line','bondLinewidth0',2) swplot.zoom(1.4)
snapnow % add JJxx, Jyy and Jzz couplings nairo.addcoupling('mat','Jxx','bond',1,'subidx',[3 4]); nairo.addcoupling('mat','Jyy','bond',1,'subidx',[1 2]); nairo.addcoupling('mat','Jzz','bond',2); % Plot Kitaev couplings only. plot(nairo,'range',[2 2 0.5],'atomMode','mag','cellMode','inside',... 'atomLegend',false,'cellcolor','gray','bondMode','line','bondLinewidth0',2) swplot.zoom(1.4)
Warning: By subselecting equivalent bonds, the symmetry of the corresponding bond(s) are reduced to P1! Warning: By subselecting equivalent bonds, the symmetry of the corresponding bond(s) are reduced to P1!
Plot Kitaev term
nairo.addmatrix('label','Jxx','value',diag([1 0 0]),'color','r') nairo.addmatrix('label','Jyy','value',diag([0 1 0]),'color','g') nairo.addmatrix('label','Jzz','value',diag([0 0 1]),'color','b') nairo.addmatrix('label','J1-','value',0); nairo.addmatrix('label','J2','value', 0); nairo.addmatrix('label','J3','value', 0); plot(nairo,'range',[1 1 1/2],'atomMode','mag','bondRadius1',0.15,'bondMode','line',... 'bondLineWidth','lin','bondLinewidth0',4,'atomLegend',false)
Q scans
We define a list of Q points, linear scans will be claculated between them with 200 points per line.
Qp{1} = [ -1; 0; 0]; Qp{2} = [ 0; 0; 0]; Qp{3} = [ 0; 1; 0]; Qp{4} = [ 1; 1; 0]; Qp{5} = [1/2; 1/2; 0]; Qp{6} = [ 0; 0; 0]; Qp{7} = 500;
Spin wave spectrum
We simulate every setting in the supplementary paper and denote each case with the figure plot index on Fig. S3. We create a Jfun() inline function that creates all exchange matrices from the scalar values. This can then directly be stored in sw.matrix.mat field.
Jfun = @(x)cat(3,diag([-x(4) 0 0]),diag([0 -x(4) 0]),diag([0 0 -x(4)]),...
eye(3)*x(1),eye(3)*x(2),eye(3)*x(3));
Fig. S3(d) stripy order
We create stripy order, where energy per spin is -0.2913 meV. The spins are pointing along the c-axis.
J1 = 1; J2 = 0; J3 = 0; JK = 1.33; nairo.matrix.mat = Jfun([J1 J2 J3 JK]); nairo.genmagstr('mode','func','func',@gm_planar,'x0',[[1/2 3/2 1/2 3/2]*pi 0 0 0 pi/2 0]); specD = nairo.spinwave(Qp); specD = sw_neutron(specD); specD = sw_egrid(specD,'component','Sxx','Evect',linspace(0,4,1001)); figure sw_plotspec(specD,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specD,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('e) stripy, KH, S^{xx}','fontsize',15)
Fig. S3(e-f) stripy order
Here we have only J1 and Kitaev exchange. The magnetic ground state is stripy and parallel to the c-axis. The energy per spin is -0.375 meV.
J1 = 1; J2 = 0; J3 = 0; JK = 2; nairo.matrix.mat = Jfun([J1 J2 J3 JK]); nairo.genmagstr('mode','func','func',@gm_planar,'x0',[[1/2 3/2 1/2 3/2]*pi 0 0 0 pi/2 0]); specEF = nairo.spinwave(Qp,'hermit',false); specEF = sw_neutron(specEF); specEF = sw_egrid(specEF,'component','Sxx','evect',linspace(0,4,501)); figure sw_plotspec(specEF,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specEF,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('e) stripy, KH, S^{xx}','fontsize',15) specEF = sw_egrid(specEF,'component','Syy','evect',linspace(0,4,501)); figure sw_plotspec(specEF,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specEF,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('f) stripy, KH, S^{yy}','fontsize',15)
Fig. S3(g) stripy order
Stripy order again along c-axis.
J1 = 1; J2 = 0.26; J3 = -0.2; JK = 0; nairo.matrix.mat = Jfun([J1 J2 J3 JK]); nairo.genmagstr('mode','func','func',@gm_planar,'x0',[[1/2 3/2 1/2 3/2]*pi 0 0 0 pi/2 0]); specG = nairo.spinwave(Qp,'hermit',false); specG = sw_neutron(specG); specG = sw_egrid(specG,'component','Sxx','evect',linspace(0,2,501)); figure sw_plotspec(specG,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specG,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('g) stripy, J_{1,2,3}, S^{xx}(=S^{yy})','fontsize',15)
Fig. S3(h) zig-zag order
Zig-zag order along the b-axis.
J1 = 1; J2 = 0.78; J3 = 0.9; JK = 0; nairo.matrix.mat = Jfun([J1 J2 J3 JK]); nairo.genmagstr('mode','func','func',@gm_planar,'x0',[[0 1 1 0]*pi 0 0 0 pi/2 0]); specH = nairo.spinwave(Qp,'hermit',false); specH = sw_neutron(specH,'pol',false); specH = sw_egrid(specH,'component','Sxx','evect',linspace(0,4,501)); figure sw_plotspec(specH,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specH,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('h) zig-zag, J_{1,2,3}, S^{xx}(=S^{yy})','fontsize',15)
Warning: Eigenvectors of defective eigenvalues cannot be orthogonalised at some q-point!
Fig. S3(i-j) zig-zag order
Magnetic structure, where spins are pointing along the b-axis. In the paper the Sy'y' direction is the correlation function component perpendicular to the magnetic moment direction, that is Sxx for S||b moments.
J1 = 1; J2 = 0.23; J3 = 0.51; JK = 1.33; nairo.matrix.mat = Jfun([J1 J2 J3 JK]); nairo.genmagstr('mode','func','func',@gm_planar,'x0',[[0 1 1 0]*pi 0 0 0 pi/2 0]); specIJ = nairo.spinwave(Qp,'hermit',false); specIJ = sw_neutron(specIJ); figure specIJ = sw_egrid(specIJ,'component','Szz','evect',linspace(0,3,501)); sw_plotspec(specIJ,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specIJ,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('i) zig-zag, KH-J_2-J_3, S^{zz}','fontsize',15) figure specIJ = sw_egrid(specIJ,'component','Sxx','evect',linspace(0,3,501)); sw_plotspec(specIJ,'mode','color','dE',0.1,'axLim',[0 1]); sw_plotspec(specIJ,'mode','disp','dashed',true,'colorbar',false,'legend',... false,'title',false,'sortMode',true,'colormap',[255 20 147]); title('j) zig-zag, KH-J_2-J_3, S^{y''y''}=S^{xx}','fontsize',15)
Written by Sandor Toth 16-Jun-2014, 06-Feb-2017