occpy 0.7.5__cp310-cp310-macosx_10_15_universal2.whl → 0.7.6__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,49 @@
1
+ #pragma once
2
+ #include <occ/core/linear_algebra.h>
3
+ #include <occ/dma/add_qlm.h>
4
+ #include <occ/dma/binomial.h>
5
+ #include <occ/dma/solid_harmonics.h>
6
+ #include <occ/dma/dma.h> // Ensure DMASites and Mult are defined
7
+ #include <occ/core/linear_algebra.h> // Ensure Vec3, Mat, etc. are defined
8
+ #include <occ/core/linear_algebra.h> // Ensure Vec3, Mat, etc. are defined
9
+ #include <vector>
10
+ #include <Eigen/Dense>
11
+
12
+ namespace occ::dma {
13
+
14
+
15
+ class MultipoleShifter {
16
+ public:
17
+ MultipoleShifter(const Vec3 &pos, Mult &qt,
18
+ const DMASites &sites, std::vector<Mult> &q, int lmax);
19
+ void shift();
20
+
21
+ void shift_multipoles(const Mult &q1, int l1, int m1, Mult &q2, int m2,
22
+ const Vec3 &pos);
23
+
24
+ private:
25
+ int find_nearest_site_with_limit(int low, int start) const;
26
+ bool direct_transfer(int k, int t1, int t2);
27
+ bool distributed_transfer(int k, int low, int t1, int t2, int lp1sq,
28
+ double eps);
29
+ bool process_site(int k, int low, int t1, int t2, int lp1sq, double eps);
30
+
31
+ // Multipole shifting functionality (migrated from shiftq.cpp)
32
+ int estimate_largest_transferred_multipole(const Vec3 &pos,
33
+ const Mult &mult, int l, int m1,
34
+ int m2, double eps);
35
+ Mat get_cplx_sh(const Vec3 &pos, int N);
36
+ Mat get_cplx_mults(const Mult &mult, int l1, int m1, int N);
37
+
38
+ Vec3 m_pos;
39
+ DMASites m_sites;
40
+ Mult &m_qt;
41
+ std::vector<Mult> &m_q;
42
+ int m_lmax;
43
+ int m_num_sites{0};
44
+ Vec m_rr;
45
+ std::vector<int> m_destination_sites;
46
+ int m_site_with_highest_limit{0};
47
+ };
48
+
49
+ } // 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.6
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,11 +1,21 @@
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=3nHRUwoJwIOv1Si7E8tbtyhnZHKslXlryqINikmSLNs,52760040
3
+ bin/occ,sha256=l72SSOMvEXEPGf_hP-nSJy-_hF7SLuUUESe6NRLOyok,58913056
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=hKHoUCUjGCNYmkCUMeC7cBF0SRMZNcjFssqHAtDnPpQ,408
12
+ include/occ/dma/multipole_shifter.h,sha256=HiugbYhk3Us7iuoo8wlNIqTZYbezdym-x5t0rp2iL9k,1625
13
+ include/occ/dma/solid_harmonics.h,sha256=ViSsq_zpsBFgFa4dblzowjH_xNG7Q6qgv-4KcKvLYPM,152
14
+ occpy-0.7.6.dist-info/RECORD,,
15
+ occpy-0.7.6.dist-info/WHEEL,sha256=l0yg0PizYFZ7SqvHYx9havWj7y2KfJATCxx3uX2pRNI,120
16
+ occpy-0.7.6.dist-info/entry_points.txt,sha256=A4GiWZiBEsMWu1jDPAQiDe4HxoDYPNK4hEduZYG1oKg,52
17
+ occpy-0.7.6.dist-info/METADATA,sha256=IiuKGjUgS1e8qvSsCHEL7oTyy39w7YRg1w3G5TTtoQo,6733
18
+ occpy-0.7.6.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
@@ -14,10 +24,12 @@ share/occ/solvent/draco.json,sha256=-xoJULrZ6pQX4GxYN-s3JsXpuwMnG_tlWp36LxRfhoY,
14
24
  share/occ/basis/pcseg-0.json,sha256=qhglPPcgp61HOZK5RNL8HII79Yq7N5o8L_Ac6lGsxJE,166001
15
25
  share/occ/basis/3-21g.json,sha256=NfvlvEwx4kvMhzx7W50hJ6aFIGRHrlSoQ4riFOQnTEw,264009
16
26
  share/occ/basis/def2-tzvpd.json,sha256=lv9pORvpYJYEQi8aMvkOUjOMgOL62M7rlITA8x1OF40,758730
27
+ share/occ/basis/sap_grasp_small.json,sha256=bLyKEnZhvp2gOKtfAclrSwvj1EJm79XbFvE3AobEwxg,203881
17
28
  share/occ/basis/def2-tzvp.json,sha256=zBnQSRTMZVWgqH_3UWV9NdWp_M81P9JNjqZqZ8eOSA0,952967
18
29
  share/occ/basis/cc-pvqz.json,sha256=bZdKRIG20kUGwoUl80Iw3PbMqqVfLMLX8r5UKe0LaQc,518878
19
30
  share/occ/basis/mini.json,sha256=86UaJaxP-ZO7r7FN5gAWrz1KTj04m4RwAV65rTPCm34,344825
20
31
  share/occ/basis/cc-pv5z.json,sha256=Bf3tCLt69EzAuR1z7kPTFqrkFdXGFwGonyg4K-0eyKU,702114
32
+ share/occ/basis/sap_grasp_large.json,sha256=mqcIJkzIeTnxSW5ZRc4otAD7PEJNfHxRvvrwj89Am6U,306879
21
33
  share/occ/basis/def2-mtzvpp.json,sha256=Tp0mQTsxoxPMrgiDmwAMtx-zZHl-fqphzrf_-OJ9qMU,902118
22
34
  share/occ/basis/def2-tzvppd.json,sha256=eQvcSkJQRBkJKiJKjxIAkopbSsbQNWudjNRtM-dBXIw,797441
23
35
  share/occ/basis/def2-tzvpp.json,sha256=-eB5Ss9Y8z351kmPcVE2JWFdD9wFhShfoXYwRypUYLY,999686
@@ -28,6 +40,7 @@ share/occ/basis/def2-svp.json,sha256=_P6fkPsbiCRappOlp6YS5l40WssdfjvsRKk8Wl3z54E
28
40
  share/occ/basis/cc-pvtz.json,sha256=66FqJ4fCWKKrHw5wgY4iL8Ct3-RFPOQsk13_dUhaqIk,385699
29
41
  share/occ/basis/6-31g.json,sha256=G-TBdxklJSZQdhWD0tw1oofzgseg7TP_CkrluR62aD4,176415
30
42
  share/occ/basis/cc-pvtz-f12.json,sha256=cDIdvTAB-ZhriKSmmoTTmpUDQPZ_RJfEo_K8T2fPCHo,189078
43
+ share/occ/basis/ano-dk3.json,sha256=oEH2HXqU4RQpCaKVRwW9fB2UxneJTxdbKzWfdFBV0Kk,1450014
31
44
  share/occ/basis/def2-sv(p).json,sha256=cYBJszp5WC4yH0QRDr6xrS7rWCxLY3S8H-WGF3-1L5E,765953
32
45
  share/occ/basis/def2-universal-jkfit.json,sha256=DOrzRZzp2kij7jD_qevqlj2jKcZyysnTQfFViGOaHDM,2048819
33
46
  share/occ/basis/cc-pv6z.json,sha256=7wDdCudOE1s46WCwuCX8Cevw7rPaB3pImvrHVS7hjZY,251227
@@ -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.4
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-macosx_10_15_universal2
5
5