LCOV - code coverage report
Current view: top level - src/aobasis - orbital_symbols.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:ca6acae) Lines: 75.6 % 45 34
Test Date: 2026-01-02 06:29:53 Functions: 100.0 % 2 2

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief orbital_symbols
      10              : !> \par History
      11              : !>      none
      12              : !> \author Matthias Krack (08.06.2000)
      13              : ! **************************************************************************************************
      14              : MODULE orbital_symbols
      15              : 
      16              : ! Index:
      17              : ! FUNCTION cgf_symbol(n,lxyz) RESULT(symbol)
      18              : ! FUNCTION sgf_symbol(n,l,m) RESULT(symbol)
      19              : #include "../base/base_uses.f90"
      20              :    IMPLICIT NONE
      21              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'orbital_symbols'
      22              :    PRIVATE
      23              : 
      24              :    CHARACTER(LEN=1), PARAMETER, DIMENSION(0:11) :: l_sym = ["s", "p", "d", &
      25              :                                                             "f", "g", "h", &
      26              :                                                             "i", "j", "k", &
      27              :                                                             "l", "m", "n"]
      28              : 
      29              :    PUBLIC :: cgf_symbol, sgf_symbol
      30              :    PUBLIC :: l_sym
      31              : 
      32              : CONTAINS
      33              : 
      34              : ! **************************************************************************************************
      35              : !> \brief   Build a Cartesian orbital symbol (orbital labels for printing).
      36              : !> \param n ...
      37              : !> \param lxyz ...
      38              : !> \return ...
      39              : !> \date    07.07.99
      40              : !> \author  Matthias Krack
      41              : !> \version 1.0
      42              : ! **************************************************************************************************
      43       472787 :    FUNCTION cgf_symbol(n, lxyz) RESULT(symbol)
      44              :       INTEGER, INTENT(IN)                                :: n
      45              :       INTEGER, DIMENSION(3), INTENT(IN)                  :: lxyz
      46              :       CHARACTER(LEN=12)                                  :: symbol
      47              : 
      48              :       CHARACTER(LEN=1), DIMENSION(3), PARAMETER          :: xyz = ["x", "y", "z"]
      49              : 
      50              :       INTEGER                                            :: i, ipos, l
      51              : 
      52       472787 :       symbol = ""
      53              : 
      54       472787 :       IF ((n > 0) .AND. (n < 100)) THEN
      55       472787 :          WRITE (symbol(1:2), "(I2)") n
      56              :       ELSE
      57            0 :          CPABORT("Invalid principal quantum number specified")
      58              :       END IF
      59              : 
      60      1891148 :       l = SUM(lxyz(1:3))
      61              : 
      62       472787 :       IF ((l >= 0) .AND. (l <= 11)) THEN
      63       472787 :          symbol(3:3) = l_sym(l)
      64              :       ELSE
      65            0 :          CPABORT("Invalid angular momentum quantum number specified")
      66              :       END IF
      67              : 
      68              :       ipos = 4
      69              : 
      70      1891148 :       DO i = 1, 3
      71      1891148 :          IF (lxyz(i) > 0) THEN
      72       291522 :             symbol(ipos:ipos) = xyz(i)
      73       291522 :             ipos = ipos + 1
      74       291522 :             IF (lxyz(i) > 1) THEN
      75        63405 :                IF (lxyz(i) < 10) THEN
      76        63405 :                   WRITE (symbol(ipos:ipos), "(I1)") lxyz(i)
      77        63405 :                   ipos = ipos + 1
      78            0 :                ELSE IF (lxyz(i) < 100) THEN
      79            0 :                   WRITE (symbol(ipos:ipos + 1), "(I2)") lxyz(i)
      80            0 :                   ipos = ipos + 2
      81              :                ELSE
      82            0 :                   CPABORT("Invalid magnetic quantum number specified")
      83              :                END IF
      84              :             END IF
      85              :          END IF
      86              :       END DO
      87              : 
      88       472787 :    END FUNCTION cgf_symbol
      89              : 
      90              : ! **************************************************************************************************
      91              : !> \brief   Build a spherical orbital symbol (orbital labels for printing).
      92              : !> \param n ...
      93              : !> \param l ...
      94              : !> \param m ...
      95              : !> \return ...
      96              : !> \date    11.03.99
      97              : !> \par Variables
      98              : !>       - l: Angular momentum quantum number l of the orbital.
      99              : !>       - m: Magnetic quantum number m of the orbital.
     100              : !>       - n: Principle quantum number n of the orbital.
     101              : !> \par History
     102              : !>  - Ignore n value for n = 0 (16.02.2009,MK)
     103              : !> \author  Matthias Krack
     104              : !> \version 1.0
     105              : ! **************************************************************************************************
     106       198470 :    FUNCTION sgf_symbol(n, l, m) RESULT(symbol)
     107              :       INTEGER, INTENT(IN)                                :: n, l, m
     108              :       CHARACTER(LEN=6)                                   :: symbol
     109              : 
     110              :       CHARACTER(LEN=1), DIMENSION(-1:1), PARAMETER       :: yzx = ["y", "z", "x"]
     111              : 
     112              :       INTEGER                                            :: i
     113              : 
     114       198470 :       symbol = ""
     115              : 
     116       198470 :       IF (n == 0) THEN
     117              :          i = 1
     118       198327 :       ELSE IF ((n > 0) .AND. (n < 100)) THEN
     119       198327 :          WRITE (symbol(1:2), "(I2)") n
     120       198327 :          i = 3
     121              :       ELSE
     122            0 :          CPABORT("Invalid principal quantum number specified")
     123              :       END IF
     124              : 
     125       198470 :       IF ((l >= 0) .AND. (l <= 11)) THEN
     126       198470 :          symbol(i:i) = l_sym(l)
     127       198470 :          i = i + 1
     128              :       ELSE
     129            0 :          CPABORT("Invalid angular momentum quantum number specified")
     130              :       END IF
     131              : 
     132       198470 :       IF (ABS(m) <= l) THEN
     133       198470 :          IF (l == 1) THEN
     134        80913 :             symbol(i:i) = yzx(m)
     135       117557 :          ELSE IF (l > 1) THEN
     136        78083 :             IF (m == 0) THEN
     137        14435 :                WRITE (symbol(i:i), "(I1)") m
     138        63648 :             ELSE IF (ABS(m) < 10) THEN
     139        63648 :                WRITE (symbol(i:i + 1), "(SP,I2)") m
     140            0 :             ELSE IF (ABS(m) < 100) THEN
     141            0 :                WRITE (symbol(i:i + 2), "(SP,I3)") m
     142              :             END IF
     143              :          END IF
     144              :       ELSE
     145            0 :          CPABORT("Invalid magnetic quantum number specified")
     146              :       END IF
     147              : 
     148       198470 :    END FUNCTION sgf_symbol
     149              : 
     150              : END MODULE orbital_symbols
        

Generated by: LCOV version 2.0-1