rgsl/
fermi_dirac.rs

1//
2// A rust binding for the GSL library by Guillaume Gomez (guillaume1.gomez@gmail.com)
3//
4
5/// The complete Fermi-Dirac integral F_j(x) is given by,
6///
7/// F_j(x)   := (1/\Gamma(j+1)) \int_0^\infty dt (t^j / (\exp(t-x) + 1))
8///
9/// Note that the Fermi-Dirac integral is sometimes defined without the normalisation factor in other texts.
10pub mod complete_integrals {
11    use crate::{types, Value};
12    use std::mem::MaybeUninit;
13
14    /// This routine computes the complete Fermi-Dirac integral with an index of -1.
15    /// This integral is given by F_{-1}(x) = e^x / (1 + e^x).
16    #[doc(alias = "gsl_sf_fermi_dirac_m1")]
17    pub fn fermi_dirac_m1(x: f64) -> f64 {
18        unsafe { sys::gsl_sf_fermi_dirac_m1(x) }
19    }
20
21    /// This routine computes the complete Fermi-Dirac integral with an index of -1.
22    /// This integral is given by F_{-1}(x) = e^x / (1 + e^x).
23    #[doc(alias = "gsl_sf_fermi_dirac_m1_e")]
24    pub fn fermi_dirac_m1_e(x: f64) -> Result<types::Result, Value> {
25        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
26        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_m1_e(x, result.as_mut_ptr()) };
27
28        result_handler!(ret, unsafe { result.assume_init() }.into())
29    }
30
31    /// This routine computes the complete Fermi-Dirac integral with an index of 0.
32    /// This integral is given by F_0(x) = \ln(1 + e^x).
33    #[doc(alias = "gsl_sf_fermi_dirac_0")]
34    pub fn fermi_dirac_0(x: f64) -> f64 {
35        unsafe { sys::gsl_sf_fermi_dirac_0(x) }
36    }
37
38    /// This routine computes the complete Fermi-Dirac integral with an index of 0.
39    /// This integral is given by F_0(x) = \ln(1 + e^x).
40    #[doc(alias = "gsl_sf_fermi_dirac_0_e")]
41    pub fn fermi_dirac_0_e(x: f64) -> Result<types::Result, Value> {
42        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
43        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_0_e(x, result.as_mut_ptr()) };
44
45        result_handler!(ret, unsafe { result.assume_init() }.into())
46    }
47
48    /// This routine computes the complete Fermi-Dirac integral with an index of 1, F_1(x) = \int_0^\infty dt (t /(\exp(t-x)+1)).
49    #[doc(alias = "gsl_sf_fermi_dirac_1")]
50    pub fn fermi_dirac_1(x: f64) -> f64 {
51        unsafe { sys::gsl_sf_fermi_dirac_1(x) }
52    }
53
54    /// This routine computes the complete Fermi-Dirac integral with an index of 1, F_1(x) = \int_0^\infty dt (t /(\exp(t-x)+1)).
55    #[doc(alias = "gsl_sf_fermi_dirac_1_e")]
56    pub fn fermi_dirac_1_e(x: f64) -> Result<types::Result, Value> {
57        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
58        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_1_e(x, result.as_mut_ptr()) };
59
60        result_handler!(ret, unsafe { result.assume_init() }.into())
61    }
62
63    /// This routine computes the complete Fermi-Dirac integral with an index of 2, F_2(x) = (1/2) \int_0^\infty dt (t^2 /(\exp(t-x)+1)).
64    #[doc(alias = "gsl_sf_fermi_dirac_2")]
65    pub fn fermi_dirac_2(x: f64) -> f64 {
66        unsafe { sys::gsl_sf_fermi_dirac_2(x) }
67    }
68
69    /// This routine computes the complete Fermi-Dirac integral with an index of 2, F_2(x) = (1/2) \int_0^\infty dt (t^2 /(\exp(t-x)+1)).
70    #[doc(alias = "gsl_sf_fermi_dirac_2_e")]
71    pub fn fermi_dirac_2_e(x: f64) -> Result<types::Result, Value> {
72        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
73        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_2_e(x, result.as_mut_ptr()) };
74
75        result_handler!(ret, unsafe { result.assume_init() }.into())
76    }
77
78    /// This routine computes the complete Fermi-Dirac integral with an integer index of j, F_j(x) = (1/\Gamma(j+1)) \int_0^\infty dt (t^j /(\exp(t-x)+1)).
79    #[doc(alias = "gsl_sf_fermi_dirac_int")]
80    pub fn fermi_dirac_int(j: i32, x: f64) -> f64 {
81        unsafe { sys::gsl_sf_fermi_dirac_int(j, x) }
82    }
83
84    /// This routine computes the complete Fermi-Dirac integral with an integer index of j, F_j(x) = (1/\Gamma(j+1)) \int_0^\infty dt (t^j /(\exp(t-x)+1)).
85    #[doc(alias = "gsl_sf_fermi_dirac_int_e")]
86    pub fn fermi_dirac_int_e(j: i32, x: f64) -> Result<types::Result, Value> {
87        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
88        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_int_e(j, x, result.as_mut_ptr()) };
89
90        result_handler!(ret, unsafe { result.assume_init() }.into())
91    }
92
93    /// This routine computes the complete Fermi-Dirac integral F_{-1/2}(x).
94    #[doc(alias = "gsl_sf_fermi_dirac_mhalf")]
95    pub fn fermi_dirac_mhalf(x: f64) -> f64 {
96        unsafe { sys::gsl_sf_fermi_dirac_mhalf(x) }
97    }
98
99    /// This routine computes the complete Fermi-Dirac integral F_{-1/2}(x).
100    #[doc(alias = "gsl_sf_fermi_dirac_mhalf_e")]
101    pub fn fermi_dirac_mhalf_e(x: f64) -> Result<types::Result, Value> {
102        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
103        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_mhalf_e(x, result.as_mut_ptr()) };
104
105        result_handler!(ret, unsafe { result.assume_init() }.into())
106    }
107
108    /// This routine computes the complete Fermi-Dirac integral F_{1/2}(x).
109    #[doc(alias = "gsl_sf_fermi_dirac_half")]
110    pub fn fermi_dirac_half(x: f64) -> f64 {
111        unsafe { sys::gsl_sf_fermi_dirac_half(x) }
112    }
113
114    /// This routine computes the complete Fermi-Dirac integral F_{1/2}(x).
115    #[doc(alias = "gsl_sf_fermi_dirac_half_e")]
116    pub fn fermi_dirac_half_e(x: f64) -> Result<types::Result, Value> {
117        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
118        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_half_e(x, result.as_mut_ptr()) };
119
120        result_handler!(ret, unsafe { result.assume_init() }.into())
121    }
122
123    /// This routine computes the complete Fermi-Dirac integral F_{3/2}(x).
124    #[doc(alias = "gsl_sf_fermi_dirac_3half")]
125    pub fn fermi_dirac_3half(x: f64) -> f64 {
126        unsafe { sys::gsl_sf_fermi_dirac_3half(x) }
127    }
128
129    /// This routine computes the complete Fermi-Dirac integral F_{3/2}(x).
130    #[doc(alias = "gsl_sf_fermi_dirac_3half_e")]
131    pub fn fermi_dirac_3half_e(x: f64) -> Result<types::Result, Value> {
132        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
133        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_3half_e(x, result.as_mut_ptr()) };
134
135        result_handler!(ret, unsafe { result.assume_init() }.into())
136    }
137}
138
139/// The incomplete Fermi-Dirac integral F_j(x,b) is given by,
140///
141/// F_j(x,b)   := (1/\Gamma(j+1)) \int_b^\infty dt (t^j / (\Exp(t-x) + 1))
142pub mod incomplete_integrals {
143    use crate::{types, Value};
144    use std::mem::MaybeUninit;
145
146    /// This routine computes the incomplete Fermi-Dirac integral with an index of zero, F_0(x,b) = \ln(1 + e^{b-x}) - (b-x).
147    #[doc(alias = "gsl_sf_fermi_dirac_inc_0")]
148    pub fn fermi_dirac_inc_0(x: f64, b: f64) -> f64 {
149        unsafe { sys::gsl_sf_fermi_dirac_inc_0(x, b) }
150    }
151
152    /// This routine computes the incomplete Fermi-Dirac integral with an index of zero, F_0(x,b) = \ln(1 + e^{b-x}) - (b-x).
153    #[doc(alias = "gsl_sf_fermi_dirac_inc_0_e")]
154    pub fn fermi_dirac_inc_0_e(x: f64, b: f64) -> Result<types::Result, Value> {
155        let mut result = MaybeUninit::<sys::gsl_sf_result>::uninit();
156        let ret = unsafe { ::sys::gsl_sf_fermi_dirac_inc_0_e(x, b, result.as_mut_ptr()) };
157
158        result_handler!(ret, unsafe { result.assume_init() }.into())
159    }
160}