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:

  1. The total spin angular momentum $S=\Sigma|m_s|$ takes its maximum possible value;
  2. The total orbital angular momentum $L=\Sigma|m_l|$ is maximized;
  3. 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 [ ]: