SpinW / spinw

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

Inelastic Intensity Inconsistency #21

Closed GavinPhD closed 5 years ago

GavinPhD commented 5 years ago

I have two plots (shown below) that seem to have a discrepancy for what the intensity should be at a given reciprocal lattice point (0,0,0). If you look at the [-HH0] slice below it is much higher intensity at H=0 then the [H00] slice below. Is there something in the way the spectra is being calculated that would cause this?

mhh0calcspectra h00calcspectra

wardsimon commented 5 years ago

Hey Gavin, Is there any chance of getting the color bar to go along with the plots? Also, in the spectra structure returned from obj.spinwave can you find the corresponding H=0 index in index = all(spectra.hkl == [0 ; 0; 0], 1) and check the difference in the spectra.Sab(:,:,:,index). There is no reason why the intensities should be different as point calculation is non-contiguous, so I'm guessing something has happened with plotting.

GavinPhD commented 5 years ago

Hey Simon, Thanks for the quick response. I checked Sab for H=0 on both and they seem to have the same values (clips 1 and 2 below). After posting the plots above, I realized that I hadn't checked the color scale. Turns out they were different, however, remedying that did not fix the intensity discrepancy. I have included the plots with colorbars below.

H00 Sab and hkl values: h00

H-H0 Sab and hkl values: mhh0

H00 Spectra with colorbar: h00calcspectra

H-H0 Spectra with colorbar: mhh0calcspectra

wardsimon commented 5 years ago

Can you try:

spectra = obj.spinwave({[-1.5 0 0], [0 0 0], [1.5 -1.5 0], 301})

This will be traversing all Q vectors at once. Then:

spec = sw_neutron(spec);
spec = sw_egrid(spec,'component','Sperp')
figure;
sw_plotspec(spec)

This will give the correct output (I hope!). If it does, then the difference comes from either different components or convolution doing something with normalization.

GavinPhD commented 5 years ago

I ran the code you gave and got the left plot below, which looks fine. However, I found that when I enabled the g-tensor in obj.spinwave, I suddenly get the intensity discrepancy (right plot below), so it seems it may be deeper issue.

image

wardsimon commented 5 years ago

Hey Gavin, I've been looking into this and can see theoretically where it arises. Is it possible that you could email me the script so that I can do a bit more testing of the specific problem? Then I'll report back :-)

wardsimon commented 5 years ago

I've played around with the code and think it is a peculiarity with the system, where there is a singularity at [0, 0, 0]. I cant say why it occurs, but if you look at the structure factor maps the same thing happens at [0, 0, 0] but along [0, K, 0] with out the g-tensor albeit a far lesser extent.

Horace code

You can use the Horace interface and play around with this and see if it makes sense.

horaceObj = d4d(obj.abc,[1 0 0 0],[-0.5,0.05,0.5],[0 1 0 0],[-0.5,0.05,0.5],[0 0 1 0],[-0.5,0.05,0.5],[0 0 0 1],[0,0.01,10]);
horaceObj = disp2sqw_eval(horaceObj,@obj.horace,{'component','Sperp','gtensor',true}, 0.09);
horaceObj2 = d4d(obj.abc,[1 0 0 0],[-0.5,0.05,0.5],[0 1 0 0],[-0.5,0.05,0.5],[0 0 1 0],[-0.5,0.05,0.5],[0 0 0 1],[0,0.01,10]);
horaceObj2 = disp2sqw_eval(horaceObj2,@obj.horace,{'component','Sperp','gtensor',false}, 0.09);

[H, K, 0] plane

With g-tensor Without g-tensor
HK_plane_withG HK_plane_withoutG

[H, 0, L] plane

With g-tensor Without g-tensor
HL_plane_withG HL_plane_withoutG

[0, K, L] plane

With g-tensor Without g-tensor
KL_plane_withG KL_plane_withoutG
GavinPhD commented 5 years ago

Thanks for looking into that, Simon. I am not sure why there would be a singularity at (0, 0, 0) for this system (as we definitely don't see one experimentally). If I happen to discover why that exists at some point I will let you know.