fermion_mag_zerot.h
Go to the documentation of this file.
1 /*
2  -------------------------------------------------------------------
3
4  Copyright (C) 2006-2017, Andrew W. Steiner
5
6  This file is part of O2scl.
7
8  O2scl is free software; you can redistribute it and/or modify
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 #ifndef O2SCL_MAG_FERMION_ZEROT_H
24 #define O2SCL_MAG_FERMION_ZEROT_H
25
26 /** \file fermion_mag_zerot.h
27  \brief File defining \ref o2scl::fermion_mag_zerot
28 */
29
30 #include <boost/numeric/ublas/vector.hpp>
31
32 #include <o2scl/fermion.h>
33 #include <o2scl/mroot_hybrids.h>
34 #include <o2scl/root_brent_gsl.h>
35
36 #ifndef DOXYGEN_NO_O2NS
37 namespace o2scl {
38 #endif
39
40  /** \brief Thermodynamics of fermions in a magnetic field at
41  zero temperature
42
43  Using the notation of \ref Broderick00, the
44  effective mass of a fermion in a magnetic field is
45  \f[
46  \tilde{m}^2 = m^2 + 2 \left( n + \frac{1}{2} -
47  \frac{q \sigma}{2 |q|} \right) |q| B
48  \f]
49  where \f$m \f$ is the bare mass, \f$q \f$ is the charge,
50  and \f$\sigma \f$ is the z-component of the spin along
51  the axis of the magnetic field (for spin 1/2 fermions, for example,
52  either +1 or -1).
53
54  \note This only works for spin 1/2 particles at the moment,
55  so the discussion below assumes this is the case.
56
57  \note The function calc_density_zerot_mag()
58  will fail if the density is small enough.
59
60  The Fermi momentum and the chemical potential are related
61  in the usual way
62  \f[
63  k_{F,\sigma}^2 = \mu^2 - \tilde{m}_{\sigma}^2
64  \f]
65
66  The density is then given by
67  \f[
68  n = \frac{|q| B}{2 \pi^2} \sum_{\sigma}
69  \sum_{n=0}^{n_{\mathrm{max},\sigma}} k_{F,\sigma}
70  \f]
71  where \f$n_{\mathrm{max},\sigma} \f$ is the integer value of
72  \f$n \f$ for which the next largest integer makes \f$\mu < 73 \tilde{m} \f$. The value of \f$n_{\mathrm{max}} \f$ is stored
74  internally in this class as an integer (\ref nmax_dn and \ref
75  nmax_up), and if there are no integers for which \f$\mu < 76 \tilde{m} \f$, then the corresponding integer will be -1, to
77  indicate that no terms in the sum are present. For any fermion,
78  at least one Landau level is always filled for at least one of
79  the spin states at every density.
80
81  When the number of Landau levels for \f$\sigma=1 \f$ is larger
82  than \ref sum_limit, the B=0 result is given.
83
84  <b>Units:</b>
85
86  It is useful to think of the magnetic field as typically being
87  multiplied by the electron charge, so if magnetic field
88  is measured in Gauss, then for a 1 Gauss field in
89  "Gaussian" units,
90  \f[
91  e B = 1.5~\times~10^{-19}~\mathrm{fm}^{-2}
92  \f]
93  This conversion factor is given in \ref o2scl_const::ec_gauss_fm2 .
94
95  \todo Comment on Gaussian vs. Heaviside-Lorentz units.
96
97  */
99
100  public:
101
103
104  protected:
105
106  /// Solver to compute chemical potential from density
108
109  /// The charge times the magnetic field in \f$\mathrm{fm}^{-2} \f$
110  double qBt;
111
112  /// The anomalous magnetic moment
113  double kt;
114
115  /// The target density, set by calc_density_zerot_mag()
116  double dent;
117
118  /// Function to compute chemical potential from density
119  int solve_fun(size_t nv, const ubvector &x,
120  ubvector &y, fermion &f);
121
122  public:
123
124  /// Maximum Landau level for spin up particles (default 0)
125  int nmax_up;
126
127  /// Maximum Landau level for spin down particles (default 0)
128  int nmax_dn;
129
130  /// Limit on the sum (default \f$10^{6} \f$)
132
133  /// Create a fermion with mass \c mass and degeneracy \c dof.
135  nmax_up=0;
136  nmax_dn=0;
137  sum_limit=1000000;
138  density_root=&def_density_root;
139  def_density_root.tol_abs/=1.0e4;
140  }
141
142  virtual ~fermion_mag_zerot() {
143  }
144
145  /** \brief Thermodynamics in a magnetic field using the chemical
146  potential
147
148  The parameter \c qB is the charge (in units of the positron
149  charge) times the magnetic field strength. Thus, for example,
150  \c qB should be negative for electrons.
151  */
152  virtual void calc_mu_zerot_mag(fermion &f, double qB, double kappa=0.0);
153
154  /** \brief Thermodynamics in a magnetic field using the density
155  */
156  virtual void calc_density_zerot_mag(fermion &f, double qB,
157  double kappa=0.0);
158
159  /** \brief Set the solver for use in calculating the chemical
160  potential from the density
161  */
163  density_root=&rp;
164  return;
165  }
166
167  /** \brief The default solver for calc_density().
168  */
170
171  /// Return string denoting type ("fermion_mag_zerot")
172  virtual const char *type() { return "fermion_mag_zerot"; }
173
174  };
175
176 #ifndef DOXYGEN_NO_O2NS
177 }
178 #endif
179
180 #endif
fermion_mag_zerot()
Create a fermion with mass mass and degeneracy dof.
int nmax_up
Maximum Landau level for spin up particles (default 0)
int sum_limit
Limit on the sum (default )
double dent
The target density, set by calc_density_zerot_mag()
Fermion properties at zero temperature.
Definition: fermion.h:123
double qBt
The charge times the magnetic field in .
Fermion class.
Definition: fermion.h:52
virtual void calc_mu_zerot_mag(fermion &f, double qB, double kappa=0.0)
Thermodynamics in a magnetic field using the chemical potential.
int solve_fun(size_t nv, const ubvector &x, ubvector &y, fermion &f)
Function to compute chemical potential from density.
mroot_hybrids def_density_root
The default solver for calc_density().
int nmax_dn
Maximum Landau level for spin down particles (default 0)
virtual void calc_density_zerot_mag(fermion &f, double qB, double kappa=0.0)
Thermodynamics in a magnetic field using the density.
Thermodynamics of fermions in a magnetic field at zero temperature.
virtual const char * type()
Return string denoting type ("fermion_mag_zerot")
double kt
The anomalous magnetic moment.
double tol_abs
void set_density_root(mroot<> &rp)
Set the solver for use in calculating the chemical potential from the density.
mroot * density_root
Solver to compute chemical potential from density.

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).