Skip to main content

Poraquê logo

License: MIT

Poraquê

Poraquê learns maps between the three-dimensional scalar fields of density-functional theory. Given only a crystal geometry it predicts the valence charge density and the kinetic energy density — no wavefunctions, no self-consistency cycle.

{POSCAR, INCAR, POTCAR} --analytic--> EXTCAR --Model 1--> CHGCAR --Model 2--> TAUCAR
                                                                                 |
                                                                        integrate v
                                                                              energy

The first step is closed-form; only the two field-to-field maps are learned. They are not unrelated regressions: the first is the Hohenberg–Kohn map, whose existence is a theorem, and the second is the kinetic energy density functional, the missing ingredient of orbital-free DFT.

Install

git clone https://github.com/seixas-research/poraque.git
cd poraque
pip install -e .

Python 3.11 or newer. Installing registers three console commands — poraque-train, poraque-inference and poraque-committee — which run from any directory once the environment is active. Each is the main() of the script of the same name under scripts/, so python scripts/poraque_train.py is equivalent to poraque-train and needs nothing installed.

Use

# 1. train one ext2chg and one chg2tau model on all structures
poraque-train --write-config configs/train_config.yaml
poraque-train --config configs/train_config.yaml

# 2. measure generalisation
poraque-train --config configs/train_config.yaml --kfold --k-folds 5

# 3. predict a structure that has never been computed
poraque-inference new_structure/ --output predictions/new_structure

Every predicted field is written in CHGCAR format.

Or drive it from ASE:

from ase.build import bulk
from poraque.calculator import Poraque

atoms = bulk("Au", "fcc", a=4.08, cubic=True)
atoms.calc = Poraque("models/poraque_models.pfno", potcar="POTCAR")
atoms.get_potential_energy()
print(atoms.calc.components)     # T_s, E_ext, alpha Z, E_H, E_xc, Ewald

Forces and stress are not implemented, so this is single points, not relaxations.

What is in here

Path Contents
src/poraque/fields/ Shared-grid scalar fields, VASP I/O, pluggable ingestion
src/poraque/ml/ Fourier neural operators, differentiable DFT operators, training
src/poraque/physics/ Total-energy components integrated from the predicted fields
src/poraque/calculator.py ASE calculator wrapping the whole chain
src/poraque/vis/ Figures and automatic PDF reports
scripts/ Validation, training, inference, experiments
configs/ YAML run definitions
docs/source/ Sphinx documentation
docs/notes/ Design and analysis notes — start at roadmap.md
latex/user_guide/ User guide (how to run it)
latex/technical_guide/ Technical guide (physics and architecture)

Design points

  • The external potential is computed natively. Poraquê reconstructs it from the POTCAR tables on any standard VASP output, matching a reference potential to a relative 5×10⁻⁵. There is no option to import one: the training input must be exactly what inference produces.
  • Grids may differ between materials. One model serves all of them: the operator's weights live in Fourier-mode space, and batches are bucketed by grid shape.
  • Constraints are structural where possible. For chg2tau, τ = τ_vW[ρ] + softplus(·) makes the Hoffmann-Ostenhof bound hold by construction rather than by penalty.
  • Resampling is spectral. Fourier truncation is the exact band-limited projection for a plane-wave field; interpolation would alias and shift the electron count.
  • CUDA, Apple Metal and CPU, selected automatically.

Status

Seventeen gold supercells — ten 27-atom cells and seven 32-atom cells, spanning four grid shapes. A single 80/20 split at 32³ working resolution, 300 epochs with early stopping, whole structures held out (seed=42):

Model held out training fit
ext2chg 0.0379 ± 0.0027 0.0209
chg2tau 0.0511 ± 0.0031 0.0140

R² on the held-out structures is 0.9976 (ext2chg) and 0.9953 (chg2tau). The ± is the spread across the three validation structures, not a cross-validation error bar — see the caveat below.

The learned kinetic functional beats the analytic orbital-free functionals by a wide margin on this system — on the same held-out fields Thomas-Fermi scores 1.347 and von Weizsäcker 0.738, so chg2tau is 26× and 14× better respectively.

What this split can and cannot tell you. With valid_fraction = 0.2 and 17 structures, the held-out set is three structures — and at seed=42 all three (struct_011, struct_012, struct_016) happen to be 32-atom cells. So the headline numbers describe the harder subset only, there is no held-out 27-atom measurement at all, and three structures is too thin a base for a meaningful error bar. Earlier 5-fold cross-validation on the 12-structure dataset put 32-atom cells at roughly twice the error of 27-atom ones; the number above is consistent with that, and is better than the 0.0445 that subset scored then, which is what four 32-atom cells in training rather than one should buy. Use --kfold for a figure that covers every structure.

Still one element. These numbers measure interpolation between geometries of gold and now, weakly, extrapolation across cell size. They say nothing about transfer to other chemistry. Growing the dataset remains the main open item — see docs/notes/roadmap.md.

Energies are not there yet. The total energy is a sum of terms of order 10⁴ eV whose physically relevant variation is a fraction of an eV per atom — a relative ~10⁻⁴ — and a field-level error of 2×10⁻² cannot survive that cancellation. The last full measurement, on the earlier 12-structure dataset, put the true spread at 0.27 eV/atom against an error on predicted differences of 0.29 eV/atom — a ratio of 1.06 with correlation r ≈ −0.1. Those figures have not been re-measured on the current 17-structure dataset, and the verdict they support is unchanged either way: an error equal to the signal and no correlation means the predicted energy ordering carries no information. The energy module itself is validated against exact Madelung constants and uniform-electron-gas limits; it is the fields that are not yet accurate enough. See docs/source/energy/index.md.

License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

poraque-26.8.22.tar.gz (3.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

poraque-26.8.22-py3-none-any.whl (320.3 kB view details)

Uploaded Python 3

File details

Details for the file poraque-26.8.22.tar.gz.

File metadata

  • Download URL: poraque-26.8.22.tar.gz
  • Upload date:
  • Size: 3.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for poraque-26.8.22.tar.gz
Algorithm Hash digest
SHA256 191bd8c3c0cbdad326710ea5a9acaacad29024be02ed080c05bc6554ca45dec2
MD5 1071a47c46538404c7a87ae89c7e5360
BLAKE2b-256 526f1bf2bb1db2404e67019268315f21a0a38a933323683da122462011e35d5e

See more details on using hashes here.

File details

Details for the file poraque-26.8.22-py3-none-any.whl.

File metadata

  • Download URL: poraque-26.8.22-py3-none-any.whl
  • Upload date:
  • Size: 320.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for poraque-26.8.22-py3-none-any.whl
Algorithm Hash digest
SHA256 598d70768621e8cff632921365c079d98d6878d95a9e91680bee6c65f239b38d
MD5 19b89110ce12d857da901138e44fc8ef
BLAKE2b-256 bdd6679ebd558c6ed6954ef1a2622047d5887314af54f2aebdab9e94fd25b44a

See more details on using hashes here.

Release history Release notifications | RSS feed

26.8.31

2 files

26.8.30

2 files

26.8.29

2 files

26.8.28

2 files

26.8.27

2 files

26.8.26

2 files

26.8.25

2 files

26.8.24

2 files

26.8.23

2 files

This release

26.8.22 This release

2 files

26.8.21

2 files

26.8.20

2 files

26.8.19

2 files

26.8.18

2 files

26.8.17

2 files

26.8.16

2 files

26.8.15

2 files

26.8.14

2 files

26.8.12

2 files

26.8.11

2 files

26.8.8

2 files

26.8.7

2 files

26.8.6

2 files

26.6.4

2 files

26.6.3

2 files

26.6.2

2 files

26.6.1

2 files

26.6.0

2 files

26.5.5

2 files

26.5.4

2 files

26.5.3

2 files

26.5.2

2 files

26.5.1

2 files

26.5.0

2 files

26.4.1

2 files

26.4.0

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page