Following the calculation of 18O in this post, it should be easy to have the calculation done for 16C, assuming 14C is an inert core.
From 15C, we know that the s-orbital is lower than the d-orbital,
MeV
MeV
The ground state of 16C with respect to 14C is
MeV.
with these numbers, we have MeV, which is similar to the value for 18O, as it should be. The matrixes for 18O and 16C should be the same with the numerical values different.
The states are
Here are the energy levels
The calculation is far off from the experimental data.
There is a 15C(d,p) experiment A.H. Wuosmaa et al., PRL 105, 132501 (2010), extracted the SF for the low-lying states:
State of 16C
J-pi
SF
0.000
0+
0.6 +- 0.1
1.766
2+
0.5 +- 0.1
3.027
0+
1.4 +- 0.3
3.986 *
2+
< 0.34
4.088 *
3+
0.82 – 1.06
* cannot be resolved in the experiment.
The experimental data tell us the configuration of 16C, if 14C is an inert core, should be, (using the sum rule to normalize the SF)
The SFs of the states are not too far off. while that of states are very different. The state is lower than the experimental value as expected. And the state is more or less the same energy. Notice that, the experiment cannot resolve the 3+ state from the 2nd 2+ state and also the 4+ state due to energy resolution, so the SF may be not reliable.
The residual interaction for the states was also deduced from the experimental data.
If we take the , the off-diagonal term should be 1.59, and the d-orbital TBME should be 2.76. Using the experimental value, the energy and SF can be reproduced, as they should be.
The interesting thing is, if the SF for the states are similar to that of the experiment, why the energies are different? In 18O, the states are well reproduced. Could it be because the 14C is not a good core?
Let’s suppose the orbital has an angular momentum of . What is the allowed coupling for identical particles?
for , the problem is easy, using a simple symmetry argument, we know that only even are allowed.
for the general case, we need two theorems.
Theorem 1
For a multi-particle wave function satisfy
and
where is the rising operator. The wave function is an eigen function of , so that
i.e, the angular momentum of the wave function is .
Proof.
Using
we have
Thus
Theorem 2
Suppose a given configuration for identical particles, and there are distinguish Slater determinants so that . If there are linearly independent Slater determinants with , then there are linearly independent states with total angular momentum .
Before the proof, let’s demonstrate the theorems. Let’s say, in orbital, there are 10 m-states or configurations regards the z-component. For 3 identical particles, we can construct 10 distinguish Slater determinants:
M-value
Slater determinant
M=9/2
1/2, 3/2, 5/2
M=7/2
-1/2, 3/2, 5/2
M=5/2
-3/2, 3/2, 5/2
-1/2, 1/2, 5/2
M=3/2
-5/2, 3/2, 5/2
-3/2, 1/2, 5/2
-1/2, 1/2, 3/2
M=1/2
-5/2, 1/2, 5/2
-3/2, 1/2, 5/2
-3/2, 1/2, 3/2
Take and , the number of Slater determinant is equal to that of , thus, according to the theorem, no state can be constructed with the total angular momentum of .
Proof.
Let’s write down the linear combination of all Slater determinants as
Apply the rising operator , and we have
If we want to construct a state with , we need according to Theorem 1.
Thus, we have equations with unknown, so that we can have solutions for states with .
So, what is the possible state for identical particle in orbital?
The middle part of the Theorem 2 is already demonstrated. We need to construct all possible configurations, starting from the highest to the lowest.
Here is a python code:
from itertools import combinations
from collections import Counter
def generate_combinations(numbers, n):
valid_combinations = []
for combo in combinations(numbers, n):
if sum(combo) >= 0:
valid_combinations.append(combo)
return valid_combinations
def AllowedJ(j, n):
number_list = list(range(-int(2*j), int(2*j)+1,2))
valid_combinations = generate_combinations(number_list, n)
print("Possible Slater determinants:")
for combo in valid_combinations: print(" ",combo)
print("Number of valid combinations:", len(valid_combinations))
sum_counts = Counter(sum(combo) for combo in valid_combinations)
sorted_sum_counts = sorted(sum_counts.items(), key=lambda item: item[1], reverse=True)[::-1]
print("Distinct J and frequencies:")
for (sum_val, count) in sorted_sum_counts:
print(f" J {sum_val}/2: Count {count}")
print("Allowed J :")
for index, x in enumerate(sorted_sum_counts):
if index == 0 :
print(f" J {x[0]}/2: Count {x[1]}")
else:
if x[1]-sorted_sum_counts[index-1][1] > 0 :
print(f" J {x[0]}/2: Count {x[1]-sorted_sum_counts[index-1][1]}")
Let index the orbitals as 1, 2, 3, 4 …. for example, in p-shell,
p1/2
p3/2
for in p-sd shell
p1/2
p3/2
d3/2
d5/2
s1/2
There are 3 step to generate the list.
First, we need to generate a list of all possible index pair. For example, in p-shell, the possible pair is (1,1), (1,2), and (2,2).
Next, for each index pair, generate the possible angular momentum and isospin, and give a new list. For example, for the pair (1,1), which is p1/2 and p1/2 coupling, this can generate J = 0, 1. For J = 0, T = 1, and for J = 1, T = 0 due to the wavefunction of a nucleon pair must be anti-symmetric. Thus, we have
Thus, we have a new list of all possible pair states, denoted as (i, j, J, T)
(1, 1, 0, 1)
(1, 1, 1, 0)
(1, 2, 1, 0)
(1, 2, 1, 1)
(1, 2, 2, 0)
(1, 2, 2, 1)
(2, 2, 0, 1)
(2, 2, 1, 0)
(2, 2, 2, 1)
(2, 2, 3, 0)
Last, pick up any 2 of them as long as the (J, T) are equal. for example, (1, 1, 0, 1) can pair with itself as the (J, T) is the same, also it can be paired with (2, 2, 0, 1), and that is all. So, we have the list of all possible two-body matrix pair, denoted as [i, j, k, l, J, T]
[1, 1, 1, 1, 0, 1]
[1, 1, 1, 1, 1, 0]
[1, 1, 1, 2, 1, 0]
[1, 1, 2, 2, 0, 1]
[1, 1, 2, 2, 1, 0]
[1, 2, 1, 2, 1, 0]
[1, 2, 1, 2, 1, 1]
[1, 2, 1, 2, 2, 0]
[1, 2, 1, 2, 2, 1]
[1, 2, 2, 2, 1, 0]
[1, 2, 2, 2, 2, 1]
[2, 2, 2, 2, 0, 1]
[2, 2, 2, 2, 1, 0]
[2, 2, 2, 2, 2, 1]
[2, 2, 2, 2, 3, 0]
For the p-shell, a total of 15 TBMEs.
For the pn formulism, the method is basically the same.
Here is the Python code for generating the list of two-body pair
def Coupling(i, j, orbitalList): # index of the orbital
jList = [int(orb[1]) for orb in orbitalList]
minJ = abs(jList[i]-jList[j])//2
maxJ = (jList[i] + jList[j])//2
#print(minJ, maxJ)
if i == j:
return [ [J, 1 - (J % 2) ] for J in range(minJ, maxJ+1)]
else :
out = [ [J, 0 ] for J in range(minJ, maxJ+1)]
out += [ [J, 1 ] for J in range(minJ, maxJ+1)]
return sorted(out, key=lambda x: x[0])
def GenIndexPair(indexList):
combinations = []
for i in range(len(indexList)):
for j in range(i, len(indexList)):
combination = [indexList[i], indexList[j]]
combinations.append(combination)
return combinations # return all possible index pair
def TBcouping(indexPairList, orbitalList):
TB = []
for a in indexPairList:
scheme = Coupling(a[0], a[1], orbitalList)
for b in scheme:
TB.append(a + b )
return TB ## array of [i, j, J, T]
def GenTwoBodyMatrix(TB):
TBME = []
for i in range(len(TB)):
for j in range(i, len(TB)):
if TB[i][2] != TB[j][2] or TB[i][3] != TB[j][3] : continue
TBME.append([TB[i][0]+1, TB[i][1]+1, TB[j][0]+1, TB[j][1]+1, TB[i][2], TB[i][3]])
return TBME
def GenTBM(orbitalList):
haha = GenIndexPair([i for i in range(len(orbitalList))])
TB = TBcouping(haha, orbitalList)
TBME = sorted(GenTwoBodyMatrix(TB), key=lambda x : (x[-1], x[-2]))
print("Number of element : %d " % len(TBME))
return TBME
def GenTBM_PN(orbitalList):
orbtialListPN = orbitalList*2
nOrb = len(orbtialListPN)
indexPairList = [x for x in GenIndexPair([i for i in range(len(orbtialListPN))]) if x[0] < nOrb//2 and x[1] < nOrb//2 ]
TB = TBcouping(indexPairList, orbtialListPN)
TzPP = sorted([x[:-1] for x in GenTwoBodyMatrix(TB) if x[-1] == 1], key = lambda x : (x[0], x[1], x[2], x[3], x[4]))
indexPairList = [x for x in GenIndexPair([i for i in range(len(orbtialListPN))]) if x[0] >= nOrb//2 and x[1] >= nOrb//2 ]
TB = TBcouping(indexPairList, orbtialListPN)
TzNN = sorted([x[:-1] for x in GenTwoBodyMatrix(TB) if x[-1] == 1], key = lambda x : (x[0], x[1], x[2], x[3], x[4]))
indexPairList = [x for x in GenIndexPair([i for i in range(len(orbtialListPN))]) if x[0] < nOrb//2 and x[1] >= nOrb//2 ]
TB = TBcouping(indexPairList, orbtialListPN)
TzPN = sorted([x[:-1] for x in GenTwoBodyMatrix(TB) if x[-1] == 0], key = lambda x : (x[0], x[1], x[2], x[3], x[4]))
print("(T = 1 [%d])x2 + (T = 0 [%d]) = %d" % (len(TzPP), len(TzPN), len(TzPP)*2 + len(TzPN)) )
return TzPP + TzNN + TzPN
I used to use OxBash [B. A. Brown et al., MSU-NSCL Report No. 1289] on Windows for shell model calculation and spectroscopic overlap between nuclei. I searched for some shell model code for LINUX or Mac. It comes up with the KSHELL [https://sites.google.com/alumni.tsukuba.ac.jp/kshell-nuclear/] developed by Prof. Noritaka Shimizu 清水 則孝.
The advantage of the code is that it uses all cores for a 1 CPU machine. Also, the kshell_ui.py is very user-friendly. For example, using USDB interaction on 12C will tell you 12C is out of the configuration space. In addition, the calculation of spectroscopic factors is more effortless, all included in the kshell_ui.py. In comparison, OxBash required you to manually input the wavefunction overlap. Moreover, KSHELL always treats proton and neutron shells separately.
In Ubuntu 22.04 on a 1 CPU with a multi-core machine, the only required packages are
sudo apt-get install libblas-dev liblapack-dev
and also add a symbolic link at /usr/bin to set python to python3
/usr/bin>sudo ln -s python3 python
Download the package and go to the src file, modify the Makefile. In my case, I comment out the default and uncomment the following:
# --- GNU Fortran compiler, single node
FC = gfortran
FFLAGS = -O3 -fopenmp -fallow-argument-mismatch
LIBS = -llapack -lblas -lm
After make, the executable will be placed in the bin folder.
The summary_*.txt give the energy levels and the log_*.txt provides detail of the calculation. At the end of log_*.txt, the particle numbers for each orbital for each energy level are shown.
Convert the occupancies to wave function
KSHELL will give the particle numbers for each orbital for each energy level, which is convenient. Suppose we calculated the 18O using KSHELL with USDB interaction.
The ground state particle numbers are
Since the wave function for the ground state, 0+ must be
where is the 16O core, and
The number of particles can be extracted by using the Number operator , where is the orbital, so that . The number of particles in each orbital is then
so, that the total number of particles is 2. Comparing this post, which only uses 2 orbitals, the numbers more or less agree.
For the 2+ state, the wave function is
Then
Installation for Mac OSX Ventura 13.3
Although the gfortran is available in Mac OSX, but the crt0.o is removed. It is easier to download the Intel Fortran compiler.
The code should be compiled without any problem. In Ventura 13.3, there is no python but python3. You can create a symbolic link in /usr/local/bin/. Also for some reason, when running the KSHELL, although the mkl library is installed, it searches for the wrong path for the lib, the bullforce way to change that is add all mkl dynamic library to the search path, my my case
This post is copy from the book Theory Of The Nuclear Shell Model by R. D. Lawson, chapter 1.2.1
The model space is only the 0d5/2 and 1s1/2, and the number of valence nucleon is 2. The angular coupling of the 2 neutrons in these 2 orbitals are
Note that for identical particle, the allowed J coupled in same orbital must be even due to anti-symmetry of Fermion system.
The spin 3, and 4 can only be formed by (0d5/2)(1s1/2) and (0d5/2)^2 respectively.
Since the Hamiltonian commute with total spin, i.e., the matrix is block diagonal in J that the cross J matrix element is zero,
or to say, there is no mixture between difference spin. The Hamiltonian in matrix form is like,
The metrix element of J=3 and J=4 is a 1 × 1 matrix or a scalar.
where is the single particle energy.
Suppose the residual interaction is an attractive delta interaction
Be fore we evaluate the general matrix element,
We have to for the wave function ,
where is the isospin, and the single particle wave function is
Since the residual interaction is a delta function, the integral is evaluated at , thus the radial function and spherical harmonic can be pulled out in the 2-particle wave function at is
using the property of Clebsch-Gordon coefficient for spin half system
where
which is equal to
For
With some complicated calculation, the J-J coupling scheme go to L-S coupling scheme that
with
Return to the matrix element
Since the matrix element should not depends on , thus, we sum on M and divide by ,
with
( i give up, just copy the result ), for ,
The block matrix are
To solve the eigen systems, it is better to find the from experimental data. The single particle energy of the d and s-orbtial can be found from 17O, We set the reference energy to the binding energy of 16O,
the ground state of 18O is
Solving the , the eigen value are
Thus,
The solution for all status are
The 2nd 0+ state is missing in above calculation. This is due to core-excitation that 2 p-shell proton promotes to d-shell.
In the sd- shell, there are 2 protons and 2 neutrons coupled to the lowest state. which is the same s-d shell configuration as 20Ne. The energy is
In the p-shell, the configuration is same as 14C, the energy is
Thus, the energy for the 2-particle 2-hole of 18O is
,
where is the p-sd interaction, there are 4 particle in sd-shell and 2 hole in p-shell, thus, total of 8 particle-hole interaction.
The particle-hole can be estimate using 19F 1/2- state, This state is known to be a promotion of a p-shell proton into sd-shell.
In the sd-shell of 19F, the configuration is same as 20Ne. In the p-shell of 19F , the configuration is same as 15N, the energy is
Thus, the energy for the 1/2- state of 19F relative to 16O is
And this energy is also equal to
Thus,
Therefore, the 2nd 0+ energy of 18O is
Compare the experimental value of 3.63 MeV, this is a fair estimation.
It is interesting that, we did not really calculate the radial integral, and the angular part is calculated solely base on the algebra of J-coupling and the properties of delta interaction.
And since the single particle energies and residual interaction are extracted from experiment. Thus, we can think that the basis is the “realistic” orbital of d and s -shell.
The spectroscopic strength and the wave function of the 18O ground state is . In here the basis wavefunctions are the “realistic” or “natural” basis.
This post is an extraction from “Theory of the nuclear shell model” by R.D. Lawson, Chapter 1.1.2
In a simple construction, the single-particle wave function is
And the many body Slater determinants is
where is a set of n states from the model space. Thus, for given , there are many possible choices of .
And the Hamiltonian is expanded into the space of .
I thought this is the end of the story, until I read the Chapter 1.1.2
To continuous further, we need 2 theorems. The 1st one is that.
If , then, and
This is kind of trivial, as the Ladder operator cannot promote the m-state any further, the m-state must be maximized and equal to J.
Before go to the 2nd theorem, let introduce the creation operator , and denote the Slater determinant as
The 2nd one is a bit complicated.
In a given model space ( j_1, j_2, …., j_k) with n particles. For a p distinct Slater determinants with . Suppose there are another p+q distinct Slater determinants , so that , thus, q states with angular momentum J= M-1 can be constructed$.
Lets use an example to illustrate, say, we have a model space of 0d5/2 with 2 particles, we can construct the state as,
And for , the only possible state is
Since the number of state for is 1, and so . The number of state for is also 1, thus . Therefore, according to the theorem 2, there is no state for . And we knew that, from a 2 particles in d5/2 shell can only form J = 0, 2, 4, due to the anti-symmetric of Fermions system.
we can continuous, , there are 2 possible states,
Thus, this time, (as M=3 has 1 state) and , therefore, there is 1 state of can be constructed.
For ,
Thus, the number of state is 0.
For ,
Therefore, the number of state is 1. In summary,
The number of J = 4 state = 1. The number of J = 3 state = 0. The number of J = 2 state = 1. The number of J = 1 state = 0. The number of J = 0 state = 1.
Another way to do so is draw a table
m,
4
3
2
1
0
2
1
0
-1
0
-1
-2
-2
-3
-4
5/2
x
x
x
x
x
3/2
x
x
x
x
x
1/2
x
x
x
x
x
-1/2
x
x
x
x
x
-3/2
x
x
x
x
x
-5/2
x
x
x
x
x
Ignore the negative , and we can deduce the number of state for .
The prove of the 2nd theorem is skipped. And I like to add an auxiliary theorem that for n identical particle in the j-orbital, the maximum spin is
This theorem can be proved by using the 1st theorem. The reason that this theorem is included is that, the anti-symmetry property implicitly contains in this theorem, and I see the elegant and beauty in it. Also, this also an example that theorem is trivial but useful.
Back to the wave function construction, the wave function,
is only a component, or part of the total wave function of spin J. For example, the coupling of 0d5/2 and 1s1/2 states, we can construct
But hold-on, we missed the coupling coefficient, without the coupling coefficient, we actually did not know the total J!! The proper wave function should be
Up to now, we should separate two wave function, and . And more important, we drop the J in .
— single particle orbital — m-state — many-body wave function with spin J
when only 2 particles, the is the Clebsch-Gordon coefficient.
We now give an example on (0d5/2)^2 configuration. For J = 4, only 1 state is possible, this
Using the Ladder operator, we can find all .
For J = 2, there are 2 m-states,
In order to find the coefficient , we have the normalization condition , and we have to use the theorem 1, and apply the operator and require that
Thus,
solve
In fact,
In fact, for 2 particle wave function
The power of this construction method is the many-body wave function. we now demonstrate 4 identical particle in 0d5/2 orbital,
The maximum J is
.
the M-state are
For
For
For
For
For
or, in table
m,
4
3
2
2
1
0
1
0
-1
-2
0
-1
-2
-3
-4
5/2
x
x
x
x
x
x
x
x
x
x
3/2
x
x
x
x
x
x
x
x
x
x
1/2
x
x
x
x
x
x
x
x
x
x
-1/2
x
x
x
x
x
x
x
x
x
x
-3/2
x
x
x
x
x
x
x
x
x
x
-5/2
x
x
x
x
x
x
x
x
x
x
From the theorem 2, the number of m-state tell us the number of state for J are
To construct state,
, using the same method
I suspect the coefficient is deeply related to n-j symbol. And I am sure the Group theory can provide an elegant solution and display for that.
At last, in the construction of m-state, we restricted the order, therefore, state like
In the fundamental, correlation between two objects is
where is some kind of function. To apply this concept on nuclear physics, lets take a sample from 18O. 18O can be treated as 16O + n + n. In the independent particle model (IPM), the wave function can be expressed as
where the wave function of the two neutrons is expressed as a direct product of two IPM eigen wave functions, that they are un-correlated. Note that the anti-symmetry should be taken in to account, but neglected for simplicity.
We knew that IPM is not complete, the residual interaction has to be accounted. According to B.A. Brown, Lecture Notes in Nuclear Structure Physics [2011], Chapter 22, the 1s1/2 state have to be considered. Since the ground state spins of 18O and 16O are 0, thus, the wavefunction of the two neutrons has to be spin 0, so that only both are in 1d5/2 or 2s1/2 orbit. Thus, the two neutrons wave function is
when either or not equal 0, thus, the two neutrons are correlation. In fact, the and .
The spectroscopic factor of the sd-shell neutron is the coefficient of times a isospin-coupling factor.
From the above example, the correlation is caused by the off-diagonal part of the residual interaction. To be more specific, lets take 18O as an example. The total Hamiltonian is
where is the mean field or single particle Hamiltonian
since is diagonal and not excited (if it excited, then it is called core polarization in shell model calculation, because the model space did not included 16O.), i.e. , we can neglect it in the diagonalization of the and add back at the end. In the 1d5/2 and 2s1/2 model space, in order to form spin 0, there is only 2 basis,
and
express the Hamiltonian in these basis,
Because of the diagonalization, the two states and are mixed, than the two neutrons are correlated. This is called configuration mixing.
According to B.A. Brown,
the configuration mixing on the above is long-ranged correlation (LRC). It is near the Fermi surface and the energy is up to 10 MeV.
The short-ranged correlation (SRC) is caused by the nuclear hard core that scattered a nucleon to highly single particle orbit up to 100 MeV.
The LRC is included in the two-body-matrix element. The SRC is included implicitly through re-normalization of the model space.
There is a correlation due to tensor force. Since the tensor force is also short-ranged, sometimes it is not clear what SRC is referring from the context. And the tensor force is responsible for the isoscalar pairing.
The discrepancy of the experimental spectroscopic factor and the shall model calculation is mainly caused by the SRC.