![]() |
Equation of State Sub-Library: Version 0.910
|
00001 /* 00002 ------------------------------------------------------------------- 00003 00004 Copyright (C) 2006-2012, Andrew W. Steiner 00005 00006 This file is part of O2scl. 00007 00008 O2scl is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 3 of the License, or 00011 (at your option) any later version. 00012 00013 O2scl is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with O2scl. If not, see <http://www.gnu.org/licenses/>. 00020 00021 ------------------------------------------------------------------- 00022 */ 00023 #ifndef O2SCL_APR_EOS_H 00024 #define O2SCL_APR_EOS_H 00025 00026 #include <cmath> 00027 #include <o2scl/constants.h> 00028 #include <o2scl/hadronic_eos.h> 00029 #include <o2scl/fermion.h> 00030 #include <o2scl/nonrel_fermion.h> 00031 00032 #ifndef DOXYGENP 00033 namespace o2scl { 00034 #endif 00035 00036 /** \brief EOS from Akmal, Pandharipande, and Ravenhall 00037 00038 The EOS of Akmal, Pandharipande, and Ravenhall, from \ref 00039 Akmal98 (APR). 00040 00041 The Hamiltonian is: 00042 \f[ 00043 {\cal H}_{APR} = {\cal H}_{kin} + {\cal H}_{pot} 00044 \f] 00045 00046 \f[ 00047 {\cal H}_{kin} = \left( \frac{\hbar^2}{2 m} + 00048 \left( p_3 + \left( 1 - x \right) 00049 p_5 \right) n e^{-p_4 n} \right) \tau_n + 00050 \left( \frac{\hbar^2}{2 m} + \left( p_3 + x 00051 p_5 \right) n e^{-p_4 n} \right) \tau_p 00052 \f] 00053 00054 \f[ 00055 {\cal H}_{pot} = 00056 g_1 \left( 1 - \left( 1 - 2 x \right)^2 \right) + 00057 g_2 \left( 1 - 2 x \right)^2 00058 \f] 00059 00060 The following are definitions for \f$ g_i \f$ in the low-density 00061 phase (LDP) or the high-density phase (HDP): 00062 00063 \f[ 00064 g_{1,LDP} = -n^2 \left( p_1 + p_2 n + p_6 n^2 + 00065 \left( p_{10} + p_{11} n \right) e^{-p_9^2 n^2} \right) 00066 \f] 00067 00068 \f[ 00069 g_{2,LDP} = -n^2 \left( p_{12}/n + p_7 + p_8 n + 00070 p_{13} e^{-p_9^2 n^2} \right) 00071 \f] 00072 00073 \f[ 00074 g_{1,HDP} = g_{1,LDP} -n^2 \left( p_{17} \left( n - p_{19} \right) 00075 + p_{21} \left( n - p_{19} \right)^2 e^{p_{18} 00076 \left( n - p_{19} \right) } 00077 \right) 00078 \f] 00079 00080 \f[ 00081 g_{2,HDP} = g_{2,LDP} -n^2 \left( p_{15} \left( n - p_{20} \right) 00082 + p_{14} \left( n - p_{20} \right)^2 e^{p_{16} 00083 \left( n - p_{20} \right)} 00084 \right) 00085 \f] 00086 00087 The chemical potentials include the rest mass energy and the 00088 energy density includes the rest mass energy density. 00089 00090 \note APR seems to have been designed to be used with 00091 non-relativistic neutrons and protons with equal masses of 939 00092 MeV. This gives a saturation density very close to 0.16. 00093 00094 The variables \f$ \nu_n\f$ and \f$ \nu_p\f$ contain the 00095 expressions \f$ (-\mu_n+V_n)/T \f$ and \f$ (-\mu_p+V_p)/T \f$ 00096 respectively, where \f$ V \f$ is the potential part of the 00097 single particle energy for particle i (i.e. the derivative of 00098 the Hamiltonian w.r.t. density while energy density held 00099 constant). Equivalently, \f$ \nu_n\f$ is just \f$ -k_{F_n}^2/ 2 00100 m^{*} \f$. 00101 00102 The selection between the LDP and HDP is controlled by 00103 \ref pion. The default is to use the LDP at densities below 00104 0.16 \f$ \mathrm{fm}^{-3} \f$, and for larger densities 00105 to just use whichever minimizes the energy. 00106 00107 The finite temperature approximations from \ref Prakash97 00108 are used in testing. 00109 00110 \note Since this EOS uses the effective masses and chemical 00111 potentials in the fermion class, the values of 00112 part::non_interacting for neutrons and protons are set to false 00113 in many of the functions. 00114 00115 \note The parameter array is unit indexed, so that 00116 <tt>par[0]</tt> is unused. 00117 00118 \future There might be room to improve the testing 00119 of the finite temperature \part a bit. 00120 \future There is some repetition between calc_e() and calc_temp_e() 00121 that possibly could be removed. 00122 */ 00123 class apr_eos : public hadronic_eos_temp_eden { 00124 00125 #ifndef DOXYGEN_INTERNAL 00126 00127 protected: 00128 00129 /// Storage for the parameters 00130 double *par; 00131 00132 /// An integer to indicate which phase was used in calc_e() 00133 int lp; 00134 00135 #endif 00136 00137 public: 00138 00139 /** \brief Create an EOS object with the default parameter 00140 set (\f$ A18 + UIX^{*}+\delta v \f$). 00141 */ 00142 apr_eos(); 00143 00144 virtual ~apr_eos(); 00145 00146 /** 00147 \name Choice of phase 00148 */ 00149 //@{ 00150 /** \brief use LDP for densities less than 0.16 and for higher 00151 densities, use the phase which minimizes energy (default) 00152 */ 00153 static const int best=0; 00154 /// LDP (no pion condensation) 00155 static const int ldp=1; 00156 /// HDP (pion condensation) 00157 static const int hdp=2; 00158 /// Choice of phase (default \ref best) 00159 int pion; 00160 /** \brief Return the phase of the most recent call to calc_e() 00161 */ 00162 int last_phase() { return lp; } 00163 //@} 00164 00165 /** \brief Equation of state as a function of density 00166 */ 00167 virtual int calc_e(fermion &n, fermion &p, thermo &th); 00168 00169 /// Equation of state as a function of densities 00170 virtual int calc_temp_e(fermion &n, fermion &pr, double temper, 00171 thermo &th); 00172 00173 /** \brief Compute the compressibility 00174 00175 See general notes at hadronic_eos::fcomp(). This computes the 00176 compressibility (at fixed proton fraction = 0.5) exactly, 00177 unless \ref parent_method is true in which case the derivative 00178 is taken numerically in hadronic_eos::fcomp(). 00179 */ 00180 double fcomp(double nb); 00181 00182 /** \brief Calculate symmetry energy of matter as energy of 00183 neutron matter minus the energy of nuclear matter 00184 00185 This function returns the energy per baryon of neutron matter 00186 minus the energy per baryon of nuclear matter. This will 00187 deviate significantly from the results from fesym() only if 00188 the dependence of the symmetry energy on \f$ \delta \f$ is not 00189 quadratic. 00190 */ 00191 double fesym_diff(double nb); 00192 00193 /** \brief Select model 00194 00195 Valid values for \c model_index are: \n 00196 1 - A18+UIX*+deltav (preferred by Akmal, et. al. - this is 00197 the default) \n 00198 2 - A18+UIX* \n 00199 3 - A18+deltav \n 00200 4 - A18 \n 00201 00202 If any other integer is given, A18+UIX*+deltav is assumed. 00203 */ 00204 void select(int model_index); 00205 00206 /** \brief Calculate Q's for semi-infinite nuclear matter 00207 00208 For general discussion, see the documentation to hadronic_eos::qs(). 00209 00210 For APR, we set \f$ x_1=x_2=0 \f$ so that \f$ Q_i=P_i/2 \f$ and then 00211 \f{eqnarray*} 00212 P_1 &=& \left(\frac{1}{2} p_3-p_5 \right) e^{-p_4 n} 00213 \nonumber \\ 00214 P_2 &=& \left(\frac{1}{2} p_3+p_5 \right) e^{-p_4 n} 00215 \f} 00216 00217 This gives 00218 \f{eqnarray*} 00219 Q_{nn}&=&\frac{1}{4} e^{-p_4 \rho} 00220 \left[ -6 p_5 - p_4 (p_3 - 2 p_5) (n_n + 2 n_p) \right] 00221 \nonumber \\ 00222 Q_{np}&=&\frac{1}{8} e^{-p_4 \rho} 00223 \left[ 4 (p_3 - 4 p_5) - 3 p_4 (p_3 - 2 p_5) (n_n + n_p)\right] 00224 \nonumber \\ 00225 Q_{pp}&=&\frac{1}{4} e^{-p_4 \rho} 00226 \left[ -6 p_5 - p_4 (p_3 - 2 p_5) (n_p + 2 n_n) \right] 00227 \f} 00228 00229 \htmlonly 00230 See the Mathematica notebook 00231 <a href="apr_eos.nb"> 00232 apr_eos.nb</a>, and 00233 <a href="apr_eos.ps"> 00234 apr_eos.ps</a>. 00235 \endhtmlonly 00236 \latexonly 00237 See the Mathematica notebook 00238 \begin{verbatim} 00239 doc/o2scl/extras/apr_eos.nb 00240 doc/o2scl/extras/apr_eos.ps 00241 \end{verbatim} 00242 \endlatexonly 00243 00244 */ 00245 int gradient_qij2(double nn, double np, 00246 double &qnn, double &qnp, double &qpp, 00247 double &dqnndnn, double &dqnndnp, 00248 double &dqnpdnn, double &dqnpdnp, 00249 double &dqppdnn, double &dqppdnp); 00250 00251 /** \brief Get the value of one of the parameters 00252 */ 00253 double get_par(int n) { 00254 if (n<23 && n>0) return par[n]; 00255 return 0.0; 00256 } 00257 00258 /** \brief Set the value of one of the parameters 00259 */ 00260 int set_par(int n, double x) { 00261 if (n<23 && n>0) par[n]=x; 00262 return 0; 00263 } 00264 00265 /// Return string denoting type ("apr_eos") 00266 virtual const char *type() { return "apr_eos"; } 00267 00268 /** \brief If true, use the methods from hadronic_eos for fcomp() 00269 00270 This can be set to true to check the difference in the 00271 compressibility wbetween the exact expressions and the 00272 numerical values from class hadronic_eos. 00273 00274 \future This function is probably unnecessary, as the 00275 syntax 00276 \code 00277 apr_eos apr; 00278 ccout << apr.hadronic_eos::fcomp(0.16) << endl; 00279 \endcode 00280 works just as well. 00281 */ 00282 bool parent_method; 00283 00284 #ifndef DOXYGEN_INTERNAL 00285 00286 protected: 00287 00288 /// Desc 00289 nonrel_fermion nrf; 00290 00291 /// The variable indicating which parameter set is to be used 00292 int choice; 00293 00294 #endif 00295 00296 }; 00297 00298 #ifndef DOXYGENP 00299 } 00300 #endif 00301 00302 #endif
Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).