Commit a6547b2d by Pablo Piskunow

### Rename method `average` to `integrate`

```  `integrate` is a more accurate name for a function that integrates
the spectral density. Docstrings and tutorial updated.```
parent d010de54
Pipeline #3858 passed with stages
in 30 minutes and 11 seconds
 ... @@ -56,22 +56,22 @@ ... @@ -56,22 +56,22 @@ + ) + ) def dos_averaging_example(fsyst): def dos_integrating_example(fsyst): spectrum = kwant.kpm.SpectralDensity(fsyst) spectrum = kwant.kpm.SpectralDensity(fsyst) - print('identity resolution:', spectrum.average()) - print('identity resolution:', spectrum.integrate()) + with open('kpm_normalization.txt', 'w') as f: + with open('kpm_normalization.txt', 'w') as f: + with redirect_stdout(f): + with redirect_stdout(f): + print('identity resolution:', spectrum.average()) + print('identity resolution:', spectrum.integrate()) # Fermi energy 0.1 and temperature 0.2 # Fermi energy 0.1 and temperature 0.2 fermi = lambda E: 1 / (np.exp((E - 0.1) / 0.2) + 1) fermi = lambda E: 1 / (np.exp((E - 0.1) / 0.2) + 1) n_states = len(fsyst.sites) # 1 degree of freedom per site n_states = len(fsyst.sites) # 1 degree of freedom per site - print('number of filled states:', n_states * spectrum.average(fermi)) - print('number of filled states:', n_states * spectrum.integrate(fermi)) + with open('kpm_total_states.txt', 'w') as f: + with open('kpm_total_states.txt', 'w') as f: + with redirect_stdout(f): + with redirect_stdout(f): + print('number of filled states:', n_states * spectrum.average(fermi)) + print('number of filled states:', n_states * spectrum.integrate(fermi)) def increasing_accuracy_example(fsyst): def increasing_accuracy_example(fsyst): ... ...
 ... @@ -85,20 +85,20 @@ def simple_dos_example(): ... @@ -85,20 +85,20 @@ def simple_dos_example(): ]) ]) def dos_averaging_example(fsyst): def dos_integrating_example(fsyst): spectrum = kwant.kpm.SpectralDensity(fsyst) spectrum = kwant.kpm.SpectralDensity(fsyst) #HIDDEN_BEGIN_av1 #HIDDEN_BEGIN_int1 print('identity resolution:', spectrum.average()) print('identity resolution:', spectrum.integrate()) #HIDDEN_END_av1 #HIDDEN_END_int1 #HIDDEN_BEGIN_av2 #HIDDEN_BEGIN_int2 # Fermi energy 0.1 and temperature 0.2 # Fermi energy 0.1 and temperature 0.2 fermi = lambda E: 1 / (np.exp((E - 0.1) / 0.2) + 1) fermi = lambda E: 1 / (np.exp((E - 0.1) / 0.2) + 1) n_states = len(fsyst.sites) # 1 degree of freedom per site n_states = len(fsyst.sites) # 1 degree of freedom per site print('number of filled states:', n_states * spectrum.average(fermi)) print('number of filled states:', n_states * spectrum.integrate(fermi)) #HIDDEN_END_av2 #HIDDEN_END_int2 def increasing_accuracy_example(fsyst): def increasing_accuracy_example(fsyst): ... @@ -206,7 +206,7 @@ def main(): ... @@ -206,7 +206,7 @@ def main(): fsyst = make_syst().finalized() fsyst = make_syst().finalized() dos_averaging_example(fsyst) dos_integrating_example(fsyst) increasing_accuracy_example(fsyst) increasing_accuracy_example(fsyst) operator_example(fsyst) operator_example(fsyst) ldos_example(fsyst) ldos_example(fsyst) ... ...
 ... @@ -113,26 +113,26 @@ evaluate the density of states. ... @@ -113,26 +113,26 @@ evaluate the density of states. .. image:: ../images/kpm_dos.* .. image:: ../images/kpm_dos.* In addition to being called like functions, `~kwant.kpm.SpectralDensity` In addition to being called like functions, `~kwant.kpm.SpectralDensity` objects also have a method `~kwant.kpm.SpectralDensity.average` which can be objects also have a method `~kwant.kpm.SpectralDensity.integrate` which can be used to integrate the density of states against some distribution function over used to integrate the density of states against some distribution function over the whole spectrum. If no distribution function is specified, then the uniform the whole spectrum. If no distribution function is specified, then the uniform distribution is used: distribution is used: .. literalinclude:: kernel_polynomial_method.py .. literalinclude:: kernel_polynomial_method.py :start-after: #HIDDEN_BEGIN_av1 :start-after: #HIDDEN_BEGIN_int1 :end-before: #HIDDEN_END_av1 :end-before: #HIDDEN_END_int1 .. literalinclude:: ../images/kpm_normalization.txt .. literalinclude:: ../images/kpm_normalization.txt We see that the integral of the density of states is normalized to 1. If We see that the integral of the density of states is normalized to 1. If we wish to calculate, say, the average number of states populated in we wish to calculate, say, the number of states populated in equilibrium, then we should integrate with respect to a Fermi-Dirac equilibrium, then we should integrate with respect to a Fermi-Dirac distribution and multiply by the total number of available states in distribution and multiply by the total number of available states in the system: the system: .. literalinclude:: kernel_polynomial_method.py .. literalinclude:: kernel_polynomial_method.py :start-after: #HIDDEN_BEGIN_av2 :start-after: #HIDDEN_BEGIN_int2 :end-before: #HIDDEN_END_av2 :end-before: #HIDDEN_END_int2 .. literalinclude:: ../images/kpm_total_states.txt .. literalinclude:: ../images/kpm_total_states.txt ... ...
 ... @@ -255,7 +255,7 @@ class SpectralDensity: ... @@ -255,7 +255,7 @@ class SpectralDensity: return np.transpose(np.polynomial.chebyshev.chebval( return np.transpose(np.polynomial.chebyshev.chebval( rescaled_energy, coef_cheb) / g_e).real rescaled_energy, coef_cheb) / g_e).real def average(self, distribution_function=None): def integrate(self, distribution_function=None): """Returns the total spectral density. """Returns the total spectral density. Returns the integral over the whole spectrum with an optional Returns the integral over the whole spectrum with an optional ... ...
 ... @@ -290,7 +290,7 @@ def test_kwant_op_current(): ... @@ -290,7 +290,7 @@ def test_kwant_op_current(): assert_allclose(spectrum_syst.densities, spectrum.densities) assert_allclose(spectrum_syst.densities, spectrum.densities) def test_kwant_op_average(): def test_kwant_op_integrate(): """Check that the kwant.operator.Density gives the same result as the """Check that the kwant.operator.Density gives the same result as the identity operator. identity operator. """ """ ... @@ -305,8 +305,8 @@ def test_kwant_op_average(): ... @@ -305,8 +305,8 @@ def test_kwant_op_average(): assert spectrum_syst.densities.shape[1] == ham.shape[0] assert spectrum_syst.densities.shape[1] == ham.shape[0] # same algorithms are used so these arrays are equal up to TOL # same algorithms are used so these arrays are equal up to TOL assert_allclose(np.sum(spectrum_syst.average(distribution_function=ones)), assert_allclose(np.sum(spectrum_syst.integrate(distribution_function=ones)), spectrum.average()) spectrum.integrate()) # ## test for methods to work as expected # ## test for methods to work as expected ... @@ -495,16 +495,16 @@ def test_call(): ... @@ -495,16 +495,16 @@ def test_call(): # different algorithms are used so these arrays are equal up to TOL_SP # different algorithms are used so these arrays are equal up to TOL_SP assert_allclose_sp(densities_array, spectrum.densities) assert_allclose_sp(densities_array, spectrum.densities) # ### check average # ### check integrate def test_average(): def test_integrate(): ham = kwant.rmt.gaussian(dim) ham = kwant.rmt.gaussian(dim) spectrum = make_spectrum(ham, p) spectrum = make_spectrum(ham, p) ones = lambda x: np.ones_like(x) ones = lambda x: np.ones_like(x) assert np.abs(spectrum.average() - simps(spectrum.densities, assert np.abs(spectrum.integrate() - simps(spectrum.densities, x=spectrum.energies)) < TOL_SP x=spectrum.energies)) < TOL_SP assert np.abs(spectrum.average() - spectrum.average( assert np.abs(spectrum.integrate() - spectrum.integrate( distribution_function=ones)) < TOL distribution_function=ones)) < TOL # ### check increase_energy_resolution # ### check increase_energy_resolution ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!