![]() |
Equation of State Sub-Library: Version 0.910
|
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_SKYRME_EOS_H 00024 #define O2SCL_SKYRME_EOS_H 00025 00026 #include <iostream> 00027 #include <string> 00028 #include <cmath> 00029 #include <o2scl/constants.h> 00030 #include <o2scl/mroot.h> 00031 00032 #include <o2scl/hadronic_eos.h> 00033 #include <o2scl/part.h> 00034 #include <o2scl/nonrel_fermion.h> 00035 00036 #ifndef DOXYGENP 00037 namespace o2scl { 00038 #endif 00039 00040 /** \brief Skyrme hadronic equation of state 00041 00042 Equation of state of nucleonic matter based on 00043 the Skryme interaction from \ref Skyrme59 . 00044 00045 \hline 00046 \b Background: 00047 00048 The Hamiltonian is defined (using the notation of 00049 \ref Steiner05b ) 00050 \f[ 00051 {\cal H} = 00052 {\cal H}_{k1} + 00053 {\cal H}_{k2} + 00054 {\cal H}_{k3} + 00055 {\cal H}_{p1} + 00056 {\cal H}_{p2} + 00057 {\cal H}_{p3} + 00058 {\cal H}_{g1} + 00059 {\cal H}_{g2} 00060 \f] 00061 00062 The kinetic terms are: 00063 \f[ 00064 {\cal H}_{k1} = \frac{\tau_n}{2 m_n} + 00065 \frac{\tau_p}{2 m_p} 00066 \f] 00067 \f[ 00068 {\cal H}_{k2} = 00069 n \left(\tau_n + \tau_p \right) \left[ \frac{t_1}{4} 00070 \left( 1 + \frac{x_1}{2} \right) 00071 + \frac{t_2}{4} \left( 1 + \frac{x_2}{2} \right) \right] 00072 \f] 00073 \f[ 00074 {\cal H}_{k3} = 00075 \left( \tau_n n_n + \tau_p n_p \right) \left[ \frac{t_2}{4} 00076 \left( \frac{1}{2} + x_2 \right) 00077 - \frac{t_1}{4} \left( \frac{1}{2} + x_1 \right) \right] 00078 \f] 00079 where \f$ \tau_i \f$ are defined 00080 00081 The potential terms are: 00082 \f[ 00083 {\cal H}_{p1} = 00084 \frac{t_0}{2} 00085 \left[ \left( 1 + \frac{x_0}{2} \right) n^2 - 00086 \left( {\textstyle \frac{1}{2}} + x_0 \right) 00087 \left( n_n^2 + n_p^2 \right) \right] 00088 \f] 00089 \f[ 00090 {\cal H}_{p2} = 00091 \frac{a t_3}{6} \left[ \left( 1 + \frac{x_3}{2} \right) n^{\alpha} 00092 n_n n_p + 2^{\alpha-2} \left(1 - x_3\right) 00093 \left(n_n^{\alpha+2} + n_p^{\alpha+2}\right) \right] 00094 \f] 00095 \f[ 00096 {\cal H}_{p3} = 00097 \frac{b t_3}{12} \left[ \left(1 + \frac{x_3}{2} \right) n^{\alpha+2} - 00098 \left(\frac{1}{2} + x_3 \right) n^{\alpha} 00099 \left( n_n^2+n_p^2 \right) \right] 00100 \f] 00101 00102 The gradient terms are displayed here for completeness even though 00103 they are not computed in the code: 00104 \f[ 00105 {\cal H}_{g1} = 00106 \frac{3}{32} \left[ t_1 \left(1 - x_1 \right) - 00107 t_2 \left(1 + x_2 \right) \right] \left[ \left( \nabla n_n\right)^2 + 00108 \left( \nabla n_p \right)^2 \right] 00109 \f] 00110 \f[ 00111 {\cal H}_{g2} = 00112 \frac{1}{8} \left[ 3 t_1 \left( 1 + 00113 \frac{x_1}{2} \right) - t_2 \left(1 + \frac{x_2}{2} \right) \right] 00114 \nabla n_n \nabla n_p 00115 \f] 00116 00117 The values \f$ a=0, b=1 \f$ give the standard definition of the 00118 Skyrme Hamiltonian \ref Skyrme59, while \f$a=1, b=0\f$ contains 00119 the modifications suggested by \ref Onsi94. 00120 00121 Also, couple useful definitions 00122 \f[ 00123 t_3^{\prime} = \left(a + b\right) t_3 \, , 00124 \f] 00125 \f[ 00126 C = \frac{3 }{10 m} \left( \frac{3 \pi^2 }{2} \right)^{2/3} \, , 00127 \f] 00128 and 00129 \f[ 00130 \beta = \frac{M}{2} \left[ \frac{1}{4} \left( 3 t_1 + 5 t_2 \right) \, . 00131 + t_2 x_2 \right] \\ 00132 \f] 00133 00134 \hline 00135 \b Units: 00136 00137 Quantities which have units containing powers of energy 00138 are divided by \f$\hbar c\f$ to ensure all quantities are 00139 in units of \f$fm\f$. The \f$x_i\f$ and \f$\alpha\f$ are 00140 unitless, while the original units of the \f$t_i\f$ are: 00141 - \f$t_0\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^3\f$ 00142 - \f$t_1\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^5\f$ 00143 - \f$t_2\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^5\f$ 00144 - \f$t_3\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^{3(1+\alpha)}\f$ 00145 00146 These are stored internally with units of: 00147 - \f$t_0\f$ - \f$\mathrm{fm}^2\f$ 00148 - \f$t_1\f$ - \f$\mathrm{fm}^4\f$ 00149 - \f$t_2\f$ - \f$\mathrm{fm}^4\f$ 00150 - \f$t_3\f$ - \f$\mathrm{fm}^{2+3 \alpha}\f$ 00151 00152 The class skyrme_eos_io uses o2scl_const::hc_mev_fm for I/O so that 00153 all files contain the parameters in the original units. 00154 00155 \hline 00156 \b Misc: 00157 00158 The functions for the usual saturation properties are based 00159 partly on \ref Brack85. 00160 00161 Models are taken from the references: \ref Bartel79, \ref 00162 Beiner75, \ref Chabanat95, \ref Chabanat97, \ref Danielewicz08, 00163 \ref Dobaczewski94, \ref Dutta86, \ref Friedrich86, \ref Onsi94, 00164 \ref Reinhard95, and \ref Tondeur84, and \ref VanGiai81 . 00165 00166 \htmlonly 00167 See Mathematica notebook at 00168 <a href="skyrme_eos.nb"> 00169 skyrme_eos.nb</a>, and 00170 <a href="skyrme_eos.ps"> 00171 skyrme_eos.ps</a>. 00172 \endhtmlonly 00173 \latexonly 00174 See Mathematica notebook at 00175 \begin{verbatim} 00176 doc/o2scl/extras/skyrme_eos.nb 00177 doc/o2scl/extras/skyrme_eos.ps 00178 \end{verbatim} 00179 \endlatexonly 00180 00181 The variables \f$ \nu_n\f$ and \f$ \nu_p\f$ contain the 00182 expressions \f$ (-\mu_n+V_n)/T \f$ and \f$ (-\mu_p+V_p)/T \f$ 00183 respectively, where \f$ V \f$ is the potential part of the 00184 single particle energy for particle i (i.e. the derivative of 00185 the Hamiltonian w.r.t. density while energy density held 00186 constant). Equivalently, \f$ \nu_n\f$ is just \f$ -k_{F_n}^2/ 2 00187 m^{*} \f$. 00188 00189 \note The finite temperature code does not include attempt to 00190 include antiparticles and uses part::calc_density(). 00191 00192 \note Since this EOS uses the effective masses and chemical 00193 potentials in the fermion class, the values of 00194 part::non_interacting for neutrons and protons are set to false 00195 in many of the functions. 00196 00197 \hline 00198 00199 \todo 00200 - Make sure that this class properly handles particles for which 00201 inc_rest_mass is true/false 00202 - What about the spin-orbit units? 00203 - Need to write a function that calculates saturation density? 00204 - Remove use of mnuc in calparfun()? 00205 - The compressibility could probably use some simplification 00206 - Make sure the finite-temperature part is properly tested 00207 - The testing code doesn't work if err_mode is 2, probably because 00208 of problems in load(). 00209 - Document load() file format. 00210 - Update reference list. 00211 00212 \future 00213 - There is some code duplication between calc_e() and calc_temp_e() 00214 which could be simplified. 00215 \hline 00216 00217 */ 00218 class skyrme_eos : public hadronic_eos_temp_eden { 00219 public: 00220 00221 /// \name Basic Skyrme model parameters 00222 //@{ 00223 double t0,t1,t2,t3,x0,x1,x2,x3,alpha,a,b; 00224 //@} 00225 00226 /** \brief Spin-orbit splitting 00227 00228 This is unused, but included for possible future use and 00229 present in the internally stored models. 00230 */ 00231 double W0; 00232 00233 /// \name Basic usage 00234 //@{ 00235 /// Create a blank Skyrme EOS 00236 skyrme_eos(); 00237 00238 /// Destructor 00239 virtual ~skyrme_eos() {}; 00240 00241 /** \brief Equation of state as a function of densities 00242 00243 \note Runs the zero temperature code if \c temper is less 00244 than or equal to zero. 00245 */ 00246 virtual int calc_temp_e(fermion &ne, fermion &pr, double temper, 00247 thermo &th); 00248 00249 /// Equation of state as a function of density. 00250 virtual int calc_e(fermion &ne, fermion &pr, thermo <); 00251 //@} 00252 00253 /** \name Saturation properties 00254 00255 These calculate the various saturation properties exactly from 00256 the parameters at any density. These routines often assume that 00257 the neutron and proton masses are equal. 00258 */ 00259 //@{ 00260 00261 /** \brief Calculate binding energy 00262 00263 \f[ 00264 \frac{E}{A} = C n_B^{2/3} \left( 1 + \beta n_B \right) + 00265 \frac{3 t_0}{8} n_B + \frac{t_3^{\prime}}{16} n_B^{\alpha+1} 00266 \f] 00267 */ 00268 virtual double feoa(double nb); 00269 00270 /** \brief Calculate effective mass 00271 00272 \f[ 00273 M^{*}/M = \left(1+ \beta n_B \right)^{-1} \\ 00274 \f] 00275 */ 00276 virtual double fmsom(double nb); 00277 00278 /** \brief Calculate compressibility 00279 00280 \f[ 00281 K = 10 C n_B^{2/3} + \frac{27}{4} t_0 n_B + 40 C \beta n_B^{5/3} + 00282 \frac{9 t_3^{\prime}}{16} 00283 \alpha \left( \alpha+1 \right) n_B^{1 + \alpha} + 00284 \frac{9 t_3^{\prime}}{8} \left( \alpha+1 \right) n_B^{1 + \alpha} 00285 \f] 00286 */ 00287 virtual double fcomp(double nb); 00288 00289 /** \brief Calculate symmetry energy 00290 00291 If pf=0.5, then the exact expression below is used. 00292 Otherwise, the method from class hadronic_eos is used. 00293 00294 \f[ 00295 E_{sym} = \frac{5}{9} C n^{2/3} + \frac{10 C m}{3} 00296 \left[ \frac{t_2}{6} \left(1 + \frac{5}{4} x_2 \right) - 00297 \frac{1}{8} t_1 x_1 \right] n^{5/3} 00298 - \frac{t_3^{\prime}}{24} 00299 \left({\textstyle \frac{1}{2}} + x_3 \right) n^{1+\alpha} - 00300 \frac{t_0}{4} \left( {\textstyle \frac{1}{2}} + x_0 \right) n 00301 \f] 00302 */ 00303 virtual double fesym(double nb, double alpha=0.0); 00304 00305 /** \brief skewness 00306 00307 \f[ 00308 2 C n_B^{2/3} \left(9-5/M^{*}/M\right)+ 00309 \frac{27 t_3^{\prime}}{16} n^{1+\alpha} \alpha 00310 \left(\alpha^2-1\right) 00311 \f] 00312 */ 00313 virtual double fkprime(double nb); 00314 //@} 00315 00316 /** \brief Calculate \f$ t_0,t_1,t_2,t_3 \f$ and \f$ \alpha \f$ from 00317 the saturation properties. 00318 00319 In nuclear matter: 00320 00321 \f$ E_b=E_b(n_0,M^{*},t_0,t_3,\alpha) \f$ \n 00322 \f$ P=P(n_0,M^{*},t_0,t_3,\alpha) \f$ \n 00323 \f$ K=K(n_0,M^{*},t_3,\alpha) \f$ 00324 (the \f$ t_0 \f$ dependence vanishes) \n 00325 \f$ M^{*}=M^{*}(n_0,t_1,t_2,x_2) \f$ 00326 (the \f$ x_1 \f$ dependence cancels), \n 00327 \f$ E_{sym}=E_{sym}(x_0,x_1,x_2,x_3,t_0,t_1,t_2,t_3,\alpha) \f$ 00328 00329 To fix the couplings from the saturation properties, we take 00330 \f$ n_0, M^{*}, E_b, K \f$ as inputs, and we can fix \f$ 00331 t_0,t_3,\alpha \f$ from the first three relations, then use 00332 \f$ M^{*}, E_b \f$ to fix \f$ t_2 \f$ and \f$ t_1 \f$. The 00333 separation into two solution steps should make for better 00334 convergence. All of the x's are free parameters and should be 00335 set before the function call. 00336 00337 The arguments \c gt0, \c gt3, \c galpha, \c gt1, and \c gt2 00338 are used as initial guesses for skyme_eos::t0, skyrme_eos::t3, 00339 skyrme_eos::alpha, skyrme_eos::t1, and skyrme_eos::t2 00340 respectively. 00341 00342 \todo Does this work for both 'a' and 'b' non-zero? 00343 00344 \todo Compare to similar formulae from \ref Margueron02 00345 */ 00346 00347 int calpar(double gt0=-10.0, double gt3=70.0, double galpha=0.2, 00348 double gt1=2.0, double gt2=-1.0); 00349 00350 // Unfinished. 00351 /* \brief 00352 From \ref Margueron02 00353 */ 00354 // int calpar_new(double m); 00355 00356 /** \brief Use hadronic_eos methods for saturation properties 00357 00358 This can be set to true to check the difference between 00359 the exact expressions and the numerical values from 00360 class hadronic_eos. 00361 */ 00362 bool parent_method; 00363 00364 /** \brief Check the Landau parameters for instabilities 00365 00366 This returns zero if there are no instabilities. 00367 */ 00368 int check_landau(double nb, double m); 00369 00370 /** \brief Calculate the Landau parameters for nuclear matter 00371 00372 Given \c n0 and \c m, this calculates the Landau parameters in 00373 nuclear matter as given in \ref Margueron02 00374 00375 \todo This needs to be checked. 00376 00377 (Checked once on 11/05/03) 00378 */ 00379 int landau_nuclear(double n0, double m, 00380 double &f0, double &g0, double &f0p, 00381 double &g0p, double &f1, double &g1, 00382 double &f1p, double &g1p); 00383 00384 /** \brief Calculate the Landau parameters for neutron matter 00385 00386 Given 'n0' and 'm', this calculates the Landau parameters in 00387 neutron matter as given in \ref Margueron02 00388 00389 \todo This needs to be checked 00390 00391 (Checked once on 11/05/03) 00392 */ 00393 int landau_neutron(double n0, double m, double &f0, double &g0, 00394 double &f1, double &g1); 00395 00396 /// Return string denoting type ("skyrme_eos") 00397 virtual const char *type() { return "skyrme_eos"; } 00398 00399 /// Desc 00400 bool mu_at_zero_density; 00401 00402 #ifndef DOXYGENP 00403 00404 protected: 00405 00406 /// Desc 00407 nonrel_fermion nrf; 00408 00409 /// \name Functions and parameters for calpar() 00410 //@{ 00411 int calparfun(size_t nv, const ovector_base &x, ovector_base &y); 00412 int calparfun2(size_t nv, const ovector_base &x, ovector_base &y); 00413 double fixn0, fixeoa, fixesym, fixcomp, fixmsom; 00414 //@} 00415 00416 #endif 00417 00418 }; 00419 00420 #ifndef DOXYGENP 00421 } 00422 #endif 00423 00424 #endif
Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).