All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
eos_had_skyrme.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 eos_had_skyrme.h
24  \brief File defining \ref o2scl::eos_had_skyrme
25 */
26 #ifndef O2SCL_SKYRME_EOS_H
27 #define O2SCL_SKYRME_EOS_H
28 
29 #include <iostream>
30 #include <string>
31 #include <cmath>
32 
33 #include <o2scl/constants.h>
34 #include <o2scl/mroot.h>
35 #include <o2scl/eos_had_base.h>
36 #include <o2scl/part.h>
37 #include <o2scl/fermion_nonrel.h>
38 
39 #ifndef DOXYGEN_NO_O2NS
40 namespace o2scl {
41 #endif
42 
43  /** \brief Skyrme hadronic equation of state
44 
45  Equation of state of nucleonic matter based on
46  the Skryme interaction from \ref Skyrme59 .
47 
48  \hline
49  \b Background:
50 
51  The Hamiltonian is defined (using the notation of
52  \ref Steiner05b )
53  \f[
54  {\cal H} =
55  {\cal H}_{k1} +
56  {\cal H}_{k2} +
57  {\cal H}_{k3} +
58  {\cal H}_{p1} +
59  {\cal H}_{p2} +
60  {\cal H}_{p3} +
61  {\cal H}_{g1} +
62  {\cal H}_{g2}
63  \f]
64 
65  The kinetic terms are:
66  \f[
67  {\cal H}_{k1} = \frac{\tau_n}{2 m_n} +
68  \frac{\tau_p}{2 m_p}
69  \f]
70  \f[
71  {\cal H}_{k2} =
72  n \left(\tau_n + \tau_p \right) \left[ \frac{t_1}{4}
73  \left( 1 + \frac{x_1}{2} \right)
74  + \frac{t_2}{4} \left( 1 + \frac{x_2}{2} \right) \right]
75  \f]
76  \f[
77  {\cal H}_{k3} =
78  \left( \tau_n n_n + \tau_p n_p \right) \left[ \frac{t_2}{4}
79  \left( \frac{1}{2} + x_2 \right)
80  - \frac{t_1}{4} \left( \frac{1}{2} + x_1 \right) \right]
81  \f]
82  where \f$ \tau_i \f$ is the Fermi gas energy density
83  of particle \f$ i \f$ .
84 
85  The potential terms are:
86  \f[
87  {\cal H}_{p1} =
88  \frac{t_0}{2}
89  \left[ \left( 1 + \frac{x_0}{2} \right) n^2 -
90  \left( {\textstyle \frac{1}{2}} + x_0 \right)
91  \left( n_n^2 + n_p^2 \right) \right]
92  \f]
93  \f[
94  {\cal H}_{p2} =
95  \frac{a t_3}{6} \left[ \left( 1 + \frac{x_3}{2} \right) n^{\alpha}
96  n_n n_p + 2^{\alpha-2} \left(1 - x_3\right)
97  \left(n_n^{\alpha+2} + n_p^{\alpha+2}\right) \right]
98  \f]
99  \f[
100  {\cal H}_{p3} =
101  \frac{b t_3}{12} \left[ \left(1 + \frac{x_3}{2} \right) n^{\alpha+2} -
102  \left(\frac{1}{2} + x_3 \right) n^{\alpha}
103  \left( n_n^2+n_p^2 \right) \right]
104  \f]
105 
106  The gradient terms are displayed here for completeness even though
107  they are not computed in the code:
108  \f[
109  {\cal H}_{g1} =
110  \frac{3}{32} \left[ t_1 \left(1 - x_1 \right) -
111  t_2 \left(1 + x_2 \right) \right] \left[ \left( \nabla n_n\right)^2 +
112  \left( \nabla n_p \right)^2 \right]
113  \f]
114  \f[
115  {\cal H}_{g2} =
116  \frac{1}{8} \left[ 3 t_1 \left( 1 +
117  \frac{x_1}{2} \right) - t_2 \left(1 + \frac{x_2}{2} \right) \right]
118  \nabla n_n \nabla n_p
119  \f]
120 
121  The values \f$ a=0, b=1 \f$ give the standard definition of the
122  Skyrme Hamiltonian \ref Skyrme59, while \f$a=1, b=0\f$ contains
123  the modifications suggested by \ref Onsi94.
124 
125  The spin-orbit term is (following \ref Steiner05)
126  \f[
127  {\cal H}_{J} = -\frac{W_0}{2} \left( n_n \vec{\nabla} \cdot
128  \vec{J}_n + n_p \vec{\nabla} \cdot \vec{J}_p + n \vec{\nabla}
129  \cdot \vec{J} \right) + \frac{t_1}{16} \left(\vec{J}_n^2 +
130  \vec{J}_p^2 - x_1 \vec{J}^2\right) - \frac{t_2}{16}
131  \left(\vec{J}_n^2 + \vec{J}_p^2 + x_2 \vec{J}^2\right)
132  \f]
133  where sometimes the \f$ \vec{J}^2 \f$ terms are not included.
134  Alternatively, one can separate the isoscalar and isovector
135  parts in the first term
136  \f[
137  {\cal H}_{J} = - b_4 n \vec{\nabla} \cdot \vec{J} -
138  b_4^{\prime} n_n \vec{\nabla} \cdot \vec{J}_n -
139  b_4^{\prime} n_p \vec{\nabla} \cdot \vec{J}_p
140  \f]
141  then the earlier Skyrme interactions have \f$ b_4 =
142  b_4^{\prime} = W_0/2 \f$. For example, for SLy4,
143  \f$ b_4 = b_4^{\prime} = W_0/2 = 61.5~\mathrm{MeV} \f$.
144 
145  Also, couple useful definitions
146  \f[
147  t_3^{\prime} = \left(a + b\right) t_3 \, ,
148  \f]
149  \f[
150  C = \frac{3 }{10 m} \left( \frac{3 \pi^2 }{2} \right)^{2/3} \, ,
151  \f]
152  and
153  \f[
154  \beta = \frac{M}{2} \left[ \frac{1}{4} \left( 3 t_1 + 5 t_2 \right) \, .
155  + t_2 x_2 \right] \\
156  \f]
157 
158  \hline
159  \b Units:
160 
161  Quantities which have units containing powers of energy are
162  divided by \f$\hbar c\f$ to ensure all quantities are in units
163  of \f$ \mathrm{fm} \f$. The \f$x_i\f$ and \f$\alpha\f$ are
164  unitless, while the original units of the \f$t_i\f$ are:
165  - \f$t_0\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^3\f$
166  - \f$t_1\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^5\f$
167  - \f$t_2\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^5\f$
168  - \f$t_3\f$ - \f$\mathrm{MeV}\f$ \f$\mathrm{fm}^{3(1+\alpha)}\f$
169 
170  These are stored internally with units of:
171  - \f$t_0\f$ - \f$\mathrm{fm}^2\f$
172  - \f$t_1\f$ - \f$\mathrm{fm}^4\f$
173  - \f$t_2\f$ - \f$\mathrm{fm}^4\f$
174  - \f$t_3\f$ - \f$\mathrm{fm}^{2+3 \alpha}\f$
175 
176  \hline
177  \b Misc:
178 
179  The functions for the usual saturation properties are based
180  partly on \ref Brack85.
181 
182  Models are taken from the references: \ref Bartel79, \ref
183  Beiner75, \ref Chabanat95, \ref Chabanat97, \ref Danielewicz08,
184  \ref Dobaczewski94, \ref Dutta86, \ref Friedrich86, \ref Onsi94,
185  \ref Reinhard95, and \ref Tondeur84, and \ref VanGiai81 .
186 
187  The variables \f$ \nu_n\f$ and \f$ \nu_p\f$ contain the
188  expressions \f$ (-\mu_n+V_n)/T \f$ and \f$ (-\mu_p+V_p)/T \f$
189  respectively, where \f$ V \f$ is the potential part of the
190  single particle energy for particle i (i.e. the derivative of
191  the Hamiltonian w.r.t. density while energy density held
192  constant). Equivalently, \f$ \nu_n\f$ is just \f$ -k_{F_n}^2/ 2
193  m^{*} \f$.
194 
195  \note The finite temperature code does not include attempt to
196  include antiparticles and uses part::calc_density().
197 
198  \note Since this EOS uses the effective masses and chemical
199  potentials in the fermion class, the values of
200  part::non_interacting for neutrons and protons are set to false
201  in many of the functions.
202 
203  \hline
204 
205  \todo
206  - Convert W0 to b4 and b4p everywhere
207  - Make sure that this class properly handles particles for which
208  inc_rest_mass is true/false
209  - Need to write a function that calculates saturation density?
210  - Remove use of mnuc in calparfun()?
211  - The compressibility could probably use some simplification
212  - Make sure the finite-temperature part is properly tested
213  - The testing code doesn't work if err_mode is 2, probably because
214  of problems in load().
215  - Document load() file format.
216  - Update reference list.
217 
218  \future
219  - There is some code duplication between calc_e() and calc_temp_e()
220  which could be simplified.
221  \hline
222 
223  */
225 
226  public:
227 
228  /// \name Basic usage
229  //@{
230  /// Create a blank Skyrme EOS
231  eos_had_skyrme();
232 
233  /// Destructor
234  virtual ~eos_had_skyrme() {};
235 
236  /** \brief Equation of state as a function of densities
237 
238  \note Runs the zero temperature code if \c temper is less
239  than or equal to zero.
240  */
241  virtual int calc_temp_e(fermion &ne, fermion &pr, double temper,
242  thermo &th);
243 
244  /// Equation of state as a function of density.
245  virtual int calc_e(fermion &ne, fermion &pr, thermo &lt);
246  //@}
247 
248  /// \name Basic Skyrme model parameters
249  //@{
250  double t0,t1,t2,t3,x0,x1,x2,x3,alpha,a,b;
251  //@}
252 
253  /** \brief Spin-orbit splitting (in \f$ \mathrm{fm}^{-1} \f$)
254 
255  This is unused, but included for possible future use and
256  present in the internally stored models.
257  */
258  double W0;
259 
260  /// Isoscalar spin-orbit term (in \f$ \mathrm{fm}^{-1} \f$)
261  double b4;
262 
263  /// Isovector spin-orbit term (in \f$ \mathrm{fm}^{-1} \f$)
264  double b4p;
265 
266  /// Bibliographic reference
267  std::string reference;
268 
269  /** \name Saturation properties
270 
271  These calculate the various saturation properties exactly from
272  the parameters at any density. These routines often assume that
273  the neutron and proton masses are equal.
274  */
275  //@{
276 
277  /** \brief Calculate binding energy
278 
279  \f[
280  \frac{E}{A} = C n_B^{2/3} \left( 1 + \beta n_B \right) +
281  \frac{3 t_0}{8} n_B + \frac{t_3^{\prime}}{16} n_B^{\alpha+1}
282  \f]
283  */
284  virtual double feoa(double nb);
285 
286  /** \brief Calculate effective mass
287 
288  \f[
289  M^{*}/M = \left(1+ \beta n_B \right)^{-1} \\
290  \f]
291  */
292  virtual double fmsom(double nb);
293 
294  /** \brief Calculate compressibility
295 
296  \f[
297  K = 10 C n_B^{2/3} + \frac{27}{4} t_0 n_B + 40 C \beta n_B^{5/3} +
298  \frac{9 t_3^{\prime}}{16}
299  \alpha \left( \alpha+1 \right) n_B^{1 + \alpha} +
300  \frac{9 t_3^{\prime}}{8} \left( \alpha+1 \right) n_B^{1 + \alpha}
301  \f]
302  */
303  virtual double fcomp(double nb);
304 
305  /** \brief Calculate symmetry energy
306 
307  If pf=0.5, then the exact expression below is used.
308  Otherwise, the method from class eos_had_base is used.
309 
310  \f[
311  E_{sym} = \frac{5}{9} C n^{2/3} + \frac{10 C m}{3}
312  \left[ \frac{t_2}{6} \left(1 + \frac{5}{4} x_2 \right) -
313  \frac{1}{8} t_1 x_1 \right] n^{5/3}
314  - \frac{t_3^{\prime}}{24}
315  \left({\textstyle \frac{1}{2}} + x_3 \right) n^{1+\alpha} -
316  \frac{t_0}{4} \left( {\textstyle \frac{1}{2}} + x_0 \right) n
317  \f]
318  */
319  virtual double fesym(double nb, double alpha=0.0);
320 
321  /** \brief skewness
322 
323  \f[
324  2 C n_B^{2/3} \left(9-5/M^{*}/M\right)+
325  \frac{27 t_3^{\prime}}{16} n^{1+\alpha} \alpha
326  \left(\alpha^2-1\right)
327  \f]
328  */
329  virtual double fkprime(double nb);
330  //@}
331 
332  /** \brief Calculate \f$ t_0,t_1,t_2,t_3 \f$ and \f$ \alpha \f$ from
333  the saturation properties.
334 
335  In nuclear matter:
336 
337  \f$ E_b=E_b(n_0,M^{*},t_0,t_3,\alpha) \f$ \n
338  \f$ P=P(n_0,M^{*},t_0,t_3,\alpha) \f$ \n
339  \f$ K=K(n_0,M^{*},t_3,\alpha) \f$
340  (the \f$ t_0 \f$ dependence vanishes) \n
341  \f$ M^{*}=M^{*}(n_0,t_1,t_2,x_2) \f$
342  (the \f$ x_1 \f$ dependence cancels), \n
343  \f$ E_{sym}=E_{sym}(x_0,x_1,x_2,x_3,t_0,t_1,t_2,t_3,\alpha) \f$
344 
345  To fix the couplings from the saturation properties, we take
346  \f$ n_0, M^{*}, E_b, K \f$ as inputs, and we can fix \f$
347  t_0,t_3,\alpha \f$ from the first three relations, then use
348  \f$ M^{*}, E_b \f$ to fix \f$ t_2 \f$ and \f$ t_1 \f$. The
349  separation into two solution steps should make for better
350  convergence. All of the x's are free parameters and should be
351  set before the function call.
352 
353  The arguments \c gt0, \c gt3, \c galpha, \c gt1, and \c gt2
354  are used as initial guesses for skyme_eos::t0, eos_had_skyrme::t3,
355  eos_had_skyrme::alpha, eos_had_skyrme::t1, and eos_had_skyrme::t2
356  respectively.
357 
358  \todo Does this work for both 'a' and 'b' non-zero?
359 
360  \todo Compare to similar formulae from \ref Margueron02
361  */
362 
363  int calpar(double gt0=-10.0, double gt3=70.0, double galpha=0.2,
364  double gt1=2.0, double gt2=-1.0);
365 
366  // Unfinished.
367  /* \brief
368  From \ref Margueron02
369  */
370  // int calpar_new(double m);
371 
372  /** \brief Use eos_had_base methods for saturation properties
373 
374  This can be set to true to check the difference between
375  the exact expressions and the numerical values from
376  class eos_had_base.
377  */
379 
380  /** \brief Check the Landau parameters for instabilities
381 
382  This returns zero if there are no instabilities.
383  */
384  int check_landau(double nb, double m);
385 
386  /** \brief Calculate the Landau parameters for nuclear matter
387 
388  Given \c n0 and \c m, this calculates the Landau parameters in
389  nuclear matter as given in \ref Margueron02
390 
391  \todo This needs to be checked.
392 
393  (Checked once on 11/05/03)
394  */
395  void landau_nuclear(double n0, double m,
396  double &f0, double &g0, double &f0p,
397  double &g0p, double &f1, double &g1,
398  double &f1p, double &g1p);
399 
400  /** \brief Calculate the Landau parameters for neutron matter
401 
402  Given 'n0' and 'm', this calculates the Landau parameters in
403  neutron matter as given in \ref Margueron02
404 
405  \todo This needs to be checked
406 
407  (Checked once on 11/05/03)
408  */
409  void landau_neutron(double n0, double m, double &f0, double &g0,
410  double &f1, double &g1);
411 
412  /// Return string denoting type ("eos_had_skyrme")
413  virtual const char *type() { return "eos_had_skyrme"; }
414 
415  /// If true, compute the chemical potentials even at zero density
417 
418  /** \brief Set using alternate parameterization
419 
420  From \ref Bender03 as in, e.g. \ref Kortelainen14
421  \f{eqnarray*}
422  C^{\rho \rho}_{00} &=& 3 t_0/8 \nonumber \\
423  C^{\rho \rho}_{10} &=& -t_0/4 \left(\frac{1}{2}+x_0 \right) \nonumber \\
424  C^{\rho \rho}_{0D} &=& t_3/16 \nonumber \\
425  C^{\rho \rho}_{1D} &=& -t_3/24 \left(\frac{1}{2}+x_3\right)
426  \nonumber \\
427  C^{\rho \tau}_{0} &=& 3 t_1/16+t_2/4\left(\frac{5}{4}+x_2\right)
428  \nonumber \\
429  C^{\rho \tau}_{1} &=& -t_1/8 \left(\frac{1}{2}+x_1\right) +
430  t_2/8 \left(\frac{1}{2}+x_2\right) \nonumber \\
431  C^{\rho \Delta \rho}_{0} &=& -9/64 t_1+t_2/16
432  \left(\frac{5}{4}+x_2\right)\nonumber \\
433  C^{\rho \Delta \rho}_{1} &=& 3/32 t_1 \left(\frac{1}{2}+x_1\right) +
434  t_2/32 \left(\frac{1}{2}+x_2\right) \nonumber \\
435  C^{\rho \nabla J}_{0} &=& -b_4 -b_4^{\prime}/2\nonumber \\
436  C^{\rho \nabla J}_{1} &=& -b_4^{\prime}/2
437  \f}
438 
439  */
440  void alt_params_set
441  (double Crr00, double Crr10, double Crr0D, double Crr1D,
442  double Crt0, double Crt1, double CrDr0, double CrDr1,
443  double CrnJ0, double CrnJ1, double alpha2);
444 
445  /** \brief Get alternate parameterization
446 
447  See \ref eos_had_skyrme::alt_params_set().
448  */
449  void alt_params_get
450  (double &Crr00, double &Crr10, double &Crr0D, double &Crr1D,
451  double &Crt0, double &Crt1, double &CrDr0, double &CrDr1,
452  double &CrnJ0, double &CrnJ1, double &alpha2);
453 
454 #ifndef DOXYGEN_NO_O2NS
455 
456  protected:
457 
458  /// Thermodynamics of non-relativistic fermions
460 
461  /// \name Functions and parameters for calpar()
462  //@{
463  int calparfun(size_t nv, const ubvector &x, ubvector &y);
464  int calparfun2(size_t nv, const ubvector &x, ubvector &y);
465  double fixn0, fixeoa, fixesym, fixcomp, fixmsom;
466  //@}
467 
468 #endif
469 
470  };
471 
472 #ifndef DOXYGEN_NO_O2NS
473 }
474 #endif
475 
476 #endif
fermion_nonrel nrf
Thermodynamics of non-relativistic fermions.
std::string reference
Bibliographic reference.
virtual ~eos_had_skyrme()
Destructor.
virtual const char * type()
Return string denoting type ("eos_had_skyrme")
virtual int calc_e(fermion &ne, fermion &pr, thermo &lt)
Equation of state as a function of density.
void landau_neutron(double n0, double m, double &f0, double &g0, double &f1, double &g1)
Calculate the Landau parameters for neutron matter.
bool mu_at_zero_density
If true, compute the chemical potentials even at zero density.
double W0
Spin-orbit splitting (in )
A hadronic EOS at finite temperature based on a function of the densities [abstract base]...
double n0
Saturation density.
Definition: eos_had_base.h:330
virtual double fcomp(double nb)
Calculate compressibility.
virtual double feoa(double nb)
Calculate binding energy.
virtual int calc_temp_e(fermion &ne, fermion &pr, double temper, thermo &th)
Equation of state as a function of densities.
virtual double fmsom(double nb)
Calculate effective mass.
virtual double fkprime(double nb)
skewness
int check_landau(double nb, double m)
Check the Landau parameters for instabilities.
eos_had_skyrme()
Create a blank Skyrme EOS.
virtual double fesym(double nb, double alpha=0.0)
Calculate symmetry energy.
Skyrme hadronic equation of state.
int calpar(double gt0=-10.0, double gt3=70.0, double galpha=0.2, double gt1=2.0, double gt2=-1.0)
Calculate and from the saturation properties.
bool parent_method
Use eos_had_base methods for saturation properties.
double b4
Isoscalar spin-orbit term (in )
void alt_params_get(double &Crr00, double &Crr10, double &Crr0D, double &Crr1D, double &Crt0, double &Crt1, double &CrDr0, double &CrDr1, double &CrnJ0, double &CrnJ1, double &alpha2)
Get alternate parameterization.
double b4p
Isovector spin-orbit term (in )
void landau_nuclear(double n0, double m, double &f0, double &g0, double &f0p, double &g0p, double &f1, double &g1, double &f1p, double &g1p)
Calculate the Landau parameters for nuclear matter.
void alt_params_set(double Crr00, double Crr10, double Crr0D, double Crr1D, double Crt0, double Crt1, double CrDr0, double CrDr1, double CrnJ0, double CrnJ1, double alpha2)
Set using alternate parameterization.

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..