fermion_mag_zerot.h
Go to the documentation of this file.
1 /*
2  -------------------------------------------------------------------
3 
4  Copyright (C) 2006-2020, 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 #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  See the documentation of that quantity for a
95  brief comparison of various E&M unit systems.
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;
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
boost::numeric::ublas::vector< double >
o2scl::fermion_mag_zerot::calc_density_zerot_mag
virtual void calc_density_zerot_mag(fermion &f, double qB, double kappa=0.0)
Thermodynamics in a magnetic field using the density.
o2scl::fermion_mag_zerot::fermion_mag_zerot
fermion_mag_zerot()
Create a fermion with mass mass and degeneracy dof.
Definition: fermion_mag_zerot.h:134
o2scl::fermion_mag_zerot
Thermodynamics of fermions in a magnetic field at zero temperature.
Definition: fermion_mag_zerot.h:98
o2scl::fermion_zerot_tl< double >
mroot< mm_funct, boost::numeric::ublas::vector< double >, jac_funct >::tol_abs
double tol_abs
o2scl::fermion_tl< double >
o2scl::fermion_mag_zerot::kt
double kt
The anomalous magnetic moment.
Definition: fermion_mag_zerot.h:113
o2scl::fermion_mag_zerot::dent
double dent
The target density, set by calc_density_zerot_mag()
Definition: fermion_mag_zerot.h:116
o2scl::fermion_mag_zerot::type
virtual const char * type()
Return string denoting type ("fermion_mag_zerot")
Definition: fermion_mag_zerot.h:172
o2scl::fermion_mag_zerot::density_root
mroot * density_root
Solver to compute chemical potential from density.
Definition: fermion_mag_zerot.h:107
o2scl::mroot_hybrids
o2scl::mroot
o2scl::fermion_mag_zerot::sum_limit
int sum_limit
Limit on the sum (default )
Definition: fermion_mag_zerot.h:131
o2scl::fermion_mag_zerot::nmax_dn
int nmax_dn
Maximum Landau level for spin down particles (default 0)
Definition: fermion_mag_zerot.h:128
o2scl::fermion_mag_zerot::qBt
double qBt
The charge times the magnetic field in .
Definition: fermion_mag_zerot.h:110
o2scl::fermion_mag_zerot::calc_mu_zerot_mag
virtual void calc_mu_zerot_mag(fermion &f, double qB, double kappa=0.0)
Thermodynamics in a magnetic field using the chemical potential.
o2scl::fermion_mag_zerot::set_density_root
void set_density_root(mroot<> &rp)
Set the solver for use in calculating the chemical potential from the density.
Definition: fermion_mag_zerot.h:162
o2scl::fermion_mag_zerot::def_density_root
mroot_hybrids def_density_root
The default solver for calc_density().
Definition: fermion_mag_zerot.h:169
o2scl::fermion_mag_zerot::nmax_up
int nmax_up
Maximum Landau level for spin up particles (default 0)
Definition: fermion_mag_zerot.h:125
o2scl::fermion_mag_zerot::solve_fun
int solve_fun(size_t nv, const ubvector &x, ubvector &y, fermion &f)
Function to compute chemical potential from density.

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