Skip to content

Commit

Permalink
Move intensities_bands back and fix SunnySuite#252
Browse files Browse the repository at this point in the history
  • Loading branch information
Lazersmoke committed May 22, 2024
1 parent 0823bff commit 6d6ce5e
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 29 deletions.
31 changes: 2 additions & 29 deletions src/Intensities/LinearSpinWaveIntensities.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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])

Expand All @@ -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



"""
Expand Down
26 changes: 26 additions & 0 deletions src/Spiral/SpiralSWT.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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


0 comments on commit 6d6ce5e

Please sign in to comment.