Contents

biquadratic test 2

FCC lattice from: PHYSICAL REVIEW B 85, 054409 (2012)

% MnO parameter set
%S = 5/2, J? = 5 K, J =5.5 K

S  = 5/2;
J2 = 5.5;
J1 = 5.0;
B  = 0;
g  = 1;
muB = 1;
a  = 1;


J = J2;

j = J1/J2/6;

lambda = 0.002*6*J*0;
H  = 0.15*6*J*0;
%Q = -2*B*S^2;
Q = 0.01*J;

delta = [1 0 0;0 1 0;0 0 1];
delta = [delta;-delta];
theta = asin(-g*muB*H/(12*J*S+2*S*lambda));

nQ = 200;
qscan = sw_qscan({[1 0 0] [0 0 0] [1/2 1/2 0] [1/2 1/2 1/2] [0 0 0] nQ});

for ii = 1:size(qscan,2)
    q = qscan(:,ii)*2*pi;

    gamma = 1/6*sum(exp(1i*q'*delta'));


    h1 = cos(a*(q(1)-q(2))/2) + cos(a*(q(2)-q(3))/2) + cos(a*(q(3)-q(1))/2);
    h2 = cos(a*(q(1)+q(2))/2) + cos(a*(q(2)+q(3))/2) + cos(a*(q(3)+q(1))/2);

    H1 = 1+lambda/3/J+gamma*sin(theta)^2 + 2*Q/J/S + ...
        (2*j-Q/3/J/S)*h1 + 2*j*sin(theta)^2*h2;

    H2 = gamma*cos(theta)^2 + (2*j*cos(theta)^2+Q/3/J/S)*h2;

    omega(ii) = 6*J*S*sqrt((H1-H2)*(H1+H2));
end

figure
plot(real(omega)/15/J,'-')

spinw

fcc = spinw;
fcc.genlattice('lat_const',[8 8 8])
fcc.addatom('r',[0   0   0],'S',S)
fcc.addatom('r',[1/2 1/2 0],'S',S)
fcc.addatom('r',[1/2 0 1/2],'S',S)
fcc.addatom('r',[0 1/2 1/2],'S',S)

fcc.gencoupling
fcc.addmatrix('label','J1','value',J1)
fcc.addmatrix('label','J2','value',J2,'color','g')
% there is a factor 2 difference between SpinW and paper
fcc.addmatrix('label','B','value',-0.5*Q/S^3*2)

fcc.addcoupling('mat','J1','bond',1)
fcc.addcoupling('mat','J2','bond',2)
fcc.addcoupling('mat','B','bond',1,'type','biquadratic')


fcc.genmagstr('mode','helical','S',[1 -1 -1 -1;1 -1 -1 -1;zeros(1,4)],'k',[1/2 1/2 1/2],'next',[2 2 2],'n',[0 0 1]);

plot(fcc)

spin wave

spec = fcc.spinwave(qscan);
%spec.omega = spec.omega/15/J;
spec = sw_egrid(spec);
spec = sw_omegasum(spec,'zeroint',1e-5,'emptyval',0);
figure
subplot(2,1,1)
sw_plotspec(spec,'mode','disp','colormap',[0 0 0],'axlim',[0 2],'colorbar',false)

subplot(2,1,2)
sw_plotspec(spec,'mode','color','colorbar',false,'dE',0.01)
figure
plot(real(omega)/15/J,'-')

hold on
plot(spec.omega(1,:)/15/J,'ro')
axis([0 20 0 0.2])