(git:374b731)
Loading...
Searching...
No Matches
orbital_symbols.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2024 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! **************************************************************************************************
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
32CONTAINS
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 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 symbol = ""
53
54 IF ((n > 0) .AND. (n < 100)) THEN
55 WRITE (symbol(1:2), "(I2)") n
56 ELSE
57 cpabort("Invalid principal quantum number specified")
58 END IF
59
60 l = sum(lxyz(1:3))
61
62 IF ((l >= 0) .AND. (l <= 11)) THEN
63 symbol(3:3) = l_sym(l)
64 ELSE
65 cpabort("Invalid angular momentum quantum number specified")
66 END IF
67
68 ipos = 4
69
70 DO i = 1, 3
71 IF (lxyz(i) > 0) THEN
72 symbol(ipos:ipos) = xyz(i)
73 ipos = ipos + 1
74 IF (lxyz(i) > 1) THEN
75 IF (lxyz(i) < 10) THEN
76 WRITE (symbol(ipos:ipos), "(I1)") lxyz(i)
77 ipos = ipos + 1
78 ELSE IF (lxyz(i) < 100) THEN
79 WRITE (symbol(ipos:ipos + 1), "(I2)") lxyz(i)
80 ipos = ipos + 2
81 ELSE
82 cpabort("Invalid magnetic quantum number specified")
83 END IF
84 END IF
85 END IF
86 END DO
87
88 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 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 symbol = ""
115
116 IF (n == 0) THEN
117 i = 1
118 ELSE IF ((n > 0) .AND. (n < 100)) THEN
119 WRITE (symbol(1:2), "(I2)") n
120 i = 3
121 ELSE
122 cpabort("Invalid principal quantum number specified")
123 END IF
124
125 IF ((l >= 0) .AND. (l <= 11)) THEN
126 symbol(i:i) = l_sym(l)
127 i = i + 1
128 ELSE
129 cpabort("Invalid angular momentum quantum number specified")
130 END IF
131
132 IF (abs(m) <= l) THEN
133 IF (l == 1) THEN
134 symbol(i:i) = yzx(m)
135 ELSE IF (l > 1) THEN
136 IF (m == 0) THEN
137 WRITE (symbol(i:i), "(I1)") m
138 ELSE IF (abs(m) < 10) THEN
139 WRITE (symbol(i:i + 1), "(SP,I2)") m
140 ELSE IF (abs(m) < 100) THEN
141 WRITE (symbol(i:i + 2), "(SP,I3)") m
142 END IF
143 END IF
144 ELSE
145 cpabort("Invalid magnetic quantum number specified")
146 END IF
147
148 END FUNCTION sgf_symbol
149
150END MODULE orbital_symbols
orbital_symbols
character(len=12) function, public cgf_symbol(n, lxyz)
Build a Cartesian orbital symbol (orbital labels for printing).
character(len=6) function, public sgf_symbol(n, l, m)
Build a spherical orbital symbol (orbital labels for printing).
character(len=1), dimension(0:11), parameter, public l_sym