Skip to content

spin spiral dispersion energy with pair hamiltonian and multiple atoms per unit cell #648

@loudesplat

Description

@loudesplat

Dear spirit developers,
I am writing to get some clarification on the pair hamiltonian when one has more than one atom per unit cell.
This is my basis and bravais vectors:

bravais_lattice hex2d120

basis
3 # number of spins in the basis
0.0 0.0 0.0 
 0.0 0.0 0.62
0.33 0.66 0.30

Firstly, the heisenberg_neighbours hamiltonian is completely unable to find even the first pair correctly (which should be between atoms 0 and 1 within the same uc), so one has no choice but to use heisenberg_neighbours, as shown below

n_shells_exchange 2
jij 		 109.8460   30.4400 

output:


###    Interaction neighbours:

n_neighbours_exchange 4

 i   j     da  db  dc           Jij      

 0   2      0  -1   0      109.84600000  
 1   2      0  -1   0       30.44000000  
 2   0      0   1   0      109.84600000  
 2   1      0   1   0       30.44000000

When specifying only interlayer exchange, aka pairs in different uc's, I am able to reproduce the theorical spin spiral dispersion (aka E(q)=sum_r J(r) cos(q*r)) with no issue:

n_interaction_pairs  	 18 
 i j   da db dc    Jij   Dij  Dijx Dijy Dijz 
1 	 1 	 -1  	 -1 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
1 	 1 	 0  	 -1 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
1 	 1 	 -1  	 0 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
1 	 1 	 1  	 -0 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
1 	 1 	 -0  	 1 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
1 	 1 	 1  	 1 	 0 	 -2.1170 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 -1  	 -1 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 0  	 -1 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 -1  	 0 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 1  	 -0 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 -0  	 1 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 0 	 1  	 1 	 0 	 -0.1985 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 -1  	 -1 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 0  	 -1 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 -1  	 0 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 1  	 -0 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 -0  	 1 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 2 	 1  	 1 	 0 	 -3.2540 	 0.0000 	 0.0000 	 0.0000  	 0.0000 

Image

However, when trying to specify the intralayer pairs within the same uc, the spin spiral dispersion obtained from spirit no longer matches the theory:

n_interaction_pairs  	 8 
 i j   da db dc    Jij   Dij  Dijx Dijy Dijz 
1 	 0 	 0  	 0 	 0 	 54.9230 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 1 	 0  	 0 	 0 	 54.9230 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 2 	 0  	 0 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 2 	 1  	 -0 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
0 	 2 	 1  	 1 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 0 	 -1  	 -1 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 0 	 -1  	 0 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
2 	 0 	 0  	 0 	 0 	 15.2200 	 0.0000 	 0.0000 	 0.0000  	 0.0000 
Image

Note that here the bond for J_1 is always perpendicular to q so it contributes a constant value of -J_1/uc and always between atoms of the same uc, I believe the issue may come from J_2.

I am wondering if specifying pairs within the same uc should be done a bit differently than in different ucs? Here I specify all lattice rotations which includes also the J_2 pairs between different ucs. Or there maybe be an issue elsewhere or something I am missing?

I hope this question makes sense.
Thank you in advance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions