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_NAMBUJL_EOS_H 00024 #define O2SCL_NAMBUJL_EOS_H 00025 00026 #include <cmath> 00027 #include <o2scl/eff_quark.h> 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 \hline 00123 <b>References:</b> 00124 00125 Created for \ref Steiner00. See also \ref Buballa99 and 00126 \ref Hatsuda94. 00127 */ 00128 00129 class nambujl_eos : public quark_eos { 00130 00131 public: 00132 00133 /** \brief Set the parameters and the bag constant \c B0 00134 00135 This function allows the user to specify the momentum cutoff, 00136 \c lambda, the four-fermion coupling \c fourferm 00137 and the six-fermion coupling from the 't Hooft interaction 00138 \c sixferm . If 0.0 is given for any of the values, then 00139 the default is used (\f$ \Lambda=602.3/(\hbar c), 00140 G=1.835/\Lambda^2, K=12.36/\Lambda^5 \f$). 00141 00142 The value of the shift in the bag constant \c B0 is 00143 automatically calculated to ensure that the energy density and 00144 the pressure of the vacuum are zero. The functions 00145 set_quarks() and set_thermo() can be used before hand to 00146 specify the \ref quark and \ref thermo objects. 00147 */ 00148 virtual int set_parameters(double lambda=0.0, double fourferm=0.0, 00149 double sixferm=0.0); 00150 00151 /** 00152 \brief Accuracy limit for Fermi integrals for finite temperature 00153 00154 \ref limit is used for the finite temperature integrals to 00155 ensure that no numbers larger than exp(limit) or smaller than 00156 exp(-limit) are avoided. (Default: 20) 00157 */ 00158 double limit; 00159 00160 /** 00161 \brief Calculate from quark condensates if true (default true) 00162 00163 If this is false, then computations are performed using 00164 the effective masses as inputs 00165 */ 00166 bool fromqq; 00167 00168 nambujl_eos(); 00169 00170 /** 00171 \brief Equation of state as a function of chemical potentials 00172 00173 This function automatically solves the gap equations 00174 */ 00175 virtual int calc_p(quark &u, quark &d, quark &s, thermo <h); 00176 00177 /** \brief Equation of state as a function of chemical potentials at 00178 finite temperature 00179 00180 This function automatically solves the gap equations 00181 */ 00182 virtual int calc_temp_p(quark &u, quark &d, quark &s, 00183 const double T, thermo &th); 00184 00185 /** \brief Equation of state and gap equations as a function of 00186 chemical potential 00187 */ 00188 virtual int calc_eq_p(quark &u, quark &d, quark &s, double &gap1, 00189 double &gap2, double &gap3, thermo <h); 00190 00191 /** \brief Equation of state and gap equations as a function of 00192 the densities 00193 */ 00194 virtual int calc_eq_e(quark &u, quark &d, quark &s, double &gap1, 00195 double &gap2, double &gap3, thermo <h); 00196 00197 /** \brief Equation of state and gap equations 00198 as a function of chemical potentials 00199 */ 00200 int calc_eq_temp_p(quark &tu, quark &td, quark &ts, 00201 double &gap1, double &gap2, double &gap3, 00202 thermo &qb, const double temper); 00203 00204 /** \brief Calculates gap equations in \c y as a function of the 00205 constituent masses in \c x 00206 00207 The function utilizes the \ref quark objects which can 00208 be specified in set_quarks() and the \ref thermo object 00209 which can be specified in eos::set_thermo(). 00210 */ 00211 int gapfunms(size_t nv, const ovector_base &x, ovector_base &y, int &pa); 00212 00213 /** \brief Calculates gap equations in \c y as a function of the 00214 quark condensates in \c x 00215 00216 The function utilizes the \ref quark objects which can 00217 be specified in set_quarks() and the \ref thermo object 00218 which can be specified in eos::set_thermo(). 00219 */ 00220 int gapfunqq(size_t nv, const ovector_base &x, ovector_base &y, int &pa); 00221 00222 /** \brief Calculates gap equations in \c y as a function of the 00223 constituent masses in \c x 00224 00225 The function utilizes the \ref quark objects which can 00226 be specified in set_quarks() and the \ref thermo object 00227 which can be specified in eos::set_thermo(). 00228 */ 00229 int gapfunmsT(size_t nv, const ovector_base &x, ovector_base &y, 00230 int &pa); 00231 00232 /** \brief Calculates gap equations in \c y as a function of the 00233 quark condensates in \c x 00234 00235 The function utilizes the \ref quark objects which can 00236 be specified in set_quarks() and the \ref thermo object 00237 which can be specified in eos::set_thermo(). 00238 */ 00239 int gapfunqqT(size_t nv, const ovector_base &x, ovector_base &y, 00240 int &pa); 00241 00242 /** 00243 \name The default quark masses 00244 00245 These are the values from \ref Buballa99 which were used 00246 to fix the pion and kaon decay constants, and the pion, 00247 kaon, and eta prime masses. They are set in the constructor 00248 and are in units of \f$ \mathrm{fm}^{-1} \f$ . 00249 */ 00250 //@{ 00251 double up_default_mass; 00252 double down_default_mass; 00253 double strange_default_mass; 00254 //@} 00255 00256 /** 00257 \brief Set the quark objects to use 00258 00259 The quark objects are used in gapfunms(), gapfunqq(), 00260 gapfunmsT(), gapfunqqT(), and B0fun(). 00261 */ 00262 int set_quarks(quark &u, quark &d, quark &s); 00263 00264 /// The momentum cutoff 00265 double L; 00266 00267 /// The four-fermion coupling 00268 double G; 00269 00270 /// The 't Hooft six-fermion interaction coupling 00271 double K; 00272 00273 /// The bag constant 00274 double B0; 00275 00276 /** 00277 \name The default quark objects 00278 00279 The masses are automatically set in the constructor to 00280 \c up_default_mass, \c down_default_mass, and 00281 \c strange_default_mass.c 00282 */ 00283 //@{ 00284 eff_quark def_up; 00285 eff_quark def_down; 00286 eff_quark def_strange; 00287 //@} 00288 00289 /// Return string denoting type ("nambujl_eos") 00290 virtual const char *type() { return "nambujl_eos"; } 00291 00292 /// Set solver to use in set_parameters() 00293 virtual int set_solver(mroot<int,mm_funct<int> > &s) { 00294 solver=&s; 00295 return 0; 00296 } 00297 00298 /// A structure for passing parameters to the integrands 00299 typedef struct njtp_s { 00300 double ms, m, mu, temper, limit; 00301 } njtp; 00302 00303 /// Set integration object 00304 virtual int set_inte(inte<const njtp,funct<const njtp> > &i) { 00305 it=&i; 00306 return 0; 00307 } 00308 00309 /// The default solver 00310 gsl_mroot_hybrids<int,mm_funct<int> > def_solver; 00311 00312 /// The default integrator 00313 gsl_inte_qag<const njtp,funct<const njtp> > def_it; 00314 00315 protected: 00316 00317 #ifndef DOXYGEN_INTERNAL 00318 00319 friend class io_tlate<nambujl_eos>; 00320 00321 /// The integrator for finite temperature integrals 00322 inte<const njtp,funct<const njtp> > *it; 00323 00324 /// The solver to use for set_parameters() 00325 mroot<int,mm_funct<int> > *solver; 00326 00327 /// Used by calc_B0() to compute the bag constant 00328 int B0fun(size_t nv, const ovector_base &x, ovector_base &y, int &pa); 00329 00330 /// Calculates the contribution to the bag constant from quark \c q 00331 void njbag(quark &q); 00332 00333 /// The up quark 00334 quark *up; 00335 /// The down quark 00336 quark *down; 00337 /// The strange quark 00338 quark *strange; 00339 00340 /// The integrand for the quark condensate 00341 double iqq(double x, const njtp &pa); 00342 /// The integrand for the density 00343 double ide(double x, const njtp &pa); 00344 /// The integrand for the energy density 00345 double ied(double x, const njtp &pa); 00346 /// The integrand for the pressure 00347 double ipr(double x, const njtp &pa); 00348 00349 /// The temperature for calc_temp_p() 00350 double cp_temp; 00351 00352 #endif 00353 00354 }; 00355 00356 template<> int io_tlate<nambujl_eos>::input 00357 (cinput *co, in_file_format *ins, nambujl_eos *ne); 00358 template<> int io_tlate<nambujl_eos>::output 00359 (coutput *co, out_file_format *outs, nambujl_eos *nj); 00360 template<> const char *io_tlate<nambujl_eos>::type(); 00361 00362 typedef io_tlate<nambujl_eos> nambujl_eos_io_type; 00363 00364 #ifndef DOXYGENP 00365 } 00366 #endif 00367 00368 #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