occpy 0.7.5__cp310-cp310-macosx_10_15_universal2.whl → 0.7.7__cp310-cp310-macosx_10_15_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bin/occ +0 -0
- include/occ/dma/add_qlm.h +12 -0
- include/occ/dma/binomial.h +51 -0
- include/occ/dma/dma.h +57 -0
- include/occ/dma/gauss_hermite.h +9 -0
- include/occ/dma/linear_multipole_calculator.h +158 -0
- include/occ/dma/linear_multipole_shifter.h +146 -0
- include/occ/dma/mult.h +297 -0
- include/occ/dma/multipole_calculator.h +94 -0
- include/occ/dma/multipole_shifter.h +46 -0
- include/occ/dma/solid_harmonics.h +8 -0
- occpy/_occpy.cpython-310-darwin.so +0 -0
- {occpy-0.7.5.dist-info → occpy-0.7.7.dist-info}/METADATA +4 -4
- {occpy-0.7.5.dist-info → occpy-0.7.7.dist-info}/RECORD +22 -8
- {occpy-0.7.5.dist-info → occpy-0.7.7.dist-info}/WHEEL +1 -1
- share/occ/basis/ano-dk3.json +37390 -0
- share/occ/basis/def2-tzvp-rifit.json +35125 -0
- share/occ/basis/sap_grasp_large.json +7349 -0
- share/occ/basis/sap_grasp_small.json +5341 -0
- {occpy-0.7.5.dist-info → occpy-0.7.7.dist-info}/entry_points.txt +0 -0
- {occpy-0.7.5.dist-info → occpy-0.7.7.dist-info}/licenses/LICENSE.txt +0 -0
- /share/occ/basis/{thakkar.json → thakkar_original.json} +0 -0
include/occ/dma/mult.h
ADDED
@@ -0,0 +1,297 @@
|
|
1
|
+
#pragma once
|
2
|
+
#include <occ/core/linear_algebra.h>
|
3
|
+
#include <occ/core/macros.h>
|
4
|
+
#include <string>
|
5
|
+
|
6
|
+
namespace occ::dma {
|
7
|
+
|
8
|
+
struct Mult {
|
9
|
+
Mult(int n);
|
10
|
+
Mult();
|
11
|
+
int max_rank{0};
|
12
|
+
Vec q;
|
13
|
+
|
14
|
+
inline int num_components() const { return (max_rank + 1) * (max_rank + 1); }
|
15
|
+
|
16
|
+
std::string to_string(int lm) const;
|
17
|
+
|
18
|
+
// Level 0
|
19
|
+
OCC_ALWAYS_INLINE double &Q00() { return q(0); }
|
20
|
+
OCC_ALWAYS_INLINE double &charge() { return q(0); }
|
21
|
+
|
22
|
+
// Level 1
|
23
|
+
OCC_ALWAYS_INLINE double &Q10() { return q(1); }
|
24
|
+
OCC_ALWAYS_INLINE double &Q11c() { return q(2); }
|
25
|
+
OCC_ALWAYS_INLINE double &Q11s() { return q(3); }
|
26
|
+
|
27
|
+
// Level 2
|
28
|
+
OCC_ALWAYS_INLINE double &Q20() { return q(4); }
|
29
|
+
OCC_ALWAYS_INLINE double &Q21c() { return q(5); }
|
30
|
+
OCC_ALWAYS_INLINE double &Q21s() { return q(6); }
|
31
|
+
OCC_ALWAYS_INLINE double &Q22c() { return q(7); }
|
32
|
+
OCC_ALWAYS_INLINE double &Q22s() { return q(8); }
|
33
|
+
|
34
|
+
// Level 3
|
35
|
+
OCC_ALWAYS_INLINE double &Q30() { return q(9); }
|
36
|
+
OCC_ALWAYS_INLINE double &Q31c() { return q(10); }
|
37
|
+
OCC_ALWAYS_INLINE double &Q31s() { return q(11); }
|
38
|
+
OCC_ALWAYS_INLINE double &Q32c() { return q(12); }
|
39
|
+
OCC_ALWAYS_INLINE double &Q32s() { return q(13); }
|
40
|
+
OCC_ALWAYS_INLINE double &Q33c() { return q(14); }
|
41
|
+
OCC_ALWAYS_INLINE double &Q33s() { return q(15); }
|
42
|
+
|
43
|
+
// Level 4
|
44
|
+
OCC_ALWAYS_INLINE double &Q40() { return q(16); }
|
45
|
+
OCC_ALWAYS_INLINE double &Q41c() { return q(17); }
|
46
|
+
OCC_ALWAYS_INLINE double &Q41s() { return q(18); }
|
47
|
+
OCC_ALWAYS_INLINE double &Q42c() { return q(19); }
|
48
|
+
OCC_ALWAYS_INLINE double &Q42s() { return q(20); }
|
49
|
+
OCC_ALWAYS_INLINE double &Q43c() { return q(21); }
|
50
|
+
OCC_ALWAYS_INLINE double &Q43s() { return q(22); }
|
51
|
+
OCC_ALWAYS_INLINE double &Q44c() { return q(23); }
|
52
|
+
OCC_ALWAYS_INLINE double &Q44s() { return q(24); }
|
53
|
+
|
54
|
+
// Level 5
|
55
|
+
OCC_ALWAYS_INLINE double &Q50() { return q(25); }
|
56
|
+
OCC_ALWAYS_INLINE double &Q51c() { return q(26); }
|
57
|
+
OCC_ALWAYS_INLINE double &Q51s() { return q(27); }
|
58
|
+
OCC_ALWAYS_INLINE double &Q52c() { return q(28); }
|
59
|
+
OCC_ALWAYS_INLINE double &Q52s() { return q(29); }
|
60
|
+
OCC_ALWAYS_INLINE double &Q53c() { return q(30); }
|
61
|
+
OCC_ALWAYS_INLINE double &Q53s() { return q(31); }
|
62
|
+
OCC_ALWAYS_INLINE double &Q54c() { return q(32); }
|
63
|
+
OCC_ALWAYS_INLINE double &Q54s() { return q(33); }
|
64
|
+
OCC_ALWAYS_INLINE double &Q55c() { return q(34); }
|
65
|
+
OCC_ALWAYS_INLINE double &Q55s() { return q(35); }
|
66
|
+
|
67
|
+
// Level 6
|
68
|
+
OCC_ALWAYS_INLINE double &Q60() { return q(36); }
|
69
|
+
OCC_ALWAYS_INLINE double &Q61c() { return q(37); }
|
70
|
+
OCC_ALWAYS_INLINE double &Q61s() { return q(38); }
|
71
|
+
OCC_ALWAYS_INLINE double &Q62c() { return q(39); }
|
72
|
+
OCC_ALWAYS_INLINE double &Q62s() { return q(40); }
|
73
|
+
OCC_ALWAYS_INLINE double &Q63c() { return q(41); }
|
74
|
+
OCC_ALWAYS_INLINE double &Q63s() { return q(42); }
|
75
|
+
OCC_ALWAYS_INLINE double &Q64c() { return q(43); }
|
76
|
+
OCC_ALWAYS_INLINE double &Q64s() { return q(44); }
|
77
|
+
OCC_ALWAYS_INLINE double &Q65c() { return q(45); }
|
78
|
+
OCC_ALWAYS_INLINE double &Q65s() { return q(46); }
|
79
|
+
OCC_ALWAYS_INLINE double &Q66c() { return q(47); }
|
80
|
+
OCC_ALWAYS_INLINE double &Q66s() { return q(48); }
|
81
|
+
|
82
|
+
// Level 7
|
83
|
+
OCC_ALWAYS_INLINE double &Q70() { return q(49); }
|
84
|
+
OCC_ALWAYS_INLINE double &Q71c() { return q(50); }
|
85
|
+
OCC_ALWAYS_INLINE double &Q71s() { return q(51); }
|
86
|
+
OCC_ALWAYS_INLINE double &Q72c() { return q(52); }
|
87
|
+
OCC_ALWAYS_INLINE double &Q72s() { return q(53); }
|
88
|
+
OCC_ALWAYS_INLINE double &Q73c() { return q(54); }
|
89
|
+
OCC_ALWAYS_INLINE double &Q73s() { return q(55); }
|
90
|
+
OCC_ALWAYS_INLINE double &Q74c() { return q(56); }
|
91
|
+
OCC_ALWAYS_INLINE double &Q74s() { return q(57); }
|
92
|
+
OCC_ALWAYS_INLINE double &Q75c() { return q(58); }
|
93
|
+
OCC_ALWAYS_INLINE double &Q75s() { return q(59); }
|
94
|
+
OCC_ALWAYS_INLINE double &Q76c() { return q(60); }
|
95
|
+
OCC_ALWAYS_INLINE double &Q76s() { return q(61); }
|
96
|
+
OCC_ALWAYS_INLINE double &Q77c() { return q(62); }
|
97
|
+
OCC_ALWAYS_INLINE double &Q77s() { return q(63); }
|
98
|
+
|
99
|
+
// Level 8
|
100
|
+
OCC_ALWAYS_INLINE double &Q80() { return q(64); }
|
101
|
+
OCC_ALWAYS_INLINE double &Q81c() { return q(65); }
|
102
|
+
OCC_ALWAYS_INLINE double &Q81s() { return q(66); }
|
103
|
+
OCC_ALWAYS_INLINE double &Q82c() { return q(67); }
|
104
|
+
OCC_ALWAYS_INLINE double &Q82s() { return q(68); }
|
105
|
+
OCC_ALWAYS_INLINE double &Q83c() { return q(69); }
|
106
|
+
OCC_ALWAYS_INLINE double &Q83s() { return q(70); }
|
107
|
+
OCC_ALWAYS_INLINE double &Q84c() { return q(71); }
|
108
|
+
OCC_ALWAYS_INLINE double &Q84s() { return q(72); }
|
109
|
+
OCC_ALWAYS_INLINE double &Q85c() { return q(73); }
|
110
|
+
OCC_ALWAYS_INLINE double &Q85s() { return q(74); }
|
111
|
+
OCC_ALWAYS_INLINE double &Q86c() { return q(75); }
|
112
|
+
OCC_ALWAYS_INLINE double &Q86s() { return q(76); }
|
113
|
+
OCC_ALWAYS_INLINE double &Q87c() { return q(77); }
|
114
|
+
OCC_ALWAYS_INLINE double &Q87s() { return q(78); }
|
115
|
+
OCC_ALWAYS_INLINE double &Q88c() { return q(79); }
|
116
|
+
OCC_ALWAYS_INLINE double &Q88s() { return q(80); }
|
117
|
+
|
118
|
+
// Level 9
|
119
|
+
OCC_ALWAYS_INLINE double &Q90() { return q(81); }
|
120
|
+
OCC_ALWAYS_INLINE double &Q91c() { return q(82); }
|
121
|
+
OCC_ALWAYS_INLINE double &Q91s() { return q(83); }
|
122
|
+
OCC_ALWAYS_INLINE double &Q92c() { return q(84); }
|
123
|
+
OCC_ALWAYS_INLINE double &Q92s() { return q(85); }
|
124
|
+
OCC_ALWAYS_INLINE double &Q93c() { return q(86); }
|
125
|
+
OCC_ALWAYS_INLINE double &Q93s() { return q(87); }
|
126
|
+
OCC_ALWAYS_INLINE double &Q94c() { return q(88); }
|
127
|
+
OCC_ALWAYS_INLINE double &Q94s() { return q(89); }
|
128
|
+
OCC_ALWAYS_INLINE double &Q95c() { return q(90); }
|
129
|
+
OCC_ALWAYS_INLINE double &Q95s() { return q(91); }
|
130
|
+
OCC_ALWAYS_INLINE double &Q96c() { return q(92); }
|
131
|
+
OCC_ALWAYS_INLINE double &Q96s() { return q(93); }
|
132
|
+
OCC_ALWAYS_INLINE double &Q97c() { return q(94); }
|
133
|
+
OCC_ALWAYS_INLINE double &Q97s() { return q(95); }
|
134
|
+
OCC_ALWAYS_INLINE double &Q98c() { return q(96); }
|
135
|
+
OCC_ALWAYS_INLINE double &Q98s() { return q(97); }
|
136
|
+
OCC_ALWAYS_INLINE double &Q99c() { return q(98); }
|
137
|
+
OCC_ALWAYS_INLINE double &Q99s() { return q(99); }
|
138
|
+
|
139
|
+
// Level 10 (A = 10)
|
140
|
+
OCC_ALWAYS_INLINE double &QA0() { return q(100); }
|
141
|
+
OCC_ALWAYS_INLINE double &QA1c() { return q(101); }
|
142
|
+
OCC_ALWAYS_INLINE double &QA1s() { return q(102); }
|
143
|
+
OCC_ALWAYS_INLINE double &QA2c() { return q(103); }
|
144
|
+
OCC_ALWAYS_INLINE double &QA2s() { return q(104); }
|
145
|
+
OCC_ALWAYS_INLINE double &QA3c() { return q(105); }
|
146
|
+
OCC_ALWAYS_INLINE double &QA3s() { return q(106); }
|
147
|
+
OCC_ALWAYS_INLINE double &QA4c() { return q(107); }
|
148
|
+
OCC_ALWAYS_INLINE double &QA4s() { return q(108); }
|
149
|
+
OCC_ALWAYS_INLINE double &QA5c() { return q(109); }
|
150
|
+
OCC_ALWAYS_INLINE double &QA5s() { return q(110); }
|
151
|
+
OCC_ALWAYS_INLINE double &QA6c() { return q(111); }
|
152
|
+
OCC_ALWAYS_INLINE double &QA6s() { return q(112); }
|
153
|
+
OCC_ALWAYS_INLINE double &QA7c() { return q(113); }
|
154
|
+
OCC_ALWAYS_INLINE double &QA7s() { return q(114); }
|
155
|
+
OCC_ALWAYS_INLINE double &QA8c() { return q(115); }
|
156
|
+
OCC_ALWAYS_INLINE double &QA8s() { return q(116); }
|
157
|
+
OCC_ALWAYS_INLINE double &QA9c() { return q(117); }
|
158
|
+
OCC_ALWAYS_INLINE double &QA9s() { return q(118); }
|
159
|
+
OCC_ALWAYS_INLINE double &QAAc() { return q(119); }
|
160
|
+
OCC_ALWAYS_INLINE double &QAAs() { return q(120); }
|
161
|
+
|
162
|
+
// OCC_ALWAYS_INLINE const versions of all accessors
|
163
|
+
OCC_ALWAYS_INLINE const double &Q00() const { return q(0); }
|
164
|
+
OCC_ALWAYS_INLINE const double &charge() const { return q(0); }
|
165
|
+
|
166
|
+
OCC_ALWAYS_INLINE const double &Q10() const { return q(1); }
|
167
|
+
OCC_ALWAYS_INLINE const double &Q11c() const { return q(2); }
|
168
|
+
OCC_ALWAYS_INLINE const double &Q11s() const { return q(3); }
|
169
|
+
|
170
|
+
OCC_ALWAYS_INLINE const double &Q20() const { return q(4); }
|
171
|
+
OCC_ALWAYS_INLINE const double &Q21c() const { return q(5); }
|
172
|
+
OCC_ALWAYS_INLINE const double &Q21s() const { return q(6); }
|
173
|
+
OCC_ALWAYS_INLINE const double &Q22c() const { return q(7); }
|
174
|
+
OCC_ALWAYS_INLINE const double &Q22s() const { return q(8); }
|
175
|
+
|
176
|
+
OCC_ALWAYS_INLINE const double &Q30() const { return q(9); }
|
177
|
+
OCC_ALWAYS_INLINE const double &Q31c() const { return q(10); }
|
178
|
+
OCC_ALWAYS_INLINE const double &Q31s() const { return q(11); }
|
179
|
+
OCC_ALWAYS_INLINE const double &Q32c() const { return q(12); }
|
180
|
+
OCC_ALWAYS_INLINE const double &Q32s() const { return q(13); }
|
181
|
+
OCC_ALWAYS_INLINE const double &Q33c() const { return q(14); }
|
182
|
+
OCC_ALWAYS_INLINE const double &Q33s() const { return q(15); }
|
183
|
+
|
184
|
+
OCC_ALWAYS_INLINE const double &Q40() const { return q(16); }
|
185
|
+
OCC_ALWAYS_INLINE const double &Q41c() const { return q(17); }
|
186
|
+
OCC_ALWAYS_INLINE const double &Q41s() const { return q(18); }
|
187
|
+
OCC_ALWAYS_INLINE const double &Q42c() const { return q(19); }
|
188
|
+
OCC_ALWAYS_INLINE const double &Q42s() const { return q(20); }
|
189
|
+
OCC_ALWAYS_INLINE const double &Q43c() const { return q(21); }
|
190
|
+
OCC_ALWAYS_INLINE const double &Q43s() const { return q(22); }
|
191
|
+
OCC_ALWAYS_INLINE const double &Q44c() const { return q(23); }
|
192
|
+
OCC_ALWAYS_INLINE const double &Q44s() const { return q(24); }
|
193
|
+
|
194
|
+
OCC_ALWAYS_INLINE const double &Q50() const { return q(25); }
|
195
|
+
OCC_ALWAYS_INLINE const double &Q51c() const { return q(26); }
|
196
|
+
OCC_ALWAYS_INLINE const double &Q51s() const { return q(27); }
|
197
|
+
OCC_ALWAYS_INLINE const double &Q52c() const { return q(28); }
|
198
|
+
OCC_ALWAYS_INLINE const double &Q52s() const { return q(29); }
|
199
|
+
OCC_ALWAYS_INLINE const double &Q53c() const { return q(30); }
|
200
|
+
OCC_ALWAYS_INLINE const double &Q53s() const { return q(31); }
|
201
|
+
OCC_ALWAYS_INLINE const double &Q54c() const { return q(32); }
|
202
|
+
OCC_ALWAYS_INLINE const double &Q54s() const { return q(33); }
|
203
|
+
OCC_ALWAYS_INLINE const double &Q55c() const { return q(34); }
|
204
|
+
OCC_ALWAYS_INLINE const double &Q55s() const { return q(35); }
|
205
|
+
|
206
|
+
OCC_ALWAYS_INLINE const double &Q60() const { return q(36); }
|
207
|
+
OCC_ALWAYS_INLINE const double &Q61c() const { return q(37); }
|
208
|
+
OCC_ALWAYS_INLINE const double &Q61s() const { return q(38); }
|
209
|
+
OCC_ALWAYS_INLINE const double &Q62c() const { return q(39); }
|
210
|
+
OCC_ALWAYS_INLINE const double &Q62s() const { return q(40); }
|
211
|
+
OCC_ALWAYS_INLINE const double &Q63c() const { return q(41); }
|
212
|
+
OCC_ALWAYS_INLINE const double &Q63s() const { return q(42); }
|
213
|
+
OCC_ALWAYS_INLINE const double &Q64c() const { return q(43); }
|
214
|
+
OCC_ALWAYS_INLINE const double &Q64s() const { return q(44); }
|
215
|
+
OCC_ALWAYS_INLINE const double &Q65c() const { return q(45); }
|
216
|
+
OCC_ALWAYS_INLINE const double &Q65s() const { return q(46); }
|
217
|
+
OCC_ALWAYS_INLINE const double &Q66c() const { return q(47); }
|
218
|
+
OCC_ALWAYS_INLINE const double &Q66s() const { return q(48); }
|
219
|
+
|
220
|
+
OCC_ALWAYS_INLINE const double &Q70() const { return q(49); }
|
221
|
+
OCC_ALWAYS_INLINE const double &Q71c() const { return q(50); }
|
222
|
+
OCC_ALWAYS_INLINE const double &Q71s() const { return q(51); }
|
223
|
+
OCC_ALWAYS_INLINE const double &Q72c() const { return q(52); }
|
224
|
+
OCC_ALWAYS_INLINE const double &Q72s() const { return q(53); }
|
225
|
+
OCC_ALWAYS_INLINE const double &Q73c() const { return q(54); }
|
226
|
+
OCC_ALWAYS_INLINE const double &Q73s() const { return q(55); }
|
227
|
+
OCC_ALWAYS_INLINE const double &Q74c() const { return q(56); }
|
228
|
+
OCC_ALWAYS_INLINE const double &Q74s() const { return q(57); }
|
229
|
+
OCC_ALWAYS_INLINE const double &Q75c() const { return q(58); }
|
230
|
+
OCC_ALWAYS_INLINE const double &Q75s() const { return q(59); }
|
231
|
+
OCC_ALWAYS_INLINE const double &Q76c() const { return q(60); }
|
232
|
+
OCC_ALWAYS_INLINE const double &Q76s() const { return q(61); }
|
233
|
+
OCC_ALWAYS_INLINE const double &Q77c() const { return q(62); }
|
234
|
+
OCC_ALWAYS_INLINE const double &Q77s() const { return q(63); }
|
235
|
+
|
236
|
+
OCC_ALWAYS_INLINE const double &Q80() const { return q(64); }
|
237
|
+
OCC_ALWAYS_INLINE const double &Q81c() const { return q(65); }
|
238
|
+
OCC_ALWAYS_INLINE const double &Q81s() const { return q(66); }
|
239
|
+
OCC_ALWAYS_INLINE const double &Q82c() const { return q(67); }
|
240
|
+
OCC_ALWAYS_INLINE const double &Q82s() const { return q(68); }
|
241
|
+
OCC_ALWAYS_INLINE const double &Q83c() const { return q(69); }
|
242
|
+
OCC_ALWAYS_INLINE const double &Q83s() const { return q(70); }
|
243
|
+
OCC_ALWAYS_INLINE const double &Q84c() const { return q(71); }
|
244
|
+
OCC_ALWAYS_INLINE const double &Q84s() const { return q(72); }
|
245
|
+
OCC_ALWAYS_INLINE const double &Q85c() const { return q(73); }
|
246
|
+
OCC_ALWAYS_INLINE const double &Q85s() const { return q(74); }
|
247
|
+
OCC_ALWAYS_INLINE const double &Q86c() const { return q(75); }
|
248
|
+
OCC_ALWAYS_INLINE const double &Q86s() const { return q(76); }
|
249
|
+
OCC_ALWAYS_INLINE const double &Q87c() const { return q(77); }
|
250
|
+
OCC_ALWAYS_INLINE const double &Q87s() const { return q(78); }
|
251
|
+
OCC_ALWAYS_INLINE const double &Q88c() const { return q(79); }
|
252
|
+
OCC_ALWAYS_INLINE const double &Q88s() const { return q(80); }
|
253
|
+
|
254
|
+
OCC_ALWAYS_INLINE const double &Q90() const { return q(81); }
|
255
|
+
OCC_ALWAYS_INLINE const double &Q91c() const { return q(82); }
|
256
|
+
OCC_ALWAYS_INLINE const double &Q91s() const { return q(83); }
|
257
|
+
OCC_ALWAYS_INLINE const double &Q92c() const { return q(84); }
|
258
|
+
OCC_ALWAYS_INLINE const double &Q92s() const { return q(85); }
|
259
|
+
OCC_ALWAYS_INLINE const double &Q93c() const { return q(86); }
|
260
|
+
OCC_ALWAYS_INLINE const double &Q93s() const { return q(87); }
|
261
|
+
OCC_ALWAYS_INLINE const double &Q94c() const { return q(88); }
|
262
|
+
OCC_ALWAYS_INLINE const double &Q94s() const { return q(89); }
|
263
|
+
OCC_ALWAYS_INLINE const double &Q95c() const { return q(90); }
|
264
|
+
OCC_ALWAYS_INLINE const double &Q95s() const { return q(91); }
|
265
|
+
OCC_ALWAYS_INLINE const double &Q96c() const { return q(92); }
|
266
|
+
OCC_ALWAYS_INLINE const double &Q96s() const { return q(93); }
|
267
|
+
OCC_ALWAYS_INLINE const double &Q97c() const { return q(94); }
|
268
|
+
OCC_ALWAYS_INLINE const double &Q97s() const { return q(95); }
|
269
|
+
OCC_ALWAYS_INLINE const double &Q98c() const { return q(96); }
|
270
|
+
OCC_ALWAYS_INLINE const double &Q98s() const { return q(97); }
|
271
|
+
OCC_ALWAYS_INLINE const double &Q99c() const { return q(98); }
|
272
|
+
OCC_ALWAYS_INLINE const double &Q99s() const { return q(99); }
|
273
|
+
|
274
|
+
OCC_ALWAYS_INLINE const double &QA0() const { return q(100); }
|
275
|
+
OCC_ALWAYS_INLINE const double &QA1c() const { return q(101); }
|
276
|
+
OCC_ALWAYS_INLINE const double &QA1s() const { return q(102); }
|
277
|
+
OCC_ALWAYS_INLINE const double &QA2c() const { return q(103); }
|
278
|
+
OCC_ALWAYS_INLINE const double &QA2s() const { return q(104); }
|
279
|
+
OCC_ALWAYS_INLINE const double &QA3c() const { return q(105); }
|
280
|
+
OCC_ALWAYS_INLINE const double &QA3s() const { return q(106); }
|
281
|
+
OCC_ALWAYS_INLINE const double &QA4c() const { return q(107); }
|
282
|
+
OCC_ALWAYS_INLINE const double &QA4s() const { return q(108); }
|
283
|
+
OCC_ALWAYS_INLINE const double &QA5c() const { return q(109); }
|
284
|
+
OCC_ALWAYS_INLINE const double &QA5s() const { return q(110); }
|
285
|
+
OCC_ALWAYS_INLINE const double &QA6c() const { return q(111); }
|
286
|
+
OCC_ALWAYS_INLINE const double &QA6s() const { return q(112); }
|
287
|
+
OCC_ALWAYS_INLINE const double &QA7c() const { return q(113); }
|
288
|
+
OCC_ALWAYS_INLINE const double &QA7s() const { return q(114); }
|
289
|
+
OCC_ALWAYS_INLINE const double &QA8c() const { return q(115); }
|
290
|
+
OCC_ALWAYS_INLINE const double &QA8s() const { return q(116); }
|
291
|
+
OCC_ALWAYS_INLINE const double &QA9c() const { return q(117); }
|
292
|
+
OCC_ALWAYS_INLINE const double &QA9s() const { return q(118); }
|
293
|
+
OCC_ALWAYS_INLINE const double &QAAc() const { return q(119); }
|
294
|
+
OCC_ALWAYS_INLINE const double &QAAs() const { return q(120); }
|
295
|
+
};
|
296
|
+
|
297
|
+
} // namespace occ::dma
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#pragma once
|
2
|
+
#include <occ/core/linear_algebra.h>
|
3
|
+
#include <occ/dma/dma.h>
|
4
|
+
#include <occ/dma/mult.h>
|
5
|
+
#include <occ/qm/wavefunction.h>
|
6
|
+
#include <unsupported/Eigen/CXX11/Tensor>
|
7
|
+
#include <vector>
|
8
|
+
|
9
|
+
namespace occ::dma {
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @brief Handles analytical calculation of multipole moments using
|
13
|
+
* Gauss-Hermite quadrature
|
14
|
+
*/
|
15
|
+
class AnalyticalIntegrator {
|
16
|
+
public:
|
17
|
+
AnalyticalIntegrator(const DMASettings &settings);
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @brief Calculate multipole contribution from a primitive pair
|
21
|
+
*/
|
22
|
+
void calculate_primitive_contribution(const qm::Shell &shell_i,
|
23
|
+
const qm::Shell &shell_j, int i_prim,
|
24
|
+
int j_prim, double fac,
|
25
|
+
const Mat &d_block, const Vec3 &P,
|
26
|
+
Mult &qt) const;
|
27
|
+
|
28
|
+
private:
|
29
|
+
const DMASettings &m_settings;
|
30
|
+
mutable Eigen::Tensor<double, 3> m_gx, m_gy, m_gz;
|
31
|
+
};
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @brief Handles numerical integration on grids
|
35
|
+
*/
|
36
|
+
class GridIntegrator {
|
37
|
+
public:
|
38
|
+
GridIntegrator(const DMASettings &settings);
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @brief Add primitive contribution to grid density
|
42
|
+
*/
|
43
|
+
void add_primitive_to_grid(const qm::Shell &shell_i, const qm::Shell &shell_j,
|
44
|
+
int i_prim, int j_prim, double fac,
|
45
|
+
const Mat &d_block, const Vec3 &P,
|
46
|
+
const Mat3N &grid_points, Vec &rho,
|
47
|
+
double etol) const;
|
48
|
+
|
49
|
+
/**
|
50
|
+
* @brief Process grid density to extract multipoles
|
51
|
+
*/
|
52
|
+
void process_grid_density(
|
53
|
+
const Vec &rho, const Mat3N &grid_points, const Vec &grid_weights,
|
54
|
+
const std::vector<std::pair<size_t, size_t>> &atom_blocks,
|
55
|
+
const DMASites &sites, std::vector<Mult> &site_multipoles) const;
|
56
|
+
|
57
|
+
private:
|
58
|
+
const DMASettings &m_settings;
|
59
|
+
};
|
60
|
+
|
61
|
+
/**
|
62
|
+
* @brief Main calculator for multipole moments
|
63
|
+
*/
|
64
|
+
class MultipoleCalculator {
|
65
|
+
public:
|
66
|
+
MultipoleCalculator(const qm::AOBasis &basis, const qm::MolecularOrbitals &mo,
|
67
|
+
const DMASites &sites, const DMASettings &settings);
|
68
|
+
|
69
|
+
/**
|
70
|
+
* @brief Calculate all multipole moments
|
71
|
+
*/
|
72
|
+
std::vector<Mult> calculate();
|
73
|
+
|
74
|
+
private:
|
75
|
+
void setup_normalized_density_matrix();
|
76
|
+
void process_nuclear_contributions(std::vector<Mult> &site_multipoles);
|
77
|
+
void process_electronic_contributions(std::vector<Mult> &site_multipoles);
|
78
|
+
|
79
|
+
const qm::AOBasis &m_basis;
|
80
|
+
const qm::MolecularOrbitals &m_mo;
|
81
|
+
const DMASites &m_sites;
|
82
|
+
const DMASettings &m_settings;
|
83
|
+
|
84
|
+
Mat m_normalized_density;
|
85
|
+
AnalyticalIntegrator m_analytical;
|
86
|
+
GridIntegrator m_grid;
|
87
|
+
|
88
|
+
// Caching/optimization members
|
89
|
+
double m_tolerance;
|
90
|
+
bool m_use_quadrature;
|
91
|
+
Vec m_grid_density;
|
92
|
+
};
|
93
|
+
|
94
|
+
} // namespace occ::dma
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#pragma once
|
2
|
+
#include <Eigen/Dense>
|
3
|
+
#include <occ/core/linear_algebra.h>
|
4
|
+
#include <occ/core/linear_algebra.h> // Ensure Vec3, Mat, etc. are defined
|
5
|
+
#include <occ/dma/add_qlm.h>
|
6
|
+
#include <occ/dma/binomial.h>
|
7
|
+
#include <occ/dma/dma.h> // Ensure DMASites and Mult are defined
|
8
|
+
#include <occ/dma/solid_harmonics.h>
|
9
|
+
#include <vector>
|
10
|
+
|
11
|
+
namespace occ::dma {
|
12
|
+
|
13
|
+
class MultipoleShifter {
|
14
|
+
public:
|
15
|
+
MultipoleShifter(const Vec3 &pos, Mult &qt, const DMASites &sites,
|
16
|
+
std::vector<Mult> &q, int lmax);
|
17
|
+
void shift();
|
18
|
+
|
19
|
+
void shift_multipoles(const Mult &q1, int l1, int m1, Mult &q2, int m2,
|
20
|
+
const Vec3 &pos);
|
21
|
+
|
22
|
+
private:
|
23
|
+
int find_nearest_site_with_limit(int low, int start) const;
|
24
|
+
bool direct_transfer(int k, int t1, int t2);
|
25
|
+
bool distributed_transfer(int k, int low, int t1, int t2, int lp1sq,
|
26
|
+
double eps);
|
27
|
+
bool process_site(int k, int low, int t1, int t2, int lp1sq, double eps);
|
28
|
+
|
29
|
+
// Multipole shifting functionality (migrated from shiftq.cpp)
|
30
|
+
int estimate_largest_transferred_multipole(const Vec3 &pos, const Mult &mult,
|
31
|
+
int l, int m1, int m2, double eps);
|
32
|
+
Mat get_cplx_sh(const Vec3 &pos, int N);
|
33
|
+
Mat get_cplx_mults(const Mult &mult, int l1, int m1, int N);
|
34
|
+
|
35
|
+
Vec3 m_pos;
|
36
|
+
DMASites m_sites;
|
37
|
+
Mult &m_qt;
|
38
|
+
std::vector<Mult> &m_q;
|
39
|
+
int m_lmax;
|
40
|
+
int m_num_sites{0};
|
41
|
+
Vec m_rr;
|
42
|
+
std::vector<int> m_destination_sites;
|
43
|
+
int m_site_with_highest_limit{0};
|
44
|
+
};
|
45
|
+
|
46
|
+
} // namespace occ::dma
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: occpy
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.7
|
4
4
|
Summary: A library for quantum chemistry
|
5
5
|
Author-Email: Peter Spackman <peterspackman@fastmail.com>
|
6
6
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
@@ -13,8 +13,8 @@ Description-Content-Type: text/markdown
|
|
13
13
|
<img src="https://github.com/peterspackman/occ/raw/main/docs/static/occ.png" width=640/>
|
14
14
|
|
15
15
|
[](https://github.com/peterspackman/occ/actions/workflows/build_test.yml)
|
16
|
-
[](https://badge.fury.io/py/occpy)
|
17
|
+
[](https://pypi.org/project/occpy/)
|
18
18
|
[](https://zenodo.org/doi/10.5281/zenodo.10703204)
|
19
19
|
|
20
20
|
A next-generation quantum chemistry and crystallography program and library, designed for modern computational workflows.
|
@@ -95,7 +95,7 @@ OCC provides comprehensive functionality for ground-state single-point calculati
|
|
95
95
|
```python
|
96
96
|
import occpy
|
97
97
|
from occpy import Crystal, Molecule, AOBasis, HartreeFock, DFT
|
98
|
-
from occpy
|
98
|
+
from occpy import SpinorbitalKind
|
99
99
|
|
100
100
|
# Set up basic configuration
|
101
101
|
occpy.set_log_level(occpy.LogLevel.WARN) # Configure logging level
|
@@ -1,33 +1,48 @@
|
|
1
1
|
occpy/__init__.py,sha256=ixBUKxJdbfXcQs7cE6A6xWSHauwk_qM0pFkusM0aPPg,916
|
2
|
-
occpy/_occpy.cpython-310-darwin.so,sha256=
|
3
|
-
bin/occ,sha256=
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
occpy/_occpy.cpython-310-darwin.so,sha256=Si-U2ei_3Mn9axobJIFPemlBi1zhb5SAu2mtDKjPnRE,53901864
|
3
|
+
bin/occ,sha256=Jr-KpVycMOlgw9WofxOCTKOlwyvl4hEiSCZTvzpbYuQ,60564160
|
4
|
+
include/occ/dma/dma.h,sha256=Sw1KFI29fxA6b0E-jYqjpSCpEMGDvMfON--anW2JVUI,1354
|
5
|
+
include/occ/dma/binomial.h,sha256=0sueanQSgWczerydP3V_revstF6DuFVVMA3z94gPtfw,1206
|
6
|
+
include/occ/dma/multipole_calculator.h,sha256=qSp8hh9SeneGMjmmPp4nWOcO-rKv2B_17watxoVNSls,2704
|
7
|
+
include/occ/dma/gauss_hermite.h,sha256=todMs0mwZokmz7ARNYSiG0vgwuiIXhBxWZ-j3iA7hc8,169
|
8
|
+
include/occ/dma/mult.h,sha256=XYFqw0delK2GHCUOMdIYRR6ZTwt5f4p-KnaP3cjdkwE,14964
|
9
|
+
include/occ/dma/linear_multipole_calculator.h,sha256=FndiedlzTUS79qlU47zvnESgRjVjAuLgtyUTDfArKzY,5392
|
10
|
+
include/occ/dma/linear_multipole_shifter.h,sha256=PqLUj3wrERGw8SNIGN54Ts4lwg8dAPCAbfmP9j66E4Y,5019
|
11
|
+
include/occ/dma/add_qlm.h,sha256=68jLIugSd0ut_aDxhkY63OgrAOUIarHzNguolzliItw,396
|
12
|
+
include/occ/dma/multipole_shifter.h,sha256=7Ejd2D8FKrQB9zXsf826Wohafqpq2trsFD-bNM2m-Us,1504
|
13
|
+
include/occ/dma/solid_harmonics.h,sha256=ViSsq_zpsBFgFa4dblzowjH_xNG7Q6qgv-4KcKvLYPM,152
|
14
|
+
occpy-0.7.7.dist-info/RECORD,,
|
15
|
+
occpy-0.7.7.dist-info/WHEEL,sha256=MUxCH3AFA3ml5Cb8CIUmtgFv6sjLaX4XfrJUcWqe4LQ,120
|
16
|
+
occpy-0.7.7.dist-info/entry_points.txt,sha256=A4GiWZiBEsMWu1jDPAQiDe4HxoDYPNK4hEduZYG1oKg,52
|
17
|
+
occpy-0.7.7.dist-info/METADATA,sha256=3sP78-GVXTIsbc8BoO5GWqEERJPgAnv5_mFvwfEK8DI,6733
|
18
|
+
occpy-0.7.7.dist-info/licenses/LICENSE.txt,sha256=5fvmauGmRic38fyZZuc3YBBPEmgbYKVcRuCb1YLN7UU,781
|
9
19
|
share/occ/methods/dft_methods.json,sha256=2FjPZMh4785YKjHWYoQoG13FFo7SwnzwW_qGdE1sblI,5481
|
10
20
|
share/occ/solvent/dielectric_constants.json,sha256=GMRldNjqknxVm9ROCDvDrfWhIc9FdIIjGhnAxQwT26c,49229
|
11
21
|
share/occ/solvent/dielectrics.json,sha256=E8otdtPhjmZDSOoXnSo2gsM8zV5KVXpt3C8aZ3qyxFM,4854
|
12
22
|
share/occ/solvent/smd.json,sha256=GMRldNjqknxVm9ROCDvDrfWhIc9FdIIjGhnAxQwT26c,49229
|
13
23
|
share/occ/solvent/draco.json,sha256=-xoJULrZ6pQX4GxYN-s3JsXpuwMnG_tlWp36LxRfhoY,13140
|
14
24
|
share/occ/basis/pcseg-0.json,sha256=qhglPPcgp61HOZK5RNL8HII79Yq7N5o8L_Ac6lGsxJE,166001
|
25
|
+
share/occ/basis/def2-tzvp-rifit.json,sha256=HM5vHYBtB9iz7XcKLwfzoDIkzvb27e_qSD_zGqdgptE,698147
|
15
26
|
share/occ/basis/3-21g.json,sha256=NfvlvEwx4kvMhzx7W50hJ6aFIGRHrlSoQ4riFOQnTEw,264009
|
16
27
|
share/occ/basis/def2-tzvpd.json,sha256=lv9pORvpYJYEQi8aMvkOUjOMgOL62M7rlITA8x1OF40,758730
|
28
|
+
share/occ/basis/sap_grasp_small.json,sha256=bLyKEnZhvp2gOKtfAclrSwvj1EJm79XbFvE3AobEwxg,203881
|
17
29
|
share/occ/basis/def2-tzvp.json,sha256=zBnQSRTMZVWgqH_3UWV9NdWp_M81P9JNjqZqZ8eOSA0,952967
|
18
30
|
share/occ/basis/cc-pvqz.json,sha256=bZdKRIG20kUGwoUl80Iw3PbMqqVfLMLX8r5UKe0LaQc,518878
|
19
31
|
share/occ/basis/mini.json,sha256=86UaJaxP-ZO7r7FN5gAWrz1KTj04m4RwAV65rTPCm34,344825
|
20
32
|
share/occ/basis/cc-pv5z.json,sha256=Bf3tCLt69EzAuR1z7kPTFqrkFdXGFwGonyg4K-0eyKU,702114
|
33
|
+
share/occ/basis/sap_grasp_large.json,sha256=mqcIJkzIeTnxSW5ZRc4otAD7PEJNfHxRvvrwj89Am6U,306879
|
21
34
|
share/occ/basis/def2-mtzvpp.json,sha256=Tp0mQTsxoxPMrgiDmwAMtx-zZHl-fqphzrf_-OJ9qMU,902118
|
22
35
|
share/occ/basis/def2-tzvppd.json,sha256=eQvcSkJQRBkJKiJKjxIAkopbSsbQNWudjNRtM-dBXIw,797441
|
23
36
|
share/occ/basis/def2-tzvpp.json,sha256=-eB5Ss9Y8z351kmPcVE2JWFdD9wFhShfoXYwRypUYLY,999686
|
24
37
|
share/occ/basis/pcseg-1.json,sha256=FWAn-t2bhH8bCVAoDpwZRSoJtAfdWofV9PwdV78YGf8,200970
|
25
38
|
share/occ/basis/aug-pcseg-3.json,sha256=mB6dW3c3OQju3GufISoy2XIy9yvS3XlVaSlv_syiSUQ,488436
|
39
|
+
share/occ/basis/thakkar_original.json,sha256=iTlcyKH6cJH3TQITkeT9W3E8oUf-PiR4aOIfab6oOIc,759834
|
26
40
|
share/occ/basis/def2-mtzvpp-rij.json,sha256=iMc6ujPvWcKkaTfXPVToijFkZ4lH2GDydow7TQQaiqk,131825
|
27
41
|
share/occ/basis/def2-svp.json,sha256=_P6fkPsbiCRappOlp6YS5l40WssdfjvsRKk8Wl3z54E,796837
|
28
42
|
share/occ/basis/cc-pvtz.json,sha256=66FqJ4fCWKKrHw5wgY4iL8Ct3-RFPOQsk13_dUhaqIk,385699
|
29
43
|
share/occ/basis/6-31g.json,sha256=G-TBdxklJSZQdhWD0tw1oofzgseg7TP_CkrluR62aD4,176415
|
30
44
|
share/occ/basis/cc-pvtz-f12.json,sha256=cDIdvTAB-ZhriKSmmoTTmpUDQPZ_RJfEo_K8T2fPCHo,189078
|
45
|
+
share/occ/basis/ano-dk3.json,sha256=oEH2HXqU4RQpCaKVRwW9fB2UxneJTxdbKzWfdFBV0Kk,1450014
|
31
46
|
share/occ/basis/def2-sv(p).json,sha256=cYBJszp5WC4yH0QRDr6xrS7rWCxLY3S8H-WGF3-1L5E,765953
|
32
47
|
share/occ/basis/def2-universal-jkfit.json,sha256=DOrzRZzp2kij7jD_qevqlj2jKcZyysnTQfFViGOaHDM,2048819
|
33
48
|
share/occ/basis/cc-pv6z.json,sha256=7wDdCudOE1s46WCwuCX8Cevw7rPaB3pImvrHVS7hjZY,251227
|
@@ -40,7 +55,6 @@ share/occ/basis/cc-pv5z-jkfit.json,sha256=b8M1Pee7f_ttr99u_PDxCMcNMCGVqacO12k6uk
|
|
40
55
|
share/occ/basis/def2-svpd.json,sha256=oyvslqOhm8p0f9jOQd3RE1qdmRxwp9up4GYYEh1AIvM,631106
|
41
56
|
share/occ/basis/aug-pcseg-0.json,sha256=Oa1Rj7j4G5kViuPCwPyiypEsnwuu-PrJSCyC85SvF90,204161
|
42
57
|
share/occ/basis/cc-pvqz-f12.json,sha256=2HMhjLRh6Ud4bWs5_w6Y1KFlGlvkfHGE5azdW8B913s,254917
|
43
|
-
share/occ/basis/thakkar.json,sha256=iTlcyKH6cJH3TQITkeT9W3E8oUf-PiR4aOIfab6oOIc,759834
|
44
58
|
share/occ/basis/cc-pvdz-f12.json,sha256=7ibOqOcRI6s9CX0PBvPBrcKzFbFO6zsWr9-CHCx1VBM,141589
|
45
59
|
share/occ/basis/cc-pvdz.json,sha256=rZCSLByGXzQ9Ah4-x3DgrL5sKLkc1ZFVu3hdKbJRLyc,286107
|
46
60
|
share/occ/basis/pcseg-2.json,sha256=Mf7dUyKIrIFa2lN4ukjrsysd0gVdKel2Jvkvy1gRXQg,284458
|