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