FPEOS#
With the goal in mind of making WDM computations more reliable and efficient, we make available our EOS tables for 11 elements and 10 compounds as well as the C++ computer codes for their interpolation. Python code is provided to generate graphs of shock Hugoniot curve, isentropes, isobars, and isotherms for compounds and user-defined mixtures. We put together this first-principles equation of state (FPEOS) database for matter at extreme conditions by combining results from path integral Monte Carlo and density functional molecular dynamics simulations of the elements H, He, B, C, N, O, Ne, Na, Mg, Al and Si as well as the compounds LiF, B4C, BN, CH4, CH2, C2H3, CH, C2H, MgO, and MgSiO3. For all these materials, we provide the pressure and internal energy over a wide density-temperature range from ~0.5 to 50 g/cc and from ~104 to 109 K. This database encompasses the results from approximately 5000 different first-principles simulations. It allows one to compute isobars, adiabats, and shock Hugoniot curves in the regime of L and K shell ionization. Invoking the linear mixing approximation, one can study the properties of user-defined mixtures at high density and temperature.
Download the code#
Download the code here.

Download an FPEOS presentation slides by Burkhard Militzer#
Download a presentation about FPEOS here.

FPEOS: First-Principles Equation of State Code#
(1) Download the Latest Version#
Date |
Description |
Download Link |
|---|---|---|
05-22-24 |
Figures are opened one by one. |
|
05-21-24 |
Added tutorial file: |
|
05-20-24 |
1. For oxygen, set default |
|
05-17-24 |
Minor updates in Python scripts |
|
02-12-22 |
Supports ternary mixtures like |
|
01-07-21 |
First public version of our FPEOS code. |
|
(2) Installation#
Download and untar the latest version, change into the directory, and compile:
tar -xzf fpeos_01-07-21.tar.gz
cd FPEOS
make
Expected compilation output:
g++ -O3 -c FPEOS_29.C
g++ -O3 -c EOSTableSimple.C
g++ -O3 -c Parser.C
g++ -O3 -c ReadInTable.C
g++ -O3 -c Standard.C
g++ -O3 -c Form.C
g++ -O3 -c Physics.C
g++ -O3 -c Spline.C
g++ -O3 -c FermiGas.C
g++ -O3 -c RelativisticFermiGas.C
g++ -O3 -c Debye.C
g++ -O3 -c GKIntegration.C
g++ -O3 -c RungeKutta.C
g++ FPEOS_29.o EOSTableSimple.o Parser.o ReadInTable.o Standard.o Form.o Physics.o Spline.o FermiGas.o RelativisticFermiGas.o Debye.o GKIntegration.o RungeKutta.o -lm -o fpeos
If compilation fails, try modifying the Makefile or using a different compiler.
Supported Compilers#
Linux:
g++version 7.5.0, 4.8.4macOS:
clangversion 13.0.0, 12.0.0Windows: Use Cygwin with
g++10.2.1
Python is required only for plotting. C++ code works without Python.
(3) Files Included#
EOS Tables#
Sample filenames:
Al_EOS_09-18-20.txt C10H40_EOS_09-18-20.txt He_EOS_09-18-20.txt O_EOS_09-21-20.txt
B4C_EOS_09-18-20.txt C16H24_EOS_09-18-20.txt LiF_EOS_09-18-20.txt Si_EOS_10-19-20.txt
BN_EOS_09-18-20.txt C18H18_EOS_09-18-20.txt MgO_EOS_09-18-20.txt
B_EOS_09-18-20.txt C20H10_EOS_09-18-20.txt MgSiO3_EOS_09-18-20.txt
C_EOS_09-18-20.txt H_EOS_09-18-20.txt N_EOS_09-18-20.txt
Sample entry from carbon EOS:
f= C N= 1 rho[g/cc]= 0.100006 V[A^3]= 199.43071700 T[K]= 5000 P[GPa]= 0.053 0.007 E[Ha]= -37.66843800 0.00054900
Column description:
Chemical formula (e.g., C, MgSiO₃)
Number of atoms, N
Density [g/cm³]
Volume of N atoms [ų]
Temperature [K]
Pressure [GPa]
1-sigma pressure error
Internal energy per N atoms [Ha]
1-sigma energy error
C++ Files#
Main file: FPEOS_29.C
Other headers and sources include: Parser.C, Form.h, Physics.C, RungeKutta.C, Spline.C, etc.
Python Plotting Scripts#
Examples:
FPEOS_P_T_plot03.py
FPEOS_T_E_Debye_plot03.py
FPEOS_comp_P_plot04.py
FPEOS_mixture_P_T_plot01.py
FPEOS_rho_T_plot03.py
FPEOS_up_us_plot01.py
These require:
from matplotlib.pylab import *
import numpy
import sys
import os
Compatible with Python 2.7 and 3.7+
(4) Execution#
Run:
./fpeos
This will print available EOS options:
1: Hydrogen 8: Sodium 15: CH4
2: Helium 9: Magnesium 16: CH2
3: Boron 10: Aluminum 17: CH1.5
4: Carbon 11: Silicon 18: CH
5: Nitrogen 12: LiF 19: CH0.5
6: Oxygen 13: B4C 20: MgO
7: Neon 14: BN 21: MgSiO3
Examples#
fpeos EOS=2— heliumfpeos binaryMixture EOS1=1 0.92 EOS2=2 0.08— H + Hefpeos binaryMixture EOS1=4 1.0 EOS2=6 2.0 rho0=1.6381 E0=-188.1576— CO₂Normalize per C2H6:
EOS1=15 1.0 EOS2=16 1.0Normalize per CH3:
EOS1=15 0.5 EOS2=16 0.5Normalize per atom:
EOS1=15 0.125 EOS2=16 0.125
Optional Flags#
doNotCallPythondoNotOpenPDFFilesprocessAllEOSsprocessAllMixturesOfElementsprocessAllMixtureshugoniotCompressionMaximumnoLogInterpolation
(5) Resulting Files#
Use ls -ltr to see the outputs. Example files for EOS=13:
FPEOS_convex_hull.txt
FPEOS_isobars.txt
FPEOS_Hugoniot.txt
FPEOS_T_P_Debye_plot03.pdf
FPEOS_T_P_Debye_plot03.png
FPEOS_T_E_Debye_plot03.pdf
FPEOS_T_E_Debye_plot03.png
FPEOS_P_T_plot03.pdf
FPEOS_P_T_plot03.png
.txtfiles from C++ code.pdf/.pngfrom Python scripts
(6) Remarks#
Hugoniot curves assume non-bonded initial states unless
rho0andE0are specified.E0is in Hartrees per formula unit (FU).Ideal Fermi gas and Debye plasma routines included.
C++ code is minimalist, avoiding large libraries.
Python scripts are straightforward and produce high-quality plots.
Contact#
For feedback or questions, please contact:
Burkhard Militzer
📧 militzer[at]berkeley[dot]edu
📅 Last updated: May 20, 2024
Happy FPEOS computation!