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.
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
@@ -0,0 +1,8 @@
1
+ #pragma once
2
+ #include <occ/core/linear_algebra.h>
3
+
4
+ namespace occ::dma {
5
+
6
+ void solid_harmonics(Eigen::Ref<const Vec3> pos, int j, Eigen::Ref<Vec> r);
7
+
8
+ }
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: occpy
3
- Version: 0.7.5
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
  [![Build & Test](https://github.com/peterspackman/occ/actions/workflows/build_test.yml/badge.svg)](https://github.com/peterspackman/occ/actions/workflows/build_test.yml)
16
- [![PyPI version](https://badge.fury.io/py/occ.svg)](https://badge.fury.io/py/occ)
17
- [![PyPI Downloads](https://img.shields.io/pypi/dm/occ)](https://pypi.org/project/occ/)
16
+ [![PyPI version](https://badge.fury.io/py/occpy.svg)](https://badge.fury.io/py/occpy)
17
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/occpy)](https://pypi.org/project/occpy/)
18
18
  [![DOI](https://zenodo.org/badge/292276139.svg)](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.qm import SpinorbitalKind
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=09NKNfKRc-XPlXEbveK1xB099RevkloA3McGH1F0A5A,51998056
3
- bin/occ,sha256=PZICY6AoxYBoxhTUZy76gORICPc_Y5nz7SEIDUeY1dw,58209648
4
- occpy-0.7.5.dist-info/RECORD,,
5
- occpy-0.7.5.dist-info/WHEEL,sha256=-ZDqhCZjFhdUy-WeURyyCZhvqDjqwh65TqlAm4Cqb2Q,120
6
- occpy-0.7.5.dist-info/entry_points.txt,sha256=A4GiWZiBEsMWu1jDPAQiDe4HxoDYPNK4hEduZYG1oKg,52
7
- occpy-0.7.5.dist-info/METADATA,sha256=OLIysaj8nSV7-V9SOWuiU8KyCsY0qprbYnjHRndwqh0,6728
8
- occpy-0.7.5.dist-info/licenses/LICENSE.txt,sha256=5fvmauGmRic38fyZZuc3YBBPEmgbYKVcRuCb1YLN7UU,781
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
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.11.0
2
+ Generator: scikit-build-core 0.11.5
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-macosx_10_15_universal2
5
5