Hund's rules¶
This notebook illustrates Hund's rules that allow determining quantum numbers $S$, $L$ and $J$ of an isolated atom or ion from its electronic configuration. Considering a partially filled electronic shell, the following three rules have to be applied in the order given below:
- The total spin angular momentum $S=\Sigma|m_s|$ takes its maximum possible value;
- The total orbital angular momentum $L=\Sigma|m_l|$ is maximized;
- For more than half-filled shell, the total angular momentum number $J=L+S$, otherwise $J=\vert L-S \vert$.
The sliders allow choosing quantum number $l$ of the shell (1, 2 and 3 for $p$-, $d$- and $f$-shell, respectively) and the number of electrons filling it.
In [1]:
import numpy as np
import matplotlib.pyplot as plt
# from __future__ import print_function
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
In [2]:
spdf=['s','p','d','f','g','h'];
def interactive_hund(orbit,elecs):
nn=orbit*2-1;
ml=orbit-1;
L=0;
S=0;
J=0;
ax = plt.plot();
plt.xlim(nn-ml-0.1,0-ml-1+0.1);
plt.ylim(-1.5,2.5);
plt.yticks([]);
# plt.axis('off')
plt.xlabel('ml');
print(spdf[ml],'shell')
print('number of electrons =',elecs)
for x in range(-ml,ml+1):
plt.gca().add_patch(plt.Rectangle((x-0.4,-0.1),0.9,1.2,fill=False))
if (elecs<=nn):
for x in range(-ml,elecs-ml):
plt.arrow(-x,0,0,0.8,head_width=0.2)
S=S+0.5;
L=L+x;
J=abs(abs(L)-abs(S));
else:
for x in range(0-ml,elecs-nn-ml):
plt.arrow((-x+0.1),0,0,0.8,head_width=0.2)
plt.arrow((-x-0.1),1,0,-0.8,head_width=0.2)
#plt.arrow(nn-x+0.2,1.2,0,-1,head_width=0.2)
S=S+0;
L=L+x*2;
for x in range(elecs-nn-ml,nn-ml):
plt.arrow(-x,0,0,0.8,head_width=0.2)
S=S+0.5;
L=L+x;
J=abs(L)+abs(S);
print('L=',abs(L),'S=',S)
print('J=',J)
return
def interactive_hunds(shell):
interact(interactive_hund,orbit=fixed(shell+1),elecs=(1,(shell+1)*4-2))
return
In [3]:
interact(interactive_hunds,shell=(1,3))
interactive(children=(IntSlider(value=2, description='shell', max=3, min=1), Output()), _dom_classes=('widget-…
Out[3]:
<function __main__.interactive_hunds(shell)>
In [ ]: