Holographic EoS Code — C++ Version
0. Directories and files.
0.1. Main components
The source code for the main components of the holographic equation of
state, including headers, can be found under ./src/
.
The makefile can be found in the root directory, at ./Makefile
.
Compiled objects are divided into auxiliary objects, that are built into
./obj
, and executables, which are built under ./bin/
.
1. How this code works
1.1. Overview
The present code provides a holographic model of the QCD equation of state as a function of temperature \(T\) and baryon chemical potential \(\mu_B\). This model is calibrated to reproduce lattice-QCD data at \(\mu_B =0\) and presents a good agreement with extrapolations to finite \(\mu_B\). Because of its holographic nature, it is expected to be more reliable at moderate to high temperatures.
This model predicts a first-order phase transition at large densities, with a critical endpoint at (\(T\), \(\mu_B\)) \(\approx\) (103, 597) MeV for the polynomial hyperbolic model.
1.2. Physics model
The present model of the QCD equation of state relies on a bottom-up construction based on the gauge-gravity duality. In short, the equation of state is calculated for a theory living in the 3+1-dimensional boundary of a Einstein–Maxwell–Dilaton (EMD - that is, gravity + scalar field + gauge field) theory in a 5-dimensional asymptotically anti-de Sitter (AdS) spacetime.
In this description, one identifies the properties of a charged black-hole in the bulk theory with the thermodynamics of a strongly-coupled fluid in a 3+1-dimensional slice of the AdS spacetime. In order to extract meaningful quantities from this model, it is necessary to connect the infrared physics on the black-hole horizon at the AdS radius \(r=0\) to the ultraviolet scalings at AdS radius \(r\to\infty\), where the AdS spacetime geometry must be recovered.
The construction of the model is presented in Refs. [1] and [2] and is inspired by earlier models such as the one in Ref. [3]. Since the publication of [2], two other groups have also proposed similar models capable of reproducing lattice data, and which will also be made available in the present code: [4] and [5].
1.2.1. Parametrizations
These models are specified by two functions:
the potential \(V(\phi)\) for the dilaton (scalar) field \(\phi\) in the action for the 5-dimensional theory,
the dilaton-gauge coupling \(f(\phi)\) that multiplies the gauge-field kinetic term \(f(\phi)F^{\mu\nu}F_{\mu\nu}/4\) in the same action,
where it is important that \(V(0)=-12\) and \(f(0)=1\).
Besides the parameters defining \(V(\phi)\) and \(f(\phi)\), one must specify the gravitational constant in five dimensions \(\kappa_5^2=8\pi G_5\) and the energy scale \(\Lambda\), with default values
These parameters and functions, as their derivatives, are implemented in the BhModel class.
In its current version, this code supports the following
parametrizations for modeling these functions. Other parametric forms
can be included by editing BhModel.h
and BhModel.cpp
.
Polynomial Hyperbolic Model
Implemented in class PolyHyperbolicModel. Reproduces the model of [2] for \(c_3=0\),
\(f(\phi) =\frac{\operatorname{sech}\,(c_{1}\phi+c_{2}\phi^{2}+c_{3}\phi^{3})}{1+d_{1}} + \frac{d_{1}}{1+d_{1}}\operatorname{sech}\,(d_{2}\phi) .\)
MUSES Parametric Model
Implemented in class MusesParametricModel, with the following functional forms:
1.3. Initial conditions: phi0 and Phi1
To calculate the equation of state, one must solve a set of 4 second-order ordinary differential equations, describing the evolution of the dilaton \(\phi(r)\). the gauge field \(A^\mu(r)\) and the metric \(g_{\mu\nu}(r)\) in the AdS radius coordinate \(r\). An ansatz is used to characterize these degrees of freedom in terms of 4 dynamical fields: \(\phi(r)\), \(\Phi(r)\), \(h(r)\), and \(A(r)\).
Initial conditions for these fields and their derivatives must be
provided at the black hole horizon which is taken as r=0 for the
numerical coordinates. By using a convenient gauge, they are reduced to
\(\phi_0=\phi(0)\) and \(\Phi_1=\Phi'(0)\), aka phi0
and
Phi1_raw
in the code. For each value of phi0, there is a maximum
allowed value of Phi1, Phi1Max, depending on the particular model. This
maximum value is given by the method
BhModel.get_Phi1_max(double phi0)
in the BhModel
class. For that reason, we often use the
normalized variable Phi1_norm = Phi1_raw/Phi1Max
instead of
Phi1_raw
. Both variables are members of the BlackHole
class.
Given a pair phi0
, Phi1_norm
, the function
set_ics(phi0, Phi1N)
in the BlackHole
class initializes the fields and first
deriatives to their values at a small radius \(r = r_0 > 0\), from
where the equations of motion can be integrated. Initial conditions at
\(r=r_0\) are determined by substituting a Taylor expansion for the
different fields into equations (3) to (7) in Ref.
[2]. By starting
numerical integration at \(r_0>0\), one avoids numerical issues that
take place exactly at the balck-hole horizon. Function
BlackHole::set_ics(phi0, Phi1N)
also calculates the conserved
black-hole charges, which can be used as a sanity check for the
numerical solutions.
It is only after solving the equations of motion that one finds which point \((T,\mu_B)\) correspond to a given (phi0, Phi1) pair. The mapping between (phi0, Phi1) and \((T,\mu_B)\) is not bijective. To each point in the phase-coexistence region of the \((T,\mu_B)\) phase diagram, there correspond three distinct (phi0, Phi1) pairs, corresponding to the stable, metastable and unstable phases. In the equilibrium equation of state, these phases must be matched according to the Maxwell construction. Lines of constant phi0 and varying Phi1 in the \((T,\mu_B)\) phase diagram are shown in the figure below:
The files Tmu_utils.h and Tmu_utils.cpp provide root finders to solve for $:raw-latex:phi_0 $ and \(\Phi1\) as functions of \(T\) and \(\mu_B\).
1.4. Equations of motion
To calculate the equation of state, one must solve equations (3) to (6)
in Ref. [2]. In
practice, we reduce these 4 second-order differential equations to 8
first-order differential equations by treating the derivatives of each
field \(\phi'(r)\), \(\Phi'(r)\), \(h'(r)\) and
\(A'(r)\) as independent variables , which follow their own
equations of motion. These equations are solved by the function
solve()
, in the BlackHole Class.
Numerical integration is performed by using an adaptive stepper. The
stepper is initialized using the Runge-Kutta Dormand-Prince 5 method in
Lib Boost ODEint, where it starts at a small radius \(r = r_0 > 0\)
and proceeds up to a radius INITIAL_RADIUS
. For each loop, the step
is adaptively adjusted, and the function
BlackHole::convergence_condition()
is called to test for numerical
convergence at each step. The integration continues unless the
MAX_RADIUS
is reached or the integration failed the numerical
convergence test for any step. INITIAL_RADIUS
and MAX_RADIUS
are
defined in
blackhole_engineering.h.
An extra ordinary differential equation of first order remains, which
provides a constraint for the system, imposed when calculating initial
conditions for the different fields in
BlackHole::SetICs(phi0,Phi1N)
. This constraint is presented in Eq.
(7) in Ref. [2] and is
also used as a sanity check for the solutions in function
BlackHole::check_constraint()
, called by function
BlackHole::do_physics()
.
1.5. Asymptotic expansion and thermodynamics
After numerical integration, function solve()
calls function
do_physics
in the BlackHole Class to
calculate the temperature \(T\), the chemical potential
\(\mu_B\), the entropy density \(s\) and the baryon density
\(\rho\). These are calculated from equations (11) to (14) in Ref.
[2]. These expressions
depend on the field values near the horizon, the prefactor
\(\phi_A\) in the scaling of
\(\phi(r)\sim \phi_A e^{-\nu A(r)}\), and the exponent exponent
\(\nu\), calculated by function nu()
in Class
BhModel.
1.5.1. Relaxational method
The most challenging part in estimating the different thermodynamical quantities is finding the prefactor \(\phi_A\) in the scaling of \(\phi(r)\). Because \(A(r)\) grows linearly in the scaling region, a direct evaluation of \(\phi_A\approx e^{\nu A(r)}\phi(r)\) is numerically unstable: numerical imprecisions in the exponentially small \(\phi(r)\) are amplified by the exponentially large \(e^{\nu A(r)}\) factor.
Previously in the literature, this problem has been dealt with by fitting the behavior of \(\phi(r)\) with a decreasing exponential to extract \(\phi_A\), in a carefully chosen window in \(r\). However, this procedure often lead to noisy features in the extracted \(\phi_A\) [2].
Here, we tackle this issue by implementing one extra differential equation in Class BlackHole::solve():
such that \(C(r) \to \phi_A\) as \(r\to \infty\). Its solution:
shows that the resulting estimate of \(\phi_A\) corresponds to a weighted average over an interval \(\Delta r \sim 1/\Gamma\).
The relaxation rate \(\Gamma\) should be large enough for
\(C(r)\) to quicly relax to \(\phi_A\), but small enough to make
the average interval sufficiently large for numerical stability. At this
point, this parameter is hardcoded to be REL_RATE = 0.5
in
blackhole_engineering.h.
Results seem to be stable to changing this parameter by a factor of 2,
but this should be incorporated to automated tests as a sanity
check.
This relaxational method has been found to yield results similar to the
previous fitting procedure, while being faster and numerically more
stable. As an independent test of its robustness, we have implemented
another extra differential equation in
`BlackHole::solve()
<#521-Class-BlackHole>`__:
\(\frac{dD(r)}{dr} = -\Gamma(D(r) - \Phi'(r)\,e^{2A(r)})\), which
can be used to extract the factor
\(\Phi_2^{far}\approx D(r\to \infty)\) in the near-boundary scaling
of \(\Phi(r) \sim \Phi_0^{far} + \Phi_2^{far}e^{-2 A(r)}\). Because
the same \(\Phi_2^{far}\) is extracted from equation (17) in Ref.
[2], this equation
provides a reliable test of both the relaxational method and the choice
of REL_RATE
. It should also be incorporated to automated tests.
1.5.2. Precision check
After the integration of the black hole is performed, the accuracy is checked by comparing the Ricci scalar and the \(\phi_A\) with the desired values.
It is assumed that the EMD fields reach the their vultraviolet behavior corresponding to the \(\text{AdS}_5\) geometry, which has a Ricci scalar \(R = -20\). Therefore, for a set accuracy \(\epsilon_R\), for the calculation to be valid, we require \(|R_{calculated} - R_{\text{AdS}_5}| < \epsilon_R\). If the users do not specify the accuracy in the input file, the default value will be used.
As noted in section 1.5.1, ideally \(C \approx \phi_A\). Therefore, for a set accuracy \(\epsilon_A\), for the calculation to be valid, we require that \(|C - \phi e^{\nu A}|/C < \epsilon_A\). If the users do not specify the accuracy in the input file, the default value will be used.
If the accuracy is not reached, the code will increase the radius for integration \(r\) to get within the accuracy. If the accuracy is not reached for several iterations, this point will be abandoned and the data related will not enter the final table.
1.5.3. Baryon susceptibility at \(\mu_B=0\)
As \(\mu_B \to 0\), the second order baryon susceptibility is given by
The baryon density \(\rho_B\), entropy \(s\), and baryon chemical potential \(\mu_B\) can be written in terms of the near-boundary EMD fields, as in Ref. [2],
where \(\Lambda\) is the energy scale, \(\kappa_5^2 \equiv 8\pi G_5\), and \(G_5\) is the five-dimensional gravitational constant.
Also using the Gauss charge and the fact that \(\Phi \to 0\) as \(r \to r_H\),
We can obtain the expression of the dimentionless baryon susceptibility \(\hat{\chi}_2^B \equiv \chi_2^B/T^2\) at \(\mu_B = 0\),
The baryon susceptibility at \(\mu_B = 0\) is used to match the holographic model with the lattice QCD data to fix the dilaton-gauge coupling \(f(\phi)\).
1.6. Integrating the pressure
After the user specified the range of \(T\) and \(\mu_B\) for the phase diagram, a table of phi0 and Phi1 will be created. The pressure of the point with maximum phi0 and minimum Phi1 will be set to 0, and the pressure of the other points will be generated by numerical integration.
First, fixing Phi1 to be the minimum, we loop the phi0 values to get the pressure values a constant Phi1 line. For each iteration in the phi0 values, we extract the values of \(T\), \(\mu_B\), \(s\), and \(n\) for the current phi0 and the next phi0 in line. The change in pressure is then given by the Gibbs–Duhem relation.
where i is the index of the phi0 values, and the derivative and difference are calculated such that
Then, the pressure is calculated such that
To get the pressure for the whole phase diagram, we loop the phi0 values, and for each phi0 value, we loop the Phi1 values. For each iteration, because the rough correspondense of phi0 to \(T\) and Phi1 to \(\mu_B\), the change in pressure is better calculated by
where i is the index of the Phi1 values, and the derivative and difference are calculated such that
Then, the pressure is calculated such that
1.7. Input format
The users need to use a yaml file to speficy the parameters used for the generation of the phase diagram and calculation of the critical point. The current input file has four sections that need to be specified. In practice, the users only need to care about chaninge the parameters in bh_eos/input/holo_eos_input_user.yaml and run through the input validator to check if input file is still valid. The details can be found in section 4 Usage.
The first section is to choose the model and specify the parameters. Here, as an example, the model is chosen to be the polynomial hyperbolic model, and the parameters associated with it is specified as follows in the yaml input file:
model_options:
variant: polynomial_hyperbolic
parameters:
description: Parameters of the model in question.
flag_default: no
Lambda: 1148.121631179041
kappa2: 11.350245262021625
gamma: 0.5884489971316446
b2: 0.301821894469367
b4: -0.04261907765391285
b6: 0.0004566058948051932
c1: -0.06469185351673243
c2: -0.22517557265138566
c3: 0.03664412474454205
d1: 1.7231476382001352
d2: 472.2764686476346
The second section is the output, which determines what files should be generated. There are a few types of files that can be generated, depending on the extension. The extensions allowed are .dat for csv, .yaml for yaml.:
output_options:
yaml_output_file: muses_polyhyperbolic_bestfit.yaml
output_path: muses_polyhyperbolic_bestfit
The third section is for the generation of the phase diagram:
eos_options:
description: Options for EoS calculation.
eos_stages:
description: Which stages of the calculation to perform.
interpolate_points: true
maxwell_construction: true
temperature_options:
description: Determines which values of the temperature will be calculated for the equation of state.
T_min: 20
T_max: 400
T_step: 2.5
N_phi0_lines: 200
chemical_potential_options:
description: Determines which values of the baryon chemical potential will be calculated for the equation of state.
mu_B_min: 0
mu_B_max: 2000
mu_B_step: 5
N_Phi1_lines: 1000
The fourth section is for the calculation of the critical points:
critical_point_options:
description: Options for searching for the critical point position
yaml_output: critical_point_interp.yaml
phi0_min: 0.5
phi0_max: 10
N_lines: 800
max_tries: 1000
initial_Phi1_step: 1e-5
max_Phi1_step: 0.2
prec_T: 0.0001
prec_mu: 0.0001
acc_T: 0.001
acc_mu: 0.001
References
[1] R. Critelli, J. Noronha, J. Noronha-Hostler, I. Portillo, C. Ratti and R. Rougemont, ``Critical point in the phase diagram of primordial quark-gluon matter from black hole physics,’’ Phys. Rev. D 96 (2017) no.9, 096026
[2] J. Grefa, J. Noronha, J. Noronha-Hostler, I. Portillo, C. Ratti and R. Rougemont, ``Hot and dense quark-gluon plasma thermodynamics from holographic black holes,’’ Phys. Rev. D 104 (2021) no.3, 034002
[3] O. DeWolfe, S. S. Gubser and C. Rosen, ``A holographic critical point,’’ Phys. Rev. D 83 (2011), 086005
[4] J. Knaute, R. Yaresko and B. Kämpfer, ``Holographic QCD phase diagram with critical point from Einstein–Maxwell–dilaton dynamics,’’ Phys. Lett. B 778 (2018), 419-425
[5] R. G. Cai, S. He, L. Li and Y. X. Wang, ``Probing QCD critical point and induced gravitational wave by black hole physics,’’ arXiv:2201.02004 [hep-th]
2. Dependencies
Lib Boost ODEint (tested with boost 1.6.7).
[python3] (and some required packages listed in requirements.txt)
So far, the code does not seem to run natively on Windows. Mac users might also face a few issues. These problems should be addressed by using Docker containers.
3. Docker file
The base image with the underlying OS image and compiled Boost library is defined in the /base directory. The following build command uses that image.
docker build -t registry.gitlab.com/nsf-muses/module-holographic-eos/bh_eos/bh-eos:dev .
4. Usage
The user can modify the input in the file bh_eos/input/holo_eos_input_user.yaml. They need to specify either “polynomial_hyperbolic” or “muses_parametric” as the model type. They can also modify the model parameters in the files “holo_musesparametric.yaml” or “holo.polyhyperbolic.yaml”, but it is not recommended. After the user made the changes to input, suppose they are in the home directory, they need to run the following commands to validate the input file: - cd open-API - python3 validate_combine_input.py openapi.yaml’ - cd ..
The executables can be generated by compiling through the make function, with the command in the terminal - make
The compiling can be made faster by parallelization, with the command - make -j# where # denotes the numbers of cores used for compiling.
To clean the compiled objects and recompile, one can use the following command, - make clean - make distclean
The compiled executables will be in the folder “bin”. Suppose one is in the folder of the module “bh_eos”, the phase diagram can be generated by the following command - ./bin/muses_numrelholo.exec ./input/input_full.yaml The command will generate the tables for the phase diagram. By default, all the output files will be saved in the folder “output”.
5. Output files
Note that because we define the zero pressure to be the on the line where \(\mu_B=0\). If the user set the minimum \(\mu_B!=0\), all the pressure and energy density will be NaN in the table.
5.1 Yaml output file
The user can name this file in the yaml node “yaml_output_file” of the input file. This file is stored in the repo home directory and shows info of the format of the output files.
5.2 EoS output files
The user can specify the folder name where they want to store the EoS output files in the yaml node “output_path” of the input file.
Inside the folder, there are several different output files.
5.2.1 phi0Phi1_lines.csv
This table is directly calculated from the initial conditions given by phi0 Phi1 values.
5.2.2 eos.csv
This table is interpolated based on the output file phi0Phi1_lines.csv and thus has a uniform grid in \(T\) and \(\mu_B\). It has all the phases: stable, unstable, and meta phases.
5.2.3 stable_eos.csv
This table is obtained by performing a Maxwell construction on the output file eos.csv and thus only has the stable phase.
5.2.4 transition_line.csv
This table records the first-order transition line and relevant thermodynamics given by the EoS. The calculation is not precise enough yet and the first-order transition line does not go all the way to the critical point.
5.2.5 spinodal_lines.csv
This table records the spinodal lines and relevant thermodynamics.