1
0
mirror of https://github.com/kalmarek/PropertyT.jl.git synced 2024-07-16 10:40:29 +02:00
PropertyT.jl/src/laplacians.jl

62 lines
1.8 KiB
Julia
Raw Normal View History

2018-09-05 08:58:46 +02:00
###############################################################################
#
# Laplacians
#
###############################################################################
function spLaplacian(RG::GroupRing, S::AbstractVector{El}, T::Type=Float64) where El
2018-09-05 08:58:46 +02:00
result = RG(T)
id = (El <: AbstractAlgebra.NCRingElem ? one(RG.group) : RG.group())
result[id] = T(length(S))
2018-09-05 08:58:46 +02:00
for s in S
result[s] -= one(T)
end
return result
end
function Laplacian(S::AbstractVector{REl}, halfradius) where REl<:AbstractAlgebra.NCRingElem
2018-09-05 08:58:46 +02:00
R = parent(first(S))
return Laplacian(S, one(R), halfradius)
2018-09-05 08:58:46 +02:00
end
function Laplacian(S::AbstractVector{E}, halfradius) where E<:AbstractAlgebra.GroupElem
2018-09-05 08:58:46 +02:00
G = parent(first(S))
return Laplacian(S, G(), halfradius)
2018-09-05 08:58:46 +02:00
end
function Laplacian(S, Id, halfradius)
@info "Generating metric ball of radius" radius=2halfradius
@time E_R, sizes = Groups.generate_balls(S, Id, radius=2halfradius)
2019-02-24 00:17:20 +01:00
@info "Generated balls:" sizes
2018-09-05 08:58:46 +02:00
2019-02-24 00:17:20 +01:00
@info "Creating product matrix..."
rdict = GroupRings.reverse_dict(E_R)
@time pm = GroupRings.create_pm(E_R, rdict, sizes[halfradius]; twisted=true)
2018-09-05 08:58:46 +02:00
RG = GroupRing(parent(Id), E_R, rdict, pm)
2018-09-05 08:58:46 +02:00
Δ = spLaplacian(RG, S)
return Δ
end
2019-01-11 06:33:14 +01:00
function saveGRElem(fname::String, g::GroupRingElem)
2018-09-16 18:02:35 +02:00
RG = parent(g)
2019-01-11 06:33:14 +01:00
JLD.save(fname, "coeffs", g.coeffs, "pm", RG.pm, "G", RG.group)
end
function loadGRElem(fname::String, RG::GroupRing)
coeffs = load(fname, "coeffs")
return GroupRingElem(coeffs, RG)
2018-09-16 18:02:35 +02:00
end
function loadGRElem(fname::String, G::Union{Group, NCRing})
2019-01-11 06:33:14 +01:00
pm = load(fname, "pm")
RG = GroupRing(G, pm)
2019-04-12 23:18:48 +02:00
return loadGRElem(fname, RG)
2019-01-11 06:33:14 +01:00
end
function loadGRElem(fname::String)
pm, G = load(fname, "pm", "G")
RG = GroupRing(G, pm)
return loadGRElem(fname, RG)
2018-09-05 08:58:46 +02:00
end