:py:mod:`bfit.density` ====================== .. py:module:: bfit.density .. autoapi-nested-parse:: Slater Atomic Density Module. .. !! processed by numpydoc !! Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: bfit.density.SlaterAtoms .. py:class:: SlaterAtoms(element, anion=False, cation=False) Atomic Density Class. Reads and parses information from the .slater file [1], [2] of an atom and stores it inside this class. Elements supported by default from "./bfit/data/examples/" range from Hydrogen to Xenon. Each electron of the atom is associated to a molecular spin-orbital written as: .. math:: \phi_i(r, \theta, \phi) = \bigg[\sum_{j=1}^{M_i} c^i_j R_{n^i_j}(r, \alpha^i_j) \bigg] Y_{l_i}^{m_i}(\theta, \phi) \sigma(m_i), where :math:`R_{n^i_j}(r)` is a Slater-type function with quantum number :math:`n^i_j`, :math:`c^i_j` is the coefficient of the jth Slater-type function, :math:`\alpha_j^i` is the exponent of the jth Slater-type function, :math:`Y_{l_i}^{m_i}` is the spherical harmonic with complex form, angular momentum :math:`l_i` determined by the electron in the electron configuration and :math:`m_i` is the spin determined by applying Hund's rule to the electron configuration, and :math:`\sigma` is the spin-function determined from applying Hund's rule to the electron. .. rubric:: References .. [1] Koga, T. , Kanayama, K. , Watanabe, S. and Thakkar, A. J. (1999), Analytical Hartree–Fock wave functions subject to cusp and asymptotic constraints: He to Xe, Li+ to Cs+, H− Int. J. Quantum Chem., 71: 491-497. doi:10.1002/(SICI)1097-461X(1999)71:6<491::AID-QUA6>3.0.CO;2-T .. [2] Koga, T., Kanayama, K., Watanabe, T. et al. Analytical Hartree–Fock wave functions for the atoms Cs to Lr. Theor Chem Acc 104, 411–413 (2000). https://doi.org/10.1007/s002140000150 Construct SlaterAtoms object. :param element: Symbol of element. :type element: str :param anion: If true, then the anion of element is used. Some elements do not have anion information. :type anion: bool :param cation: If true, then the cation of element is used. Some elements do not have cation information. :type cation: bool .. !! processed by numpydoc !! .. py:method:: energy(self) :property: Energy of atom. .. !! processed by numpydoc !! .. py:method:: kinetic_energy(self) :property: Kinetic energy of atom. .. !! processed by numpydoc !! .. py:method:: potential_energy(self) :property: Potential energy of atom. .. !! processed by numpydoc !! .. py:method:: configuration(self) :property: Return string representing the electron configuration of the atom. The electron configuration of the atom is written in form that writes out the atomic subshells with the number of electrons assigned to that atomic subshell. For example, Beryllium returns "1S(2)2S(2)". .. !! processed by numpydoc !! .. py:method:: orbitals(self) :property: List of strings representing each of the atomic subshells in the electron configuration. For example, Beryllium returns ["1S", "2S"] in its electron configuration. Ordered based on "S", "P", "D", etc. .. !! processed by numpydoc !! .. py:method:: orbitals_occupation(self) :property: Array returning number of electrons in each of the orbitals in the electron configuration. For example, Beryllium returns ndarray([[2], [2]]). .. !! processed by numpydoc !! .. py:method:: orbitals_basis(self) :property: Return grouping of Slater-type functions to the azimuthal quantum number ("S", "P", ...). Dictionary mapping type of orbital (e.g. "S", "P") to the number and type of the :math:`N` Slater-type functions. For example, Helium would map "S" to ['2S', '1S', '1S', '1S', '2S']. This implies that all molecular orbitals corresponding to s-orbital will have it's radial component expanded in that Slater-type functions according to the label. .. !! processed by numpydoc !! .. py:method:: basis_numbers(self) :property: Return type of Slater-type orbital to the type, e.g. "S". Dictionary mapping type of orbital (e.g. "S", "P") to array containing :math:`n` of the :math:`N` Slater-type functions. These play the role of the principal quantum number to each Slater-type function. With the Helium example, "S" will map to [[2], [1], [1], [1], [2]]. .. !! processed by numpydoc !! .. py:method:: orbitals_exp(self) :property: Exponent of each Slater-type orbital grouped by type of orbital. Dictionary mapping type of orbitals (e.g. "S", "P") to the exponent :math:`\alpha_j^i` of each of the :math:`M_i` Slater-type function. .. !! processed by numpydoc !! .. py:method:: orbitals_coeff(self) :property: Coefficients of each Slater-type orbital grouped by type of orbital. Dictionary mapping the molecular orbital (e.g. "1S", "2S", ..) to the coefficients :math:`c^i_j` of expansion w.r.t. the :math:`M_i` Slater-type function. .. !! processed by numpydoc !! .. py:method:: orbitals_energy(self) :property: Energy of each of the :math:`N` Slater-type orbital. .. !! processed by numpydoc !! .. py:method:: orbitals_cusp(self) :property: Cusp values of each of the N Slater-type orbital. Same ordering as `orbitals`. Does not exist for Heavy atoms past Xenon. .. !! processed by numpydoc !! .. py:method:: radial_slater_orbital(exponent, number, points) :staticmethod: Compute the radial component of Slater-type orbitals on the given points. The radial component of the Slater-type orbital is defined as: .. math:: R(r) = N r^{n-1} e^{- \alpha r} where, :math:`n` is the principal quantum number of that orbital, :math:`N` is the normalizing constant, :math:`r` is the radial point, distance to the origin, and :math:`\alpha` is the zeta exponent of that orbital. :param exponent: The zeta exponents :math:`\zeta` of :math:`M` Slater orbitals. :type exponent: ndarray, (M, 1) :param number: The principal quantum numbers :math:`n` of :math:`M` Slater orbitals. :type number: ndarray, (M, 1) :param points: The radial :math:`r` grid points. :type points: ndarray, (N,) :returns: **slater** -- The :math:`M` Slater-type orbitals evaluated on :math:`N` grid points. :rtype: ndarray, (N, M) .. rubric:: Notes - The principal quantum number of all functions are stored in `basis_numbers`. - The alpha exponents of all functions are stored in the attribute `orbitals_exp`. .. !! processed by numpydoc !! .. py:method:: phi_matrix(self, points, deriv=False) Compute the linear combination of Slater-type functions on the given points. Each row corresponds to a point on the grid, represented as :math:`r` and each column is represented as a linear combination of Slater-type atomic orbitals of the form: .. math:: \sum_{i=1}^{M} c_i R(r, n_i, \alpha_i) where, :math:`c_i` is the coefficient of the Slater-type orbital, :math:`\alpha_i` is the zeta exponent attached to the Slater-type orbital, :math:`n_i` is the principal quantum number attached to the Slater-type orbital, :math:`R(r, n_i, C_i)` is the radial component of the Slater-type function, :math:`M` is the number of orbitals. :param points: The radial grid points. :type points: ndarray, (N,) :param deriv: If true, use the derivative of the slater-orbitals. :type deriv: bool :returns: **phi_matrix** -- The linear combination of Slater-type orbitals evaluated on the :math:`N` grid points, and :math:`M` is the number of atomic subshells (ignoring spin) within the electron configuration. The order is S orbitals, then P then D and spin is ignored. :rtype: ndarray(N, K) .. rubric:: Notes - At r = 0, the derivative of slater-orbital is undefined and this function returns zero instead. See "derivative_radial_slater_type_orbital". .. !! processed by numpydoc !! .. py:method:: atomic_density(self, points, mode='total') Compute atomic density on the given points. The total density is written as a linear combination of molecular orbitals squared whose coefficients is the orbital occupation number of the electron configuration: .. math:: \sum n_i |\phi_i(r)|^2 where, :math:`n_i` is the number of electrons in the ith molecular orbital, :math:`\phi_i(r)` is the ith molecular orbital, whose radial component is a linear combination of Slater-type functions evaluated on the point :math:`r` and whose angles within the spherical coordinates are integrated. For core and valence density, please see more Info below. :param points: The radial grid points. :type points: ndarray, (N,) :param mode: The type of atomic density, which can be "total", "valence" or "core". :type mode: str :returns: **dens** -- The atomic density on the grid points. :rtype: ndarray, (N,) .. rubric:: Notes The core density and valence density is respectively written as: .. math:: \begin{align*} \rho^{core}(r) &= \sum n_i (1 - e^{-|e_i - e_{homo}|^2}) |\phi_i(r)| \\ \rho^{valence}(r) &= \sum n_i e^{-|e_i - e_{homo}|^2} |\phi_i(r)| \end{align*} where, :math:`e_i` is the energy of the orbital i. :math:`e_{HOMO}` is the energy of the highest occupying orbital. .. !! processed by numpydoc !! .. py:method:: derivative_radial_slater_type_orbital(exponent, number, points) :staticmethod: Compute the derivative of the radial component of Slater-type function on the given points. The derivative of the Slater-type function is defined as: .. math:: \frac{d R(r)}{dr} = \bigg(\frac{n-1}{r} - \alpha \bigg) N r^{n-1} e^{- \alpha r}, where :math:`n` is the principal quantum number of that orbital, :math:`N` is the normalizing constant, :math:`r` is the radial point, distance to the origin, and :math:`\alpha` is the zeta exponent of that orbital. :param exponent: The zeta exponents of Slater orbitals. :type exponent: ndarray, (M, 1) :param number: The principle quantum numbers of Slater orbitals. :type number: ndarray, (M, 1) :param points: The radial grid points. If points contain zero, then it is undefined at those points and set to zero. :type points: ndarray, (N,) :returns: **slater** -- The Slater-type orbitals evaluated on the :math:`N` grid points. :rtype: ndarray, (N, M) .. rubric:: Notes - At r = 0, the derivative is undefined and this function returns zero instead. .. rubric:: References See wikipedia page on "Slater-Type orbitals". .. !! processed by numpydoc !! .. py:method:: positive_definite_kinetic_energy(self, points) Positive definite or Lagrangian kinetic energy density. :param points: The radial grid points. :type points: ndarray,(N,) :returns: **energy** -- The kinetic energy on the grid points. :rtype: ndarray, (N,) .. !! processed by numpydoc !! .. py:method:: derivative_density(self, points) Return the derivative of the atomic density on a set of points. :param points: The :math:`N` radial grid points. :type points: ndarray(N,) :returns: **deriv** -- The derivative of atomic density on the grid points. :rtype: ndarray(N,) .. !! processed by numpydoc !!