Equation of State Sub-Library: Version 0.910
rmf_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 
00024 #ifndef O2SCL_RMF_EOS_H
00025 #define O2SCL_RMF_EOS_H
00026 
00027 #include <string>
00028 #include <cmath>
00029 #include <o2scl/lib_settings.h>
00030 #include <o2scl/constants.h>
00031 #include <o2scl/mm_funct.h>
00032 
00033 #include <o2scl/part.h>
00034 #include <o2scl/hadronic_eos.h>
00035 #include <o2scl/fermion.h>
00036 
00037 #ifndef DOXYGENP
00038 namespace o2scl {
00039 #endif
00040 
00041   /** \brief Relativistic mean field theory EOS
00042 
00043       This class computes the properties of nucleonic matter using a
00044       mean-field approximation to a field-theoretical model.
00045       
00046       Before sending neutrons and protons to these member functions,
00047       the masses should be set to their vacuum values and the
00048       degeneracy factor should be 2. If an internal model is used
00049       (using load()), then the neutron and proton masses should be set
00050       to \ref mnuc.
00051     
00052       The expressions for the energy densities are often simplified in
00053       the literature using the field equations. These expressions are
00054       not used in this code since they are only applicable in infinite
00055       matter where the field equations hold, and are not suitable for
00056       use in applications (such as to finite nuclei in \ref
00057       rmf_nucleus) where the spatial derivatives of the fields are
00058       non-zero. Notice that in the proper expressions for the energy
00059       density the similarity between terms in the pressure up to a
00060       sign. This procedure allows one to verify the thermodynamic
00061       identity even if the field equations are not solved and allows
00062       the user to add gradient terms to the energy density and
00063       pressure.
00064 
00065       \note Since this EOS uses the effective masses and chemical
00066       potentials in the fermion class, the values of
00067       part::non_interacting for neutrons and protons are set to false
00068       in many of the functions.
00069 
00070       \todo 
00071       - The functions fcomp_fields(), fkprime_fields(), and fesym_fields()
00072       are not quite correct if the neutron and proton masses are different.
00073       For this reason, they are currently unused by saturation().
00074       - The fix_saturation() and calc_cr() functions use mnuc, and should
00075       be modified to allow different neutron and proton masses.
00076       - Check the formulas in the "Background" section
00077       - There are two calc_e() functions that solve. One is specially
00078       designed to work without a good initial guess. Possibly the
00079       other calc_e() function should be similarly designed?
00080       - Make sure that this class properly handles particles for which 
00081       inc_rest_mass is true/false
00082       - The error handler is called sometimes when calc_e() is used
00083       to compute pure neutron matter. This should be fixed.
00084       - Decide whether to throw an error at [Ref. 1].
00085       - Put the err_nonconv system into calc_p(), calc_temp_e() and 
00086       fix_saturation(), etc.
00087 
00088       \future
00089       - It might be nice to remove explicit reference to the meson
00090       masses in functions which only compute nuclear matter since they
00091       are unnecessary. This might, however, demand redefining some of
00092       the couplings.
00093       - Fix calc_p() to be better at guessing
00094       - The number of couplings is getting large, maybe new
00095       organization is required.
00096       - Overload hadronic_eos::fcomp() with an exact version
00097 
00098       \hline
00099       \b Background
00100 
00101       The full Lagragian is:
00102 
00103       \f[
00104       {\cal L} = {\cal L}_{Dirac} + {\cal L}_{\sigma} + 
00105       {\cal L}_{\omega} + {\cal L}_{\rho} 
00106       \f]
00107     
00108       \f{eqnarray*}
00109       {\cal L}_{Dirac} &=& 
00110       \bar{\Psi} \left[ i {{\partial}\!\!\!{\slash}} - 
00111       g_{\omega} {{\omega}\!\!\!{\slash}} - \frac{g_{\rho}}{2} 
00112       {{\vec{\rho}}\!\!\!{\slash}}
00113       \vec{\tau} - M + g_{\sigma} \sigma - \frac{e}{2} 
00114       \left( 1 + \tau_3 \right) A_{\mu} \right] \Psi \nonumber \\
00115       {\cal L}_{\sigma} &=& 
00116       {\textstyle \frac{1}{2}} \left( \partial_{\mu} \sigma \right)^2 
00117       - {\textstyle \frac{1}{2}} m^2_{\sigma} \sigma^2 
00118       - \frac{b M}{3} \left( g_{\sigma} \sigma\right)^3 
00119       - \frac{c}{4} \left( g_{\sigma} \sigma\right)^4  \nonumber \\
00120       {\cal L}_{\omega} &=& 
00121       - {\textstyle \frac{1}{4}} f_{\mu \nu} f^{\mu \nu} 
00122       + {\textstyle \frac{1}{2}} m^2_{\omega}\omega^{\mu}\omega_{\mu} 
00123       + \frac{\zeta}{24} g_{\omega}^4 \left(\omega^\mu \omega_\mu\right)^2
00124       \nonumber \\
00125       {\cal L}_{\rho} &=& 
00126       - {\textstyle \frac{1}{4}} \vec{B}_{\mu \nu} \cdot \vec{B}^{\mu \nu}
00127       + {\textstyle \frac{1}{2}} m^2_{\rho} \vec{\rho}^{~\mu} \cdot 
00128       \vec{\rho}_{~\mu} 
00129       + \frac{\xi}{24} g_{\rho}^4 \left(\vec{\rho}^{~\mu}\right) \cdot 
00130       \vec{\rho}_{~\mu} 
00131       + g_{\rho}^2 f (\sigma, \omega) \vec{\rho}^{~\mu} \cdot 
00132       \vec{\rho}_{~\mu} \nonumber \\
00133       \f}
00134 
00135       The couplings \c cs, \c cw, and \c cr are related to 
00136       \f$ g_{\sigma}, g_{\omega} \f$ and \f$ g_{\rho} \f$ above
00137       by 
00138       \f[
00139       g_{s} = c_{\sigma} m_{\sigma} \quad
00140       g_{w} = c_{\omega} m_{\omega} \quad \mathrm{and} \quad
00141       g_{r} = c_{\rho} m_{\rho}
00142       \f]
00143       The coefficients \f$ b \f$ and \f$ c \f$ are related to the somewhat
00144       standard \f$ \kappa \f$ and \f$ \lambda \f$ by:
00145       \f[
00146       \kappa=2 M b \quad \lambda=6 c;
00147       \f]
00148       The function \f$ f \f$ is the coefficient of \f$ g_r^2 \rho^2 \f$ 
00149       \f$ f(\sigma,\omega) = b_1 \omega^2 + b_2 \omega^4 + b_3 \omega^6 +
00150       a_1 \sigma + a_2 \sigma^2 + a_3 \sigma^3 + a_4 \sigma^4 +
00151       a_5 \sigma^5 + a_6 \sigma^6 \f$ 
00152       where the notation from \ref Horowitz01 is:
00153       \f$ f(\sigma,\omega) = \lambda_4 g_s^2 \sigma^2 + 
00154       \lambda_v g_w^2 \omega^2 \f$ 
00155       This implies \f$ b_1=\lambda_v g_w^2 \f$ and 
00156       \f$ a_2=\lambda_4 g_s^2 \f$ 
00157       
00158       The couplings, \c cs, \c cw, and \c cr all have units of \f$
00159       \mathrm{fm} \f$, and the couplings \c b, \c c, \c zeta and \c xi are
00160       unitless. The additional couplings from \ref Steiner05b, \f$ a_i
00161       \f$ have units of \f$ \mathrm{fm}^{(i-2)} \f$ and the couplings
00162       \f$ b_j \f$ have units of \f$ \mathrm{fm}^{(2*j-2)} \f$ .
00163 
00164       The field equations are:
00165       \f[
00166       0 = m_{\sigma}^2 \sigma - g_{\sigma} \left( n_{s n} + n_{s p} \right)
00167       + b M g_{\sigma}^3 \sigma^2 + c g_{\sigma}^4 \sigma^3 -
00168       g_{\rho}^2 \rho^2 \frac{\partial f}{\partial \sigma}
00169       \f]
00170       \f[
00171       0 = m_{\omega}^2 \omega - g_{\omega} \left(n_n+n_p\right)
00172       + \frac{\zeta}{6} g_{\omega}^4 \omega^3 + g_{\rho}^2 \rho^2 
00173       \frac{\partial f}{\partial \omega}
00174       \f]
00175       \f[
00176       0 = m_{\rho}^2 \rho + \frac{1}{2} g_{\rho} \left(n_n-n_p\right)
00177       + 2 g_{\rho}^2 \rho f + \frac{\xi}{6} g_{\rho}^4 \rho^3
00178       \f]
00179 
00180       When the variable zm_mode is true, the effective mass is fixed using
00181       the approach of \ref Zimanyi90 .
00182     
00183       Defining
00184       \f[
00185       U(\sigma)=\frac{1}{2} m_\sigma^2\sigma^2+\frac{b M}{3}(g_\sigma\sigma)^3
00186       +\frac{c}{4}(g_\sigma\sigma)^4\;, 
00187       \f]
00188       the binding energy per particle in symmetric matter at equilibrium
00189       is given by
00190       \f[
00191       \frac{E}{A} = \frac{1}{n_0} \left[U(\sigma_0)+
00192       \frac{1}{2} m_\omega\omega_0^2+
00193       \frac{\zeta}{8}(g_\omega\omega_0)^4+\frac{2}{\pi^2}
00194       \int\limits_0^{k_F} dk k^2\sqrt{k^2+M^{*2}} \right]\;.
00195       \f]
00196       where the Dirac
00197       effective mass is  \f$ M^{*} = M - g_{\sigma}\sigma_0 \f$ .
00198       The compressibility is given by
00199       \f[
00200       K=9\frac{g_\omega^2}{m_\omega^2}n_0+3\frac{k_F^2}{E_F^*}
00201       -9n_0\frac{M^{*2}}{E_F^{*2}}\left[\left(\frac{1}{g_\sigma^2}
00202       \frac{\partial^2}{\partial\sigma_0^2}+\frac{3}{g_\sigma M^*}
00203       \frac{\partial}{\partial\sigma_0}\right)
00204       U(\sigma_0)-3\frac{n_0}{E_F^*}\right]^{-1}\;.
00205       \f]
00206       The symmetry energy of bulk matter is given by
00207       \f[
00208       E_{sym} = \frac{k_F^2}{6 E_F^{*}} + \frac{ n }
00209       {8 \left(g_{\rho}^2/m_{\rho}^2 + 2 f (\sigma_0, \omega_0) \right)} 
00210       \f]
00211     
00212       In the above equations, the subscipt \f$ 0 \f$ denotes the mean
00213       field values of \f$ \sigma \f$ and \f$ \omega \f$ .  For the case
00214       \f$ f=0 \f$ , the symmetry energy varies linearly with the density at
00215       large densities. The function \f$ f \f$ permits variations in the
00216       density dependence of the symmetry energy above nuclear matter
00217       density.
00218     
00219       See also \ref Muller96, \ref Zimanyi90, and \ref Steiner05b.
00220   */
00221   class rmf_eos : public hadronic_eos_temp_pres {
00222 
00223   public:
00224 
00225     /// Modifies method of calculating effective masses (default false)
00226     bool zm_mode;
00227     
00228     /** \brief Verbosity parameter
00229 
00230         This is used by saturation() to report progress towards
00231         computing the properties of nuclear matter near
00232         saturation
00233      */
00234     int verbose;
00235 
00236     /** \brief If true, throw exceptions when the function calc_e()
00237         does not converge (default true)
00238     */
00239     bool err_nonconv;
00240     
00241     /** \brief The convergence status of the last call to calc_e()
00242      */
00243     int last_conv;
00244 
00245     /// \name Masses
00246     //@{
00247     /** \brief nucleon mass
00248         
00249         This need not be exactly equal to the neutron or proton mass, 
00250         but provides the scale for the coupling \c b.
00251     */
00252     double mnuc;
00253 
00254     /// \f$ \sigma \f$ mass (in \f$ \mathrm{fm}^{-1} \f$ )
00255     double ms;
00256 
00257     /// \f$ \omega \f$ mass (in \f$ \mathrm{fm}^{-1} \f$ )
00258     double mw;
00259 
00260     /// \f$ \rho \f$ mass (in \f$ \mathrm{fm}^{-1} \f$ )
00261     double mr;
00262 
00263     //@}
00264 
00265     /// \name Standard couplings (including nonlinear sigma terms)
00266     //@{
00267     double cs, cw, cr, b, c;
00268     //@}
00269 
00270     /// \name Non-linear terms for omega and rho.
00271     //@{
00272     double zeta, xi;
00273     //@}
00274   
00275     /// \name Additional isovector couplings
00276     //@{
00277     double a1, a2, a3, a4, a5, a6, b1, b2, b3;
00278     //@}
00279 
00280     rmf_eos();
00281 
00282     /* \brief Load parameters for model named 'model'
00283         
00284         Presently accepted values from file rmfdata/model_list:
00285         \include rmfdata/model_list
00286         
00287         In these files, the nucleon and meson masses are by default
00288         specified in MeV, and cs, cw, and cr are given in fm. The
00289         parameters b and c are both unitless. If the bool 'oakstyle' is
00290         true, then load() assumes that gs, gw, and gr have been given
00291         where gs and gw are as usual, but gr is a factor of two smaller
00292         than usual, and g2 and g3 have been given where g2 = -b M gs^3
00293         and g3 = c gs^4. If tokistyle is true, then it is additionally
00294         assumed that c3 is given where c3=zeta/6*gw^4.
00295         
00296         If \c external is true, then model is the filename (relative
00297         to the current directory) of the file containing the model
00298         parameters. Otherwise, the model is assumed to be present in
00299         the \o2 library data directory.
00300     */
00301     //int load(std::string model, bool external=false);
00302 
00303     /// \name Compute EOS 
00304     //@{
00305     /** \brief Equation of state as a function of density
00306 
00307         Initial guesses for the chemical potentials are taken
00308         from the user-given values. Initial guesses for the fields
00309         can be set by set_fields(), or default values will be used.
00310         After the call to calc_e(), the final values of the fields
00311         can be accessed through get_fields(). 
00312 
00313         This is a little more robust than the standard version
00314         in the parent \ref hadronic_eos.
00315         
00316         \future Improve the operation of this function when the
00317         proton density is zero.
00318        
00319     */
00320     virtual int calc_e(fermion &ne, fermion &pr, thermo &lth);
00321   
00322     /** \brief Equation of state as a function of density 
00323         returning the meson fields
00324         
00325         \future Improve the operation of this function when the
00326         proton density is zero.
00327     */
00328     virtual int calc_e_fields(fermion &ne, fermion &pr, thermo &lth,
00329                               double &sig, double &ome, double &rho);
00330   
00331     /**  \brief Equation of state as a function of chemical potential
00332          
00333          Solves for the field equations automatically.
00334          
00335          \note This may not be too robust. Fix?
00336     */
00337     virtual int calc_p(fermion &ne, fermion &pr, thermo &lth);
00338 
00339     /** \brief Equation of state and meson field equations 
00340         as a function of chemical potentials
00341       
00342         This calculates the pressure and energy density as a function of
00343         \f$ \mu_n,\mu_p,\sigma,\omega,rho \f$ . When the field equations
00344         have been solved, \c f1, \c f2, and \c f3 are all zero. 
00345         
00346         The thermodynamic identity is satisfied even when the field
00347         equations are not solved.
00348 
00349         \future Probably best to have f1, f2, and f3 scaled
00350         in some sensible way, i.e. scaled to the fields?
00351     */
00352     virtual int calc_eq_p(fermion &neu, fermion &p, double sig, 
00353                           double ome, double rho, double &f1, 
00354                           double &f2, double &f3, thermo &th);
00355 
00356     /** \brief Equation of state and meson field equations as a 
00357         function of chemical potentials at finite temperature
00358 
00359         Analogous to \ref calc_eq_p() except at finite temperature.
00360     */
00361     virtual int calc_eq_temp_p(fermion &ne, fermion &pr, double temper, 
00362                                double sig, double ome, double rho, double &f1, 
00363                                double &f2, double &f3, thermo &th);
00364     
00365     /** \brief Equation of state as a function of chemical potential
00366         
00367         Solves for the field equations automatically.
00368     */
00369     virtual int calc_temp_p(fermion &ne, fermion &pr, double T,
00370                             thermo &lth);
00371 
00372     /** \brief Equation of state as a function of densities at 
00373         finite temperature
00374     */
00375     int calc_temp_e(fermion &ne, fermion &pr, double T, 
00376                     thermo &lth);
00377     //@}
00378 
00379     /// \name Saturation properties
00380     //@{
00381     /** \brief Calculate cs, cw, cr, b, and c from the saturation 
00382         properties
00383 
00384         Note that the meson masses and \ref mnuc must be specified
00385         before calling this function.
00386 
00387         This function does not give correct results when bool zm_mode 
00388         is true. 
00389         
00390         \c guess_cs, \c guess_cw, \c guess_b, and \c guess_c are
00391         initial guesses for \c cs, \c cw, \c b, and \c c respectively.
00392 
00393         \todo 
00394         - Fix this for zm_mode=true
00395         - Ensure solver is more robust
00396         
00397     */
00398     int fix_saturation(double guess_cs=4.0, double guess_cw=3.0, 
00399                        double guess_b=0.001, double guess_c=-0.001);
00400     
00401     /** \brief Calculate properties of nuclear matter at the
00402         saturation density
00403 
00404         This function first constructs an initial guess, increasing
00405         the chemical potentials if required to ensure the neutron and
00406         proton densities are finite, and then uses \ref
00407         rmf_eos::sat_mroot to solve the field equations and ensure
00408         that the neutron and proton densities are equal and the
00409         pressure is zero. The quantities \ref hadronic_eos::n0, \ref
00410         hadronic_eos::eoa, and \ref hadronic_eos::msom can be computed
00411         directly, and the compressibility, the skewness, and the
00412         symmetry energy are computed using the functions
00413         fkprime_fields() and fesym_fields(). This function overrides
00414         the generic version in \ref hadronic_eos.
00415 
00416         If \ref verbose is greater than zero, then then this function
00417         reports details on the initial iterations to get the initial
00418         guess for the solver.
00419     */
00420     virtual int saturation();
00421   
00422     /** \brief Calculate symmetry energy assuming the field
00423         equations have already been solved
00424         
00425         This may only work at saturation density. Used by saturation().
00426     */
00427     double fesym_fields(double sig, double ome, double nb);
00428 
00429     /** \brief Calculate the compressibility assuming the field
00430         equations have already been solved
00431         
00432         This may only work at saturation density.
00433     */
00434     double fcomp_fields(double sig, double ome, double nb);
00435 
00436     /** \brief Calculate compressibilty and \c kprime assuming the field
00437         equations have already been solved
00438 
00439         This may only work at saturation density. Used by
00440         saturation(). 
00441 
00442         \todo Does this work? Fix fkprime_fields() if it does not.
00443     */
00444     int fkprime_fields(double sig, double ome, double nb,
00445                        double &k, double &kprime);
00446     //@}
00447 
00448     /// \name Fields and field equations
00449     //@{
00450     /** \brief A function for solving the field equations
00451 
00452         x[0], x[1], and x[2] should be set to \f$ \sigma, \omega \f$ , 
00453         and \f$ \rho \f$ on input (in \f$ \mathrm{fm}^{-1} \f$ ) and
00454         on exit, y[0], y[1] and y[2] contain the field equations 
00455         and are zero when the field equations have been solved.
00456         The \c pa parameter is ignored.
00457     */
00458     int field_eqs(size_t nv, const ovector_base &x, ovector_base &y);
00459 
00460     /** \brief A function for solving the field equations at finite 
00461         temperature
00462         
00463         x[0], x[1], and x[2] should be set to \f$ \sigma, \omega \f$ , 
00464         and \f$ \rho \f$ on input (in \f$ \mathrm{fm}^{-1} \f$ ) and
00465         on exit, y[0], y[1] and y[2] contain the field equations 
00466         and are zero when the field equations have been solved.
00467         The \c pa parameter is ignored.
00468     */
00469     int field_eqsT(size_t nv, const ovector_base &x, ovector_base &y);
00470 
00471     /** \brief Set a guess for the fields for the next call to calc_e(), 
00472         calc_p(), or saturation()
00473     */
00474     virtual int set_fields(double sig, double ome, double lrho) {
00475       sigma=sig;
00476       omega=ome;
00477       rho=lrho;
00478       guess_set=true;
00479       return 0;
00480     }
00481 
00482     /** \brief Return the most recent values of the meson fields 
00483         
00484         This returns the most recent values of the meson fields set by
00485         a call to saturation(), calc_e(), or calc_p(fermion &, fermion
00486         &, thermo &).
00487     */
00488     int get_fields(double &sig, double &ome, double &lrho) {
00489       sig=sigma;
00490       ome=omega;
00491       lrho=rho;
00492       return 0;
00493     }
00494     //@}
00495 
00496     /// Return string denoting type ("rmf_eos")
00497     virtual const char *type() { return "rmf_eos"; }
00498 
00499     /** \brief Set the coefficients of a rmf_eos object to their 
00500         limits from naturalness
00501 
00502         As given in \ref Muller96 .
00503 
00504         The definition of the vector-isovector field and coupling
00505         matches what is done here. Compare the Lagrangian above
00506         with Eq. 10 from the reference.
00507 
00508         The following couplings should all be of the same
00509         size:
00510         \f[
00511         \frac{1}{2 c_s^2 M^2}, \frac{1}{2 c_v^2 M^2} 
00512         \frac{1}{8 c_{\rho}^2 M^2},~\mathrm{and}~\frac{
00513         \bar{a}_{ijk} M^{i+2 j+2 k-4}}{2^{2 k}}
00514         \f]
00515         which are equivalent to 
00516         \f[
00517         \frac{m_s^2}{2 g_s^2 M^2}, \frac{m_v^2}{2 g_v^2 M^2} 
00518         \frac{m_{\rho}^2}{8 g_{\rho}^2 M^2},~\mathrm{and}~\frac{
00519         a_{ijk} M^{i+2 j+2 k-4}}{g_s^i g_v^{2 j} 
00520         g_{\rho}^{2 k} 2^{2 k}}
00521         \f]
00522         
00523         The connection the \f$ a_{ijk} \f$ 's and the coefficients 
00524         that are used here is 
00525         \f{eqnarray*}
00526         \frac{b M}{3} g_{\sigma}^3 \sigma^3 &=& a_{300}~\sigma^3
00527         \nonumber \\
00528         \frac{c}{4} g_{\sigma}^4 \sigma^4 &=& a_{400}~\sigma^4
00529         \nonumber \\
00530         \frac{\zeta}{24} g_{\omega}^4 \omega^4 &=& a_{020}~\omega^4
00531         \nonumber \\
00532         \frac{\xi}{24} g_{\rho}^4 \rho^4 &=& a_{002}~\rho^4
00533         \nonumber \\
00534         b_1 g_{\rho}^2 \omega^2 \rho^2 &=& a_{011}~\omega^2 \rho^2 
00535         \nonumber \\
00536         b_2 g_{\rho}^2 \omega^4 \rho^2 &=& a_{021}~\omega^4 \rho^2 
00537         \nonumber \\
00538         b_3 g_{\rho}^2 \omega^6 \rho^2 &=& a_{031}~\omega^6 \rho^2 
00539         \nonumber \\
00540         a_1 g_{\rho}^2 \sigma^1 \rho^2 &=& a_{101}~\sigma^1 \rho^2 
00541         \nonumber \\
00542         a_2 g_{\rho}^2 \sigma^2 \rho^2 &=& a_{201}~\sigma^2 \rho^2 
00543         \nonumber \\
00544         a_3 g_{\rho}^2 \sigma^3 \rho^2 &=& a_{301}~\sigma^3 \rho^2 
00545         \nonumber \\
00546         a_4 g_{\rho}^2 \sigma^4 \rho^2 &=& a_{401}~\sigma^4 \rho^2 
00547         \nonumber \\
00548         a_5 g_{\rho}^2 \sigma^5 \rho^2 &=& a_{501}~\sigma^5 \rho^2 
00549         \nonumber \\
00550         a_6 g_{\rho}^2 \sigma^6 \rho^2 &=& a_{601}~\sigma^6 \rho^2 
00551         \nonumber
00552         \f}
00553 
00554         Note that Muller and Serot use the notation 
00555         \f[
00556         \frac{\bar{\kappa} g_s^3 }{2} = \frac{\kappa}{2} = b M 
00557         g_s^3 \qquad \mathrm{and} \qquad
00558         \frac{\bar{\lambda} g_s^4}{6} = \frac{\lambda}{6}
00559         = c g_s^4
00560         \f]
00561         which differs slightly from the "standard" notation above.
00562 
00563         We need to compare the values of
00564         \f{eqnarray*}
00565         &\frac{m_s^2}{2 g_s^2 M^2}, \frac{m_v^2}{2 g_v^2 M^2} 
00566         \frac{m_{\rho}^2}{8 g_{\rho}^2 M^2},\frac{b}{3},
00567         \frac{c}{4}
00568         &
00569         \nonumber \\
00570         &\frac{\zeta}{24}, \frac{\xi}{384},
00571         \frac{b_1}{4 g_{\omega}^2},
00572         \frac{b_2 M^2}{4 g_{\omega}^4},
00573         \frac{b_3 M^4}{4 g_{\omega}^6},
00574         \frac{a_1}{4 g_{\sigma} M},&
00575         \nonumber \\
00576         &\frac{a_2}{4 g_{\sigma}^2},
00577         \frac{a_3 M}{4 g_{\sigma}^3},
00578         \frac{a_4 M^2}{4 g_{\sigma}^4},
00579         \frac{a_5 M^3}{4 g_{\sigma}^5},~\mathrm{and}~\frac{a_6 M^4}
00580         {4 g_{\sigma}^6}\, .&
00581         \f}
00582 
00583         These values are stored in the variables cs, cw, cr, b, c,
00584         zeta, xi, b1, etc. in the specified \ref rmf_eos object. All
00585         of the numbers should be around 0.001 or 0.002.
00586 
00587         For the scale \f$ M \f$, \ref mnuc is used.
00588 
00589         \todo I may have ignored some signs in the above, which are
00590         unimportant for this application, but it would be good to fix
00591         them for posterity.
00592 
00593     */
00594     int check_naturalness(rmf_eos &re) {
00595       
00596       double gs=cs*ms;
00597       double gw=cw*mw;
00598       double gr=cr*mr;
00599 
00600       re.cs=0.5/cs/cs/mnuc/mnuc;
00601       re.cw=0.5/cw/cw/mnuc/mnuc;
00602       re.cr=0.125/cr/cr/mnuc/mnuc;
00603       re.b=b/3.0;
00604       re.c=c/4.0;
00605 
00606       re.zeta=zeta/24.0;
00607       re.xi=xi/384.0;
00608 
00609       re.b1=b1/gw/gw/4.0;
00610       re.b2=b2/pow(gw,4.0)/4.0*mnuc*mnuc;
00611       re.b3=b3/pow(gw,6.0)/4.0*pow(mnuc,4.0);
00612 
00613       re.a1=a1/gs/4.0/mnuc;
00614       re.a2=a2/pow(gs,2.0)/4.0;
00615       re.a3=a3/pow(gs,3.0)/4.0*mnuc;
00616       re.a4=a4/pow(gs,4.0)/4.0*mnuc*mnuc;
00617       re.a5=a5/pow(gs,5.0)/4.0*pow(mnuc,3.0);
00618       re.a6=a6/pow(gs,6.0)/4.0*pow(mnuc,4.0);
00619 
00620       return 0;
00621     }
00622     
00623     /** \brief Provide the maximum values of the couplings assuming
00624         a limit on naturalness
00625 
00626         The limits for the couplings are function of the nucleon and
00627         meson masses, except for the limits on \c b, \c c, \c zeta,
00628         and \c xi which are independent of the masses because of the
00629         way that these four couplings are defined.
00630     */
00631     int naturalness_limits(double value, rmf_eos &re) {
00632       
00633       double gs=cs*ms;
00634       double gw=cw*mw;
00635       double gr=cr*mr;
00636 
00637       re.cs=value*2.0*mnuc*mnuc;
00638       re.cw=value*2.0*mnuc*mnuc;
00639       re.cr=value*8.0*mnuc*mnuc;
00640       re.b=value*3.0;
00641       re.c=value*4.0;
00642 
00643       re.zeta=value*24.0;
00644       re.xi=value*384.0;
00645       
00646       re.b1=value*gw*gw*4.0;
00647       re.b2=value*pow(gw,4.0)*4.0/mnuc/mnuc;
00648       re.b3=value*pow(gw,6.0)*4.0/pow(mnuc,4.0);
00649 
00650       re.a1=value*gs*4.0*mnuc;
00651       re.a2=value*pow(gs,2.0)*4.0;
00652       re.a3=value*pow(gs,3.0)*4.0/mnuc;
00653       re.a4=value*pow(gs,4.0)*4.0/mnuc/mnuc;
00654       re.a5=value*pow(gs,5.0)*4.0/pow(mnuc,3.0);
00655       re.a6=value*pow(gs,6.0)*4.0/pow(mnuc,4.0);
00656       
00657       return 0;
00658     }
00659 
00660     /// \name Solver
00661     //@{
00662     /** \brief Set class mroot object for use calculating saturation density
00663      */
00664     virtual int set_sat_mroot(mroot<mm_funct<> > &mrx) {
00665       sat_mroot=&mrx;
00666       return 0;
00667     }
00668 
00669     /** \brief The default solver for calculating the saturation 
00670         density
00671         
00672         Used by fn0() (which is called by saturation()) to solve
00673         saturation_matter_e() (1 variable).
00674     */
00675     gsl_mroot_hybrids<mm_funct<> > def_sat_mroot;
00676     //@}
00677 
00678 #ifndef DOXYGEN_INTERNAL
00679 
00680   protected:
00681 
00682     /// Desc
00683     double n_baryon;
00684     
00685     /** \brief Temporary charge density 
00686 
00687         \todo Should use hadronic_eos::proton_frac instead?
00688     */
00689     double n_charge;
00690 
00691     /// \name The meson fields
00692     //@{
00693     double sigma, omega, rho;
00694     //@}
00695 
00696     /// Temperature for solving field equations at finite temperature
00697     double fe_temp;
00698 
00699     /// For calc_e(), if true, then solve for neutron matter
00700     bool ce_neut_matter;
00701     
00702     /// For calc_e(), if true, then solve for proton matter
00703     bool ce_prot_matter;
00704 
00705     /// True if a guess for the fields has been given
00706     bool guess_set;
00707 
00708     /// The solver to compute saturation properties
00709     mroot<mm_funct<> > *sat_mroot;
00710 
00711     /// The function for fix_saturation()
00712     int fix_saturation_fun(size_t nv, const ovector_base &x, ovector_base &y);
00713     
00714     /// Compute matter at zero pressure (for saturation())
00715     virtual int zero_pressure(size_t nv, const ovector_base &ex, 
00716                               ovector_base &ey);
00717 
00718     /// The function for calc_e()
00719     virtual int calc_e_solve_fun(size_t nv, const ovector_base &ex, 
00720                                  ovector_base &ey);
00721 
00722     /// The function for calc_temp_e()
00723     virtual int calc_temp_e_solve_fun(size_t nv, const ovector_base &ex, 
00724                                       ovector_base &ey);
00725 
00726     /** \brief Calculate the \c cr coupling given \c sig and \c ome 
00727         at the density 'nb'.
00728         
00729         Used by fix_saturation().
00730     */
00731     int calc_cr(double sig, double ome, double nb);
00732 
00733     /// Temperature storage for calc_temp_e()
00734     double ce_temp;
00735 
00736 #endif
00737 
00738   };
00739 
00740 #ifndef DOXYGENP
00741 }
00742 #endif
00743 
00744 #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.