# Spin wave disperion of YVO3

We compare our results with the model from: C. Ulrich, et al. PRL 91, 257202 (2003). see [[http://prl.aps.org/abstract/PRL/v91/i25/e257202]] We create crystal structure of YVO3 in the pseudocubic unit cell, doubled along c-axis. The magnetic atoms are V4+ with spin quantum number S=1/2.

## Define the lattice

```a = 5.2821;
b = 5.6144;
c = 7.5283;

yvo3 = spinw;
yvo3.genlattice('lat_const', [a/sqrt(2) b/sqrt(2) c]);
yvo3.gencoupling
%yvo3.newcell({[1 1 0] [-1 1 0] [0 0 1]})
plot(yvo3)
```
```Warning: The x-ray scattering form factor for V4+ is undefined, constant 1 will
be used instead! If you don't want to see this message add a line to xrayion.dat
(use the 'edit xrayion.dat' command) for the corresponding ion!
Warning: The x-ray scattering form factor for V4+ is undefined, constant 1 will
be used instead! If you don't want to see this message add a line to xrayion.dat
(use the 'edit xrayion.dat' command) for the corresponding ion!
```

## Magnetic Hamiltonian

The exchange constants are taken from the paper.

```Jab   = 2.6;
Jc    = 3.1;
delta = 0.35;
K1    = 0.90;
K2    = 0.97;
d     = 1.15;

%Calculate the canting angle in the ac-plane:
theta = 1/2*atan(2*d/(2*Jc-K1-K2));
%Define matrices for the Hamiltonian:

Jc1 = -Jc*(1+delta)*eye(3) + diag([K2 0 0]) - [0 0 d;0 0 0;-d 0 0];
Jc2 = -Jc*(1-delta)*eye(3) + diag([K2 0 0]) + [0 0 d;0 0 0;-d 0 0];

% Assign the matrices to the magnetic atoms:

% Add K1 matrix to the single-ion anisotropy:

% Create test magnetic structure, G-type antiferromagnet:
par_ms.mode = 'helical';
par_ms.S    = [1;0;0];
par_ms.nExt = [2 2 1];
par_ms.k    = [1/2 1/2 1];
par_ms.n    = [0 1 0];

yvo3.genmagstr(par_ms);

%Plotting magnetic structure with anisotropy ellipsoids:
plot(yvo3)

% Optimising magnetic structure using contrained optimization. Using the
% gm_planard() contrained function, we restrict the solution to planar
% magnetic structures. The meaning of the x parameters are the following:
% (phi1, phi2, ... phiN, kx, ky kz, nTheta, nPhi), where all parameters
% except the propagtion vector are in degree.

par_opt.xmin = [zeros(1,8)   , 0 0 0,   0   0];
par_opt.xmax = [ones(1,8)*360, 0 0 0, 180 180];
par_opt.func = @gm_planar;
par_opt.nRun = 10;

optRes = yvo3.optmagstr(par_opt);
E1 = yvo3.energy;

% To check whether we found the optimum, let's run the unconstrained local
% optimization, spinw.optmagsteep and see if we can reach lower energy.
yvo3.optmagsteep('nRun',1e4);
E2 = yvo3.energy;
dE = E2-E1
nE = 1e3;

% The unconstrained local optimization reached lower energy. Showing that
% it is always good to recheck the results.
```
```dE =

-8.3446e-09

```

## Check canting angles

```M   = yvo3.magstr.S;
phi = atan2(M(1,:),M(3,:))*180/pi;

%Calculating spin wave dispersion:
specYVO3 = yvo3.spinwave({[3/4 3/4 0] [1/2 1/2 0] [1/2 1/2 1] });
specYVO3 = sw_neutron(specYVO3);
specYVO3 = sw_egrid(specYVO3,'Evect',linspace(0,25,nE));
%Plotting of spin wave spectra with imaginary components:
figure
subplot(3,1,1);
sw_plotspec(specYVO3,'mode',1,'aHandle',gca,'imag',true);
subplot(3,1,2);
sw_plotspec(specYVO3,'mode',2,'aHandle',gca,'imag',true);
subplot(3,1,3);
sw_plotspec(specYVO3,'mode',3,'aHandle',gca);
```
```Written by
Sandor Toth
16-Jun-2014```