spectra = spinwavesym(obj,Name,Value)


spectra = spinwavesym(obj,Name,Value) calculates symbolic spin wave dispersion as a function of . The function can deal with arbitrary magnetic structure and magnetic interactions as well as single ion anisotropy and magnetic field. Biquadratic exchange interactions are also implemented, however only for magnetic structures.

If the magnetic propagation vector is non-integer, the dispersion is calculated using a coordinate system rotating from cell to cell. In this case the Hamiltonian has to fulfill this extra rotational symmetry.

The method works for incommensurate structures, however the calculated omega dispersion does not contain the terms that has to be added manually.

The method for matrix diagonalization is according to R.M. White, PR 139 (1965) A450. The non-Hermitian g*H matrix will be diagonalised.


The first section of the example calculates the symbolic spin wave spectrum. Unfortunatelly the symbolic expression needs manipulations to bring it to readable form. To check the solution, the second section converts the symbolic expression into a numerical vector and the third section plots the real and imaginary part of the solution.

tri = sw_model('triAF',1)
tri.genmagstr('mode','direct','k',[1/3 1/3 0],'S',[1 0 0])
symSpec = tri.spinwave


/ -#1 \
|     |
\  #1 /
         sqrt(2) J_1 exp(-4 pi #2) sqrt(exp(2 pi #2) + #6 + #5 + exp(4 pi #2) 3 + #4 + #3 + exp(6 pi #2)) sqrt(- exp(2 pi #2) - #6 - #5 + exp(4 pi #2) 6 - #4 - #3 - exp(6 pi #2))
   #1 == -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   #2 == h 1i + k 1i
   #3 == exp(2 pi (h 3i + k 2i))
   #4 == exp(2 pi (h 2i + k 3i))
   #5 == exp(2 pi (h 2i + k 1i))
   #6 == exp(2 pi (h 1i + k 2i))
J_1 = 1
h = linspace(0,1,500)
k = h
omega = eval(
p1 = plot(h,real(omega(1,:)),'k-')
hold on
p2 = plot(h,imag(omega(1,:)),'r-')
xlabel('Momentum (h,h,0) (r.l.u.)')
ylabel('Energy (meV)')
legend([p1 p2],'Real(\omega(Q))','Imag(\omega(Q))')
title('Spin wave dispersion of the TLHAF')
title('Spin wave dispersion of the TLHAF')

Input Arguments

spinw object.

Name-Value Pair Arguments

Symbolic definition of vector. Default is the general point:
hkl = [sym('h') sym('k') sym('l')]
If true the symbolic Hamiltonian is diagonalised symbolically. For large matrices (many magnetic atom per unit cell) this might be impossible. Set eig to false to output only the quadratic Hamiltonian. Default is true.
If true the eigenvectors are also calculated. Default is false.
Tolerance of the incommensurability of the magnetic ordering wavevector. Deviations from integer values of the ordering wavevector smaller than the tolerance are considered to be commensurate. Default value is .
Whether to produce the normalized symbolic eigenvectors. It can be impossible for large matrices, in that case set it to false. Default is true.
Defines whether to provide text output. The default value is determined by the fid preference stored in swpref. The possible values are:
  • 0 No text output is generated.
  • 1 Text output in the MATLAB Command Window.
  • fid File ID provided by the fopen command, the output is written into the opened file stream.
Gives a title string to the simulation that is saved in the output.

Output Arguments

Structure, with the following fields:
  • omega Calculated spin wave dispersion, dimensins are , where is the number of magnetic atoms in the extended unit cell.
  • V0 Eigenvectors of the quadratic Hamiltonian.
  • V Normalized eigenvectors of the quadratic Hamiltonian.
  • ham Symbolic matrix of the Hamiltonian.
  • incomm Whether the spectra calculated is incommensurate or not.
  • obj The clone of the input obj.

See Also

spinw | spinw.spinwave