Equation of State Sub-Library: Version 0.910
apr_eos.h
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
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Friends

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).

Get Object-oriented Scientific Computing
Lib at SourceForge.net. Fast, secure and Free Open Source software
downloads.