Orbitals of the Hydrogen Atom¶
Attention
This tutorial is under construction
- Input Files:
3D_hydrogen_atom_nnp.in
- Scope of the tutorial:
Coulomb potential, Schrödinger equation
- Main adjustable parameters in the input file:
calculation with or without Schrödinger -
$solve_quantum
- Relevant output files:
bias_00000\bandedge_Gamma_1d_z.dat
bias_00000\Quantum\energy_spectrum_quantum_region_Gamma_00000.dat
bias_00000\Quantum\amplitude_quantum_region_Gamma_XXXX.fld
Exercise¶
- Compute lowest s, p, and d orbitals of a hydrogen atom and answer following questions:
Are computed wave-functions of s orbitals in agreement with analytical solutions?
Are all energies of orbitals the same as obtained analytically? If not, why do they deviate from analytical solutions?
Is proper degeneracy present in the numerical solutions?
- Additional question on numerics:
What are the biggest regularizing parameter that can be used for the electrostatic potential and grid spacing if one aims at 1 meV accuracy for the energy of the fundamental state?
Introduction¶
This tutorial demonstrates how nextnano++ works with an easy example - an electron bound by a hydrogen atom. After completing this tutorial, you will know more about:
How to set the numerical grid
How to run the simulation
Firstly, an electron moving around a hydrogen atom follows Coulomb’s law. Therefore, the potential formed by a hydrogen atom with charge \(e\) (= 1 eV) is shown below.
where \(r\) and \(\varepsilon_0\) represent the distance centered on the hydrogen atom and the permittivity of vacuum, respectively. Note the equation \(r\) = \(\sqrt{x^2+y^2+z^2}\). You should be aware that the unit \(r\) (\(x,y,z\)) is \((nm)\).
Then, the Schrödinger equation for an electron bound to a hydrogen atom is described as follows.
\(m_0\) is the mass of an electron and \(\hbar\) is reduced Planck’s constant.
We solve this equation with nextnano++.
Main¶
The next step in accurate simulation is to set up the appropriate numerical grid. For other important syntaxes, please refer to basic basics tutorials. The grid is similar to the coordinates system. Suppose that the numerical grid is set up as follows.
48 grid{
49 xgrid{
50 line{ pos =-$pos_end spacing = $grid_coarse }
51 line{ pos =-$pos_coarse spacing = $grid_coarse }
52 line{ pos =-$pos_medium spacing = $grid_medium }
53 line{ pos =-$pos_fine spacing = $grid_fine }
54 line{ pos = 0 spacing = $grid_fine }
55 line{ pos = $pos_fine spacing = $grid_fine }
56 line{ pos = $pos_medium spacing = $grid_medium }
57 line{ pos = $pos_coarse spacing = $grid_coarse }
58 line{ pos = $pos_end spacing = $grid_coarse }
59 }
60 ygrid{
61 line{ pos =-$pos_end spacing = $grid_coarse }
62 line{ pos =-$pos_coarse spacing = $grid_coarse }
63 line{ pos =-$pos_medium spacing = $grid_medium }
64 line{ pos =-$pos_fine spacing = $grid_fine }
65 line{ pos = 0 spacing = $grid_fine }
66 line{ pos = $pos_fine spacing = $grid_fine }
67 line{ pos = $pos_medium spacing = $grid_medium }
68 line{ pos = $pos_coarse spacing = $grid_coarse }
69 line{ pos = $pos_end spacing = $grid_coarse }
70 }
71 zgrid{
72 line{ pos =-$pos_end spacing = $grid_coarse }
73 line{ pos =-$pos_coarse spacing = $grid_coarse }
74 line{ pos =-$pos_medium spacing = $grid_medium }
75 line{ pos =-$pos_fine spacing = $grid_fine }
76 line{ pos = 0 spacing = $grid_fine }
77 line{ pos = $pos_fine spacing = $grid_fine }
78 line{ pos = $pos_medium spacing = $grid_medium }
79 line{ pos = $pos_coarse spacing = $grid_coarse }
80 line{ pos = $pos_end spacing = $grid_coarse }
81 }
82 }
Here we use variables to allow arbitrary numeric assignments (Tutorial: Variables).
In this case, $grid_coarse
\(= 0.1\), $grid_medium
\(= 0.05\), $grid_fine
\(= 0.005\).
14 #spacing
15 $grid_coarse = 0.1
16 $grid_medium = 0.05
17 $grid_fine = 0.005
Basically, the finer the grid becomes, the accuracy gets the better. However, this increases calculation time. Since we are interested in an electron near a hydrogen atom, you need to set up the grid near the atom to be finer. Lastly, we solve the Schrödinger equation for an electron following Coulomb’s law in nextnano++.
108 poisson{
109 import_potential{ import_from = "Potential" }
110 output_potential{}
111 }
148 $e = 1 #eV
149 $eps = 55.263E-3 #e^2eV^(-1)nm^(-1)
150 $pi = 3.1415
151 $rp = 3.5E-3
152 import{
153 analytic_function{
154 name = "Potential"
155 function = "(1 / (4*$eps*$pi)) * ($e / (sqrt( (x)^2 + (y)^2 + (z)^2 + ($rp)^2))) "
156 label = potential_label
157 }
158 output_imports{}
159 }
Here, we import the potential formula as a function (Input_Syntax: import).
The syntax poisson{}
works to output the potential.
You must be aware of the regularizing parameter, which is equivalent to $rp
in the formula.
The role of the parameter is to solve unfavorable boundary conditions. At \(r = 0\), i.e. \(x = y = z = 0\), the potential value becomes \(\infty\), but the simulation cannot handle \(\infty\). Therefore, we need to add the parameter to proceed with the calculation at \(r = 0\).
The value of the parameter must be smaller than the size of the first orbit of an atom. Otherwise, the parameter significantly affects the electron movement and makes the calculation result too far from the ideal one.
The parameter is set to +3.5E-3
since the first electron orbital radius of a hydrogen atom is approximately 5.29E-2
.
Therefore, the potential formula is instead described as
Simulation¶
First, look at the Coulomb energy used in this simulation. The distribution map at \(z = 0\) of the Coulomb energy of an electron is shown in Figure 2.5.2.1.
Figure 2.5.2.1 (a) shows the Coulomb energy distribution. (b) is the difference between the numerical energy calculated by nextnano++ and the analytical energy at \(y = 0\), \(z = 0\) along the white dash line in (a). Note that the scale of the difference is logarithmic.¶
The regularizing parameter $rp
allows the energy value to be finite even near the origin.
Thus, due to the parameter, the closer to the origin, the larger the difference in energy.
The upper left side of Figure 2.5.2.2 shows the 1s orbitals obtained numerically by the nextnano++ simulation (light blue line) and the analytical plot (violet dash line). The upper right side of it shows 2s orbitals as well.
Figure 2.5.2.2 shows the 1s (a) and 2s (b) orbitals. (c) and (d) show the difference between the wavefunctions obtained with nextnano++ and by analytical calculation.¶
The analytical wave-functions (1s and 2s) are as follows, respectively.
\[\begin{split}\begin{aligned} \Psi_{1s}(r) = 2\left(\frac{1}{a_B}\right)^{3/2}{\exp\left(-\frac{r}{a_B}\right)}\left(\frac{1}{4\pi}\right)^{1/2},\\ \Psi_{2s}(r) = 2\left(\frac{1}{2a_B}\right)^{3/2}\left(1-\frac{r}{2a_B}\right){\exp\left(-\frac{r}{2a_B}\right)}\left(\frac{1}{4\pi}\right)^{1/2} \end{aligned}\end{split}\]
We refer to [LeviAQM2006] for those wavefunctions.
We can see that the wavefunctions derived by nextnano++ are very accurate from the above two figures.
The difference (shown in the below two figures) between these two wavefunctions is maximum at \(z = 0\) for both 1s and 2s orbitals.
This is due to the regularizing parameter $rp
considered in the simulation.
Next, we look at the energy of each eigenstate.
Orbital |
\(n\) |
\(l\) |
Numeircal energies (eV) by nextnano++ |
Analytical energies (eV) (*) |
Error (%) (**) |
cf. Numeircal energies (eV) with finer grids |
---|---|---|---|---|---|---|
1s |
1 |
0 |
-13.605 |
-13.606 |
0.0073 |
-13.420 |
2s |
2 |
0 |
-3.424 |
-3.401 |
0.68 |
-3.381 |
2p |
2 |
1 |
-3.450 |
-3.401 |
1.44 |
-3.402 |
2p |
2 |
1 |
-3.450 |
-3.401 |
1.44 |
-3.402 |
2p |
2 |
1 |
-3.450 |
-3.401 |
1.44 |
-3.402 |
3s |
3 |
0 |
-1.525 |
-1.512 |
0.86 |
-1.506 |
3p |
3 |
1 |
-1.532 |
-1.512 |
1.32 |
-1.512 |
3p |
3 |
1 |
-1.532 |
-1.512 |
1.32 |
-1.512 |
3p |
3 |
1 |
-1.532 |
-1.512 |
1.32 |
-1.512 |
3d |
3 |
2 |
-1.528 |
-1.512 |
1.06 |
-1.513 |
3d |
3 |
2 |
-1.528 |
-1.512 |
1.06 |
-1.513 |
3d |
3 |
2 |
-1.521 |
-1.512 |
0.60 |
-1.512 |
3d |
3 |
2 |
-1.521 |
-1.512 |
0.60 |
-1.512 |
3d |
3 |
2 |
-1.521 |
-1.512 |
0.60 |
-1.512 |
(*)We calculate the analytical energies with the following formula.
\[E = \frac{-m_0e^4}{2{(4\pi\varepsilon_0)^2}\hbar^2}\frac{1}{n^2}\]
\(n\) represents the principal quantum number (See below for details). Refer to [LeviAQM2006] for derivation of this formula.
As can be seen from this table, the eigenenergy values obtained from the simulation are very close to the theoretical values. Of course, this accuracy can be further improved by making the grid finer.
(**) The error is calculated by the following formula.
\[Error = |E_{nextnano} - E|/|E|*100\]
\(E_{nextnano}\) represents the numrerical energy in the table.
Additionally, it is apparent that the finer grids improve the accuracy of the energy values.
Finally, we consider the wavefunction of each eigenstate. The GIFs shown in Figure 2.5.2.3 illustrate the multiple orbitals of an electron in a hydrogen atom.

Figure 2.5.2.3 shows some electron orbitals of a hydrogen atom.¶
The set of numbers in the lower right corner of each GIF represents quantum numbers, corresponding to \(n, l\) (\(n,l\) are integers). \(n\) is the principal quantum number and represents the electron shell into which the electrons can be placed. \(l\) is the azimuthal quantum number and represents the type of electron orbitals, such as s orbital, p orbital, and d orbital. Additionally, there is another quantum number \(m\), which is not shown in the figure. \(m\) is the magnetic quantum number and characterizes the direction of the orbitals. We do not show the number because it is difficult to distinguish them due to their orientation. However, they are very consistent with those found in numerous literatures.