nikolasibalic / ARC-Alkali-Rydberg-Calculator

Object-oriented Python library for computation of properties of highly-excited Rydbeg states of alkali and divalent atoms.
https://atomcalc.org
BSD 3-Clause "New" or "Revised" License
86 stars 72 forks source link

Inconsistent signs when adding polarizability contributions? #126

Closed dehond closed 1 year ago

dehond commented 1 year ago

I was working my way through how ARC calculates and adds different contributions to the polarizability, and got confused by an apparent inconsistency in how the dynamical terms and ponderomotive term are added.

The docstring of the getPolarizability method suggests that the ponderomotive term $\alpha_p$ is calculated such that $\alpha_p E^2/2$ is the ponderomotive shift. This term is typically positive, since an oscillatory electric field performs work on a free electron. Therefore $\alpha_p$ should be positive, which it is when I calculate it.

When calculating the scalar polarizabilities of the ground state, ARC also returns polarizabilities with signs I would think are appropriate. Here's an example snippet:

atom = Rubidium()
gsPolCalc = DynamicPolarizability(atom, 5, 0, 0.5)
gsPolCalc.defineBasis(5, 60)
gsPolCalc.getPolarizability(850e-9, units = 'au')

This nets a scalar polarizability of +2130 and a ponderomotive polarizability of +174. So far so good, since the convention for the scalar shift usually is $-\alpha_s E^2/4$ [see e.g. Eq. (17) in Le Kien et al.], so a positive scalar polarizability results in a negative shift with increasing fields.

The problem arises when taking both terms into account simultaneously, for instance in plotPolarizability. When doing so, the ponderomotive and dynamic polarizabilities are added together which seems to be inconsistent. This is in particular confusing when calculating the light shifts of high-lying alkali Rydberg states ($n > 30$) in light fields that are red-detuned with respect to the $D$-lines. At these wavelengths, an intense light field repels these states, both because the dynamical AC Stark shift and the ponderomotive shift are positive. The way the two are summed together in plotPolarizability currently doesn't seem to reflect this (see the relevant line here).

As a side note: in the description of return parameters, the docstring for getPolarizability seems to swap the ponderomotive and core polarizability in its return list (compare the docstring with the return statement). It is listed correctly right at the start of the docstring.

nikolasibalic commented 1 year ago

Hi @dehond

Many thanks for opening this issue. Your argument makes sense to me. Do you want to fork repo, apply fix open then a PR with a fix? You already found everything that needs to be updated. I would then review and merge ASAP.

Many thanks, Nikola

dehond commented 1 year ago

Thanks for reading my issue, @nikolasibalic! I'll have a look and try to file a PR soon 🙂.