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