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