Overview

Qupled is a package that can be used to compute the properties of quantum one component plasmas via theoretical approaches based on the dielectric formalism. The theoretical approaches which can be solved with qupled include:

Qupled supports both MPI and OpenMP parallelizations to handle the most computationally-intensive calculations in the quantum and in the classical VS-STLS scheme.

Installation

Install with pip

Qupled can be installed as a pip package by running

pip install qupled

This will also install the Python packages that are necessary for running qupled. Depending on your platform and installation method, you may also need the Runtime Dependencies.

Install from source

If you want full control over your qupled installation, clone the repository:

git clone https://github.com/fedluc/qupled.git
cd qupled

Then install the Source-Build Dependencies for your platform. Once they are available, install the package from the repository root:

curl -LsSf https://astral.sh/uv/install.sh | sh
uvx foga install --target qupled

Install with MPI support

MPI support is built from source. After installing the Source-Build Dependencies, including the MPI dependencies, run from the repository root:

uvx foga install --target qupled --profile mpi

Architecture

Qupled is a hybrid Python/C++ package. The Python layer handles the user-facing API, input validation, and result storage, while the C++ native library performs the heavy numerical computations. The two layers communicate through pybind11 bindings compiled into the qupled.native extension module.

        %%{init: {'theme': 'default', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryBorderColor': '#2563eb', 'primaryTextColor': '#1e3a5f', 'edgeLabelBackground': '#f0f4ff', 'lineColor': '#2563eb'}}}%%
graph TD
    User(["User"])
    Input["Input class<br/>(qupled.schemes.*)"]
    Solver["Solver class<br/>(qupled.schemes.*)"]
    Bindings["pybind11 bindings<br/>(qupled.native)"]
    Cpp["C++ native library<br/>(schemes / thermo / util)"]
    DB[("SQLite database<br/>qupled.db")]
    Post["Post-processing<br/>(qupled.postprocess)"]

    User -->|"configures"| Input
    User -->|"calls compute()"| Solver
    Solver -->|"passes input to"| Bindings
    Bindings -->|"invokes"| Cpp
    Cpp -->|"returns results"| Bindings
    Bindings -->|"returns"| Solver
    Solver -->|"writes results to"| DB
    DB -->|"read via"| Post
    

Units

All the calculations are performed in normalized units. The wave vectors are normalized to the Fermi wave-vector and the frequencies are normalized to \(2\pi E_{\mathrm{f}}/h\). Here \(E_{\mathrm{f}}\) is the Fermi energy and \(h\) is Planck’s constant.

Limitations

  • Quantum schemes are currently only available for 3D systems; 2D calculations are not implemented for QSTLS, QSTLS-IET, and QVS.

  • Ground state (zero temperature) calculations are not available for the QSTLS-IET and QVS schemes.