diff --git a/src/Intensities/LinearSpinWaveIntensities.jl b/src/Intensities/LinearSpinWaveIntensities.jl index b273d7810..33b5e83ee 100644 --- a/src/Intensities/LinearSpinWaveIntensities.jl +++ b/src/Intensities/LinearSpinWaveIntensities.jl @@ -65,8 +65,8 @@ function intensities_bands(swt::SpinWaveTheory, ks, formula::SpinWaveIntensityFo # Get the type parameter from the BandStructure return_type = typeof(formula).parameters[1].parameters[2] - band_dispersions = zeros(Float64,length(ks),nmodes) - band_intensities = zeros(return_type,length(ks),nmodes) + band_dispersions = zeros(Float64,size(ks)...,nmodes) + band_intensities = zeros(return_type,size(ks)...,nmodes) for kidx in CartesianIndices(ks) band_structure = formula.calc_intensity(swt, ks[kidx]) @@ -77,33 +77,6 @@ function intensities_bands(swt::SpinWaveTheory, ks, formula::SpinWaveIntensityFo return band_dispersions, band_intensities end -function intensities_bands(swt::SpinWaveTheory, ks, formula::DipoleSingleQSpinWaveIntensityFormula) - if !isnothing(formula.kernel) - # This is only triggered if the user has explicitly specified a formula with e.g. kT - # corrections applied, but has not disabled the broadening kernel. - error("intensities_bands: Can't compute band intensities if a broadening kernel is applied.\nTry intensity_formula(...; kernel = delta_function_kernel)") - end - - ks = Sunny.Vec3.(ks) - nmodes = Sunny.nbands(swt) - - # Get the type parameter from the BandStructure - return_type = typeof(formula).parameters[1].parameters[2] - - band_dispersions = zeros(Float64,length(ks),3*nmodes) - band_intensities = zeros(return_type,length(ks),3*nmodes) - #for branch = 1:3 - for kidx in CartesianIndices(ks) - band_structure = formula.calc_intensity(swt, ks[kidx]) - - # Place the BandStructure at each point into its location in the array - band_dispersions[kidx,:] .= band_structure.dispersion - band_intensities[kidx,:] .= band_structure.intensity - end - #end - return band_dispersions, band_intensities -end - """ diff --git a/src/Spiral/SpiralSWT.jl b/src/Spiral/SpiralSWT.jl index 14ec5dacf..2ef226f85 100644 --- a/src/Spiral/SpiralSWT.jl +++ b/src/Spiral/SpiralSWT.jl @@ -387,3 +387,29 @@ function intensity_formula_SingleQ(f::Function, swt::SpinWaveTheory, k, n, corr_ output_type = isnothing(kernel) ? Sunny.BandStructure{L,return_type} : return_type DipoleSingleQSpinWaveIntensityFormula{output_type}(n,k,string_formula,kernel_edep,calc_intensity) end + +function intensities_bands(swt::SpinWaveTheory, ks, formula::DipoleSingleQSpinWaveIntensityFormula) + if !isnothing(formula.kernel) + # This is only triggered if the user has explicitly specified a formula with e.g. kT + # corrections applied, but has not disabled the broadening kernel. + error("intensities_bands: Can't compute band intensities if a broadening kernel is applied.\nTry intensity_formula(...; kernel = delta_function_kernel)") + end + + ks = Sunny.Vec3.(ks) + nmodes = Sunny.nbands(swt) + + # Get the type parameter from the BandStructure + return_type = typeof(formula).parameters[1].parameters[2] + + band_dispersions = zeros(Float64,size(ks)...,3*nmodes) + band_intensities = zeros(return_type,size(ks)...,3*nmodes) + for kidx in CartesianIndices(ks) + band_structure = formula.calc_intensity(swt, ks[kidx]) + + band_dispersions[kidx,:] .= band_structure.dispersion + band_intensities[kidx,:] .= band_structure.intensity + end + return band_dispersions, band_intensities +end + +