All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
nucmass_ldrop.h
Go to the documentation of this file.
1 /*
2  -------------------------------------------------------------------
3 
4  Copyright (C) 2006-2014, Andrew W. Steiner
5 
6  This file is part of O2scl.
7 
8  O2scl is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 3 of the License, or
11  (at your option) any later version.
12 
13  O2scl is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with O2scl. If not, see <http://www.gnu.org/licenses/>.
20 
21  -------------------------------------------------------------------
22 */
23 /** \file nucmass_ldrop.h
24  \brief File defining \ref o2scl::nucmass_ldrop
25 */
26 #ifndef LDROP_MASS_H
27 #define LDROP_MASS_H
28 
29 #include <cmath>
30 #include <string>
31 #include <map>
32 #include <o2scl/nucleus.h>
33 #include <o2scl/nucmass.h>
34 #include <o2scl/constants.h>
35 #include <o2scl/eos_had_base.h>
36 #include <o2scl/eos_had_rmf.h>
37 #include <o2scl/fermion_eff.h>
38 #include <o2scl/inte_qagiu_gsl.h>
39 
40 #ifndef DOXYGEN_NO_O2NS
41 namespace o2scl {
42 #endif
43 
44  /** \brief Simple liquid drop mass formula
45 
46  Includes bulk \part plus surface and Coulomb (no pairing)
47  without neutron skin and without any isospin contribution
48  to the surface energy.
49 
50  The NL4 EOS is loaded by default.
51 
52  \warning This class sets part::inc_rest_mass to true
53  for the particle objects specified in set_n_and_p().
54 
55  \hline
56 
57  <b>Central densities</b>
58 
59  Given a saturation density, \f$ n_0 \f$ and a transition
60  density, \f$ n_t \f$, we set \f$ I = 1 - 2 Z/A \f$, and then
61  assume \f$ \delta = I \f$. We further assume that the
62  isospin-asymmetric saturation density \f$ n_L \f$ is
63  \f[
64  n_L = n_0 + n_1 \delta^2
65  \f]
66  and then we can compute \f$ n_{p} = (1 - \delta)/2 n_L \f$ and
67  \f$ n_{n} = (1 + \delta)/2 n_L \f$ .
68 
69  Note that \f$ \delta = I \f$ implies no neutron skin. A neutron
70  skin occurs when \f$ \delta < I \f$, and \f$ \delta = 0 \f$
71  implies a "maximum skin size" which is occurs when no extra
72  neutrons are in center and all extra neutrons are located in the
73  skin, i.e. \f$ N_{\mathrm{skin}} = N-Z \f$.
74 
75  <b>Nuclear radii</b>
76 
77  The neutron and proton radii are determined from the
78  central densities with
79  \f{eqnarray*}
80  R_n &=& \left( \frac{3 N}{4 \pi n_n} \right)^{1/3} \nonumber \\
81  R_n &=& \left( \frac{3 Z}{4 \pi n_p} \right)^{1/3}
82  \f}
83 
84  <b>Bulk energy contribution</b>
85 
86  The bulk binding energy contribution ( \f$ \sim -16 \f$
87  MeV per nucleon) and the symmetry energy are computing using the
88  hadronic EOS (either \ref def_had_eos or the EOS specified in
89  the most recent call to set_eos_had_temp_base() ). The bulk
90  energy per baryon is
91  \f[
92  E_{\mathrm{bulk}}/A = \frac{\hbar c}{n_{L} }
93  \left[\varepsilon(n_n,n_p) - n_n m_n - n_p m_p \right]
94  \f]
95 
96  <b>Surface energy contribution</b>
97 
98  The surface energy density is (\ref Ravenhall83)
99  \f[
100  \varepsilon = \frac{\chi d \sigma}{R}
101  \f]
102  where \f$ \sigma \f$ is the surface tension. The factor \f$ \chi
103  \f$ is typically taken care of by the caller, so we ignore it
104  for now. To compute the surface energy per baryon, we divide by
105  the baryon density, \f$ n_n + n_p \f$. We can rewrite this
106  \f[
107  E_{\mathrm{surf}} = \frac{3 \sigma}{n_n + n_p}
108  \left[ \frac{3 A}{ 4 (n_n+n_p) \pi}
109  \right]^{-1/3}
110  \f]
111  or
112  \f[
113  E_{\mathrm{surf}} = \frac{\sigma}{n_L}
114  \left(\frac{36 \pi n_L}{A} \right)^{1/3}
115  \f]
116  where the surface tension \f$ \sigma \f$ (in MeV) is given in
117  \ref surften.
118 
119  Taking a typical value, \f$ \sigma =1.1~\mathrm{MeV} \f$ and
120  \f$ n_L = 0.16~\mathrm{fm}^{-3} \f$, gives the standard result,
121  \f$ E_{\mathrm{surf}}/A = 18~\mathrm{MeV}~A^{-1/3} \f$.
122 
123  <b>Coulomb energy contribution</b>
124 
125  The Coulomb energy density (\ref Ravenhall83) is
126  \f[
127  \varepsilon_{\mathrm{Coul}} = \frac{4 \pi}{5} n_p^2 e^2 R_p^2
128  \f]
129  The energy per baryon is
130  \f[
131  E_{\mathrm{Coul}}/A = \frac{4 \pi}{5 n_L} n_p^2 e^2 R_p^2
132  \f]
133  This is the expression used in the code, except for a prefactor
134  \ref coul_coeff which is a fit parameter and should be close to
135  unity.
136 
137  Assuming \f$ R_p = R \f$
138  and \f$ Z = \frac{4 \pi}{3} R^3 n_p \f$
139  and \f$ R = \left[ 3 A / (4 \pi n_L) \right]^{1/3} \f$
140  gives
141  \f[
142  E_{\mathrm{Coul}}/A = \frac{6^{2/3}}{5}
143  \pi^{1/3} e^2 n_L^{1/3} \frac{Z^2}{A^{4/3}}
144  \f]
145  and taking \f$ n_L = 0.16~\mathrm{fm}^{-3} \f$ and
146  \f$ e^2 = \hbar c/137 \f$ gives the standard result
147  \f[
148  E_{\mathrm{Coul}}/A = 0.76~\mathrm{MeV}~Z^2 A^{-4/3}
149  \f]
150 
151  \hline
152 
153  <b>References</b>
154 
155  Designed for \ref Steiner08 based on \ref Lattimer85 and
156  \ref Lattimer91 .
157 
158  \hline
159  */
161 
162  public:
163 
164  nucmass_ldrop();
165 
166  /// \name Input parameters
167  //@{
168  /// Density asymmetry (default 0)
169  double n1;
170 
171  /** \brief Saturation density ( The default is \f$ 0.16
172  \mathrm{fm}^{-3} \f$)
173  */
174  double n0;
175 
176  /// Surface tension in MeV (default 1.1 MeV)
177  double surften;
178 
179  /// Coulomb coefficient (default 1.0)
180  double coul_coeff;
181  //@}
182 
183  /// \name Output quantities
184  //@{
185  /// Internal average neutron density
186  double nn;
187 
188  /// Internal average proton density
189  double np;
190 
191  /// Neutron radius
192  double Rn;
193 
194  /// Proton radius
195  double Rp;
196 
197  /// Bulk \part of energy
198  double bulk;
199 
200  /// Surface \part of energy
201  double surf;
202 
203  /// Coulomb \part of energy
204  double coul;
205  //@}
206 
207  /** \brief Given \c Z and \c N, return the mass excess in MeV
208 
209  \comment
210  We don't need to implement mass_excess() for integers because
211  that's done in the parent nucmass_cont.
212  \endcomment
213  */
214  virtual double mass_excess_d(double Z, double N);
215 
216  /// Given \c Z and \c N, return the mass excess in MeV
217  virtual double mass_excess(int Z, int N) {
218  return mass_excess_d(Z,N);
219  }
220 
221  /** \brief Given \c Z and \c N, return the binding energy in MeV
222 
223  This function is currently independent of \c npout, \c nnout,
224  and \c chi.
225  */
226  virtual double drip_binding_energy_d(double Z, double N,
227  double npout, double nnout,
228  double chi, double T);
229 
230  /// \name EOS and particle parameters
231  //@{
232  /// Change the base hadronic EOS
234  heos=&uhe;
235  return 0;
236  }
237 
238  /// The default hadronic EOS
240 
241  /// Change neutron and proton objects
242  void set_n_and_p(fermion &un, fermion &up) {
243  n=&un;
244  p=&up;
245  return;
246  }
247 
248  /// Default neutron
250 
251  /// Default proton
253  //@}
254 
255  /// \name Fitting functions
256  //@{
257  /// Fix parameters from an array for fitting
258  virtual int fit_fun(size_t nv, const ubvector &x);
259 
260  /// Fill array with guess from present values for fitting
261  virtual int guess_fun(size_t nv, ubvector &x);
262  //@}
263 
264  /// Return the type, \c "nucmass_ldrop".
265  virtual const char *type() { return "nucmass_ldrop"; }
266 
267  /// Energy and pressure
269 
270 #ifndef DOXYGEN_INTERNAL
271 
272  protected:
273 
274  /// Pointer to neutron
276  /// Pointer to proton
278  /// The base EOS for bulk matter
280 
281 #endif
282 
283  };
284 
285  /** \brief More advanced liquid drop model
286 
287  In addition to the physics in \ref nucmass_ldrop, this includes
288  corrections for
289  - finite temperature
290  - neutron skin
291  - an isospin-dependent surface energy
292  - decrease in the Coulomb energy from external protons
293 
294  \note The input parameter T should be given in units of inverse
295  Fermis -- this is a bit unusual since the binding energy is
296  returned in MeV, but we keep it for now.
297 
298  <b>Bulk energy</b>
299 
300  The central densities and radii, \f$ n_n, n_p, R_n, R_p \f$
301  are all determined in the same way as \ref nucmass_ldrop,
302  except that now \f$ \delta \equiv I \zeta \f$, where
303  \f$ \zeta \f$ is stored in \ref doi . Note that this
304  means \f$ N > Z~\mathrm{iff}~R_n>R_p \f$.
305 
306  If \ref new_skin_mode is false, then the bulk energy is
307  also computed as in \ref nucmass_ldrop. Otherwise, the
308  number of nucleons in the core is computed with
309  \f{eqnarray*}
310  A_{\mathrm{core}} = Z (n_n+n_p)/n_p~\mathrm{for}~N\geq Z \\
311  A_{\mathrm{core}} = N (n_n+n_p)/n_p~\mathrm{for}~Z>N \\
312  \f}
313  and \f$ A_{\mathrm{skin}} = A - A_{\mathrm{core}} \f$.
314  The core contribution to the bulk energy is
315  \f[
316  E_{\mathrm{core}}/A = \left(\frac{A_{\mathrm{core}}}{A}\right)
317  \frac{\hbar c}{n_{L} }
318  \left[\varepsilon(n_n,n_p) - n_n m_n - n_p m_p \right]
319  \f]
320  then the skin contribution is
321  \f[
322  E_{\mathrm{skin}}/A = \left(\frac{A_{\mathrm{skin}}}{A}\right)
323  \frac{\hbar c}{n_{L} }
324  \left[\varepsilon(n_n,0) - n_n m_n \right]~\mathrm{for}~N>Z
325  \f]
326  and
327  \f[
328  E_{\mathrm{skin}}/A = \left(\frac{A_{\mathrm{skin}}}{A}\right)
329  \frac{\hbar c}{n_{L} }
330  \left[\varepsilon(0,n_p) - n_p m_p \right]~\mathrm{for}~Z>N
331  \f]
332 
333  <b>Surface energy</b>
334 
335  If \ref full_surface is false, then the surface energy is
336  just that from \ref nucmass_ldrop , with an extra factor
337  for the surface symmetry energy
338  \f[
339  E_{\mathrm{surf}} = \frac{\sigma}{n_L}
340  \left(\frac{36 \pi n_L}{A} \right)^{1/3}
341  \left( 1- \sigma_{\delta} \delta^2 \right)
342  \f]
343  where \f$ \sigma_{\delta} \f$ is unitless and stored in \ref ss.
344 
345  If \ref full_surface is true, then the surface energy is modified
346  by a cubic dependence for the medium and contains finite temperature
347  corrections.
348 
349  <b>Coulomb energy</b>
350 
351  The Coulomb energy density (\ref Ravenhall83) is
352  \f[
353  \varepsilon = 2 \pi e^2 R_p^2 n_p^2 f_d(\chi_p)
354  \f]
355  where the function \f$ f_d(\chi) \f$ is
356  \f[
357  f_d(\chi_p) = \frac{1}{(d+2)}
358  \left[ \frac{2}{(d-2)} \left( 1 - \frac{d}{2}
359  \chi_p^{(1-2/d)} \right) + \chi_p \right]
360  \f]
361 
362  This class takes \f$ d=3 \f$ .
363 
364  <b>Todos and Future</b>
365 
366  \todo This is based on LPRL, but it's a little different in
367  Lattimer and Swesty. I should document what the difference is.
368 
369  \todo The testing could be updated.
370 
371  \future Add translational energy?
372 
373  \future Remove excluded volume correction and compute nuclear
374  mass relative to the gas rather than relative to the vacuum.
375 
376  \future In principle, Tc should be self-consistently determined
377  from the EOS.
378 
379  \future Does this work if the nucleus is "inside-out"?
380 
381  \comment
382  \todo The choice of nn and np from n0 and n1 is very closely
383  related to FRDM (\ref Moller95). We should document this here.
384 
385  I've taken this out, because it appears to me that Moller '95
386  actually set this term (n1 = -3 L/K) to zero.
387  \endcomment
388 
389  \comment
390 
391  \hline
392 
393  Excluded volume and \ref rel_vacuum:
394 
395  Typically in a single-nucleus EOS with a neutron drip
396  (ignoring translational degrees of freedom for the nucleus)
397  \f[
398  f = n_N m_N + (1-\chi_n) f_{n,\mathrm{drip}}
399  \f]
400  where
401  \f[
402  m_N = \frac{A}{n_n+n_p}(f - n_n m_n - n_p m_p)
403  \f]
404  Since \f$ n_N = 3/(4 \pi R_{\mathrm{ws}}^3) \f$, and
405  \f$ \chi_n = (R_n/R_{\mathrm{ws}})^3 \f$, this is
406  \f[
407  f = \frac{3}{4 \pi R_{\mathrm{ws}}^3}
408  \left[ m_N - f_{n,\mathrm{drip}} \frac{4 \pi}{3} R_n^3 \right]
409  + f_{n,\mathrm{drip}}
410  \f]
411 
412  \endcomment
413 
414  \hline
415 
416  <b>References</b>
417 
418  Designed in \ref Steiner08 and \ref Souza09 based in part
419  on \ref Lattimer85 and \ref Lattimer91 .
420 
421  \hline
422  */
424 
425  public:
426 
428 
429  /// Return the type, \c "nucmass_ldrop_skin".
430  virtual const char *type() { return "nucmass_ldrop_skin"; }
431 
432  /// Fix parameters from an array for fitting
433  virtual int fit_fun(size_t nv, const ubvector &x);
434 
435  /// Fill array with guess from present values for fitting
436  virtual int guess_fun(size_t nv, ubvector &x);
437 
438  /** \brief If true, properly fix the surface for the pure neutron
439  matter limit (default true)
440  */
442 
443  /** \brief If true, separately compute the skin for the bulk energy
444  (default false)
445  */
447 
448  /// Ratio of \f$ \delta/I \f$ (default 0.8).
449  double doi;
450 
451  /// Surface symmetry energy (default 0.5)
452  double ss;
453 
454  /// \name Input parameters for temperature dependence
455  //@{
456  /// Exponent (default 1.25)
457  double pp;
458 
459  /// Coefficient (default 0.935)
460  double a0;
461 
462  /// Coefficient (default -5.1)
463  double a2;
464 
465  /// Coefficient (default -1.1)
466  double a4;
467  //@}
468 
469  /** \brief If true, define the nuclear mass relative to the vacuum
470  (default true)
471  */
473 
474  /** \brief The critical temperature of isospin-symmetric matter in
475  \f$ fm^{-1} \f$ (default \f$ 20.085/(\hbar c)\f$.)
476  */
477  double Tchalf;
478 
479  /** \brief Return the free binding energy of a \nucleus in a many-body
480  environment
481  */
482  virtual double drip_binding_energy_d(double Z, double N,
483  double npout, double nnout,
484  double chi, double T);
485  };
486 
487  /** \brief Liquid drop model with pairing
488 
489  This class adds a pairing correction
490  \f[
491  E_{\mathrm{pair}}/A = - \frac{\zeta}{2 A^{3/2}}
492  \left[
493  \cos(Z \pi) + \cos(N \pi)
494  \right]
495  \f]
496  where \f$ \zeta \f$ is stored in \ref Epair. The trigonometric
497  functions give the expected result for integer values of
498  N and Z.
499  */
501 
502  public:
503 
504  /// Return the type, \c "nucmass_ldrop_pair".
505  virtual const char *type() { return "nucmass_ldrop_pair"; }
506 
508  nfit=7;
509  Epair=13.0;
510  }
511 
512  /// Fix parameters from an array for fitting
513  virtual int fit_fun(size_t nv, const ubvector &x);
514 
515  /// Fill array with guess from present values for fitting
516  virtual int guess_fun(size_t nv, ubvector &x);
517 
518  /// Pairing energy coefficient (default 13 MeV)
519  double Epair;
520 
521  /// Most recently computed pairing energy per baryon
522  double pair;
523 
524  /** \brief Return the free binding energy of a \nucleus in a many-body
525  environment
526  */
527  virtual double drip_binding_energy_d
528  (double Z, double N, double npout, double nnout,
529  double chi, double T);
530 
531  };
532 
533 #ifndef DOXYGEN_NO_O2NS
534 }
535 #endif
536 
537 #endif
eos_had_rmf def_had_eos
The default hadronic EOS.
double surf
Surface part part of energy.
double pp
Exponent (default 1.25)
fermion def_neutron
Default neutron.
More advanced liquid drop model.
bool rel_vacuum
If true, define the nuclear mass relative to the vacuum (default true)
virtual const char * type()
Return the type, "nucmass_ldrop_skin".
double doi
Ratio of (default 0.8).
bool full_surface
If true, properly fix the surface for the pure neutron matter limit (default true) ...
double pair
Most recently computed pairing energy per baryon.
double n0
Saturation density ( The default is )
virtual int guess_fun(size_t nv, ubvector &x)
Fill array with guess from present values for fitting.
void set_n_and_p(fermion &un, fermion &up)
Change neutron and proton objects.
Liquid drop model with pairing.
virtual const char * type()
Return the type, "nucmass_ldrop_pair".
double Epair
Pairing energy coefficient (default 13 MeV)
fermion * n
Pointer to neutron.
A finite temperature hadronic EOS [abstract base].
Definition: eos_had_base.h:855
double coul
Coulomb part part of energy.
double ss
Surface symmetry energy (default 0.5)
bool new_skin_mode
If true, separately compute the skin for the bulk energy (default false)
Relativistic mean field theory EOS.
Definition: eos_had_rmf.h:294
double n1
Density asymmetry (default 0)
virtual double mass_excess_d(double Z, double N)
Given Z and N, return the mass excess in MeV.
virtual int fit_fun(size_t nv, const ubvector &x)
Fix parameters from an array for fitting.
double surften
Surface tension in MeV (default 1.1 MeV)
Simple liquid drop mass formula.
eos_had_temp_base * heos
The base EOS for bulk matter.
double bulk
Bulk part part of energy.
fermion * p
Pointer to proton.
double coul_coeff
Coulomb coefficient (default 1.0)
virtual int fit_fun(size_t nv, const ubvector &x)
Fix parameters from an array for fitting.
virtual int fit_fun(size_t nv, const ubvector &x)
Fix parameters from an array for fitting.
fermion def_proton
Default proton.
double a2
Coefficient (default -5.1)
double Rp
Proton radius.
double a0
Coefficient (default 0.935)
double Rn
Neutron radius.
thermo th
Energy and pressure.
virtual double mass_excess(int Z, int N)
Given Z and N, return the mass excess in MeV.
virtual int guess_fun(size_t nv, ubvector &x)
Fill array with guess from present values for fitting.
double np
Internal average proton density.
virtual int guess_fun(size_t nv, ubvector &x)
Fill array with guess from present values for fitting.
int set_eos_had_temp_base(eos_had_temp_base &uhe)
Change the base hadronic EOS.
virtual double drip_binding_energy_d(double Z, double N, double npout, double nnout, double chi, double T)
Return the free binding energy of a nucleus nucleus in a many-body environment.
virtual double drip_binding_energy_d(double Z, double N, double npout, double nnout, double chi, double T)
Return the free binding energy of a nucleus nucleus in a many-body environment.
double a4
Coefficient (default -1.1)
virtual double drip_binding_energy_d(double Z, double N, double npout, double nnout, double chi, double T)
Given Z and N, return the binding energy in MeV.
double nn
Internal average neutron density.
double Tchalf
The critical temperature of isospin-symmetric matter in (default .)
virtual const char * type()
Return the type, "nucmass_ldrop".

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).
Hosted at Get Object-oriented Scientific Computing
Lib at SourceForge.net. Fast, secure and Free Open Source software
downloads..