# Help on SpinW

Use the help command to get help on any SpinW function. For any function that starts with 'sw_' use help swfiles, for spinw class methods use help spinw.function_name. For help on plotting commands, use help swplot.

## Contents

## Open help files

help swfiles % To find the location of the spinw library use sw_rootdir % To open any of the functions in the Matlab editor, use edit spinw.plot % To look at any of the spinw object properties, double click on the % "Workspace" view on the name of the object. Also the data files % (symmetry.dat, atom.dat, color.dat, magion.dat) can be easily edited, for % example edit symmetry.dat % Some settings are ekpt during the active Matlab session, these can be % set/get using the swpref.setpref and swpref.getpref commands. To change % the default values, it can be defined in the startup.m file. To get all % current value use swpref

general functions This folder contains all the spectral functions and general functions that are related to SpinW. ### Files #### Transforming and plotting calculated spin wave spectrum These functions operate on the calculated spectra, which is the output of [spinw.spinwave] or [spinw.powspec] commands. They enable to post process the calculated spin-spin correlation function, including instrumental resolution, cross section calculation, binning etc. sw_econtract sw_egrid sw_filelist sw_instrument sw_magdomain sw_neutron sw_omegasum sw_plotspec sw_xray #### Generate list of vectors in reciprocal space These two functions can generate a set of 3D points in reciprocal space defining either a path made out of straigh lines or a volume. sw_qgrid sw_qscan #### Resolution claculation and convolution These functions can import Energy resolution function and convolute it with arbitrary multidimensional dataset sw_res sw_resconv sw_tofres #### SpinW model related functions sw_extendlattice sw_fstat sw_model sw_bonddim #### Constraint functions Contraint functions for [spinw.optmagstr]. gm_planar gm_planard gm_spherical3d gm_spherical3dd #### Geometrical calculations Basic geometrical calculators, functions to generatate rotation operators, generate Cartesian coordinate system from a set of vectors, calculate normal vector to a set of vector, etc. sw_basismat sw_cartesian sw_fsub sw_mattype sw_nvect sw_quadell sw_mirror sw_rot sw_rotmat sw_rotmatd #### Text and graphical input/output for different high level commands sw_multicolor sw_parstr sw_timeit #### Acessing the SpinW database Functions to read the different data files that store information on atomic properties, such as magnetic form factor, charge, etc. sw_atomdata sw_cff sw_mff sw_nb #### Useful physics functions The two functions can calculate the Bose factor and convert energy/momentum units, both usefull for neutron and x-ray scattering. sw_bose sw_converter #### Import functions Functions to import tables in text format. sw_import sw_readspec sw_readtable #### Miscellaneous swdoc sw_freemem sw_readparam sw_rootdir sw_uniquetol sw_update sw_version sw_mex ans = '/home/simonward/Documents/MATLAB/Development/spinw/' ans = Swpref object, swpref class: Stored preferences: Name Value Label __________ __________________________________ ________________________________________________________________________________________________________ 'fid' [ 0] 'file identifier for text output, default value is 1 (Command Window)' 'expert' [ 0] 'expert mode (1) gives less warnings (not recommended), default value is 0' 'tag' 'swplot' 'defines the tag property of the crystal structure plot figures' 'nmesh' [ 3] 'default number of subdivision of the icosahedron for plotting' 'maxmesh' [ 6] 'maximum number of subdivision of the icosahedron for plotting' 'npatch' [ 50] 'number of edges for patch object' 'fontsize' [ 12] 'fontsize for plotting' 'tid' [ 0] 'identifier how the timer is shown, default value is 1 (Command Window), value 2 gives graphical output' 'colormap' @cm_inferno 'default colormap' 'usemex' [ 0] 'if true, mex files are used in the spin wave calculation' 'docurl' 'https://tsdev.github.io/spinwdoc' 'url to the documentation server'

## Generate lattice

We create a triangular lattice of magnetic atoms.

tri = spinw; % The lattice parameters in Angstrom and angles in degree can be defined. tri.genlattice('lat_const',[3 3 4],'angled',[90 90 120]) % To plot the lattice use the command spinw.plot. plot(tri) % In the plot window, you can zoom with the mouse wheel, pan by pressing % the Ctrl button while dragging. Change the plot range and view direction % by pressing the corresponding buttons on the top.

Warning: There are no atoms in the plotting range!

## Adding atoms

We add 1 atom at the origin of the unit cell, spin-3/2 Cr3+ ion using the spinw.addatom.

tri.addatom('r',[0 0 0],'S',3/2,'label','MCr3') plot(tri)

## Definition of the spin-Hamiltonian

We create an antiferromagnetic first neighbor Hamiltonian plus easy plane single ion anisotropy red ellipsoids represent the single ion anistropy on the plot (equienergetic surface) examine the plot and test different values of A0 with different signs. The plot command can plot rectangular cut of the lattice setting the unit option to xyz and giving the plot range in Agnstrom.

A0 = 0.1; tri.addmatrix('label','J1','value',1) tri.addmatrix('label','A','value',[0 0 0;0 0 0;0 0 A0]) tri.gencoupling tri.addcoupling('mat','J1','bond',1) tri.addaniso('A') plot(tri,'range',[22 20 1/2],'unit','xyz','cellMode','single')

## Magnetic structure

The ground state magnetic structure of the above Hamltonian is a spiral, with propagation vector of (1/3,1/3,0). We define the plane of the spiral as the ab plane. Careful: the given spin vector is column vector! What are the angles between neares neighbor moments?

tri.genmagstr('mode','helical','S',[1;0;0],'k',[1/3 1/3 0],'n',[0 0 1],'nExt',[1 1 1]) plot(tri,'range',[3 3 1/2],'cellMode','inside','magColor','red')

## Spin wave dispersion

We calculate the spin wave dispersion along the (H,H,0) high symmetry direction. How many spin wave modes are there and why? What does the red line mean? Did you got any warning?

spec = tri.spinwave({[0 0 0] [1 1 0] 500},'hermit',false); figure sw_plotspec(spec,'mode','disp','imag',true,'colormap',[0 0 0],'colorbar',false) axis([0 1 0 5])

Warning: Eigenvectors of defective eigenvalues cannot be orthogonalised at some q-point!

## Spin-spin correlation functions

The spin-spin correlations is already calculated, however the result contains 9 numbers per Q-point per mode. It is not possible to show this on a single plot.

BUT!

1. we can calculate the neutron scattering cross section 2. we can select one of the components S_alpha_beta(Q,w) 3. we can sum up the diagonal S_alpha_alpha(Q,w)

What do you see? Where is the largest intensity? How is it related to the magnetic propagation vector?

Why are some modes gapped? What type of spin-spin correlations are gapped?

Why do we have Szz?

Shouldn't the spins precess around M? Shouldn't each spin wave mode corresponds to a precession in a specific plane not a motion along a specific axis?

%spec = sw_egrid(spec,'component','Sperp','Evect',0:0.01:5.5); spec = sw_egrid(spec,'component',{'Sxx+Syy' 'Szz'},'Evect',0:0.01:5); %spec = sw_egrid(spec,'component','Syz','Evect',0:0.01:5); figure sw_plotspec(spec,'mode','color','dE',0.2,'imag',false) hold on axis([0 1 0 5.5]) caxis([0 3])

## k=0 magnetic structure

We can generate the same magnetic structure with zero propagation vector on a magnetic supercell.

Why would we do that? Not for a triangular lattice, but in more complex cases, we will have to!

You can keep the previous structure plot by pressing the red circle on the figure to compare the new magnetic structure. Is there any difference?

What are we doing here? Can you tell from the script?

Check out the tri.magstr command? What data is stored there? What are the dimensions of the different matrices?

You can also compare the energy per spin of the old magnetic structure and the new magnetic structure using the spinw.energy() function. Is there any difference?

You can also store the new magnetic structure in a separate SpinW object by first duplicating the original object using the copy() command!

What happens when we use tri2 = triNew, without the copy command?

triNew = copy(tri); tri2 = triNew; triNew.genmagstr('mode','random','next',[3 3 1]) triNew.optmagsteep('nRun',1e4) % Converged? triNew.genmagstr('mode','rotate','n',[0 0 1]) phi1 = atan2(triNew.magstr.S(2,1),triNew.magstr.S(1,1)); triNew.genmagstr('mode','rotate','n',[0 0 1],'phi',-phi1) plot(triNew,'range',[3 3 1],'atomLegend',false) % How does the magnetic structures compare? Are they the same? Why? % tri.magstr tri2.magstr

ans = struct with fields: S: [3×1 double] k: [0.3333 0.3333 0] n: [0 0 1] N_ext: [1 1 1] exact: 1 ans = struct with fields: S: [3×9 double] k: [0 0 0] n: [0 0 1] N_ext: [3 3 1] exact: 1

## Spin wave dispersion on the k=0 magnetic structure

We calculate the spin wave dispersion along the (H,H,0) high symmetry direction. How many modes do we have? Is there more than before? Which is the right one then?

Why are there vertical lines in the dispersion? Is it a bug?

spec = tri.spinwave({[0 0 0] [1 1 0] 500},'hermit',false); figure subplot(2,1,1) sw_plotspec(spec,'mode','disp','imag',true,'colormap',[0 0 0]) colorbar off axis([0 1 0 5]) % spin-spin correlation functions spec = sw_egrid(spec,'component','Sperp','Evect',0:0.01:5.5); subplot(2,1,2) sw_plotspec(spec,'mode','color','dE',0.2,'imag',false) axis([0 1 0 5.5]) caxis([0 3]) legend off colorbar off swplot.subfigure(1,3,1)

Warning: Eigenvectors of defective eigenvalues cannot be orthogonalised at some q-point!

Written by Sandor Toth 06-Feb-2016