Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Notation for tensor product space #177

Closed
kbarros opened this issue Oct 5, 2023 · 2 comments
Closed

Notation for tensor product space #177

kbarros opened this issue Oct 5, 2023 · 2 comments
Assignees

Comments

@kbarros
Copy link
Member

kbarros commented Oct 5, 2023

Continuation of #63, here are some ideas for notation that generalizes to entangled units:

# The common case avoids notational issues
set_onsite_coupling!(sys, S -> S[3]^2, i)
set_pair_coupling!(sys, (Si, Sj) -> Si'*J*Sj, bond)

# Equivalent to above
S = spin_matrices(3/2)
set_onsite_coupling!(sys, S[3]^2, i)
Si, Sj = to_product_space(S, S)
set_pair_coupling!(sys, Si'*J*Sj, bond)

# Working in a local tensor product space S=3/2 ⊗ S=1 for explicit spin-orbit
System(... [SiteInfo(i; ProductSpace(3/2, 1), magnetic_dipole)] ...)
S, L = to_product_space(spin_matrices.([3/2, 1])...)
set_onsite_coupling!(sys, S'*L, i)
Si, Li, Sj, Lj = to_product_space(spin_matrices.([3/2, 1, 3/2, 1])...)
set_pair_coupling!(sys, Si'*Sj, bond)

# Projecting onto multiplets S=1/2 ⊕ S=3/2
System(... [SiteInfo(i; MultipletSpace(1/2, 3/2), magnetic_dipole)] ...)
S, L = to_product_space(spin_matrices.([3/2, 1])...)

# P is a (2*4)x(4*3) matrix that maps from tensor product space to projected
# multiplet space
P = projector_onto_multiplets(; j1=3/2, j2=1, J=(1/2, 3/2))
set_onsite_coupling!(sys, P'*S'*L*P, i)

# Building interactions between multiplets should project only at the final
# step
Si, Li, Sj, Lj = to_product_space(spin_matrices.([3/2, 1, 3/2, 1])...)
PP = kron(P, P)
set_pair_coupling!(sys, PP'*(Si'*Sj + (Si'*Sj)^2)*PP, bond)

# If the Hilbert space gets too large, it's also possible to project earlier,
# but this requires a lot of care.
T = [P'*S[α]*P for α in 1:3]
Ti, Tj = to_product_space(T, T)
set_pair_coupling!(sys, Ti'*Tj, bond) # This is OK
set_pair_coupling!(sys, (Ti'*Tj)^2, bond) # This is wrong, projection happened too early!
@kbarros
Copy link
Member Author

kbarros commented Oct 22, 2023

Significant progress with #178, which now supports anonymous function syntax in set_onsite_coupling! and set_pair_coupling!, and general quadrupole-quadrupole couplings in all modes.

The next big task is to teach System about the SU(2) representation via some generalization of SpinInfo

@kbarros kbarros self-assigned this Nov 26, 2023
@kbarros
Copy link
Member Author

kbarros commented Jun 8, 2024

For tensor product spaces, the current plan is to create a wrapper on top of System. Implementation of these entangled units is underway in @ddahlbom's branch. Support for a direct sum of multiplet spin representations is not currently planned.

@kbarros kbarros closed this as completed Jun 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant