SpinW / spinw

SpinW Matlab library for spin wave calculation
http://www.spinw.org
GNU General Public License v3.0
36 stars 15 forks source link

Applied magnetic field doesn't change spin structure #65

Closed abehersan closed 2 years ago

abehersan commented 2 years ago

Adding a magnetic field perpendicular to a 2D lattice of magnetic atoms initially ordered in the basal plane doesn't cant the structure as expected.

Even at extremely high fields, the moments remain unchanged as seen in the minimal example provided. The spin structure is similar to that of Fig 1. in PHYSICAL REVIEW B 93, 014418 (2016). (see below)

image

Most likely I'm missing something from my implementation but I'm curious if this is an actual bug.

Thanks and best wishes, Abraham

%% BUG DESCRIPTION:
% Adding a magnetic field perpendicular to a 2D honeycomb lattice of S=1/2 atoms doesn't cant the structure as expected
% Even at extremely high fields, the moments remain on the basal plane in the predetermined antiferromagnetic Néel configuration

% SpinW_BugExample.m 
% Program start

%% SpinW object
ybbr3 = spinw;

%% Parameters (lattice const., temp and exchange)
a = 6.97; c = 19.1; 
T = ybbr3.temperature(0.10);
A = .0101; 
J1 = -0.46; J2 = -0.01;
gx = 4; gy = 4; gz = 4*A*A;
B = 1000; % [T]

%% Create crystal structure
ybbr3.genlattice('lat_const',[a a c],'angled',[90 90 120],'spgr','R -3'); % Honeycomb lattice
ybbr3.addatom('label', 'Yb3+', 'r',[0 0 0.16667],'S',1/2, 'color', 'Red') % Magnetic ions on lattice
% ybbr3.addatom('label', 'Br-', 'r',[0.35362 0.32444 0.08325],'S',0, 'color', 'lightGray'); % Non-magnetic Bromium atoms

%% Magnetic field
n = [0 0 1];
ybbr3.field(n/norm(n)*B);

%% Define interactions
ybbr3.addmatrix('label', 'J1', 'value', diag([J1 J1 J1*A*A]), 'color', 'red' ) % AFM int
ybbr3.addmatrix('label', 'J2', 'value', diag([J2 J2 J2*A*A]), 'color', 'orange' ) % AFM int
ybbr3.addmatrix('label','g','value', diag([gx gy gz]))
ybbr3.gencoupling;
ybbr3.addcoupling('mat', 'J1', 'bond', 1)
ybbr3.addcoupling('mat', 'J2', 'bond', 3)
ybbr3.addg('g')

%% Define magnetic structure
% Néel AFM ordering on the honeycomb lattice
ybbr3.genmagstr('mode', 'direct', 'unit', 'lu', 'S', [1 1 1 -1 -1 -1; 0 0 0 0 0 0; 0 0 0 0 0 0], 'n', [0 0 1], 'k', [0 0 0])
ybbr3.optmagsteep

%% Plot magnetic structure and info.
ybbr3.table('mag')
ybbr3.plot('range', [2.5 3 0.333], 'unit', 'lu')
% ybbr3.plot('ionMode','g')

% Program end
mducle commented 2 years ago

Hi Abraham,

it seems the issue is with your g-tensor which implies an extremely strong planar anisotropy keeping the spins in the x-y (same as a-b in this case) plane, because g_z is basically zero.

With your code, with a 1000T field there is a very small canting which is not visible in the plot but if you output the moment components using:

ybbr.magstr.S

you'll see there is a small z-component of 0.0171 with the x-component being 0.4997.

If you comment out the addg line, the 1000T field will fully polarise the moments along z.

I haven't read the paper you cited but just scanning it they don't seem to have a included a g-tensor (e.g. it's not in equation 1). In SpinW, the g-tensor is used to scale the magnetic field effect - e.g. the Zeeman term Hamiltonian is H.g.S so because you have such a small g_z component (4e-4) your field is effectively around 0.2 T instead of 1000T (by default the g-tensor is 2*I where I is the identity matrix).

So, the question is where does the A value come from, and why is it so small? If it is correct, I don't think you can use the model in the theory paper because they don't consider the very strong single-ion anisotropy the g-tensor you've inputted implies...

Best wishes,

Duc.

abehersan commented 2 years ago

Dear Duc, Thanks a lot for your thorough response. Indeed the paper I reference in the OP is just for illustrative purposes of the lattice structure and the field orientation. Now that I know what the issue was, I can proceed with refining the Hamiltonian's parameters and eventually fit some experimental data to the model. Just FYI; from a previous, less general spin Hamiltonian's fit, the magnetic anisotropy turned out to be quite small, hence the small value in the script - this, as you noted, is at odds with the proposed value of the gz-component... Thanks again for your clarification! Best, Abraham