From b79c57d7db67d6eebb5f44cb2633296e0375f029 Mon Sep 17 00:00:00 2001 From: ysyapa Date: Fri, 25 Aug 2023 20:35:48 +0000 Subject: [PATCH] Simple reduction (still wrong) --- common.jl | 8 ++++---- irrep.jl | 18 +++++++++--------- testing.jl | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/common.jl b/common.jl index 672551f..a339b95 100644 --- a/common.jl +++ b/common.jl @@ -15,17 +15,18 @@ struct system{T} unique_i::Array{Int} unique_point::Array{Int} multiplicity::Array{Int} + labels::Array{Int} function system{T}(d::Int, n::Int, N::Int, L::Real, μ::Real=0.5, sym::rep=all) where {T<:Float} @assert d == 3 "Only supports 3D" if sym == all - unique_i, unique_point, multiplicity = calculate_all_data(N) + unique_i, unique_point, multiplicity, labels = calculate_all_data(N) elseif sym == A1 - unique_i, unique_point, multiplicity = calculate_A1_data(N) + unique_i, unique_point, multiplicity, labels = calculate_A1_data(N) else throw(ArgumentError("Symmetry not yet implemented")) end - return new{T}(d, n, N, convert(T, L), convert(T, μ), sym, unique_i, unique_point, multiplicity) + return new{T}(d, n, N, convert(T, L), convert(T, μ), sym, unique_i, unique_point, multiplicity, labels) end end @@ -90,7 +91,6 @@ function calculate_Vs(s::system{T}, V_twobody::Function, ϕ::T, n_image::Int)::A end end end - Vs[i] *= s.multiplicity[i[1]] end return Vs end diff --git a/irrep.jl b/irrep.jl index beb00a5..0b0c1a8 100644 --- a/irrep.jl +++ b/irrep.jl @@ -3,12 +3,13 @@ using DelimitedFiles, LinearAlgebra function calculate_all_data(N::Int) ks = -N÷2:N÷2-1 lattice = hcat((collect.(Iterators.product(ks, ks, ks)))...) + labels = reshape(collect(1:N^3), (N, N, N)) unique_i = collect(1:N^3) multiplicity = fill(1, length(unique_i)) unique_point = transpose(lattice) - return unique_i, unique_point, multiplicity + return unique_i, unique_point, multiplicity, labels end function calculate_A1_data(N::Int) @@ -38,7 +39,7 @@ function calculate_A1_data(N::Int) multiplicity = [count(labels.==i) for i in unique_i] unique_point = transpose(lattice[:, unique_i]) - return unique_i, unique_point, multiplicity + return unique_i, unique_point, multiplicity, labels end function sym_reduce(s, K_partial) @@ -47,13 +48,12 @@ function sym_reduce(s, K_partial) K_partial_y = kron(kron(I, K_partial), I) K_partial_z = kron(kron(I, I), K_partial) - for (i, j) in enumerate(s.unique_i) - K_partial_x[j, :] *= sqrt(s.multiplicity[i]) - K_partial_x[:, j] *= sqrt(s.multiplicity[i]) - K_partial_y[j, :] *= sqrt(s.multiplicity[i]) - K_partial_y[:, j] *= sqrt(s.multiplicity[i]) - K_partial_z[j, :] *= sqrt(s.multiplicity[i]) - K_partial_z[:, j] *= sqrt(s.multiplicity[i]) + for (i, label) in enumerate(s.labels) + if i != label + K_partial_x[:, i] += K_partial_x[:, label] + K_partial_y[:, i] += K_partial_y[:, label] + K_partial_z[:, i] += K_partial_z[:, label] + end end K_partial_x = K_partial_x[s.unique_i, s.unique_i] diff --git a/testing.jl b/testing.jl index d630c32..d484665 100644 --- a/testing.jl +++ b/testing.jl @@ -12,7 +12,7 @@ n = 2 N = 16 println("\n$n-body system with N=$N") -for L::T in 5.0:9.0 +for L::T in [16] println("L=$L") println("Constructing Hamiltonian") s=system{T}(3,n,N,L,0.5,A1)