Equation of State Sub-Library: Version 0.910
nambujl_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_NAMBUJL_EOS_H
00024 #define O2SCL_NAMBUJL_EOS_H
00025 
00026 #include <cmath>
00027 #include <o2scl/constants.h>
00028 #include <o2scl/quark_eos.h>
00029 #include <o2scl/quark.h>
00030 #include <o2scl/mm_funct.h>
00031 #include <o2scl/gsl_mroot_hybrids.h>
00032 #include <o2scl/inte.h>
00033 #include <o2scl/gsl_inte_qag.h>
00034 
00035 #ifndef DOXYGENP
00036 namespace o2scl {
00037 #endif
00038 
00039   /** \brief Nambu Jona-Lasinio EOS at zero temperature
00040 
00041       Calculates everything from the quark condensates ([uds].qq) and the
00042       chemical potentials ([uds].mu). If "fromqq" is set to false, then
00043       instead it calculates everything from the dynamical masses
00044       ([uds].ms) and the chemical potentials. L, G, K, and B0 are fixed
00045       constants.  [uds].pr returns the pressure due to the Fermi-gas
00046       contribution plus the bag pressure contribution. [uds.ed] is the
00047       energy density for each quark so that e.g. u.ed+u.pr=u.mu*u.n. B0
00048       should be fixed using calc_B0() beforehand to ensure that the energy
00049       density and pressure of the vacuum is zero.
00050 
00051       The functions set_parameters() should be called first.
00052 
00053       The code is based on \ref Buballa99.
00054 
00055       The Lagrangian is
00056       \f[
00057       {\cal L} = \bar q ( i \partial{\hskip-2.0mm}/ - {\hat m_0}) q \;+\;
00058       G \sum_{k=0}^8 [\,({\bar q}\lambda_k q)^2 + ({\bar q}
00059       i\gamma_5\lambda_k q)^2\,] + {\cal L}_6
00060       \f]
00061       \f[
00062       {\cal L}_6 = - K \,[ \,{\rm det}_f ({\bar
00063       q}(1+\gamma_5) q) + {\rm det}_f ({\bar q}(1-\gamma_5) q) \,] \, .
00064       \f]
00065 
00066       And the corresponding thermodynamic potential is
00067       \f[
00068       \Omega = \Omega_{FG} + \Omega_{Int}
00069       \f]
00070       where \f$\Omega_{FG}\f$ is the Fermi gas contribution and
00071       \f[
00072       \frac{\Omega_{\mathrm{Int}}}{V} = - 2 N_c \sum_{i=u,d,s}
00073       \int \frac {d^3p}{(2\pi)^3} \sqrt{m_i^2 + p^2} +
00074       \frac{\Omega_{V}}{V}
00075       \f]
00076       \f[
00077       \frac{\Omega_{V}}{V} = 
00078       \sum_{i=u,d,s} 2 G \langle\bar{q}_i q_i \rangle^2
00079       - 4 K \langle \bar{q}_u q_u \rangle \langle \bar{q}_d q_d \rangle
00080       \langle \bar{q}_s q_s \rangle + B_0\,.
00081       \f]
00082       where \f$B_0\f$ is a constant defined to ensure that the 
00083       energy density and the pressure of the vacuum is zero.
00084 
00085       Unlike \ref Buballa99, the bag constant, \f$\Omega_{Int}/V\f$ is
00086       defined without the term
00087       \f[
00088       \sum_{i=u,d,s} 2 N_C \int_0^{\Lambda} 
00089       \frac{d^3 p}{(2 \pi)^3} \sqrt{ m_{0,i}^2+p^2 } ~dp
00090       \f]
00091       since this allows an easier comparison to the finite temperature
00092       EOS. 
00093       The constant \f$B_0\f$ in this case 
00094       is therefore significantly 
00095       larger, but the energy density and pressure are still zero in
00096       the vacuum. 
00097 
00098       The Feynman-Hellman theorem (\ref Bernard88 ), gives
00099       \f[
00100       \left< \bar{q} q \right> = \frac{\partial m^{*}}{\partial m}
00101       \f]
00102 
00103       The functions calc_e() and calc_p() never return a value other
00104       than zero, but will give nonsensical results for nonsensical
00105       inputs.
00106 
00107       <b>Finite T documentation</b>
00108 
00109       Calculates everything from the quark condensates ([uds].qq) and the
00110       chemical potentials ([uds].mu). If "fromqq" is set to false, then
00111       instead it calculates everything from the dynamical masses
00112       ([uds].ms) and the chemical potentials. L, G, K, and B0 are fixed
00113       constants.  [uds].pr returns the pressure due to the Fermi-gas
00114       contribution plus the bag pressure contribution. [uds.ed] is the
00115       energy density for each quark so that e.g. u.ed+u.pr=u.mu*u.n. B0 is
00116       fixed to ensure that the energy density and pressure of the vacuum
00117       is zero.  
00118 
00119       This implementation includes contributions from antiquarks.
00120       
00121       \hline
00122       <b>References:</b>
00123 
00124       Created for \ref Steiner00. See also \ref Buballa99 and 
00125       \ref Hatsuda94. 
00126   */
00127 
00128   class nambujl_eos : public quark_eos {
00129 
00130   public:
00131 
00132     /** \brief Set the parameters and the bag constant \c B0 
00133       
00134         This function allows the user to specify the momentum cutoff,
00135         \c lambda, the four-fermion coupling \c fourferm 
00136         and the six-fermion coupling from the 't Hooft interaction
00137         \c sixferm . If 0.0 is given for any of the values, then
00138         the default is used (\f$ \Lambda=602.3/(\hbar c),
00139         G=1.835/\Lambda^2, K=12.36/\Lambda^5 \f$).
00140 
00141         The value of the shift in the bag constant \c B0 is
00142         automatically calculated to ensure that the energy density and
00143         the pressure of the vacuum are zero. The functions
00144         set_quarks() and set_thermo() can be used before hand to
00145         specify the \ref quark and \ref thermo objects.
00146     */
00147     virtual int set_parameters(double lambda=0.0, double fourferm=0.0, 
00148                                double sixferm=0.0);
00149     
00150     /** \brief Accuracy limit for Fermi integrals for finite temperature
00151 
00152         \ref limit is used for the finite temperature integrals to
00153         ensure that no numbers larger than exp(limit) or smaller than
00154         exp(-limit) are avoided. (Default: 20)
00155     */
00156     double limit;
00157   
00158     /** \brief Calculate from quark condensates if true (default true)
00159     
00160         If this is false, then computations are performed using
00161         the effective masses as inputs
00162      */
00163     bool fromqq;
00164 
00165     nambujl_eos();
00166 
00167     /** \brief Equation of state as a function of chemical potentials
00168         
00169         This function automatically solves the gap equations
00170     */
00171     virtual int calc_p(quark &u, quark &d, quark &s, thermo &lth);
00172 
00173     /** \brief Equation of state as a function of chemical potentials at 
00174         finite temperature
00175 
00176         This function automatically solves the gap equations
00177     */
00178     virtual int calc_temp_p(quark &u, quark &d, quark &s, 
00179                             double T, thermo &th);
00180 
00181     /** \brief Equation of state and gap equations as a function of 
00182         chemical potential
00183     */
00184     virtual int calc_eq_p(quark &u, quark &d, quark &s, double &gap1, 
00185                           double &gap2, double &gap3, thermo &lth);
00186     
00187     /** \brief Equation of state and gap equations as a function of
00188         the densities
00189     */
00190     virtual int calc_eq_e(quark &u, quark &d, quark &s, double &gap1, 
00191                           double &gap2, double &gap3, thermo &lth);
00192     
00193     /** \brief Equation of state and gap equations
00194         as a function of chemical potentials
00195     */
00196     int calc_eq_temp_p(quark &tu, quark &td, quark &ts,
00197                        double &gap1, double &gap2, double &gap3,
00198                        thermo &qb, double temper);
00199     
00200     /** \brief Calculates gap equations in \c y as a function of the 
00201         constituent masses in \c x
00202 
00203         The function utilizes the \ref quark objects which can
00204         be specified in set_quarks() and the \ref thermo object
00205         which can be specified in eos::set_thermo().
00206     */
00207     int gapfunms(size_t nv, const ovector_base &x, ovector_base &y);
00208     
00209     /** \brief Calculates gap equations in \c y as a function of the 
00210         quark condensates in \c x
00211 
00212         The function utilizes the \ref quark objects which can
00213         be specified in set_quarks() and the \ref thermo object
00214         which can be specified in eos::set_thermo().
00215     */
00216     int gapfunqq(size_t nv, const ovector_base &x, ovector_base &y);
00217     
00218     /** \brief Calculates gap equations in \c y as a function of the 
00219         constituent masses in \c x
00220 
00221         The function utilizes the \ref quark objects which can
00222         be specified in set_quarks() and the \ref thermo object
00223         which can be specified in eos::set_thermo().
00224     */
00225     int gapfunmsT(size_t nv, const ovector_base &x, ovector_base &y);
00226     
00227     /** \brief Calculates gap equations in \c y as a function of the 
00228         quark condensates in \c x
00229 
00230         The function utilizes the \ref quark objects which can
00231         be specified in set_quarks() and the \ref thermo object
00232         which can be specified in eos::set_thermo().
00233     */
00234     int gapfunqqT(size_t nv, const ovector_base &x, ovector_base &y);
00235 
00236     /** \name The default quark masses
00237 
00238         These are the values from \ref Buballa99 which were used
00239         to fix the pion and kaon decay constants, and the pion,
00240         kaon, and eta prime masses. They are set in the constructor
00241         and are in units of \f$ \mathrm{fm}^{-1} \f$ .
00242     */
00243     //@{
00244     double up_default_mass;
00245     double down_default_mass;
00246     double strange_default_mass;
00247     //@}
00248 
00249     /** \brief Set the quark objects to use
00250 
00251         The quark objects are used in gapfunms(), gapfunqq(), 
00252         gapfunmsT(), gapfunqqT(), and B0fun().
00253     */
00254     int set_quarks(quark &u, quark &d, quark &s);
00255 
00256     /// The momentum cutoff
00257     double L;
00258     
00259     /// The four-fermion coupling
00260     double G;
00261     
00262     /// The 't Hooft six-fermion interaction coupling
00263     double K;
00264     
00265     /// The bag constant
00266     double B0;
00267     
00268     /** \name The default quark objects
00269         
00270         The masses are automatically set in the constructor to
00271         \c up_default_mass, \c down_default_mass, and 
00272         \c strange_default_mass.c
00273     */
00274     //@{
00275     quark def_up; 
00276     quark def_down;
00277     quark def_strange;
00278     //@}
00279 
00280     /// Return string denoting type ("nambujl_eos")
00281     virtual const char *type() { return "nambujl_eos"; }
00282 
00283     /// Set solver to use in set_parameters()
00284     virtual int set_solver(mroot<mm_funct<> > &s) {
00285       solver=&s;
00286       return 0;
00287     }
00288 
00289     /// A structure for passing parameters to the integrands
00290     typedef struct njtp_s {
00291       double ms, m, mu, temper, limit;
00292     } njtp;
00293 
00294     /// Set integration object
00295     virtual int set_inte(inte<funct> &i) {
00296       it=&i;
00297       return 0;
00298     }
00299 
00300     /// The default solver
00301     gsl_mroot_hybrids<mm_funct<> > def_solver;
00302     
00303     /// The default integrator
00304     gsl_inte_qag<funct> def_it;
00305     
00306   protected:
00307 
00308 #ifndef DOXYGEN_INTERNAL
00309 
00310     /// The integrator for finite temperature integrals
00311     inte<funct> *it;
00312     
00313     /// The solver to use for set_parameters()
00314     mroot<mm_funct<> > *solver;
00315     
00316     /// Used by calc_B0() to compute the bag constant
00317     int B0fun(size_t nv, const ovector_base &x, ovector_base &y);
00318     
00319     /// Calculates the contribution to the bag constant from quark \c q 
00320     void njbag(quark &q);
00321 
00322     /// The up quark
00323     quark *up;
00324     /// The down quark
00325     quark *down;
00326     /// The strange quark
00327     quark *strange;
00328 
00329     /// The integrand for the quark condensate
00330     double iqq(double x, const njtp &pa);
00331     /// The integrand for the density
00332     double ide(double x, const njtp &pa);
00333     /// The integrand for the energy density
00334     double ied(double x, const njtp &pa);
00335     /// The integrand for the pressure
00336     double ipr(double x, const njtp &pa);
00337   
00338     /// The temperature for calc_temp_p()
00339     double cp_temp;
00340     
00341 #endif
00342     
00343   };
00344 
00345 #ifndef DOXYGENP
00346 }
00347 #endif
00348 
00349 #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.