![]() |
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 LDROP_MASS_H 00024 #define LDROP_MASS_H 00025 00026 #include <cmath> 00027 #include <string> 00028 #include <map> 00029 #include <o2scl/nucleus.h> 00030 #include <o2scl/nuclear_mass.h> 00031 #include <o2scl/constants.h> 00032 #include <o2scl/hadronic_eos.h> 00033 #include <o2scl/rmf_eos.h> 00034 #include <o2scl/eff_fermion.h> 00035 #include <o2scl/gsl_inte_qagiu.h> 00036 00037 #ifndef DOXYGENP 00038 namespace o2scl { 00039 #endif 00040 00041 /** \brief Compute the RMS radius of a Fermi-Dirac density distribution 00042 with fixed diffusiveness 00043 00044 This class computes the RMS radius given either the central density 00045 or the radius specified in the Fermi function. This class assumes 00046 the density distribution function is of the form 00047 \f[ 00048 N = 4 \pi \rho_0 \int r^2~dr~\left\{1+\exp 00049 \left[\left(r-R_{\mathrm{fermi}}\right)\right]\right\}^{-1} 00050 \f] 00051 where \f$ N \f$ is the total number of particles, and 00052 \f$ \rho_0 \f$ is the central density. 00053 00054 The radius assuming constant density, 00055 \f[ 00056 R_{\mathrm{cd}} = \left(\frac{3 N}{4 \pi \rho_0}\right)^3 \, , 00057 \f] 00058 is also given. 00059 */ 00060 class rms_radius { 00061 00062 protected: 00063 00064 /// The central denstiy 00065 double urho0; 00066 /// The diffusiveness 00067 double ud; 00068 /** \brief Store the user-specified value of the radius in the 00069 Fermi distribution 00070 00071 This is used in the integrands \ref iand() and \ref iand2(). 00072 */ 00073 double uRfermi; 00074 /// The total number of particles 00075 double uN; 00076 /// Blank parameter 00077 int pa; 00078 00079 /// The integrator 00080 gsl_inte_qagiu<funct> it; 00081 /// The solver 00082 cern_mroot_root<funct> cr; 00083 00084 /// The function \f$ 4 \pi r^4 \rho(r) \f$ 00085 double iand(double r); 00086 00087 /// The function \f$ 4 \pi r^2 \rho(r) \f$ 00088 double iand2(double r); 00089 00090 /// The function to fix the total number of particles 00091 double solve(double x); 00092 00093 public: 00094 00095 rms_radius(); 00096 00097 /** \brief Compute the RMS radius from the central density 00098 00099 Computes the RMS radius \c Rrms from the central density \c 00100 rho0, the number of particles \c N, and the diffusiveness \c 00101 d. This function also computes the radius in the Fermi 00102 distribution function, \c Rfermi and the radius assuming 00103 constant density, \c Rcd. 00104 */ 00105 int eval_rms_rho(double rho0, double N, double d, 00106 double &Rcd, double &Rfermi, double &Rrms); 00107 00108 /** \brief Compute the RMS radius from the Fermi distribution radius 00109 00110 Computes the RMS radius \c Rrms from the radius \c Rfermi in 00111 the Fermi distribution assuming a total number of particles \c 00112 N, a diffusiveness paramter \c d. This function also produces 00113 the central density \c rho0, and the radius assuming constant 00114 density, \c Rcd. 00115 */ 00116 int eval_rms_rsq(double Rfermi, double N, double d, 00117 double &rho0, double &Rcd, double &Rrms); 00118 00119 }; 00120 00121 /** \brief Simple liquid drop mass formula 00122 00123 Includes bulk \part plus surface and Coulomb (no pairing) 00124 without neutron skin and without any isospin contribution 00125 to the surface energy. 00126 00127 The NL4 EOS is loaded by default. 00128 00129 \warning This class sets part::inc_rest_mass to true 00130 for the particle objects specified in set_n_and_p(). 00131 00132 \hline 00133 00134 <b>Central densities</b> 00135 00136 Given a saturation density, \f$ n_0 \f$ and a transition 00137 density, \f$ n_t \f$, we set \f$ I = 1 - 2 Z/A \f$, and then 00138 assume \f$ \delta = I \f$. We further assume that the 00139 isospin-asymmetric saturation density \f$ n_L \f$ is 00140 \f[ 00141 n_L = n_0 + n_1 \delta^2 00142 \f] 00143 and then we can compute \f$ n_{p} = (1 - \delta)/2 n_L \f$ and 00144 \f$ n_{n} = (1 + \delta)/2 n_L \f$ . 00145 00146 Note that \f$ \delta = I \f$ implies no neutron skin. A neutron 00147 skin occurs when \f$ \delta < I \f$, and \f$ \delta = 0 \f$ 00148 implies a "maximum skin size" which is occurs when no extra 00149 neutrons are in center and all extra neutrons are located in the 00150 skin, i.e. \f$ N_{\mathrm{skin}} = N-Z \f$. 00151 00152 <b>Nuclear radii</b> 00153 00154 The neutron and proton radii are determined from the 00155 central densities with 00156 \f{eqnarray*} 00157 R_n &=& \left( \frac{3 N}{4 \pi n_n} \right)^{1/3} \nonumber \\ 00158 R_n &=& \left( \frac{3 Z}{4 \pi n_p} \right)^{1/3} 00159 \f} 00160 00161 <b>Bulk energy contribution</b> 00162 00163 The bulk binding energy contribution ( \f$ \sim -16 \f$ 00164 MeV per nucleon) and the symmetry energy are computing using the 00165 hadronic EOS (either \ref def_had_eos or the EOS specified in 00166 the most recent call to set_hadronic_eos_temp() ). The bulk 00167 energy per baryon is 00168 \f[ 00169 E_{\mathrm{bulk}}/A = \frac{\hbar c}{n_{L} } 00170 \left[\varepsilon(n_n,n_p) - n_n m_n - n_p m_p \right] 00171 \f] 00172 00173 <b>Surface energy contribution</b> 00174 00175 The surface energy density is (\ref Ravenhall83) 00176 \f[ 00177 \varepsilon = \frac{\chi d \sigma}{R} 00178 \f] 00179 where \f$ \sigma \f$ is the surface tension. The factor \f$ \chi 00180 \f$ is typically taken care of by the caller, so we ignore it 00181 for now. To compute the surface energy per baryon, we divide by 00182 the baryon density, \f$ n_n + n_p \f$. We can rewrite this 00183 \f[ 00184 E_{\mathrm{surf}} = \frac{3 \sigma}{n_n + n_p} 00185 \left[ \frac{3 A}{ 4 (n_n+n_p) \pi} 00186 \right]^{-1/3} 00187 \f] 00188 or 00189 \f[ 00190 E_{\mathrm{surf}} = \frac{\sigma}{n_L} 00191 \left(\frac{36 \pi n_L}{A} \right)^{1/3} 00192 \f] 00193 where the surface tension \f$ \sigma \f$ (in MeV) is given in 00194 \ref surften. 00195 00196 Taking a typical value, \f$ \sigma =1.1~\mathrm{MeV} \f$ and 00197 \f$ n_L = 0.16~\mathrm{fm}^{-3} \f$, gives the standard result, 00198 \f$ E_{\mathrm{surf}}/A = 18~\mathrm{MeV}~A^{-1/3} \f$. 00199 00200 <b>Coulomb energy contribution</b> 00201 00202 The Coulomb energy density (\ref Ravenhall83) is 00203 \f[ 00204 \varepsilon_{\mathrm{Coul}} = \frac{4 \pi}{5} n_p^2 e^2 R_p^2 00205 \f] 00206 The energy per baryon is 00207 \f[ 00208 E_{\mathrm{Coul}}/A = \frac{4 \pi}{5 n_L} n_p^2 e^2 R_p^2 00209 \f] 00210 This is the expression used in the code, except for a prefactor 00211 \ref coul_coeff which is a fit parameter and should be close to 00212 unity. 00213 00214 Assuming \f$ R_p = R \f$ 00215 and \f$ Z = \frac{4 \pi}{3} R^3 n_p \f$ 00216 and \f$ R = \left[ 3 A / (4 \pi n_L) \right]^{1/3} \f$ 00217 gives 00218 \f[ 00219 E_{\mathrm{Coul}}/A = \frac{6^{2/3}}{5} 00220 \pi^{1/3} e^2 n_L^{1/3} \frac{Z^2}{A^{4/3}} 00221 \f] 00222 and taking \f$ n_L = 0.16~\mathrm{fm}^{-3} \f$ and 00223 \f$ e^2 = \hbar c/137 \f$ gives the standard result 00224 \f[ 00225 E_{\mathrm{Coul}}/A = 0.76~\mathrm{MeV}~Z^2 A^{-4/3} 00226 \f] 00227 00228 \hline 00229 00230 <b>References</b> 00231 00232 Designed for \ref Steiner08 based on \ref Lattimer85 and 00233 \ref Lattimer91 . 00234 00235 \hline 00236 */ 00237 class ldrop_mass : public nuclear_mass_fit { 00238 00239 public: 00240 00241 ldrop_mass(); 00242 00243 /// \name Input parameters 00244 //@{ 00245 /// Density asymmetry (default 0) 00246 double n1; 00247 00248 /** \brief Saturation density ( The default is \f$ 0.16 00249 \mathrm{fm}^{-3} \f$) 00250 */ 00251 double n0; 00252 00253 /// Surface tension in MeV (default 1.1 MeV) 00254 double surften; 00255 00256 /// Coulomb coefficient (default 1.0) 00257 double coul_coeff; 00258 //@} 00259 00260 /// \name Output quantities 00261 //@{ 00262 /// Internal average neutron density 00263 double nn; 00264 00265 /// Internal average proton density 00266 double np; 00267 00268 /// Neutron radius 00269 double Rn; 00270 00271 /// Proton radius 00272 double Rp; 00273 00274 /// Bulk \part of energy 00275 double bulk; 00276 00277 /// Surface \part of energy 00278 double surf; 00279 00280 /// Coulomb \part of energy 00281 double coul; 00282 //@} 00283 00284 /** \brief Given \c Z and \c N, return the mass excess in MeV 00285 00286 \comment 00287 We don't need to implement mass_excess() for integers because 00288 that's done in the parent nuclear_mass_cont. 00289 \endcomment 00290 */ 00291 virtual double mass_excess_d(double Z, double N); 00292 00293 /** \brief Given \c Z and \c N, return the binding energy in MeV 00294 00295 This function is currently independent of \c npout, \c nnout, 00296 and \c chi. 00297 */ 00298 virtual double drip_binding_energy_d(double Z, double N, 00299 double npout, double nnout, 00300 double chi); 00301 00302 /// \name EOS and particle parameters 00303 //@{ 00304 /// Change the base hadronic EOS 00305 int set_hadronic_eos_temp(hadronic_eos_temp &uhe) { 00306 heos=&uhe; 00307 return 0; 00308 } 00309 00310 /// The default hadronic EOS 00311 rmf_eos def_had_eos; 00312 00313 /// Change neutron and proton objects 00314 void set_n_and_p(fermion &un, fermion &up) { 00315 n=&un; 00316 p=&up; 00317 return; 00318 } 00319 00320 /// Default neutron 00321 fermion def_neutron; 00322 00323 /// Default proton 00324 fermion def_proton; 00325 //@} 00326 00327 /// \name Fitting functions 00328 //@{ 00329 /// Fix parameters from an array for fitting 00330 virtual int fit_fun(size_t nv, const ovector_base &x); 00331 00332 /// Fill array with guess from present values for fitting 00333 virtual int guess_fun(size_t nv, ovector_base &x); 00334 //@} 00335 00336 /// Return the type, \c "ldrop_mass". 00337 virtual const char *type() { return "ldrop_mass"; } 00338 00339 /// Energy and pressure 00340 thermo th; 00341 00342 #ifndef DOXYGEN_INTERNAL 00343 00344 protected: 00345 00346 /// Desc 00347 eff_fermion eff; 00348 /// Pointer to neutron 00349 fermion *n; 00350 /// Pointer to proton 00351 fermion *p; 00352 /// The base EOS for bulk matter 00353 hadronic_eos_temp *heos; 00354 00355 #endif 00356 00357 }; 00358 00359 /** \brief More advanced liquid drop model 00360 00361 In addition to the physics in \ref ldrop_mass, this includes 00362 corrections for 00363 - finite temperature 00364 - neutron skin 00365 - an isospin-dependent surface energy 00366 - decrease in the Coulomb energy from external protons 00367 00368 \note The input parameter T should be given in units of inverse 00369 Fermis -- this is a bit unusual since the binding energy is 00370 returned in MeV, but we keep it for now. 00371 00372 <b>Bulk energy</b> 00373 00374 The central densities and radii, \f$ n_n, n_p, R_n, R_p \f$ 00375 are all determined in the same way as \ref ldrop_mass, 00376 except that now \f$ \delta \equiv I \zeta \f$, where 00377 \f$ \zeta \f$ is stored in \ref doi . Note that this 00378 means \f$ N > Z~\mathrm{iff}~R_n>R_p \f$. 00379 00380 If \ref new_skin_mode is false, then the bulk energy is 00381 also computed as in \ref ldrop_mass. Otherwise, the 00382 number of nucleons in the core is computed with 00383 \f{eqnarray*} 00384 A_{\mathrm{core}} = Z (n_n+n_p)/n_p~\mathrm{for}~N\geq Z \\ 00385 A_{\mathrm{core}} = N (n_n+n_p)/n_p~\mathrm{for}~Z>N \\ 00386 \f} 00387 and \f$ A_{\mathrm{skin}} = A - A_{\mathrm{core}} \f$. 00388 The core contribution to the bulk energy is 00389 \f[ 00390 E_{\mathrm{core}}/A = \left(\frac{A_{\mathrm{core}}}{A}\right) 00391 \frac{\hbar c}{n_{L} } 00392 \left[\varepsilon(n_n,n_p) - n_n m_n - n_p m_p \right] 00393 \f] 00394 then the skin contribution is 00395 \f[ 00396 E_{\mathrm{skin}}/A = \left(\frac{A_{\mathrm{skin}}}{A}\right) 00397 \frac{\hbar c}{n_{L} } 00398 \left[\varepsilon(n_n,0) - n_n m_n \right]~\mathrm{for}~N>Z 00399 \f] 00400 and 00401 \f[ 00402 E_{\mathrm{skin}}/A = \left(\frac{A_{\mathrm{skin}}}{A}\right) 00403 \frac{\hbar c}{n_{L} } 00404 \left[\varepsilon(0,n_p) - n_p m_p \right]~\mathrm{for}~Z>N 00405 \f] 00406 00407 <b>Surface energy</b> 00408 00409 If \ref full_surface is false, then the surface energy is 00410 just that from \ref ldrop_mass , with an extra factor 00411 for the surface symmetry energy 00412 \f[ 00413 E_{\mathrm{surf}} = \frac{\sigma}{n_L} 00414 \left(\frac{36 \pi n_L}{A} \right)^{1/3} 00415 \left( 1- \sigma_{\delta} \delta^2 \right) 00416 \f] 00417 where \f$ \sigma_{\delta} \f$ is unitless and stored in \ref ss. 00418 00419 If \ref full_surface is true, then the surface energy is modified 00420 by a cubic dependence for the medium and contains finite temperature 00421 corrections. 00422 00423 <b>Coulomb energy</b> 00424 00425 The Coulomb energy density (\ref Ravenhall83) is 00426 \f[ 00427 \varepsilon = 2 \pi e^2 R_p^2 n_p^2 f_d(\chi_p) 00428 \f] 00429 where the function \f$ f_d(\chi) \f$ is 00430 \f[ 00431 f_d(\chi_p) = \frac{1}{(d+2)} 00432 \left[ \frac{2}{(d-2)} \left( 1 - \frac{d}{2} 00433 \chi_p^{(1-2/d)} \right) + \chi_p \right] 00434 \f] 00435 00436 This class takes \f$ d=3 \f$ . 00437 00438 <b>Todos and Future</b> 00439 00440 \todo This is based on LPRL, but it's a little different in 00441 Lattimer and Swesty. I should document what the difference is. 00442 00443 \todo The testing could be updated. 00444 00445 \future Add translational energy? 00446 00447 \future Remove excluded volume correction and compute nuclear 00448 mass relative to the gas rather than relative to the vacuum. 00449 00450 \future In principle, Tc should be self-consistently determined 00451 from the EOS. 00452 00453 \future Does this work if the nucleus is "inside-out"? 00454 00455 \comment 00456 \todo The choice of nn and np from n0 and n1 is very closely 00457 related to FRDM (\ref Moller95). We should document this here. 00458 00459 I've taken this out, because it appears to me that Moller '95 00460 actually set this term (n1 = -3 L/K) to zero. 00461 \endcomment 00462 00463 \comment 00464 00465 \hline 00466 00467 Excluded volume and \ref rel_vacuum: 00468 00469 Typically in a single-nucleus EOS with a neutron drip 00470 (ignoring translational degrees of freedom for the nucleus) 00471 \f[ 00472 f = n_N m_N + (1-\chi_n) f_{n,\mathrm{drip}} 00473 \f] 00474 where 00475 \f[ 00476 m_N = \frac{A}{n_n+n_p}(f - n_n m_n - n_p m_p) 00477 \f] 00478 Since \f$ n_N = 3/(4 \pi R_{\mathrm{ws}}^3) \f$, and 00479 \f$ \chi_n = (R_n/R_{\mathrm{ws}})^3 \f$, this is 00480 \f[ 00481 f = \frac{3}{4 \pi R_{\mathrm{ws}}^3} 00482 \left[ m_N - f_{n,\mathrm{drip}} \frac{4 \pi}{3} R_n^3 \right] 00483 + f_{n,\mathrm{drip}} 00484 \f] 00485 00486 \endcomment 00487 00488 \hline 00489 00490 <b>References</b> 00491 00492 Designed in \ref Steiner08 and \ref Souza09 based in part 00493 on \ref Lattimer85 and \ref Lattimer91 . 00494 00495 \hline 00496 */ 00497 class ldrop_mass_skin : public ldrop_mass { 00498 00499 public: 00500 00501 ldrop_mass_skin(); 00502 00503 /// Return the type, \c "ldrop_mass_skin". 00504 virtual const char *type() { return "ldrop_mass_skin"; } 00505 00506 /// Fix parameters from an array for fitting 00507 virtual int fit_fun(size_t nv, const ovector_base &x); 00508 00509 /// Fill array with guess from present values for fitting 00510 virtual int guess_fun(size_t nv, ovector_base &x); 00511 00512 /** \brief If true, properly fix the surface for the pure neutron 00513 matter limit (default true) 00514 */ 00515 bool full_surface; 00516 00517 /** \brief If true, separately compute the skin for the bulk energy 00518 (default false) 00519 */ 00520 bool new_skin_mode; 00521 00522 /// Ratio of \f$ \delta/I \f$ (default 0.8). 00523 double doi; 00524 00525 /// Surface symmetry energy (default 0.5) 00526 double ss; 00527 00528 /// \name Input parameters for temperature dependence 00529 //@{ 00530 /// Exponent (default 1.25) 00531 double pp; 00532 00533 /// Coefficient (default 0.935) 00534 double a0; 00535 00536 /// Coefficient (default -5.1) 00537 double a2; 00538 00539 /// Coefficient (default -1.1) 00540 double a4; 00541 //@} 00542 00543 /** \brief If true, define the nuclear mass relative to the vacuum 00544 (default true) 00545 */ 00546 bool rel_vacuum; 00547 00548 /** \brief The critical temperature of isospin-symmetric matter in 00549 \f$ fm^{-1} \f$ (default \f$ 20.085/(\hbar c)\f$.) 00550 */ 00551 double Tchalf; 00552 00553 /** \brief Return the free binding energy of a \nucleus in a many-body 00554 environment 00555 */ 00556 virtual double drip_binding_energy_d(double Z, double N, 00557 double npout, double nnout, 00558 double chi); 00559 00560 /** \brief Return the free binding energy of a \nucleus in a many-body 00561 environment 00562 */ 00563 virtual double drip_binding_energy_full_d 00564 (double Z, double N, double npout, double nnout, 00565 double chi, double T); 00566 }; 00567 00568 /** \brief Liquid drop model with pairing 00569 00570 This class adds a pairing correction 00571 \f[ 00572 E_{\mathrm{pair}}/A = - \frac{\zeta}{2 A^{3/2}} 00573 \left[ 00574 \cos(Z \pi) + \cos(N \pi) 00575 \right] 00576 \f] 00577 where \f$ \zeta \f$ is stored in \ref Epair. The trigonometric 00578 functions give the expected result for integer values of 00579 N and Z. 00580 */ 00581 class ldrop_mass_pair : public ldrop_mass_skin { 00582 00583 public: 00584 00585 /// Return the type, \c "ldrop_mass_pair". 00586 virtual const char *type() { return "ldrop_mass_pair"; } 00587 00588 ldrop_mass_pair() { 00589 nfit=7; 00590 Epair=13.0; 00591 } 00592 00593 /// Fix parameters from an array for fitting 00594 virtual int fit_fun(size_t nv, const ovector_base &x); 00595 00596 /// Fill array with guess from present values for fitting 00597 virtual int guess_fun(size_t nv, ovector_base &x); 00598 00599 /// Pairing energy coefficient (default 13 MeV) 00600 double Epair; 00601 00602 /// Most recently computed pairing energy per baryon 00603 double pair; 00604 00605 /** \brief Return the free binding energy of a \nucleus in a many-body 00606 environment 00607 */ 00608 virtual double drip_binding_energy_full_d 00609 (double Z, double N, double npout, double nnout, 00610 double chi, double T); 00611 00612 }; 00613 00614 #ifndef DOXYGENP 00615 } 00616 #endif 00617 00618 #endif
Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).