28
28
29
29
def Y1all (rvec , Z = 1.0 ):
30
30
rmag = np .sqrt (np .sum (rvec * rvec ,1 ))
31
- return np .sqrt (0.75 / np .pi ) * rvec / rmag
31
+ return np .sqrt (0.75 / np .pi ) * rvec / np .array ([rmag ,rmag ,rmag ]).T
32
+
33
+ def Y1x (rvec , Z = 1.0 ):
34
+ rmag = np .sqrt (np .sum (rvec * rvec ,1 ))
35
+ return np .sqrt (0.75 / np .pi ) * rvec [:,0 ] / rmag
36
+
37
+ def Y1y (rvec , Z = 1.0 ):
38
+ rmag = np .sqrt (np .sum (rvec * rvec ,1 ))
39
+ return np .sqrt (0.75 / np .pi ) * rvec [:,1 ] / rmag
40
+
41
+ def Y1z (rvec , Z = 1.0 ):
42
+ rmag = np .sqrt (np .sum (rvec * rvec ,1 ))
43
+ return np .sqrt (0.75 / np .pi ) * rvec [:,2 ] / rmag
32
44
33
45
# Radial functions
34
46
# Note: this function requires that position coordinates are along dimension 1 of the array (not 0)
@@ -80,13 +92,13 @@ def psi_2p_all(e_pos_vec, i_pos, Z=1.0):
80
92
return Y1all (e_pos_vec - i_pos ) * R21 (e_pos_vec - i_pos , Z )
81
93
82
94
def psi_2px (e_pos_vec , i_pos , Z = 1.0 ):
83
- return Y1all (e_pos_vec - i_pos )[0 ] * R21 (e_pos_vec - i_pos , Z )
95
+ return Y1x (e_pos_vec - i_pos )[0 ] * R21 (e_pos_vec - i_pos , Z )
84
96
85
97
def psi_2py (e_pos_vec , i_pos , Z = 1.0 ):
86
- return Y1all (e_pos_vec - i_pos )[1 ] * R21 (e_pos_vec - i_pos , Z )
98
+ return Y1y (e_pos_vec - i_pos )[1 ] * R21 (e_pos_vec - i_pos , Z )
87
99
88
100
def psi_2pz (e_pos_vec , i_pos , Z = 1.0 ):
89
- return Y1all (e_pos_vec - i_pos )[2 ] * R21 (e_pos_vec - i_pos , Z )
101
+ return Y1z (e_pos_vec - i_pos )[2 ] * R21 (e_pos_vec - i_pos , Z )
90
102
91
103
# Laplacian of S orbitals
92
104
def Lpsi_1s (e_pos_vec , i_pos ):
@@ -123,13 +135,16 @@ def psi_1s(self, e_pos_vec):
123
135
class Atom :
124
136
Z = 1.0
125
137
i_pos = np .zeros (3 )
126
-
138
+
139
+ last_e_vec = np .zeros (3 )
140
+ last_2p_vec = np .zeros (3 )
141
+
127
142
def __init__ (self , pos = np .array ([0 ,0 ,0 ]), Z = 1.0 ):
128
143
self .i_pos = pos
129
144
self .Z = float (Z )
130
145
131
- last_e_vec = np . zeros ( 3 )
132
- last_2p_vec = np . zeros ( 3 )
146
+
147
+
133
148
134
149
def setPosition (self , pos ):
135
150
self .i_pos = pos
@@ -144,26 +159,17 @@ def psi_2p_all(self, e_pos_vec):
144
159
return Y1all (e_pos_vec - self .i_pos ) * R21 (e_pos_vec - self .i_pos , self .Z )
145
160
146
161
def psi_2px (self , e_pos_vec ):
147
- if (last_e_vec == e_pos_vec ).all ():
148
- return last_2p_vec [0 ]
149
- else :
150
- last_e_vec = e_pos_vec .copy ()
151
- last_2p_vec = Y1all (e_pos_vec - self .i_pos )[ 0 ] * R21 (e_pos_vec - self .i_pos , self .Z )
152
- return last_2p_vec [ 0 ]
162
+ # if (self. last_e_vec == e_pos_vec).all():
163
+ # return self. last_2p_vec[0]
164
+ # else:
165
+ # self. last_e_vec = e_pos_vec.copy()
166
+ # self. last_2p_vec = Y1all(e_pos_vec - self.i_pos) * R21(e_pos_vec - self.i_pos, self.Z)
167
+ return Y1x ( e_pos_vec - self . i_pos ) * R21 ( e_pos_vec - self . i_pos , self . Z )
153
168
154
169
def psi_2py (self , e_pos_vec ):
155
- if (last_e_vec == e_pos_vec ).all ():
156
- return last_2p_vec [1 ]
157
- else :
158
- last_e_vec = e_pos_vec .copy ()
159
- last_2p_vec = Y1all (e_pos_vec - self .i_pos )[0 ] * R21 (e_pos_vec - self .i_pos , self .Z )
160
- return last_2p_vec [1 ]
170
+ return Y1y (e_pos_vec - self .i_pos ) * R21 (e_pos_vec - self .i_pos ,self .Z )
171
+
161
172
162
173
def psi_2pz (self , e_pos_vec ):
163
- if (last_e_vec == e_pos_vec ).all ():
164
- return last_2p_vec [2 ]
165
- else :
166
- last_e_vec = e_pos_vec .copy ()
167
- last_2p_vec = Y1all (e_pos_vec - self .i_pos )[0 ] * R21 (e_pos_vec - self .i_pos , self .Z )
168
- return last_2p_vec [2 ]
174
+ return Y1z (e_pos_vec - self .i_pos ) * R21 (e_pos_vec - self .i_pos ,self .Z )
169
175
0 commit comments