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