Reformatting the Equation os State
XNS 4.0 can now take tabulated realistic EoS and compute rotating-magnetized GR and STT NS-models. XNS 4.0 uses Geometrized Units with \(G=c=M_\odot=1\). It uses a specific formatted tabulated EoS, that differs from most of available EoSs for various reasons:
To speed up interpolation, the EoS has been resampled and re-tabulated using uniform spacing in log-space for the input variable. This means that we have a table for \(p(\rho)\), \(e(\rho)\) etc… and another table for \(\rho(p)\), and another one for \(\rho(h)\) etc….
XNS 4.0 uses the pseudo-hentalpy \(h\) which is almost never given in tabulated EoSs. So we need to compute it and add to our tabuled formatted EoS. More precisely we tabulate the natural logarithm \(Ln(h)\) defined, in terms of the rest mass energy density \(\rho\), internal energy density \(e\) and pressure \(p\) as: \({\rm d} Ln(h) = {\rm d}p/(\rho +e +p)\)
XNS 4.0 is a spin-off of X-ECHO, and as such operates using rest mass (energy) density \(\rho\), internal energy density \(e\) and pressure \(p\). Normally EoSs are given in terms of the total energy density \(e_{\rm tot}\) and the baryon number density \(n_{\rm b}\). As a consequence to use XNS 4.0, one needs to split the total energy density between rest mass and internal energy density. We do this setting \(e_{\rm} = e_{\rm tot}- n_{\rm b} m_{\rm b} \) where \(m_{\rm b}\) is the baryon mass, assumed to be constant. However it can happen that \(n_{\rm b} m_{\rm b} > e_{\rm tot}\), either at very low densities (when the two are almost equal) due to round-off and approximation errors, or at very high densities due to quark deconfinement (the rest mass of three deconfined quarks is less than the rest mass of a nucleon in which the same three quarks are confined, even if the baryon number is the same). This means that in recomputing our formatted EoS we must ensure that \(n_{\rm b} m_{\rm b} < e_{\rm tot}\) always. For this reason the value of \(m_{\rm b}\) can be tuned to avoid such problem. There is a parameter MBARYONFC to take care of it (you can find more on the guide). For nuclear EoSs, the problem arises only at low densities and usually a factor \(\pm 1.0005\) is sufficient. Being this within the accuracy of the code, one needs only to check the EoS behave properly, without activating the relative option/parameter. For deconfined systems one might need to change it more, and in this case also activate the relative option.
In order to do all of this we have a PYTHON script that takes an EoS (typically in COMPSTAR format, but can easily be adapted to any other, the EoS for the default script are in the directory BL2), and rebuild a table in the XNS 4.0 format. Beware that you need to check that everything works (the code has some check), in particular if you join different EoSs check that they behave properly (it can happen that EoSs computed by different groups, in different density ranges, and with different approaches cannot easily be joined together without introducing artefacts or jumps - these might create problems to XNS 4.0 if not properly treated). Sometimes, even if the input EoS behaves properly, our python script can produce a wrong interpolation. This typically happens when two different EoS are joined (like at the edge of the crust) if the joining is not smooth enough. XNS 4.0 can work even in the presence of phase-transitions and/or density jumps like for Strange-Stars, but in general the presence of strong discontinuities can create issues preventing a proper relaxation.
Format of a typical XNS 4.0 Tabulated EoS.
Line 1 - number of points used for the tabulated EoS (i.e. between the minimum density and the maximum density) = 1000.
Line 2 Empty
Line 3 minimum and maximum \({\rm Log_{10}}(\rho)\)
Line 4 minimum and maximum \({\rm Log_{10}}(p)\) and the effective adiabatic index \(\Gamma_p = {\rm d} Log(p) / {\rm d} Log(\rho)\) at minimum and maximum pressure.
Line 5 minimum and maximum \({\rm Log_{10}}(e)\) and the effective adiabatic index \(\Gamma_e = {\rm d} Log(e) / {\rm d} Log(\rho)\) at minimum and maximum internal energy.
Line 6 minimum and maximum \({\rm Log_{10}}(Ln(h))\) and the effective adiabatic index \(\Gamma_h = {\rm d} Log(Ln(h)) / {\rm d} Log(\rho)\) at minimum and maximum \(Ln(h)\).
Empty line
Block 1 (1000 lines - 7 columns) - First column is \(Log_{10}(\rho)\) uniformly sampled (1000 points) between \(Log_{10}(\rho_{min})\) and \(Log_{10}(\rho_{max})\). Second column is \(Log_{10}(p)\) at the same densities. Third column is \(Log_{10}(e)\). Forth column is \(Log_{10}(Ln(h))\) at the same density. Fifth column is \(\Gamma_p\), sixth column is \(\Gamma_e\), seventh column is \(\Gamma_h\).
Empty line
Block 2 (1000 lines - 3 columns) - First column is \(Log_{10}(p)\) uniformly sampled between \(Log_{10}(p(\rho_{min}))\) and \(Log_{10}(p(\rho_{max}))\). Second column is \(Log_{10}(\rho)\) at the same pressure.Third column is \(\Gamma_{\rho-p}={\rm d}Log_{10}(\rho)/{\rm d}Log_{10}(p)\) at the same pressure.
Empty line
Block 3 (1000 lines - 3 columns) - First column is \(Log_{10}(Ln(h))\) uniformly sampled between \(Log_{10}(Ln(h(\rho_{min})))\) and \(Log_{10}(Ln(h(\rho_{max})))\). Second column is \(Log_{10}(\rho)\) at the same hentalpy. Third column is \(\Gamma_{\rho-h}={\rm d}Log_{10}(\rho)/{\rm d}Log_{10}(Ln(h))\) at the same hentalpy.