Hamiltonian matrix labeling
Hamiltonian matrix labeling
I would like to further analyze the eigenvalues and eigenvectors of a spin Hamiltonian, but to do this I need to know how are the base states ordered. For example, in a S=1/2 and I=3/2 system, at zero field, does the labeling go |-1/2 -3/2>, |-1/2 -1/2> or in a different way? Thanks.
Last edited by marius on Thu Jun 04, 2015 10:37 am, edited 1 time in total.
-
- User
- Posts: 37
- Joined: Tue May 26, 2015 1:50 pm
- Contact:
Re: Hamiltonian matrix labeling
On the EasySpin website, go to Documentation > Functions > and check out the documentation for the function called "sop"
-
- EasySpin Creator
- Posts: 1120
- Joined: Mon Jul 21, 2014 10:11 pm
- Location: University of Washington
Re: Hamiltonian matrix labeling
In EasySpin, all spin matrices are represented in a conventional high-field Zeeman basis. For a single spin, the states are ordered in descending m. For a spin-1/2, the order is |+1/2> (first row, first column), |-1/2> (second row, second column). For a spin-1, the order is |+1>, |0>, |-1>.
For a multi-spin system, the representation is in the product basis |m1,m2,m3,...>, with the basis functions again in descending m order, left to right. E.g. for a system with one electron-1/2 and one nucleus with spin-1 the states are in the following order: |1/2,+1>, |1/2,0>, |1/2,-1>, |-1/2,+1>, |-1/2,0>, |-1/2,-1>.
Of course, these are the Zeeman states and are generally not the eigenstates of a spin system.
For a multi-spin system, the representation is in the product basis |m1,m2,m3,...>, with the basis functions again in descending m order, left to right. E.g. for a system with one electron-1/2 and one nucleus with spin-1 the states are in the following order: |1/2,+1>, |1/2,0>, |1/2,-1>, |-1/2,+1>, |-1/2,0>, |-1/2,-1>.
Of course, these are the Zeeman states and are generally not the eigenstates of a spin system.
Re: Hamiltonian matrix labeling
What about a system containing two coupled electron spins and a nuclear spin? If I consider your example and add a second spin 3/2, would the states be |1/2, 3/2, 1>, |1/2, 3/2, 0>, |1/2, 3/2, -1>, |1/2, 1/2, 1> etc.
While it might be a very borderline usage scenario for EasySpin, I was wondering if there is a way to go from the uncoupled basis to a coupled basis for the previous Hamiltonian. To continue with my previous example is there a quick way to represent the Hamiltonian in a basis where the electron spins are antiferromagnetically coupled, e.g. |2, 1>, |2, 0>, |2,-1>, |1, 1> (the first index is the coupled electron spin)?
While it might be a very borderline usage scenario for EasySpin, I was wondering if there is a way to go from the uncoupled basis to a coupled basis for the previous Hamiltonian. To continue with my previous example is there a quick way to represent the Hamiltonian in a basis where the electron spins are antiferromagnetically coupled, e.g. |2, 1>, |2, 0>, |2,-1>, |1, 1> (the first index is the coupled electron spin)?
-
- EasySpin Creator
- Posts: 1120
- Joined: Mon Jul 21, 2014 10:11 pm
- Location: University of Washington
Re: Hamiltonian matrix labeling
The easiest is to assemble the matrix of Clebsch-Gordan coefficients needed for the transformation, using EasySpin's
Here is how I would do it:
Then, to transform states, use
clebschgordan
function.Here is how I would do it:
Code: Select all
S1 = 1/2;
S2 = 1;
idxu = 1; % index of uncoupled basis funtion
clear C
for mS1 = S1:-1:-S1
for mS2 = S2:-1:-S2
idxc = 1; % index of coupled basis function
for Stot = S1+S2:-1:abs(S1-S2)
for mStot = Stot:-1:-Stot
C(idxc,idxu) = clebschgordan(S1,S2,Stot,mS1,mS2,mStot);
idxc = idxc + 1;
end
end
idxu = idxu + 1;
end
end
C
psi_c = C*psi_u
. To transform operators like the spin Hamiltonian, use H_c = C*H_u*C'
. c means coupled, and u means uncoupled.-
- EasySpin Creator
- Posts: 1120
- Joined: Mon Jul 21, 2014 10:11 pm
- Location: University of Washington
Re: Hamiltonian matrix labeling
The next version, EasySpin 5, will have a function called
cgmatrix
that constructs this transformation matrix.Re: Hamiltonian matrix labeling
I used the code that you posted for a more complex system. The goal is to transform the states of a system containing three spins: two electron and one nuclear. If the electron spins couple ferromagnetically, the eigenvectors of the states resulted from the coupling of this spin state to the nuclear spin look fine, but if the electron spins couple antiferromagnetically they are almost zero. Any ideas what might be the problem? Thank you.
Code: Select all
clear all; clc;
cm_to_MHz = 29979.2;
sys.S = [2.5, 2.0];
sys.g = [2.0, 2.0];
sys.Nucs = '55Mn';
sys.A = [[0, 0, 0; 0, 0, 0; 0, 0, 0], [-90, 0, 0; 0, -90, 0; 0, 0, -90]];
sys.ee = -2 * -10 * cm_to_MHz;
St = 1/2;
Hu = sham(sys, [0, 0, 0]);
X = spinvec(sys); S1 = X(1); S2 = X(2); I = X(3);
iu = 1;
for mS1 = S1:-1:-S1
for mS2 = S2:-1:-S2
for mI = I:-1:-I
ic = 1;
for S12 = S1+S2:-1:abs(S1-S2)
if S12 == St
for StI = S12+I:-1:abs(S12-I)
for mStI = StI:-1:-StI
C(ic,iu) = ...
clebschgordan([S1,mS1], [S2,mS2], [S1+S2,mS1+mS2]) * ...
clebschgordan([S1+S2,mS1+mS2], [I,mI], [StI,mStI]);
ic = ic + 1;
end
end
end
end
iu = iu + 1;
end
end
end
[Huvec, Huval] = eig(Hu);
% States resulted from the coupling of the total electron spin to the nuclear spin.
idx = (2*St+1)*(2*I+1);
Hvec = C * Huvec(:,1:idx);
Hvec
Re: Hamiltonian matrix labeling
Maybe my previous post was poorly stated. A better question is whether is possible to extend the cgmatrix to work with three (or more) spins or just take as argument the vector returned by the spinvec function.
-
- EasySpin Creator
- Posts: 1120
- Joined: Mon Jul 21, 2014 10:11 pm
- Location: University of Washington
Re: Hamiltonian matrix labeling
In principle, this is possible. However, for more than two spins, there are always several possible ways of coupling them. How would you suggest the interface should look like, say for 4 spins?
Re: Hamiltonian matrix labeling
The final result however should not depend on the coupling order of the spins. The code that I posted previously to calculate the CG coefficient matrix for a three spins system was wrong, and that's why the results were not good if the first two spins are coupled antiferromagneticaly. The code below should do the job for this case, but it is true that a simple generalization to an arbitrary number of spins is not that straight forward.
Code: Select all
iu = 1;
for mS1 = S1:-1:-S1
for mS2 = S2:-1:-S2
for mI = I:-1:-I
ic = 1;
for S12 = S1+S2:-1:abs(S1-S2)
for mStI = StI:-1:-StI
if abs(mS1 + mS2) <= abs(S12)
C(ic,iu) = ...
clebschgordan([S1,mS1], [S2,mS2], [S12,mS1+mS2]) * ...
clebschgordan([S12,mS1+mS2], [I,mI], [StI,mStI]);
else
C(ic,iu) = 0.0;
end
ic = ic + 1;
end
end
iu = iu + 1;
end
end
end