nambujl_eos.h

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

Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.

Project hosting provided by SourceForge.net Logo, O2scl Sourceforge Project Page