GitHunt
AD

ad3ller/pypositronium

Positronium in parallel electric and magnetic fields.

pypositronium

Positronium in parallel electric and magnetic fields.

Fine structure is included to first order using the formula
given on page 117 of

| Quantum Mechanics of One- And Two-Electron Atoms
| by Hans a. Bethe and Edwin E. Salpeter
| ISBN 978-1-61427-622-7

with higher order terms for the S and P states from

| A. Czarnecki, K. Melnikov, and A. Yelkhovsky, Phys. Rev. A 59, 4316 (1999)
| https://doi.org/10.1103/PhysRevA.59.4316

The Stark and Zeeman matrices are constructed using the equations given in:

| A. M. Alonso et al., Phys. Rev. A 93, 012506 (2016)
| https://dx.doi.org/10.1103/PhysRevA.93.012506

Radial wavefunctions are obtained using the Numerov method, as described by:

| M. L. Zimmerman et al., Phys. Rev. A 20, 2251 (1979)
| https://dx.doi.org/10.1103/PhysRevA.20.2251

Install

python 3.8+

The main requirements can be installed with conda <https://anaconda.org/>_:

.. code-block:: bash

conda install numpy scipy sympy tqdm

Optional (speed up high-n calculations):
Build and install numerov <https://github.com/ad3ller/numerov>_.

Some of the example notebooks use smtools <https://github.com/ad3ller/Stark-map-tools>_.

Finally, clone the souce code and then install the package
using setuptools.

.. code-block:: bash

git clone https://github.com/ad3ller/pypositronium
cd ./pypositronium
python setup.py install

Basic Usage

Basis is a list of instances of the dataclass State.

.. code:: ipython3

>>> from pyps import Basis, Hamiltonian
>>> basis = Basis.build(n_values=range(1, 4))
>>> print(f'number of basis states: {basis.num_states}')

.. parsed-literal::

number of basis states: 56

.. code:: ipython3

>>> # e.g., the 10th element of the basis set
>>> basis[10]

.. parsed-literal::

State(n=2, L=1, S=0, J=1, MJ=0)

.. code:: ipython3

>>> # ket notation
>>> print(basis[10])

.. parsed-literal::

❘ 2 1 0 1 0 ⟩

The Hamiltonian class is initialised using a basis.

.. code:: ipython3

>>> # initialize
>>> H = Hamiltonian(basis)

Calculate the eigenvalues in applied fields.

.. code:: ipython3

>>> electric_field = 10.1   # [V / m]
>>> magnetic_field = 0.1    # [T]
>>> en = H.eigenenergies(electric_field, magnetic_field, units="eV")
>>> print(en[:5])

.. parsed-literal::

[-6.80332213 -6.8024767  -6.8024767  -6.80247654 -1.70078788]

The methods stark_map() and zeeman_map() calculate the energy
eigenvalues for a range of electric or magnetic fields.

See the notebooks for examples.

Examples

This code has not been tested extensively, although several published calculations have been reproduced.


S. M. Curry, Phys. Rev. A, 7 (2), 447 (1973) https://dx.doi.org/10.1103/PhysRevA.7.447

.. figure:: ./images/zeeman_n2.png
:width: 250px

Fig. 2 Pure Zeeman effect in the first excited states of positronium.


A. M. Alonso et al., Phys. Rev. A, 93, 012506 (2016) https://dx.doi.org/10.1103/PhysRevA.93.012506

.. figure:: ./images/stark_n2.png
:width: 450px

Fig. 6 a) & b) Dependence of the relative energies of all n=2 eigenstates in Ps on electric-field strength (a) in the absence of a magnetic field and (b) in a parallel magnetic field of B=130 G.

.. figure:: ./images/stark_n2_zoom.png
:width: 450px

Fig. 6 c) An expanded view of the avoided crossing.


G. Dufour et al., Adv. High En. Phys., 2015, 379642 (2015) https://dx.doi.org/10.1155/2015/379642

.. figure:: ./images/stark_n31_singlet_MJ2_MJ29.png
:width: 450px

Fig. 11: Stark states of n=30 and 31 states of Ps, with m=2 (grey dashed) and m=29 (black). In the n=30 level, the m=29 state is a circular state and experiences no first-order Stark shift and only a very weak second-order shift, as explained in the text.

Languages

Jupyter Notebook95.3%Python4.7%

Contributors

BSD 3-Clause "New" or "Revised" License
Created December 15, 2017
Updated February 21, 2024
ad3ller/pypositronium | GitHunt