ngsolve 6.2.2504.post44.dev0__cp311-cp311-win_amd64.whl → 6.2.2601__cp311-cp311-win_amd64.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.
Files changed (94) hide show
  1. netgen/include/analytic_integrals.hpp +10 -0
  2. netgen/include/basematrix.hpp +6 -0
  3. netgen/include/bdbequations.hpp +55 -0
  4. netgen/include/bem_diffops.hpp +475 -0
  5. netgen/include/bilinearform.hpp +4 -1
  6. netgen/include/bspline.hpp +2 -0
  7. netgen/include/code_generation.hpp +2 -2
  8. netgen/include/complex_wrapper.hpp +30 -2
  9. netgen/include/contact.hpp +8 -0
  10. netgen/include/diagonalmatrix.hpp +6 -0
  11. netgen/include/diffop_impl.hpp +3 -1
  12. netgen/include/diffopwithfactor.hpp +123 -0
  13. netgen/include/elementbyelement.hpp +9 -3
  14. netgen/include/expr.hpp +45 -7
  15. netgen/include/fespace.hpp +9 -2
  16. netgen/include/gridfunction.hpp +3 -3
  17. netgen/include/h1amg.hpp +24 -1
  18. netgen/include/h1lumping.hpp +6 -0
  19. netgen/include/hcurl_equations.hpp +29 -0
  20. netgen/include/hcurlcurlfe.hpp +20 -0
  21. netgen/include/hdivfe_utils.hpp +1 -0
  22. netgen/include/hdivhofespace.hpp +2 -0
  23. netgen/include/kernels.hpp +724 -0
  24. netgen/include/l2hofe.hpp +1 -0
  25. netgen/include/matrix.hpp +8 -3
  26. netgen/include/meshaccess.hpp +1 -1
  27. netgen/include/mp_coefficient.hpp +24 -19
  28. netgen/include/mptools.hpp +1255 -237
  29. netgen/include/mycomplex.hpp +1 -1
  30. netgen/include/ngblas.hpp +116 -7
  31. netgen/include/potentialtools.hpp +2 -2
  32. netgen/include/preconditioner.hpp +2 -2
  33. netgen/include/prolongation.hpp +6 -3
  34. netgen/include/recursive_pol.hpp +63 -11
  35. netgen/include/simd_complex.hpp +45 -0
  36. netgen/include/sparsecholesky.hpp +6 -2
  37. netgen/include/sparsefactorization_interface.hpp +159 -0
  38. netgen/include/sparsematrix.hpp +21 -7
  39. netgen/include/sparsematrix_dyn.hpp +2 -2
  40. netgen/include/sparsematrix_impl.hpp +100 -33
  41. netgen/include/statushandler.hpp +8 -8
  42. netgen/include/thdivfe_impl.hpp +66 -0
  43. netgen/include/tscalarfe.hpp +1 -1
  44. netgen/include/vector.hpp +272 -47
  45. netgen/lib/libngsolve.lib +0 -0
  46. netgen/libngsolve.dll +0 -0
  47. netgen/ngscxx.bat +1 -1
  48. netgen/ngsld.bat +1 -1
  49. ngsolve/cmake/NGSolveConfig.cmake +8 -8
  50. ngsolve/cmake/ngsolve-targets.cmake +17 -10
  51. ngsolve/config/config.py +8 -8
  52. ngsolve/demos/intro/cmagnet.py +19 -22
  53. ngsolve/directsolvers.py +9 -21
  54. ngsolve/krylovspace.py +172 -3
  55. ngsolve/ngslib.pyd +0 -0
  56. ngsolve/nonlinearsolvers.py +2 -2
  57. ngsolve/solve_implementation.py +14 -1
  58. ngsolve/{solvers.py → solvers/__init__.py} +1 -1
  59. ngsolve/solvers/cudss.py +112 -0
  60. ngsolve/webgui.py +1 -0
  61. {ngsolve-6.2.2504.post44.dev0.dist-info → ngsolve-6.2.2601.dist-info}/METADATA +2 -2
  62. {ngsolve-6.2.2504.post44.dev0.dist-info → ngsolve-6.2.2601.dist-info}/RECORD +94 -88
  63. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/Scripts/ngsolve.tcl +0 -0
  64. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.geo +0 -0
  65. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.vol +0 -0
  66. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.in2d +0 -0
  67. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.vol +0 -0
  68. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.geo +0 -0
  69. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.vol +0 -0
  70. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.geo +0 -0
  71. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.vol +0 -0
  72. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.geo +0 -0
  73. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.vol +0 -0
  74. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  75. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  76. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d1_square.pde +0 -0
  77. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d2_chip.pde +0 -0
  78. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  79. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d4_cube.pde +0 -0
  80. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d5_beam.pde +0 -0
  81. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  82. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d7_coil.pde +0 -0
  83. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  84. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  85. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  86. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  87. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  88. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.geo +0 -0
  89. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.vol +0 -0
  90. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.in2d +0 -0
  91. {ngsolve-6.2.2504.post44.dev0.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.vol +0 -0
  92. {ngsolve-6.2.2504.post44.dev0.dist-info → ngsolve-6.2.2601.dist-info}/LICENSE +0 -0
  93. {ngsolve-6.2.2504.post44.dev0.dist-info → ngsolve-6.2.2601.dist-info}/WHEEL +0 -0
  94. {ngsolve-6.2.2504.post44.dev0.dist-info → ngsolve-6.2.2601.dist-info}/top_level.txt +0 -0
netgen/include/vector.hpp CHANGED
@@ -8,6 +8,7 @@
8
8
  /**************************************************************************/
9
9
 
10
10
  #include "expr.hpp"
11
+ #include "core/archive.hpp"
11
12
  #include <core/hashtable.hpp> // for SparseVector
12
13
 
13
14
  namespace ngbla
@@ -141,9 +142,170 @@ namespace ngbla
141
142
  {
142
143
  protected:
143
144
  typedef MatExpr<VectorView> BASE;
145
+
146
+ /*
144
147
  T * __restrict data;
145
148
  NO_UNIQUE_ADDRESS TS size;
146
149
  NO_UNIQUE_ADDRESS TDIST dist;
150
+ */
151
+
152
+
153
+ // the data ...
154
+
155
+ template <typename LT>
156
+ class Layout1
157
+ {
158
+ LT * data;
159
+ public:
160
+ Layout1() = default;
161
+ Layout1(const Layout1&) = default;
162
+ Layout1(Layout1&&) = default;
163
+
164
+ Layout1& operator= (const Layout1&) = default;
165
+ Layout1& operator= (Layout1&&) = default;
166
+
167
+ ~Layout1() = default;
168
+
169
+ INLINE Layout1 (LT * adata) : data(adata) { }
170
+ INLINE auto Data() const { return data; }
171
+ };
172
+
173
+
174
+
175
+ // add the size: variable, constant, undefined_size
176
+
177
+ template <typename LT, typename LTS>
178
+ class Layout2 : public Layout1<LT>
179
+ {
180
+ typedef Layout1<LT> BASE;
181
+ LTS size;
182
+ public:
183
+ Layout2() = default;
184
+ Layout2(const Layout2&) = default;
185
+ Layout2(Layout2&&) = default;
186
+
187
+ Layout2& operator= (const Layout2&) = default;
188
+ Layout2& operator= (Layout2&&) = default;
189
+ ~Layout2() = default;
190
+
191
+ INLINE Layout2 (LT * adata, LTS asize)
192
+ : BASE(adata), size(asize) { }
193
+ INLINE Layout2 (LT * adata)
194
+ : BASE(adata) { }
195
+
196
+
197
+ INLINE auto Size() const { return size; }
198
+ using BASE::Data;
199
+ };
200
+
201
+
202
+ template <typename LT, int IDIST>
203
+ class Layout2<LT,IC<IDIST>> : public Layout1<LT>
204
+ {
205
+ typedef Layout1<LT> BASE;
206
+ public:
207
+ Layout2() = default;
208
+ Layout2(const Layout2&) = default;
209
+ Layout2(Layout2&&) = default;
210
+
211
+ Layout2& operator= (const Layout2&) = default;
212
+ Layout2& operator= (Layout2&&) = default;
213
+ ~Layout2() = default;
214
+
215
+ INLINE Layout2 (LT * adata, IC<IDIST> asize)
216
+ : BASE(adata) { }
217
+ INLINE Layout2 (LT * adata)
218
+ : BASE(adata) { }
219
+
220
+ INLINE auto Size() const { return IC<IDIST>(); }
221
+ using BASE::Data;
222
+ };
223
+
224
+
225
+ #if !defined(NETGEN_ENABLE_CHECK_RANGE)
226
+
227
+ template <typename LT>
228
+ class Layout2<LT,undefined_size> : public Layout1<LT>
229
+ {
230
+ typedef Layout1<LT> BASE;
231
+ public:
232
+ Layout2() = default;
233
+ Layout2(const Layout2&) = default;
234
+ Layout2(Layout2&&) = default;
235
+
236
+ Layout2& operator= (const Layout2&) = default;
237
+ Layout2& operator= (Layout2&&) = default;
238
+ ~Layout2() = default;
239
+
240
+ INLINE Layout2 (LT * adata, undefined_size asize)
241
+ : BASE(adata) { }
242
+ INLINE Layout2 (LT * adata)
243
+ : BASE(adata) { }
244
+
245
+ INLINE auto Size() const { return undefined_size(); }
246
+ using BASE::Data;
247
+ };
248
+
249
+ #endif
250
+
251
+
252
+ // add the distance: variable, constant
253
+
254
+ template <typename LT, typename LTS, typename LTDIST>
255
+ class Layout : public Layout2<LT,LTS>
256
+ {
257
+ typedef Layout2<LT,LTS> BASE;
258
+ LTDIST dist;
259
+ public:
260
+ Layout() = default;
261
+ Layout(const Layout&) = default;
262
+ Layout(Layout&&) = default;
263
+
264
+ Layout& operator= (const Layout&) = default;
265
+ Layout& operator= (Layout&&) = default;
266
+ ~Layout() = default;
267
+
268
+ INLINE Layout (LT * adata, LTS asize, LTDIST adist)
269
+ : BASE(adata,asize), dist{adist} { }
270
+ INLINE Layout (LT * adata, LTS asize)
271
+ : BASE(adata,asize) { }
272
+ INLINE Layout (LT * adata)
273
+ : BASE(adata) { }
274
+
275
+ INLINE auto Dist() const { return dist; }
276
+ using BASE::Data;
277
+ using BASE::Size;
278
+ };
279
+
280
+
281
+ template <typename LT, typename LTS, int IDIST>
282
+ class Layout<LT, LTS, IC<IDIST>> : public Layout2<LT,LTS>
283
+ {
284
+ typedef Layout2<LT,LTS> BASE;
285
+ public:
286
+ Layout() = default;
287
+ Layout(const Layout&) = default;
288
+ Layout(Layout&&) = default;
289
+
290
+ Layout& operator= (const Layout&) = default;
291
+ Layout& operator= (Layout&&) = default;
292
+ ~Layout() = default;
293
+
294
+ INLINE Layout (LT * adata, LTS asize, IC<IDIST> adist)
295
+ : BASE(adata,asize) { }
296
+ INLINE Layout (LT * adata, LTS asize)
297
+ : BASE(adata,asize) { }
298
+ INLINE Layout (LT * adata)
299
+ : BASE(adata) { }
300
+
301
+ INLINE auto Dist() const { return IC<IDIST>(); }
302
+ using BASE::Data;
303
+ using BASE::Size;
304
+ };
305
+
306
+ Layout<T,TS,TDIST> layout;
307
+
308
+
147
309
  public:
148
310
  typedef T TELEM;
149
311
  typedef typename mat_traits<T>::TSCAL TSCAL;
@@ -152,33 +314,38 @@ namespace ngbla
152
314
  /// linear element access ?
153
315
  static constexpr bool IsLinear() { return std::is_same<type_dist,IC<1>>(); }
154
316
 
155
- INLINE VectorView () = default;
156
- INLINE VectorView (const VectorView&) = default;
157
- INLINE VectorView (VectorView&&) = default;
317
+ VectorView () = default;
318
+ VectorView (const VectorView&) = default;
319
+ VectorView (VectorView&&) = default;
158
320
 
159
321
  template <typename T2, typename TS2, typename TDIST2,
160
322
  enable_if_t<is_convertible<T2*,T*>::value, int> =0,
161
323
  enable_if_t<is_constructible<TS,TS2>::value, int> =0,
162
324
  enable_if_t<is_constructible<TDIST,TDIST2>::value, int> =0>
163
325
  INLINE VectorView (const VectorView<T2,TS2,TDIST2> & v2)
164
- : data{v2.Data()}, size{TS(v2.Size())}, dist{TDIST(v2.Dist())} { }
326
+ : layout(v2.Data(), TS(v2.Size()), TDIST(v2.Dist())) { }
327
+ // : data{v2.Data()}, size{TS(v2.Size())}, dist{TDIST(v2.Dist())} { }
165
328
 
166
329
  INLINE explicit VectorView (T * adata)
167
- : data(adata)
330
+ // : data(adata)
331
+ : layout(adata)
168
332
  {
169
333
  ; // static_assert(std::is_same<type_dist,IC<1>>());
170
334
  }
171
335
  INLINE VectorView (TS asize, T * adata)
172
- : data(adata), size(asize)
336
+ // : data(adata), size(asize)
337
+ : layout(adata, asize)
173
338
  {
174
339
  static_assert(std::is_same<type_dist,IC<1>>());
175
340
  }
176
341
  INLINE VectorView (TS asize, TDIST adist, T * adata)
177
- : data(adata), size(asize), dist(adist) { }
342
+ // : data(adata), size(asize), dist(adist) { }
343
+ : layout(adata, asize, adist) { }
178
344
 
179
345
  /// allocate FlatVector on local heap
180
346
  INLINE VectorView (size_t as, LocalHeap & lh)
181
- : data(lh.Alloc<T> (as)), size(as), dist(IC<1>()) { }
347
+ // : data(lh.Alloc<T> (as)), size(as), dist(IC<1>()) { }
348
+ : layout(lh.Alloc<T> (as), as, IC<1>()) { }
182
349
 
183
350
  template <typename EXPR>
184
351
  INLINE VectorView(LocalHeapExpr<EXPR>&& lhe)
@@ -191,7 +358,8 @@ namespace ngbla
191
358
 
192
359
  template <int S>
193
360
  INLINE VectorView (Vec<S,T> & v)
194
- : data(v.Data()), size(v.Size()), dist(IC<1>()) { }
361
+ // : data(v.Data()), size(v.Size()), dist(IC<1>()) { }
362
+ : layout{v.Data(), TS(v.Size()), (TDIST)IC<1>()} {}
195
363
 
196
364
 
197
365
  /*
@@ -201,7 +369,8 @@ namespace ngbla
201
369
  */
202
370
  template <int S>
203
371
  INLINE VectorView (const Vec<S,T> & v)
204
- : data(const_cast<T*>(v.Data())), size(v.Size()), dist(IC<1>()) { }
372
+ // : data(const_cast<T*>(v.Data())), size(v.Size()), dist(IC<1>()) { }
373
+ : layout(const_cast<T*>(v.Data()), v.Size(), IC<1>()) { }
205
374
  /*
206
375
  template <int S>
207
376
  INLINE VectorView (Vec<S,const T> & v)
@@ -211,38 +380,46 @@ namespace ngbla
211
380
  : data(const_cast<T*>(v.Data())), size(v.Size()), dist(IC<1>()) { }
212
381
  */
213
382
 
214
- INLINE auto Size() const { return size; }
215
- INLINE auto Dist() const { return dist; }
216
- INLINE auto Shape() const { return tuple(size); }
383
+ INLINE auto Size() const { return layout.Size(); }
384
+ INLINE auto Dist() const { return layout.Dist(); }
385
+ INLINE auto Shape() const { return tuple(layout.Size()); }
217
386
 
218
387
 
219
- INLINE auto Height () const { return size; }
388
+ INLINE auto Height () const { return layout.Size(); }
220
389
  INLINE auto Width () const { return IC<1>(); }
221
390
 
222
- INLINE auto Range () const { return IntRange (0, size); }
391
+ INLINE auto Range () const { return IntRange (0, layout.Size()); }
223
392
 
224
- INLINE T * Addr(size_t i) const { return data+i*dist; }
225
- INLINE T * Data() const { return data; }
393
+ INLINE T * Addr(size_t i) const { return layout.Data()+i*layout.Dist(); }
394
+ INLINE T * Data() const { return layout.Data(); }
226
395
 
227
396
  INLINE auto View() const { return VectorView(*this); }
228
397
  INLINE auto ViewRW() { return this->View(); }
229
398
 
399
+ void Dump (ostream & ost) const
400
+ { ost << "VectorView (size=" << Size() << ", dist=" << Dist() << ")"; }
230
401
 
231
402
 
232
403
  /// assign memory for vector on local heap
233
404
  INLINE void AssignMemory (size_t as, LocalHeap & lh)
234
405
  {
406
+ /*
235
407
  size = as;
236
408
  dist = IC<1>();
237
409
  data = lh.Alloc<T>(size);
410
+ */
411
+ layout = { lh.Alloc<T>(as), as, IC<1>() };
238
412
  }
239
413
 
240
414
  /// assign memory for vector
241
415
  void AssignMemory (size_t as, T * mem)
242
416
  {
417
+ /*
243
418
  size = as;
244
419
  dist = IC<1>();
245
420
  data = mem;
421
+ */
422
+ layout = { mem, as, IC<1>() };
246
423
  }
247
424
 
248
425
  INLINE auto & operator= (const VectorView & v)
@@ -295,7 +472,7 @@ namespace ngbla
295
472
  {
296
473
  NETGEN_CHECK_RANGE(D,0,Size()+1);
297
474
  for (int i = 0; i < D; i++)
298
- data[i*dist] = v(i);
475
+ Data()[i*Dist()] = v(i);
299
476
  return *this;
300
477
  }
301
478
 
@@ -303,13 +480,13 @@ namespace ngbla
303
480
  INLINE TELEM & operator[] (size_t i)
304
481
  {
305
482
  NETGEN_CHECK_RANGE(i,0,Size());
306
- return data[i*dist];
483
+ return Data()[i*Dist()];
307
484
  }
308
485
 
309
486
  INLINE const TELEM & operator[] (size_t i) const
310
487
  {
311
488
  NETGEN_CHECK_RANGE(i,0,Size());
312
- return data[i*dist];
489
+ return Data()[i*Dist()];
313
490
  }
314
491
 
315
492
 
@@ -319,14 +496,14 @@ namespace ngbla
319
496
  INLINE TELEM & operator() (I i) const
320
497
  {
321
498
  NETGEN_CHECK_RANGE(i,0,Size());
322
- return data[i*dist];
499
+ return Data()[i*Dist()];
323
500
  }
324
501
 
325
502
  /// element access. index j is ignored
326
503
  INLINE TELEM & operator() (size_t i, size_t j) const
327
504
  {
328
505
  NETGEN_CHECK_RANGE(i,0,Size());
329
- return data[i*dist];
506
+ return Data()[i*Dist()];
330
507
  }
331
508
 
332
509
  RowsArrayExpr<VectorView> operator() (FlatArray<int> rows) const
@@ -337,7 +514,7 @@ namespace ngbla
337
514
  INLINE auto Range (size_t first, size_t next) const
338
515
  {
339
516
  NETGEN_CHECK_RANGE(next,first,Size()+1);
340
- return VectorView<T,size_t,TDIST> (next-first, dist, data+first*dist);
517
+ return VectorView<T,size_t,TDIST> (next-first, Dist(), Data()+first*Dist());
341
518
  }
342
519
 
343
520
  INLINE auto Range (size_t next) const
@@ -353,7 +530,7 @@ namespace ngbla
353
530
  INLINE auto RangeN (size_t first, size_t n) const
354
531
  {
355
532
  NETGEN_CHECK_RANGE(first+n,first,Size()+1);
356
- return VectorView<T,size_t,TDIST> (n, dist, data+first*dist);
533
+ return VectorView<T,size_t,TDIST> (n, Dist(), Data()+first*Dist());
357
534
  }
358
535
 
359
536
 
@@ -369,7 +546,7 @@ namespace ngbla
369
546
  INLINE auto Slice(size_t first, size_t dist2) const
370
547
  {
371
548
  // return VectorView<T,decltype(declval<TS>()/size_t()), decltype(declval<TDIST>()*size_t())> (size/dist2, dist2*dist, Addr(first));
372
- return VectorView<T,decltype(declval<TS>()/size_t()), decltype(declval<TDIST>()*size_t())> ( (size-first+dist2-1)/dist2, dist2*dist, Addr(first));
549
+ return VectorView<T,decltype(declval<TS>()/size_t()), decltype(declval<TDIST>()*size_t())> ( (Size()-first+dist2-1)/dist2, dist2*Dist(), Addr(first));
373
550
  }
374
551
 
375
552
  INLINE auto Reversed() const
@@ -378,15 +555,15 @@ namespace ngbla
378
555
  return VectorView<T,TS,decltype(-declval<TDIST>())> { Size(), -Dist(), Addr(Size()-1) };
379
556
  }
380
557
 
381
- INLINE auto operator+(int i) const { return VectorView(size-i, dist, data+i*dist); }
558
+ INLINE auto operator+(int i) const { return VectorView(Size()-i, Dist(), Data()+i*Dist()); }
382
559
 
383
- INLINE auto RemoveConst() const { return VectorView<typename remove_const<T>::type,TS,TDIST>(size, dist, const_cast<typename remove_const<T>::type*> (data)); }
560
+ INLINE auto RemoveConst() const { return VectorView<typename remove_const<T>::type,TS,TDIST>(Size(), Dist(), const_cast<typename remove_const<T>::type*> (Data())); }
384
561
 
385
562
  INLINE auto AsMatrix (size_t h, size_t w) const
386
563
  {
387
564
  // todo: checking
388
565
  static_assert(std::is_same<TDIST,IC<1>>());
389
- return FlatMatrix<T> (h,w, data);
566
+ return FlatMatrix<T> (h,w, Data());
390
567
  }
391
568
 
392
569
  class Iterator
@@ -404,7 +581,7 @@ namespace ngbla
404
581
  };
405
582
 
406
583
  INLINE Iterator begin() const { return Iterator (*this, 0); }
407
- INLINE Iterator end() const { return Iterator (*this, size); }
584
+ INLINE Iterator end() const { return Iterator (*this, Size()); }
408
585
 
409
586
  };
410
587
 
@@ -445,8 +622,11 @@ namespace ngbla
445
622
  }
446
623
 
447
624
  Vector (Vector && v2)
448
- : FlatVector<T> (v2.size, v2.data)
449
- { v2.data = nullptr; v2.size = 0; }
625
+ : FlatVector<T> (v2.Size(), v2.Data())
626
+ {
627
+ v2.layout = { nullptr, 0 };
628
+ // v2.data = nullptr; v2.size = 0;
629
+ }
450
630
 
451
631
  /// allocate and compute
452
632
  template<typename TB>
@@ -467,7 +647,7 @@ namespace ngbla
467
647
 
468
648
 
469
649
  /// deallocate vector
470
- ~Vector() { delete [] this->data; }
650
+ ~Vector() { delete [] this->Data(); }
471
651
 
472
652
  /// set vector to constant values
473
653
  Vector & operator= (TSCAL scal)
@@ -479,6 +659,7 @@ namespace ngbla
479
659
  /// set vector size
480
660
  void SetSize(size_t as)
481
661
  {
662
+ /*
482
663
  if (this->size == as) return;
483
664
  delete [] this->data;
484
665
  this->size = as;
@@ -486,6 +667,10 @@ namespace ngbla
486
667
  this->data = new T[this->size];
487
668
  else
488
669
  this->data = nullptr;
670
+ */
671
+ if (this->Size() == as) return;
672
+ delete [] this->Data();
673
+ this->layout = { (as != 0) ? new T[as] : nullptr , as, IC<1>() };
489
674
  }
490
675
 
491
676
  /// evaluate matrix expression
@@ -505,8 +690,9 @@ namespace ngbla
505
690
 
506
691
  Vector & operator= (Vector && v2)
507
692
  {
508
- this->size = v2.size;
509
- Swap (this->data, v2.data);
693
+ // this->size = v2.size;
694
+ // Swap (this->data, v2.data);
695
+ Swap (this->layout, v2.layout);
510
696
  return *this;
511
697
  }
512
698
 
@@ -545,7 +731,7 @@ namespace ngbla
545
731
  &mem[0] : new T[as]) { ; }
546
732
 
547
733
  /// deallocates dynamic memory
548
- INLINE ~VectorMem() { if (this->Size() > S) delete [] this->data; }
734
+ INLINE ~VectorMem() { if (this->Size() > S) delete [] this->Data(); }
549
735
 
550
736
  /// assigns constant value
551
737
  INLINE VectorMem & operator= (TSCAL scal)
@@ -701,7 +887,8 @@ namespace ngbla
701
887
  */
702
888
 
703
889
  Vec (const Vec &) = default;
704
- auto & HTData() const { return data; }
890
+ auto & HTData() { return data; }
891
+ const auto & HTData() const { return data; }
705
892
  template <typename T2>
706
893
  Vec (const Vec<S,T2> & v2) : data(v2.HTData()) { ; }
707
894
 
@@ -845,6 +1032,12 @@ namespace ngbla
845
1032
  INLINE /* const */ FlatVector<T> Range(size_t first, size_t next)
846
1033
  { return FlatVector<T> (next-first, data+first); }
847
1034
 
1035
+ void DoArchive(Archive & ar)
1036
+ {
1037
+ for (size_t i = 0; i < S; i++)
1038
+ ar & data[i];
1039
+ }
1040
+
848
1041
  const T * begin() const { return data.Ptr(); }
849
1042
  const T * end() const { return data.Ptr()+S; }
850
1043
  T * begin() { return data.Ptr(); }
@@ -977,8 +1170,13 @@ namespace ngbla
977
1170
  }
978
1171
 
979
1172
 
980
-
981
-
1173
+ template <int S, typename T = double>
1174
+ auto UnitVec(size_t i)
1175
+ {
1176
+ Vec<S,T> ei = T(0.0);
1177
+ ei(i) = T(1.0);
1178
+ return ei;
1179
+ }
982
1180
 
983
1181
  template <class TV, class TSCAL> class Scalar2ElemVector
984
1182
  {
@@ -1196,24 +1394,51 @@ namespace ngbla
1196
1394
  for (int i = 0; i < DIM; i++)
1197
1395
  AtomicAdd (x(i), y(i));
1198
1396
  }
1199
-
1200
1397
 
1201
- }
1202
1398
 
1203
- namespace ngstd
1204
- {
1205
- template <typename ARCHIVE, int S, typename T>
1206
- inline auto & operator& (ARCHIVE & ar, ngbla::Vec<S,T> & v)
1399
+ template <typename T, typename TS, typename TDIST, typename TB>
1400
+ inline void AtomicAdd (VectorView<T,TS,TDIST> v, const Expr<TB> & v2)
1207
1401
  {
1208
- for (int i = 0; i < S; i++)
1209
- ar & v(i);
1210
- return ar;
1402
+ auto viewv2 = v2.View();
1403
+ auto combsize = CombinedSize(v.Size(), v2.Height());
1404
+ for (size_t i = 0; i < combsize; i++)
1405
+ AtomicAdd (v(i), viewv2(i));
1211
1406
  }
1407
+
1408
+
1212
1409
  }
1213
1410
 
1214
1411
 
1215
1412
  namespace ngcore
1216
1413
  {
1414
+
1415
+ template <typename T, size_t S> class MakeSimdCl;
1416
+
1417
+ template <typename T, size_t S, int VS>
1418
+ class MakeSimdCl<ngbla::Vec<VS,T>,S>
1419
+ {
1420
+ std::array<ngbla::Vec<VS,T>,S> a;
1421
+ public:
1422
+ MakeSimdCl (std::array<ngbla::Vec<VS,T>,S> aa) : a(aa) { ; }
1423
+
1424
+ auto Get() const
1425
+ {
1426
+ std::array<T,S> ai;
1427
+ ngbla::Vec<VS, decltype(MakeSimd(ai))> res;
1428
+ for (int i = 0; i < VS; i++)
1429
+ {
1430
+ for (int j = 0; j < S; j++)
1431
+ ai[j] = a[j](i);
1432
+ res(i) = MakeSimd(ai);
1433
+ }
1434
+ return res;
1435
+ }
1436
+ };
1437
+
1438
+
1439
+
1440
+
1441
+
1217
1442
  template<typename T> struct MPI_typetrait;
1218
1443
 
1219
1444
  template<int S, typename T>
netgen/lib/libngsolve.lib CHANGED
Binary file
netgen/libngsolve.dll CHANGED
Binary file
netgen/ngscxx.bat CHANGED
@@ -1,4 +1,4 @@
1
1
  set NGSCXX_DIR=%~dp0
2
2
  call "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat" amd64
3
3
 
4
- cl /c /O2 /Ob2 /DNDEBUG /DWIN32 /D_WINDOWS /GR /EHsc /DHAVE_NETGEN_SOURCES /DUSE_TIMEOFDAY /DTCL /DLAPACK /DUSE_PARDISO /DNGS_PYTHON /DNETGEN_PYTHON /DNG_PYTHON /DPYBIND11_SIMPLE_GIL_MANAGEMENT /D_WIN32_WINNT=0x1000 /DWNT /DWNT_WINDOW /DNOMINMAX /DMSVC_EXPRESS /D_CRT_SECURE_NO_WARNINGS /DHAVE_STRUCT_TIMESPEC /DWIN32 /DPARALLEL /DNG_MPI_WRAPPER /std:c++17 /bigobj /wd4068 -DMAX_SYS_DIM=3 /arch:AVX2 /bigobj /I"C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/include" /I"C:/Python311/include" /I"%NGSCXX_DIR%/include" /I"%NGSCXX_DIR%/include/include" %*
4
+ cl /c /O2 /Ob2 /DNDEBUG /DWIN32 /D_WINDOWS /GR /EHsc /DHAVE_NETGEN_SOURCES /DUSE_TIMEOFDAY /DTCL /DLAPACK /DUSE_PARDISO /DNGS_PYTHON /DNETGEN_PYTHON /DNG_PYTHON /DPYBIND11_SIMPLE_GIL_MANAGEMENT /D_WIN32_WINNT=0x1000 /DWNT /DWNT_WINDOW /DNOMINMAX /DMSVC_EXPRESS /D_CRT_SECURE_NO_WARNINGS /DHAVE_STRUCT_TIMESPEC /DWIN32 /DPARALLEL /DNG_MPI_WRAPPER /std:c++17 /bigobj /wd4068 -DMAX_SYS_DIM=3 /arch:AVX2 /bigobj /MD /I"C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/include" /I"C:/Python311/include" /I"%NGSCXX_DIR%/include" /I"%NGSCXX_DIR%/include/include" %*
netgen/ngsld.bat CHANGED
@@ -3,4 +3,4 @@ call "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build
3
3
 
4
4
  for /f %%a in ('python -c "import sys,os; print(os.path.join(sys.base_prefix, 'libs'))"') do set PYTHON_LIBDIR="%%a"
5
5
 
6
- link /DLL %* -LC:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:"%NGSCXX_DIR%/lib" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:"%PYTHON_LIBDIR%"
6
+ link /DLL %* -LC:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:"%NGSCXX_DIR%/lib" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:"%PYTHON_LIBDIR%"
@@ -1,4 +1,4 @@
1
- set(PACKAGE_VERSION "6.2.2504-44-g8fbbbc389")
1
+ set(PACKAGE_VERSION "6.2.2601")
2
2
  find_package(Netgen CONFIG REQUIRED HINTS
3
3
  ${CMAKE_CURRENT_LIST_DIR}
4
4
  ${CMAKE_CURRENT_LIST_DIR}/..
@@ -18,20 +18,20 @@ set(NGSOLVE_CXX_COMPILER "C:/Program Files/Microsoft Visual Studio/2022/Communit
18
18
  set(NGSOLVE_CMAKE_BUILD_TYPE "Release")
19
19
 
20
20
  set(NGSOLVE_CMAKE_THREAD_LIBS_INIT "")
21
- set(NGSOLVE_MKL_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib")
21
+ set(NGSOLVE_MKL_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib")
22
22
  set(NGSOLVE_PYBIND_INCLUDE_DIR "")
23
23
  set(NGSOLVE_PYTHON_INCLUDE_DIRS "C:/Python311/include")
24
24
  set(NGSOLVE_PYTHON_LIBRARIES "C:/Python311/libs/python311.lib")
25
25
  set(NGSOLVE_PYTHON_PACKAGES_INSTALL_DIR "")
26
- set(NGSOLVE_TCL_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tcl/generic")
26
+ set(NGSOLVE_TCL_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tcl/generic")
27
27
  set(NGSOLVE_TCL_LIBRARY "C:/Python311/tcl/tclstub86.lib")
28
28
  set(NGSOLVE_TK_DND_LIBRARY "")
29
- set(NGSOLVE_TK_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tk/generic")
29
+ set(NGSOLVE_TK_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tk/generic")
30
30
  set(NGSOLVE_TK_LIBRARY "C:/Python311/tcl/tkstub86.lib")
31
31
  set(NGSOLVE_X11_X11_LIB "")
32
32
  set(NGSOLVE_X11_Xmu_LIB "")
33
- set(NGSOLVE_ZLIB_INCLUDE_DIRS "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/include")
34
- set(NGSOLVE_ZLIB_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/lib/zlibstatic.lib")
33
+ set(NGSOLVE_ZLIB_INCLUDE_DIRS "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/include")
34
+ set(NGSOLVE_ZLIB_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/lib/zlibstatic.lib")
35
35
 
36
36
  set(NGSOLVE_INTEL_MIC OFF)
37
37
  set(NGSOLVE_USE_CCACHE ON)
@@ -50,8 +50,8 @@ set(NGSOLVE_USE_VTUNE OFF)
50
50
  set(NGSOLVE_MAX_SYS_DIM 3)
51
51
 
52
52
  set(NGSOLVE_COMPILE_FLAGS " /DHAVE_NETGEN_SOURCES /DUSE_TIMEOFDAY /DTCL /DLAPACK /DUSE_PARDISO /DNGS_PYTHON /DNETGEN_PYTHON /DNG_PYTHON /DPYBIND11_SIMPLE_GIL_MANAGEMENT /D_WIN32_WINNT=0x1000 /DWNT /DWNT_WINDOW /DNOMINMAX /DMSVC_EXPRESS /D_CRT_SECURE_NO_WARNINGS /DHAVE_STRUCT_TIMESPEC /DWIN32 /DPARALLEL /DNG_MPI_WRAPPER" CACHE STRING "Preprocessor definitions of ngscxx")
53
- set(NGSOLVE_LINK_FLAGS " -LC:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:\"%NGSCXX_DIR%/lib\" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:\"%PYTHON_LIBDIR%\"" CACHE STRING "Link flags set in ngsld")
54
- set(NGSOLVE_INCLUDE_DIRS C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/include;C:/Python311/include CACHE STRING "Include dirs set in ngscxx")
53
+ set(NGSOLVE_LINK_FLAGS " -LC:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:\"%NGSCXX_DIR%/lib\" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:\"%PYTHON_LIBDIR%\"" CACHE STRING "Link flags set in ngsld")
54
+ set(NGSOLVE_INCLUDE_DIRS C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/include;C:/Python311/include CACHE STRING "Include dirs set in ngscxx")
55
55
 
56
56
  set(NGSOLVE_INSTALL_DIR_PYTHON .)
57
57
  set(NGSOLVE_INSTALL_DIR_BIN netgen)
@@ -19,7 +19,7 @@ set(CMAKE_IMPORT_FILE_VERSION 1)
19
19
  set(_cmake_targets_defined "")
20
20
  set(_cmake_targets_not_defined "")
21
21
  set(_cmake_expected_targets "")
22
- foreach(_cmake_expected_target IN ITEMS netgen_libs ngs_lapack ngstd ngbla ngla ngfem ngsbem ngcomp ngsolve)
22
+ foreach(_cmake_expected_target IN ITEMS netgen_lib netgen_core_lib ngs_lapack ngstd ngbla ngla ngfem ngsbem ngcomp ngsolve)
23
23
  list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
24
24
  if(TARGET "${_cmake_expected_target}")
25
25
  list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
@@ -54,19 +54,26 @@ if(_IMPORT_PREFIX STREQUAL "/")
54
54
  set(_IMPORT_PREFIX "")
55
55
  endif()
56
56
 
57
- # Create imported target netgen_libs
58
- add_library(netgen_libs INTERFACE IMPORTED)
57
+ # Create imported target netgen_lib
58
+ add_library(netgen_lib INTERFACE IMPORTED)
59
59
 
60
- set_target_properties(netgen_libs PROPERTIES
61
- INTERFACE_LINK_LIBRARIES "nglib;ngcore"
60
+ set_target_properties(netgen_lib PROPERTIES
61
+ INTERFACE_LINK_LIBRARIES "nglib"
62
+ )
63
+
64
+ # Create imported target netgen_core_lib
65
+ add_library(netgen_core_lib INTERFACE IMPORTED)
66
+
67
+ set_target_properties(netgen_core_lib PROPERTIES
68
+ INTERFACE_LINK_LIBRARIES "ngcore"
62
69
  )
63
70
 
64
71
  # Create imported target ngs_lapack
65
72
  add_library(ngs_lapack INTERFACE IMPORTED)
66
73
 
67
74
  set_target_properties(ngs_lapack PROPERTIES
68
- INTERFACE_INCLUDE_DIRECTORIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/include"
69
- INTERFACE_LINK_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib"
75
+ INTERFACE_INCLUDE_DIRECTORIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/include"
76
+ INTERFACE_LINK_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib"
70
77
  )
71
78
 
72
79
  # Create imported target ngstd
@@ -75,7 +82,7 @@ add_library(ngstd INTERFACE IMPORTED)
75
82
  set_target_properties(ngstd PROPERTIES
76
83
  INTERFACE_COMPILE_DEFINITIONS "HAVE_NETGEN_SOURCES;USE_TIMEOFDAY;TCL;LAPACK;USE_PARDISO;NGS_PYTHON"
77
84
  INTERFACE_COMPILE_OPTIONS "/std:c++17;/bigobj;/wd4068;-DMAX_SYS_DIM=3"
78
- INTERFACE_LINK_LIBRARIES "netgen_libs;\$<LINK_ONLY:>"
85
+ INTERFACE_LINK_LIBRARIES "netgen_core_lib;\$<LINK_ONLY:>"
79
86
  )
80
87
 
81
88
  # Create imported target ngbla
@@ -110,14 +117,14 @@ set_target_properties(ngsbem PROPERTIES
110
117
  add_library(ngcomp INTERFACE IMPORTED)
111
118
 
112
119
  set_target_properties(ngcomp PROPERTIES
113
- INTERFACE_LINK_LIBRARIES "ngfem;ngla;ngbla;ngstd;\$<LINK_ONLY:>"
120
+ INTERFACE_LINK_LIBRARIES "ngfem;ngla;ngbla;ngstd;\$<LINK_ONLY:>;netgen_lib"
114
121
  )
115
122
 
116
123
  # Create imported target ngsolve
117
124
  add_library(ngsolve SHARED IMPORTED)
118
125
 
119
126
  set_target_properties(ngsolve PROPERTIES
120
- INTERFACE_LINK_LIBRARIES "netgen_libs;ngsolve;ngcomp;ngfem;ngsbem;ngbla;ngla;ngstd"
127
+ INTERFACE_LINK_LIBRARIES "netgen_lib;netgen_core_lib;ngsolve;ngcomp;ngfem;ngsbem;ngbla;ngla;ngstd"
121
128
  )
122
129
 
123
130
  if(CMAKE_VERSION VERSION_LESS 3.0.0)