diff --git a/src/strategies_and_params/poststepstrategy.jl b/src/strategies_and_params/poststepstrategy.jl index 49dfb282b..33c702daa 100644 --- a/src/strategies_and_params/poststepstrategy.jl +++ b/src/strategies_and_params/poststepstrategy.jl @@ -260,7 +260,7 @@ julia> single_particle_density(v) (0.2, 1.0, 1.6, 1.0, 0.2) julia> single_particle_density(v; component=1) -(0.0, 1.6, 1.6, 0.4, 0.4) +(0.0, 0.8, 0.8, 0.2, 0.2) ``` # See also @@ -271,16 +271,12 @@ function single_particle_density(dvec; component=0) K = keytype(dvec) V = float(valtype(dvec)) M = num_modes(K) - N = num_particles(K) - result = mapreduce( - +, pairs(dvec); - init=MultiScalar(ntuple(_ -> zero(V), Val(M))) - ) do (k, v) - MultiScalar(v^2 .* single_particle_density(k; component)) + result = sum(pairs(dvec); init=MultiScalar(ntuple(_ -> zero(V), Val(M)))) do (k, v) + MultiScalar(abs2(v) .* single_particle_density(k; component)) end - return result.tuple ./ sum(result.tuple) .* N + return result.tuple ./ sum(abs2, dvec) end function single_particle_density(add::SingleComponentFockAddress; component=0) diff --git a/test/lomc.jl b/test/lomc.jl index 0c4aeca14..2b82db05e 100644 --- a/test/lomc.jl +++ b/test/lomc.jl @@ -516,7 +516,9 @@ Random.seed!(1234) @test single_particle_density(address) == (1, 3, 3) @test single_particle_density(address; component=1) == (1, 2, 3) @test single_particle_density(address; component=2) == (0, 1, 0) - @test single_particle_density(DVec(address => 1); component=2) == (0, 7, 0) + @test single_particle_density(DVec(address => 1); component=0) == (1, 3, 3) + @test single_particle_density(DVec(address => 2); component=1) == (1, 2, 3) + @test single_particle_density(DVec(address => 3); component=2) == (0, 1, 0) end end end