quantum_electron
Toolkit for electron clusters confined in a 2D plane.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (16.6%) to scientific vocabulary
Keywords
Repository
Toolkit for electron clusters confined in a 2D plane.
Basic Info
Statistics
- Stars: 3
- Watchers: 2
- Forks: 3
- Open Issues: 1
- Releases: 0
Topics
Metadata Files
README.md
Quantum Electron Solver

Main use cases
This package has two main functions 1. It simulates electron positions in a two dimensional plane for electrons confined in an electrostatic potential $\phi$. Electron-electron interactions are also taken into account. Physically, it minimizes the total energy of an $N$-electron system, which is given by $ -e\sumi \phi(\mathbf{r}i) + \sum{i<j} \frac{e^2}{4 \pi \epsilon0} \frac{1}{|\mathbf{r}i - \mathbf{r}j|}$.
- It calculates properties of in-plane electron modes. This is useful in two cases: (a) the electron motional states can be used for quantum computation, and this package can help to determine eigenfrequencies and eigenvectors of electron clusters (b) in the large $N$ limit the electron motional modes are also known as plasmons. There is an abundance of literature about these charge density waves, and many of the properties can be reproduced with this module.
Features
- Robust operation through the use of the
scipy.optimize.minimizelibrary. We assure proper and fast convergence because the force (gradient of the energy) is supplied as an argument of the minimizer. - Supply arbitrary potential energies $\phi$, as long as they're on a rectangular grid.
- Handles problems up to $N \approx 400$ electrons in less than 1 minute on a laptop computer.
- Periodic boundary condition support for systems with open boundaries.
- Seemless integration with finite element modeling software ZeroHeliumKit.

Installation
Clone this module in a directory of your choice
git clone https://github.com/gkoolstra/quantum_electron.git
In a terminal window, change into the cloned directory:
cd quantum_electron
pip install -e .
After installation, it is advised to take a look at the examples folder to explore some of the functionalities of this module.
Additional packages
To generate animations, this module relies on ffmpeg. On MacOS this can be easily installed using homebrew from the Terminal. On Windows it can be installed using the following link.
This module also integrates well with the output of the FEM software ZeroHeliumKit. Please refer to any dependencies for ZHK on the linked github page.
Tests
To test the performance of the minimization, we're building and expanding a suite of tests based on the pytest framework. To run these tests, cd into the main module directory and run pytest. Currently, we have implemented a test in test_wigner_molecules.py, which compares the energy per particle of Wigner molecules in a parabolic confinement to known tabulated values.
Getting started
The best way to learn how to use the module is to browse the examples. At a very high level this is the workflow:
To solve for the positions of the electrons, one can now use the following sets of short commands: ``` from quantumelectron import FullModel f = FullModel(potentialdict, voltages, **options) f.periodic_boundaries = ['x']
N = 58 initialcondition = f.generateinitialcondition(N) initx, inity = r2xy(initialcondition)
res = f.getelectronpositions(nelectrons=N, electroninitialpositions=initialcondition, verbose=False)
f.plotelectronpositions(res) ```
There are a number of options that influence the solution of the minimization problem. Here is a dictionary of options that can be passed to FullModel to get started:
options = {"include_screening" : True, # Include screening of electron-electron interactions due to thin film.
"screening_length" : 2e-6, # Typically helium thickness.
"potential_smoothing" : 5e-4, # Numerical smoothing of the splines (gets rid of some noise, can introduce artifacts)
"remove_unbound_electrons" : False, # Removes electrons if they shot outside the solution box.
"remove_bounds" : None, # Sets which electrons should be removed if above is True.
"trap_annealing_steps" : [0.1] * 10, # List of annealing temperatures, length determines the number of steps
"max_x_displacement" : 0.1e-6, # Maximum x-displacement of solved electron positions during annealing.
"max_y_displacement" : 0.1e-6} # Maximum y-displacement of solved electron positions during annealing.
Tips for the initial condition
The initial condition can affect the final minimization result quite strongly. We encourage you to take a look at the example notebook about initial conditions. If there are issues with convergence you can first check convergence with f.plot_convergence(). A good final value for the cost function is ~1-500 eV/m. If the lowest value of the cost function is signifantly higher than this, or if warnings appear, here are some rules of thumb for successful convergence:
1. Don't create an initial condition where too many electrons are placed in a small area.
2. Don't place electrons in an initial condition where the potential is too flat, such as on a ground plane.
3. Be mindful of electron sinks, i.e. channels for electrons to escape. These can appear if an electrode is adjacent to the ground plane, and has an applied voltage that is more positive than the ground plane.
Contributing
Contributions to this growing repository are welcome. Please feel free to create a fork and create a pull request with your suggested changes.
Credit
If you found this module useful in your research, please consider citing this code in your publication using a hyperlink.
To-do list
- [ ] Standardize units of the arguments. Sometimes it is unclear whether to use microns or meters.
- [ ] Figure out how to handle warning messages for convergence issues. Why do problems sometimes have a hard time converging?
- [ ] Split off the Schrodinger solver?
Owner
- Name: Gerwin Koolstra
- Login: gkoolstra
- Kind: user
- Location: Chicago, IL
- Website: https://www.linkedin.com/in/gkoolstra
- Repositories: 1
- Profile: https://github.com/gkoolstra
Citation (CITATION.cff)
cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - family-names: "Koolstra" given-names: "Gerwin" orcid: "https://orcid.org/0000-0002-6574-5789" title: "Quantum Electron" version: 0.2.2 date-released: 2024-10-01 url: "https://github.com/gkoolstra/quantum_electron"
GitHub Events
Total
- Push event: 8
- Pull request event: 4
- Fork event: 3
Last Year
- Push event: 8
- Pull request event: 4
- Fork event: 3
Issues and Pull Requests
Last synced: 4 months ago
All Time
- Total issues: 0
- Total pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 2 minutes
- Total issue authors: 0
- Total pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 2 minutes
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- gkoolstra (1)
Pull Request Authors
- gkoolstra (11)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- IPython *
- pyvista *
- scikit-image *
- shapely *