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

Verify that anisotropy operators rotate correctly #261

Closed
kbarros opened this issue May 3, 2024 · 1 comment
Closed

Verify that anisotropy operators rotate correctly #261

kbarros opened this issue May 3, 2024 · 1 comment

Comments

@kbarros
Copy link
Member

kbarros commented May 3, 2024

David and I encountered this surprising Sunny behavior. I need to verify that it is doing the correct thing.

R = Sunny.rotation_between_vectors([1,1,1], [0,0,1])
𝒪 = stevens_matrices(Inf)

latvecs = hcat([0,1/2,1/2], [1/2, 0, 1/2], [1/2,1/2,0])
cryst1 = Crystal(latvecs, [[0,0,0]], 166)
view_crystal(cryst1)
print_site(cryst1, 1)

# At quartic level:
op1 = (-7𝒪[4,-3]-2𝒪[4,-2]+𝒪[4,-1]+𝒪[4,1]+7𝒪[4,3]) / (14/3)
op2 = (𝒪[4,0]+5𝒪[4,4]) / (-40/3)

cryst2 = Crystal(R*latvecs, [[0,0,0]], 166)
view_crystal(cryst2)
print_site(cryst2, 1)
print_site(cryst1, 1; R) # equivalent

# At quartic level:
op3 = 𝒪[4,0] * 9
op4 = (𝒪[4,-3]-𝒪[4,3]) * 18

# Here I expected to recreate op3 and op4, but the result is different
print_stevens_expansion(rotate_operator(op1, R))
print_stevens_expansion(rotate_operator(op2, R))
@kbarros
Copy link
Member Author

kbarros commented May 3, 2024

It is correct. With the appropriate linear combination of rotated op1 and op2, one can reproduce op3 and op4 above.

using Sunny
R = Sunny.rotation_between_vectors([1,1,1], [0,0,1])
𝒪 = stevens_matrices(Inf)

latvecs = hcat([0,1/2,1/2], [1/2, 0, 1/2], [1/2,1/2,0])
cryst1 = Crystal(latvecs, [[0,0,0]], 166)
print_site(cryst1, 1)
op1 = (-7𝒪[4,-3]-2𝒪[4,-2]+𝒪[4,-1]+𝒪[4,1]+7𝒪[4,3]) / (14/3)
op2 = (𝒪[4,0]+5𝒪[4,4]) / (-40/3)

op1_rot = rotate_operator(op1, R')
op2_rot = rotate_operator(op2, R')
print_stevens_expansion((op2_rot - op1_rot)*(140/27)) # 𝒪₄₀
print_stevens_expansion(op1_rot + op2_rot - (13/27) * (op1_rot - op2_rot)) # 2𝒪₄₋₃ - 2𝒪₄₃

# Can get the same operators by performing symmetry analysis on the rotated
# crystal
cryst2 = Crystal(R*latvecs, [[0,0,0]], 166)
print_site(cryst2, 1)
print_site(cryst1, 1; R) # equivalent

@kbarros kbarros closed this as completed May 3, 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