From 8fef9451c1fd2cf42b8a1bcd54bfd3a258d91291 Mon Sep 17 00:00:00 2001 From: Gianluca Allinson <32818071+johnny-sa@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:54:20 +0100 Subject: [PATCH 1/4] Added Polarisation Energy for high l states Added more accurate energy for states with non-penetrating states (l>5). A (worse) approximation was used before which itself is based on the polarisation energy. --- arc/alkali_atom_functions.py | 42 +++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/arc/alkali_atom_functions.py b/arc/alkali_atom_functions.py index 68c8c19..ef62806 100644 --- a/arc/alkali_atom_functions.py +++ b/arc/alkali_atom_functions.py @@ -841,10 +841,46 @@ def getQuantumDefect(self, n, l, j, s=0.5): + modifiedRRcoef[5] / ((n - modifiedRRcoef[0]) ** 10) ) else: - # use \delta_\ell = \delta_g * (4/\ell)**5 + n = int(n) + l = int(l) + + # Use \delta_\ell = \delta_g * (4/\ell)**5 # from https://journals.aps.org/pra/abstract/10.1103/PhysRevA.74.062712 - defect = self.quantumDefect[0][4][0] * (4 / l) ** 5 - return defect + + # Calculate r4 and r6 coefficients + top_r4 = 3 * pow(n, 2) - (l * (l + 1)) + bottom_r4 = ( + 2 * pow(n, 5) * (l + 1.5) * (l + 1) * (l + 0.5) * l * (l - 0.5) + ) + r4 = top_r4 / bottom_r4 + + top_r6 = ( + 35 * pow(n, 4) + - 5 * pow(n, 2) * (6 * l * (l + 1) - 5) + + 3 * (l + 2) * (l + 1) * l * (l - 1) + ) + bottom_r6 = ( + 8 + * pow(n, 7) + * (l + 2.5) + * (l + 2) + * (l + 1.5) + * (l + 1) + * (l + 0.5) + * l + * (l - 0.5) + * (l - 1) + * (l - 1.5) + ) + r6 = top_r6 / bottom_r6 + + # Calculate the defect + defect = ( + 0.5 * pow(n, 3) * (self.a_d_eff * r4 + self.a_q_eff * r6) + + ) + + return defect def getRadialMatrixElement( self, From f55756e21f31afdac540e8a35e511f86da610e4d Mon Sep 17 00:00:00 2001 From: Gianluca Allinson <32818071+johnny-sa@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:29:49 +0100 Subject: [PATCH 2/4] Updated qds for K and Cs and Core polarisabilities Updated qds for K and Cs and Core polarisabilities to include two new publications. Also added a property to each class a_eff_d and a_eff_q which are the effective dipole and quadrupole polarisabilities of the species Ion (e.g. Cs+). This is used when calculating the polarisation energy which is used for high l states (l >5) --- arc/alkali_atom_data.py | 174 ++++++++++++++++++++++++++++++---------- 1 file changed, 132 insertions(+), 42 deletions(-) diff --git a/arc/alkali_atom_data.py b/arc/alkali_atom_data.py index c0fb503..215e25d 100644 --- a/arc/alkali_atom_data.py +++ b/arc/alkali_atom_data.py @@ -127,7 +127,6 @@ "Potassium41", ] - class Hydrogen(AlkaliAtom): """ Properties of hydrogen atoms @@ -192,6 +191,15 @@ class Caesium(AlkaliAtom): model potential parameters from [#c1]_ """ + + a_d_eff = 15.79 + + a_q_eff = 38.7 + + """ + Effective core polarisabilities from https://doi.org/10.1364/JOSA.71.000423 + """ + # a1 = [3.49546309, 4.69366096, 4.32466196, 3.01048361] """ @@ -219,6 +227,8 @@ class Caesium(AlkaliAtom): I = 3.5 # 7/2 + + #: (eV), Ref. [#jd2016]_. ionisationEnergy = ( 31406.4677325 @@ -234,24 +244,24 @@ class Caesium(AlkaliAtom): quantumDefect = [ [ - [4.04935665, 0.2377037, 0.255401, 0.00378, 0.25486, 0.0], - [3.59158950, 0.360926, 0.41905, 0.64388, 1.45035, 0.0], + [4.0493532, 0.2391, 0.06, 11, -209, 0.0], + [3.5915871, 0.36273, 0.0, 0.0, 0.0, 0.0], [2.4754562, 0.009320, -0.43498, -0.76358, -18.0061, 0.0], [0.03341424, -0.198674, 0.28953, -0.2601, 0.0, 0.0], [0.00703865, -0.049252, 0.01291, 0.0, 0.0, 0.0], ], [ - [4.04935665, 0.2377037, 0.255401, 0.00378, 0.25486, 0.0], - [3.5589599, 0.392469, -0.67431, 22.3531, -92.289, 0.0], - [2.46631524, 0.013577, -0.37457, -2.1867, -1.5532, -56.6739], + [4.0493532, 0.2391, 0.06, 11, -209, 0.0], + [3.5590676, 0.37469, 0.0, 0.0, 0.0, 0.0], + [2.4663144, 0.01381, -0.392, -1.9, 0.0, 0.0], [0.03341424, -0.198674, 0.28953, -0.2601, 0.0, 0.0], [0.00703865, -0.049252, 0.01291, 0.0, 0.0, 0.0], ], ] """ - quantum defects for :math:`S_{1/2}`, :math:`nP_{1/2}`, :math:`D_{5/2}`, + quantum defects for :math:`S_{1/2}`, :math:`nP_{1/2}`, :math:`nP_{3/2}`, :math:`D_{5/2}` are from https://doi.org/10.1103/PhysRevA.93.013424 :math:`F_{5/2}` and :math:`G_{7/2}` are from [#Weber1987]_, while - quantum defects for :math:`nP_{3/2}`,:math:`D_{3/2}` are from [#Lorenzen1984]_, + :math:`D_{3/2}` are from [#Lorenzen1984]_, Note: f_7/2 quantum defects are PUT TO BE EXACTLY the same as f_5/2 (~10MHz difference?!) @@ -390,7 +400,6 @@ class Cesium(Caesium): pass - class Rubidium85(AlkaliAtom): """ Properites of rubidium 85 atoms @@ -403,6 +412,15 @@ class Rubidium85(AlkaliAtom): """ + a_d_eff = 9.089 + + a_q_eff = 16.8 + + """ + Effective core polarisabilities from https://doi.org/10.1103/PhysRevA.102.062818 + + """ + a1 = [3.69628474, 4.44088978, 3.78717363, 2.39848933] """ model potential parameters from [#c1]_ @@ -561,7 +579,15 @@ class Rubidium87(AlkaliAtom): model potential parameters from [#c1]_ """ + a_d_eff = 9.089 + a_q_eff = 16.8 + + """ + Effective core polarisabilities from https://doi.org/10.1103/PhysRevA.102.062818 + + """ + a1 = [3.69628474, 4.44088978, 3.78717363, 2.39848933] """ model potential parameters from [#c1]_ @@ -711,7 +737,17 @@ class Lithium6(AlkaliAtom): # Li """ model potential parameters from [#c1]_ + + """ + + a_d_eff = 0.1883 + + a_q_eff = 0.04579 + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.16.1141 + """ + # model potential parameters from Marinescu et.al, PRA 49:982 (1994) a1 = [2.47718079, 3.45414648, 2.51909839, 2.51909839] """ @@ -867,6 +903,15 @@ class Lithium7(AlkaliAtom): # Li model potential parameters from [#c1]_ """ + + a_d_eff = 0.1883 + + a_q_eff = 0.04579 + + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.16.1141 + """ + a1 = [2.47718079, 3.45414648, 2.51909839, 2.51909839] """ model potential parameters from [#c1]_ @@ -1012,6 +1057,16 @@ class Sodium(AlkaliAtom): # Na23 model potential parameters from [#c1]_ """ + + a_d_eff = 0.9980 + + a_q_eff = 0.351 + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.38.4985 + """ + + + a1 = [4.82223117, 5.08382502, 3.53324124, 1.11056646] """ model potential parameters from [#c1]_ @@ -1155,6 +1210,18 @@ class Potassium39(AlkaliAtom): model potential parameters from [#c1]_ """ + + + a_d_eff = 5.49 + + a_q_eff = 18 + + + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.100.012501 + """ + + a1 = [3.56079437, 3.65670429, 4.12713694, 1.42310446] """ model potential parameters from [#c1]_ @@ -1197,22 +1264,22 @@ class Potassium39(AlkaliAtom): # quantum defects from Physica Scripta 27:300 (1983) quantumDefect = [ [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.713892, 0.233294, 0.16137, 0.5345, -0.234, 0.0], - [0.27697, -1.024911, -0.709174, 11.839, -26.689, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71392626, 0.23114, 0.1948, 0.3683, 0.0, 0.0], + [0.27698453, -1.02691, -0.665, 10.9, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.710848, 0.235437, 0.11551, 1.1015, -2.0356, 0.0], - [0.2771580, -1.025635, -0.59201, 10.0053, -19.0244, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71087854, 0.23233, 0.1961, 0.3716, 0.0, 0.0], + [0.27715665, -1.02493, -0.640, 10.0, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], ] """ - quantum defects from Ref. [#c7]_. + p1/2 and p3/2, s1/2, d3/2, d5/2 and f and g (centre of manifold) from https://doi.org/10.1103/PhysRevA.100.012501 """ levelDataFromNIST = "k_NIST_level_data.ascii" @@ -1305,6 +1372,18 @@ class Potassium40(AlkaliAtom): model potential parameters from [#c1]_ """ + + a_d_eff = 5.49 + + a_q_eff = 18 + + + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.100.012501 + """ + + + a1 = [3.56079437, 3.65670429, 4.12713694, 1.42310446] """ model potential parameters from [#c1]_ @@ -1347,22 +1426,22 @@ class Potassium40(AlkaliAtom): # quantum defects from Physica Scripta 27:300 (1983) quantumDefect = [ [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.713892, 0.233294, 0.16137, 0.5345, -0.234, 0.0], - [0.27697, -1.024911, -0.709174, 11.839, -26.689, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71392626, 0.23114, 0.1948, 0.3683, 0.0, 0.0], + [0.27698453, -1.02691, -0.665, 10.9, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.710848, 0.235437, 0.11551, 1.1015, -2.0356, 0.0], - [0.2771580, -1.025635, -0.59201, 10.0053, -19.0244, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71087854, 0.23233, 0.1961, 0.3716, 0.0, 0.0], + [0.27715665, -1.02493, -0.640, 10.0, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], ] """ - quantum defects from Ref. [#c7]_. + p1/2 and p3/2, s1/2, d3/2, d5/2 and f and g (centre of manifold) from https://doi.org/10.1103/PhysRevA.100.012501 """ levelDataFromNIST = "k_NIST_level_data.ascii" @@ -1445,6 +1524,17 @@ class Potassium41(AlkaliAtom): model potential parameters from [#c1]_ """ + + a_d_eff = 5.49 + + a_q_eff = 18 + + + """ + (Effective) core plarisabiltiesm from https://doi.org/10.1103/PhysRevA.100.012501 + """ + + a1 = [3.56079437, 3.65670429, 4.12713694, 1.42310446] """ model potential parameters from [#c1]_ @@ -1487,22 +1577,22 @@ class Potassium41(AlkaliAtom): # quantum defects from Physica Scripta 27:300 (1983) quantumDefect = [ [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.713892, 0.233294, 0.16137, 0.5345, -0.234, 0.0], - [0.27697, -1.024911, -0.709174, 11.839, -26.689, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71392626, 0.23114, 0.1948, 0.3683, 0.0, 0.0], + [0.27698453, -1.02691, -0.665, 10.9, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], [ - [2.1801985, 0.13558, 0.0759, 0.117, -0.206, 0.0], - [1.710848, 0.235437, 0.11551, 1.1015, -2.0356, 0.0], - [0.2771580, -1.025635, -0.59201, 10.0053, -19.0244, 0.0], - [0.010098, -0.100224, 1.56334, -12.6851, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + [2.18020826, 0.134534, 0.0952, 0.0021, 0.0, 0.0], + [1.71087854, 0.23233, 0.1961, 0.3716, 0.0, 0.0], + [0.27715665, -1.02493, -0.640, 10.0, 0.0, 0.0], + [0.0094576, -0.0446, 0.0, 0.0, 0.0, 0.0], + [0.0024080, -0.0209, 0.0, 0.0, 0.0, 0.0], ], ] """ - quantum defects from Ref. [#c7]_. + p1/2 and p3/2, s1/2, d3/2, d5/2 and f and g (centre of manifold) from https://doi.org/10.1103/PhysRevA.100.012501 """ levelDataFromNIST = "k_NIST_level_data.ascii" From e4a2e49cf832b6373c877191c21520cc6a159877 Mon Sep 17 00:00:00 2001 From: Gianluca Allinson <32818071+johnny-sa@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:51:00 +0100 Subject: [PATCH 3/4] Added polarisation energy for high l (l>5) states Improved accuracy of high l states to include effective polarisability calculation of energies. Uses constants from literature for the effective polarisabilities. Also included hydrogenice fine stucture for these states (also g states) to remove degeneracy --- arc/alkali_atom_functions.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/arc/alkali_atom_functions.py b/arc/alkali_atom_functions.py index ef62806..8f88002 100644 --- a/arc/alkali_atom_functions.py +++ b/arc/alkali_atom_functions.py @@ -787,7 +787,20 @@ def getEnergy(self, n, l, j, s=0.5): # else, use quantum defects defect = self.getQuantumDefect(n, l, j, s=s) - return -self.scaledRydbergConstant / ((n - defect) ** 2) + + + + if l <= 3: + return -self.scaledRydbergConstant / ((n - defect) ** 2) + elif l == 4: + FS = (2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+1)*pow(n,3)) + LI = -FS/(l+0.5) + return -self.scaledRydbergConstant / ((n - defect) ** 2) -0.5*LI*(j*(j+1)-l*(l+1)-s*(s+1)) + else: + FS = (2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+1)*pow(n,3)) + LI = -FS/(l+0.5) + return -self.scaledRydbergConstant / ((n) ** 2) -0.5*LI*(j*(j+1)-l*(l+1)-s*(s+1)) - 2*self.scaledRydbergConstant*defect + def _getSavedEnergy(self, n, l, j, s=0.5): if abs(j - (l - 0.5)) < 0.001: @@ -844,6 +857,7 @@ def getQuantumDefect(self, n, l, j, s=0.5): n = int(n) l = int(l) + # Use \delta_\ell = \delta_g * (4/\ell)**5 # from https://journals.aps.org/pra/abstract/10.1103/PhysRevA.74.062712 @@ -874,13 +888,12 @@ def getQuantumDefect(self, n, l, j, s=0.5): ) r6 = top_r6 / bottom_r6 - # Calculate the defect + # Calculate the energy difference from polarisation energy defect = ( - 0.5 * pow(n, 3) * (self.a_d_eff * r4 + self.a_q_eff * r6) - + 0.5 * (self.a_d_eff * r4 + self.a_q_eff * r6) ) - return defect + return defect def getRadialMatrixElement( self, From d54d900bf040f8823f832b7e7421cad0e70ad442 Mon Sep 17 00:00:00 2001 From: Gianluca Allinson <32818071+johnny-sa@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:38:56 +0100 Subject: [PATCH 4/4] Formatting and References for high L energies Changed format of hydrogenic fine structure splitting (L.S coupling) for high l states. Added references for calculating polarisation energy. --- arc/alkali_atom_functions.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/arc/alkali_atom_functions.py b/arc/alkali_atom_functions.py index 8f88002..2dbc98b 100644 --- a/arc/alkali_atom_functions.py +++ b/arc/alkali_atom_functions.py @@ -793,13 +793,26 @@ def getEnergy(self, n, l, j, s=0.5): if l <= 3: return -self.scaledRydbergConstant / ((n - defect) ** 2) elif l == 4: - FS = (2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+1)*pow(n,3)) - LI = -FS/(l+0.5) - return -self.scaledRydbergConstant / ((n - defect) ** 2) -0.5*LI*(j*(j+1)-l*(l+1)-s*(s+1)) + fineStructSplit = -(2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+0.5)*(l+1)*pow(n,3)) + + if j == l + 0.5: + fineStructSplit *= 0.5*l + + elif j == l - 0.5: + fineStructSplit *= -1*0.5*(l+1) + + return -self.scaledRydbergConstant / ((n - defect) ** 2) - fineStructSplit + else: - FS = (2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+1)*pow(n,3)) - LI = -FS/(l+0.5) - return -self.scaledRydbergConstant / ((n) ** 2) -0.5*LI*(j*(j+1)-l*(l+1)-s*(s+1)) - 2*self.scaledRydbergConstant*defect + fineStructSplit = -(2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+0.5)*(l+1)*pow(n,3)) + + if j == l + 0.5: + fineStructSplit *= 0.5*l + + elif j == l - 0.5: + fineStructSplit *= -1*0.5*(l+1) + + return -self.scaledRydbergConstant / ((n) ** 2) - fineStructSplit - 2*self.scaledRydbergConstant*defect def _getSavedEnergy(self, n, l, j, s=0.5): @@ -857,11 +870,7 @@ def getQuantumDefect(self, n, l, j, s=0.5): n = int(n) l = int(l) - - # Use \delta_\ell = \delta_g * (4/\ell)**5 - # from https://journals.aps.org/pra/abstract/10.1103/PhysRevA.74.062712 - - # Calculate r4 and r6 coefficients + # Calculate r4 and r6 coefficients from https://journals.aps.org/pra/abstract/10.1103/PhysRevA.9.1087 top_r4 = 3 * pow(n, 2) - (l * (l + 1)) bottom_r4 = ( 2 * pow(n, 5) * (l + 1.5) * (l + 1) * (l + 0.5) * l * (l - 0.5) @@ -888,7 +897,7 @@ def getQuantumDefect(self, n, l, j, s=0.5): ) r6 = top_r6 / bottom_r6 - # Calculate the energy difference from polarisation energy + # Calculate the energy difference from polarisation energy from https://journals.aps.org/pra/abstract/10.1103/PhysRevA.14.1614 defect = ( 0.5 * (self.a_d_eff * r4 + self.a_q_eff * r6) )