ngsolve 6.2.2502__cp313-cp313-macosx_10_15_universal2.whl → 6.2.2503__cp313-cp313-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.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

Files changed (68) hide show
  1. netgen/include/fespace.hpp +3 -2
  2. netgen/include/intrules_SauterSchwab.hpp +25 -0
  3. netgen/include/mptools.hpp +80 -16
  4. netgen/include/potentialtools.hpp +20 -0
  5. netgen/include/prolongation.hpp +126 -3
  6. netgen/include/sparsematrix_impl.hpp +71 -5
  7. netgen/include/tangentialfacetfespace.hpp +7 -22
  8. netgen/libngbla.dylib +0 -0
  9. netgen/libngcomp.dylib +0 -0
  10. netgen/libngfem.dylib +0 -0
  11. netgen/libngla.dylib +0 -0
  12. netgen/libngsbem.dylib +0 -0
  13. netgen/libngsolve.dylib +0 -0
  14. netgen/libngstd.dylib +0 -0
  15. ngsolve/__init__.pyi +2 -2
  16. ngsolve/cmake/NGSolveConfig.cmake +5 -5
  17. ngsolve/cmake/ngsolve-targets-release.cmake +10 -0
  18. ngsolve/cmake/ngsolve-targets.cmake +9 -2
  19. ngsolve/comp/__init__.pyi +5 -1
  20. ngsolve/config/__init__.pyi +6 -6
  21. ngsolve/config/config.py +5 -5
  22. ngsolve/config/config.pyi +6 -6
  23. ngsolve/directsolvers.pyi +1 -1
  24. ngsolve/fem.pyi +1 -118
  25. ngsolve/krylovspace.pyi +3 -3
  26. ngsolve/ngslib.so +0 -0
  27. ngsolve/nonlinearsolvers.pyi +1 -1
  28. ngsolve/timestepping.pyi +3 -3
  29. ngsolve/timing.pyi +1 -1
  30. ngsolve/utils.pyi +2 -14
  31. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2503.dist-info}/METADATA +2 -2
  32. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2503.dist-info}/RECORD +68 -65
  33. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/Netgen.icns +0 -0
  34. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/bin/ngscxx +0 -0
  35. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/bin/ngsld +0 -0
  36. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/bin/ngsolve.tcl +0 -0
  37. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/bin/ngspy +0 -0
  38. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/beam.geo +0 -0
  39. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/beam.vol +0 -0
  40. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/chip.in2d +0 -0
  41. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/chip.vol +0 -0
  42. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/coil.geo +0 -0
  43. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/coil.vol +0 -0
  44. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/coilshield.geo +0 -0
  45. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/coilshield.vol +0 -0
  46. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/cube.geo +0 -0
  47. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/cube.vol +0 -0
  48. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  49. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  50. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d1_square.pde +0 -0
  51. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d2_chip.pde +0 -0
  52. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  53. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d4_cube.pde +0 -0
  54. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d5_beam.pde +0 -0
  55. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  56. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d7_coil.pde +0 -0
  57. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  58. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  59. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  60. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  61. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  62. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/shaft.geo +0 -0
  63. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/shaft.vol +0 -0
  64. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/square.in2d +0 -0
  65. {ngsolve-6.2.2502.data → ngsolve-6.2.2503.data}/data/share/ngsolve/square.vol +0 -0
  66. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2503.dist-info}/LICENSE +0 -0
  67. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2503.dist-info}/WHEEL +0 -0
  68. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2503.dist-info}/top_level.txt +0 -0
@@ -256,7 +256,7 @@ ANY 1 1 1 1 | 15
256
256
 
257
257
  virtual void UpdateDofTables() { ; }
258
258
  virtual void UpdateCouplingDofArray() { ; }
259
-
259
+ virtual void UpdateFreeDofs();
260
260
  /// update element coloring
261
261
  virtual void FinalizeUpdate();
262
262
 
@@ -640,7 +640,7 @@ ANY 1 1 1 1 | 15
640
640
  /// Set multigrid prolongation
641
641
  // void SetProlongation (ngmg::Prolongation * aprol)
642
642
  // { prol = aprol; }
643
- virtual void SetHarmonicProlongation (shared_ptr<BilinearForm> bfa);
643
+ virtual void SetHarmonicProlongation (shared_ptr<BilinearForm> bfa, string inverse);
644
644
 
645
645
  /// returns function-evaluator
646
646
  shared_ptr<DifferentialOperator> GetEvaluator (VorB vb = VOL) const
@@ -1109,6 +1109,7 @@ ANY 1 1 1 1 | 15
1109
1109
 
1110
1110
  /// copies dofcoupling from components
1111
1111
  void UpdateCouplingDofArray() override;
1112
+ virtual void UpdateFreeDofs() override;
1112
1113
 
1113
1114
  void SetDefinedOn (VorB vb, const BitArray& defon) override;
1114
1115
 
@@ -0,0 +1,25 @@
1
+ #ifndef INTRULES_HPP
2
+ #define INTRULES_HPP
3
+
4
+ #include <bla.hpp>
5
+
6
+ namespace ngsbem
7
+ {
8
+ using namespace ngbla;
9
+
10
+ // x, y in triangle [(0,0), (1,0), (0,1)]
11
+ tuple<Array<Vec<2>>, Array<Vec<2>>, Array<double>> IdenticPanelIntegrationRule (int order);
12
+
13
+
14
+ // x, y in triangle [(0,0), (1,0), (0,1)]
15
+ // x=(0,0) and y=(0,0) are common vertices
16
+ tuple<Array<Vec<2>>, Array<Vec<2>>, Array<double>> CommonVertexIntegrationRule (int order);
17
+
18
+
19
+ // x, y in triangle [(0,0), (1,0), (0,1)]
20
+ // x in [(0,0),(1,0)] and y in [(0,0),(1,0)] are common edges
21
+ tuple<Array<Vec<2>>, Array<Vec<2>>, Array<double>> CommonEdgeIntegrationRule (int order);
22
+
23
+ }
24
+
25
+ #endif
@@ -10,9 +10,16 @@
10
10
  #include <coefficient.hpp>
11
11
  #include <recursive_pol.hpp>
12
12
 
13
- namespace ngfem
13
+
14
+ namespace ngcomp
14
15
  {
16
+ class Region;
17
+ }
15
18
 
19
+ namespace ngsbem
20
+ {
21
+ using namespace ngfem;
22
+
16
23
 
17
24
  template <typename entry_type = Complex>
18
25
  class NGS_DLL_HEADER SphericalHarmonics
@@ -211,22 +218,53 @@ namespace ngfem
211
218
  class MPSingular
212
219
  {
213
220
  public:
221
+ /*
214
222
  template <typename T>
215
223
  static void Eval (int order, double r, double scale, T && values)
216
224
  {
217
225
  SphericalHankel1(order, r, scale, values);
218
226
  }
227
+ */
228
+
229
+ template <typename T>
230
+ static void Eval (int order, double kappa, double r, double rtyp, T && values)
231
+ {
232
+ double scale = Scale(kappa, rtyp);
233
+ SphericalHankel1(order, r*kappa, scale, values);
234
+ }
235
+
236
+ static double Scale (double kappa, double rtyp)
237
+ {
238
+ return min(1.0, rtyp*kappa);
239
+ }
219
240
  };
241
+
242
+
220
243
 
221
244
  // jn
222
245
  class MPRegular
223
246
  {
224
- public:
247
+ public:
248
+ /*
225
249
  template <typename T>
226
250
  static void Eval (int order, double r, double scale, T && values)
227
251
  {
228
252
  SphericalBessel (order, r, 1.0/scale, values);
229
253
  }
254
+ */
255
+
256
+ template <typename T>
257
+ static void Eval (int order, double kappa, double r, double rtyp, T && values)
258
+ {
259
+ double scale = Scale(kappa, rtyp);
260
+ SphericalBessel (order, r*kappa, 1.0/scale, values);
261
+ }
262
+
263
+ static double Scale (double kappa, double rtyp)
264
+ {
265
+ return 1.0/ min(1.0, 0.25*rtyp*kappa);
266
+ }
267
+
230
268
  };
231
269
 
232
270
 
@@ -237,22 +275,30 @@ namespace ngfem
237
275
  {
238
276
  SphericalHarmonics<entry_type> sh;
239
277
  double kappa;
240
- double scale;
278
+ double rtyp;
279
+ // double scale;
241
280
  public:
281
+ /*
242
282
  MultiPole (int aorder, double akappa, double ascale = 1)
243
283
  : sh(aorder), kappa(akappa), scale(ascale) { }
284
+ */
244
285
 
286
+ MultiPole (int aorder, double akappa, double artyp)
287
+ : sh(aorder), kappa(akappa), rtyp(artyp) { }
288
+
289
+
245
290
  entry_type & Coef(int n, int m) { return sh.Coef(n,m); }
246
291
  auto & SH() { return sh; }
247
292
  const auto & SH() const { return sh; }
248
293
  double Kappa() const { return kappa; }
249
- double Scale() const { return scale; }
294
+ double Scale() const { return RADIAL::Scale(kappa, rtyp); }
295
+ double RTyp() const { return rtyp; }
250
296
  int Order() const { return sh.Order(); }
251
297
 
252
298
  MultiPole Truncate(int neworder) const
253
299
  {
254
300
  if (neworder > sh.Order()) neworder=sh.Order();
255
- MultiPole nmp(neworder, kappa);
301
+ MultiPole nmp(neworder, kappa, rtyp);
256
302
  nmp.sh.Coefs() = sh.Coefs().Range(sqr(neworder+1));
257
303
  return nmp;
258
304
  }
@@ -271,15 +317,27 @@ namespace ngfem
271
317
  void AddDipole (Vec<3> x, Vec<3> d, entry_type c);
272
318
  void AddCurrent (Vec<3> ap, Vec<3> ep, Complex j, int num=100);
273
319
 
274
-
320
+ /*
275
321
  void ChangeScaleTo (double newscale)
276
322
  {
277
- double fac = scale/newscale;
323
+ double fac = Scale()/newscale;
278
324
  double prod = 1;
279
325
  for (int n = 0; n <= sh.Order(); n++, prod*= fac)
280
326
  sh.CoefsN(n) *= prod;
281
327
  scale = newscale;
282
328
  }
329
+ */
330
+ void ChangeRTypTo (double new_rtyp)
331
+ {
332
+ // double fac = Scale()/newscale;
333
+ double fac = RADIAL::Scale(kappa, rtyp) / RADIAL::Scale(kappa, new_rtyp);
334
+ double prod = 1;
335
+ for (int n = 0; n <= sh.Order(); n++, prod*= fac)
336
+ sh.CoefsN(n) *= prod;
337
+ // scale = newscale;
338
+ rtyp = new_rtyp;
339
+ }
340
+
283
341
 
284
342
  Vector<double> Spectrum (bool scaled) const
285
343
  {
@@ -288,7 +346,7 @@ namespace ngfem
288
346
  for (int n = 0; n <= Order(); n++)
289
347
  {
290
348
  spec(n) = fac * L2Norm2(sh.CoefsN(n));
291
- if (!scaled) fac *= sqr(scale);
349
+ if (!scaled) fac *= sqr(Scale());
292
350
  }
293
351
  return spec;
294
352
  }
@@ -570,7 +628,7 @@ namespace ngfem
570
628
 
571
629
  entry_type EvaluateDeriv(Vec<3> p, Vec<3> d) const
572
630
  {
573
- entry_type sum = 0;
631
+ entry_type sum{0.0};
574
632
  if (childs[0])
575
633
  {
576
634
  for (auto & child : childs)
@@ -625,7 +683,7 @@ namespace ngfem
625
683
  {
626
684
  if (charges.Size()+dipoles.Size()+currents.Size() == 0)
627
685
  {
628
- mp = MultiPole<MPSingular,entry_type> (-1, mp.Kappa());
686
+ mp = MultiPole<MPSingular,entry_type> (-1, mp.Kappa(), 1.);
629
687
  return;
630
688
  }
631
689
 
@@ -722,12 +780,12 @@ namespace ngfem
722
780
 
723
781
  double Kappa() const { return root.mp.Kappa(); }
724
782
 
725
- void AddCharge(Vec<3> x, Complex c)
783
+ void AddCharge(Vec<3> x, entry_type c)
726
784
  {
727
785
  root.AddCharge(x, c);
728
786
  }
729
787
 
730
- void AddDipole(Vec<3> x, Vec<3> d, Complex c)
788
+ void AddDipole(Vec<3> x, Vec<3> d, entry_type c)
731
789
  {
732
790
  root.AddDipole(x, d, c);
733
791
  }
@@ -756,7 +814,7 @@ namespace ngfem
756
814
  }
757
815
  */
758
816
  }
759
-
817
+
760
818
  void Print (ostream & ost) const
761
819
  {
762
820
  root.Print(ost);
@@ -940,7 +998,7 @@ namespace ngfem
940
998
  mp.TransformAdd (ch->mp, ch->center-center);
941
999
  ch->LocalizeExpansion(allow_refine);
942
1000
  }
943
- mp = MultiPole<MPRegular,elem_type>(-1, mp.Kappa());
1001
+ mp = MultiPole<MPRegular,elem_type>(-1, mp.Kappa(), 1.);
944
1002
  //mp.SH().Coefs()=0.0;
945
1003
  }
946
1004
  }
@@ -1064,7 +1122,7 @@ namespace ngfem
1064
1122
  }
1065
1123
 
1066
1124
  if (total_targets == 0)
1067
- mp = MultiPole<MPRegular>(-1, mp.Kappa());
1125
+ mp = MultiPole<MPRegular,elem_type>(-1, mp.Kappa(),1.);
1068
1126
  }
1069
1127
 
1070
1128
 
@@ -1226,6 +1284,9 @@ namespace ngfem
1226
1284
 
1227
1285
 
1228
1286
 
1287
+ template <typename entry_type> class RegularMLMultiPoleCF;
1288
+
1289
+
1229
1290
  template <typename RADIAL, typename entry_type=Complex>
1230
1291
  class MultiPoleCF : public CoefficientFunction
1231
1292
  {
@@ -1285,7 +1346,8 @@ namespace ngfem
1285
1346
 
1286
1347
  }
1287
1348
 
1288
- shared_ptr<SingularMLMultiPole<entry_type>> MLMP() { return mlmp; }
1349
+ shared_ptr<SingularMLMultiPole<entry_type>> MLMP() const { return mlmp; }
1350
+ shared_ptr<RegularMLMultiPoleCF<entry_type>> CreateRegularExpansion(Vec<3> center, double r) const;
1289
1351
  };
1290
1352
 
1291
1353
 
@@ -1296,6 +1358,8 @@ namespace ngfem
1296
1358
  public:
1297
1359
  RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPoleCF<entry_type>> asingmp, Vec<3> center, double r, int order)
1298
1360
  : CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp->MLMP(), center, r, order)} { }
1361
+ RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPole<entry_type>> asingmp, Vec<3> center, double r, int order)
1362
+ : CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp, center, r, order)} { }
1299
1363
 
1300
1364
  virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
1301
1365
  { throw Exception("real eval not available"); }
@@ -0,0 +1,20 @@
1
+ #ifndef FILE_POTENTIALS
2
+ #define FILE_POTENTIALS
3
+
4
+ /*
5
+ tools for computing with potentials using multipoles
6
+ */
7
+
8
+
9
+ #include <mptools.hpp>
10
+ #include <meshaccess.hpp>
11
+
12
+
13
+ namespace ngsbem
14
+ {
15
+
16
+ extern void AddCurrentDensity (SingularMLMultiPole<Vec<3,Complex>> & mp, shared_ptr<CoefficientFunction> current, ngcomp::Region reg);
17
+
18
+ }
19
+
20
+ #endif
@@ -233,12 +233,14 @@ namespace ngmg
233
233
  class NGS_DLL_HEADER HarmonicProlongation : public Prolongation
234
234
  {
235
235
  shared_ptr<Prolongation> baseprol;
236
- shared_ptr<BilinearForm> bfa;
236
+ weak_ptr<BilinearForm> wbfa;
237
237
  Array<shared_ptr<BaseMatrix>> innerinverses;
238
- Array<size_t> edges_on_level;
238
+ Array<size_t> facets_on_level;
239
+ Array<shared_ptr<BitArray>> freedofs;
240
+ string inverse;
239
241
  public:
240
242
  HarmonicProlongation (shared_ptr<Prolongation> abaseprol,
241
- shared_ptr<BilinearForm> abfa);
243
+ shared_ptr<BilinearForm> abfa, string ainverse);
242
244
 
243
245
  virtual void Update (const FESpace & fes) override;
244
246
 
@@ -248,6 +250,127 @@ namespace ngmg
248
250
  virtual void ProlongateInline (int finelevel, BaseVector & v) const override;
249
251
  virtual void RestrictInline (int finelevel, BaseVector & v) const override;
250
252
  };
253
+
254
+
255
+
256
+
257
+
258
+ template <int DIM>
259
+ class FacetProlongation : public Prolongation
260
+ {
261
+ protected:
262
+ shared_ptr<MeshAccess> ma;
263
+
264
+ int dofs_per_facet = -1;
265
+ Array<Array<int>> first_dofs;
266
+ Array<int> prol_class; // which prol to use ?
267
+ Array<size_t> facets_on_level;
268
+
269
+ static constexpr int NUMPROL = (DIM==2) ? 2 : 32;
270
+ array<Matrix<double>,NUMPROL> facetprol;
271
+
272
+ bool haveprols = false;
273
+
274
+ public:
275
+ FacetProlongation (shared_ptr<MeshAccess> ama)
276
+ : ma(ama) { }
277
+
278
+
279
+ virtual shared_ptr<SparseMatrix< double >> CreateProlongationMatrix( int finelevel ) const override
280
+ {
281
+ return nullptr; // or NULL ?
282
+ }
283
+
284
+
285
+ virtual void ProlongateInline (int finelevel, BaseVector & v) const override
286
+ {
287
+ auto fv = v.FV<double>();
288
+ Matrix<double> tmp(facets_on_level[finelevel], dofs_per_facet);
289
+ tmp = 0.0;
290
+
291
+ for (size_t i = 0; i < first_dofs[finelevel-1].Size()-1; i++)
292
+ {
293
+ IntRange r(first_dofs[finelevel-1][i], first_dofs[finelevel-1][i+1]);
294
+ if (r.Size() > 0)
295
+ tmp.Row(i) = fv.Range(r);
296
+ }
297
+
298
+ if constexpr (DIM==2)
299
+ {
300
+ for (int i = facets_on_level[finelevel-1]; i < facets_on_level[finelevel]; i++)
301
+ if (auto parents = get<1>(ma->GetParentEdges(i)); parents[1] == -1)
302
+ {
303
+ int pe = parents[0];
304
+ tmp.Row(i) = facetprol[prol_class[i]] * tmp.Row(pe);
305
+ }
306
+ }
307
+ else
308
+ {
309
+ for (int i = facets_on_level[finelevel-1]; i < facets_on_level[finelevel]; i++)
310
+ if (auto parents = get<1>(ma->GetParentFaces(i)); parents[1] == -1)
311
+ {
312
+ int pe = parents[0];
313
+ tmp.Row(i) = facetprol[prol_class[i]] * tmp.Row(pe);
314
+ }
315
+ }
316
+
317
+ for (size_t i = 0; i < first_dofs[finelevel].Size()-1; i++)
318
+ {
319
+ IntRange r(first_dofs[finelevel][i], first_dofs[finelevel][i+1]);
320
+ if (r.Size() > 0)
321
+ fv.Range(r) = tmp.Row(i);
322
+ }
323
+ }
324
+
325
+ virtual void RestrictInline (int finelevel, BaseVector & v) const override
326
+ {
327
+ auto fv = v.FV<double>();
328
+ Matrix<double> tmp(facets_on_level[finelevel], dofs_per_facet);
329
+ tmp = 0.0;
330
+
331
+ for (size_t i = 0; i < first_dofs[finelevel].Size()-1; i++)
332
+ {
333
+ IntRange r(first_dofs[finelevel][i], first_dofs[finelevel][i+1]);
334
+ if (r.Size() > 0)
335
+ tmp.Row(i) = fv.Range(r);
336
+ }
337
+
338
+
339
+ if constexpr (DIM==2)
340
+ {
341
+ for (int i = facets_on_level[finelevel-1]; i < facets_on_level[finelevel]; i++)
342
+ if (auto parents = get<1>(ma->GetParentEdges(i)); parents[1] == -1)
343
+ {
344
+ int pe = parents[0];
345
+ tmp.Row(pe) += Trans(facetprol[prol_class[i]]) * tmp.Row(i);
346
+ }
347
+ }
348
+ else
349
+ {
350
+ // for (int i = facets_on_level[finelevel-1]; i < facets_on_level[finelevel]; i++)
351
+ for (int i = facets_on_level[finelevel]-1; i >= facets_on_level[finelevel-1]; i--)
352
+ if (auto parents = get<1>(ma->GetParentFaces(i)); parents[1] == -1)
353
+ {
354
+ int pe = parents[0];
355
+ tmp.Row(pe) += Trans(facetprol[prol_class[i]]) * tmp.Row(i);
356
+ tmp.Row(i) = 0.0; // optional, for testing
357
+ }
358
+ }
359
+
360
+ fv = 0.0;
361
+ for (size_t i = 0; i < first_dofs[finelevel-1].Size()-1; i++)
362
+ {
363
+ IntRange r(first_dofs[finelevel-1][i], first_dofs[finelevel-1][i+1]);
364
+ if (r.Size() > 0)
365
+ fv.Range(r) = tmp.Row(i);
366
+ }
367
+
368
+ }
369
+
370
+ };
371
+
372
+
373
+
251
374
  }
252
375
 
253
376
 
@@ -51,28 +51,94 @@ namespace ngla
51
51
  FlatArray<TM> val, size_t h, size_t w)
52
52
  {
53
53
  static Timer t("SparseMatrix::CreateFromCOO"); RegionTimer r(t);
54
- Array<int> cnt(h);
54
+ static Timer t1("SparseMatrix::CreateFromCOO 1");
55
+ static Timer t2("SparseMatrix::CreateFromCOO 2");
56
+ static Timer t3("SparseMatrix::CreateFromCOO 3");
55
57
 
56
58
  /*
57
- cnt = 0;
58
- for (auto i : indi) cnt[i]++;
59
- */
59
+ {
60
+ Array<int> cnt(h);
60
61
 
62
+ t1.Start();
61
63
  DynamicTable<int> tab(h);
62
64
  for (size_t i = 0; i < indi.Size(); i++)
63
65
  tab.AddUnique(indi[i], indj[i]);
66
+ t1.Stop();
64
67
  for (size_t i = 0; i < h; i++)
65
68
  cnt[i] = tab.EntrySize(i);
66
69
 
67
70
  auto matrix = make_shared<SparseMatrix<TM>> (cnt, w);
71
+ t2.Start();
68
72
  for (auto k : ngstd::Range(indi))
69
73
  matrix->CreatePosition(indi[k], indj[k]);
74
+ t2.Stop();
70
75
  matrix->SetZero();
71
76
 
77
+ t3.Start();
72
78
  for (auto k : ngstd::Range(indi))
73
79
  (*matrix)(indi[k], indj[k]) += val[k];
80
+ t3.Stop();
81
+ // return matrix;
82
+ }
83
+ */
84
+
85
+ Array<int> cnt(h);
86
+ cnt = 0;
87
+ for (auto i : indi)
88
+ cnt[i]++;
89
+
90
+ Table<int> tab(cnt);
91
+ cnt = 0;
92
+
93
+ for (auto [i,j] : Zip(indi, indj))
94
+ tab[i][cnt[i]++] = j;
95
+
96
+ cnt = 0;
97
+ // for (int i = 0; i < tab.Size(); i++)
98
+ ParallelFor (tab.Size(), [&] (size_t i)
99
+ {
100
+ QuickSort (tab[i]);
101
+
102
+ int prev = -1;
103
+ for (auto j : tab[i])
104
+ {
105
+ if (j != prev) cnt[i]++;
106
+ prev = j;
107
+ }
108
+ });
109
+
110
+ auto matrix = make_shared<SparseMatrix<TM>> (cnt, w);
111
+ t2.Start();
112
+ // for (auto k : ngstd::Range(indi))
113
+ // matrix->CreatePosition(indi[k], indj[k]);
74
114
 
75
- return matrix;
115
+ cnt = 0;
116
+ for (int i = 0; i < tab.Size(); i++)
117
+ {
118
+ int prev = -1;
119
+ for (auto j : tab[i])
120
+ {
121
+ auto cols = matrix->GetRowIndices(i);
122
+ if (j != prev)
123
+ cols[cnt[i]++] = j;
124
+ prev = j;
125
+ }
126
+ }
127
+
128
+ t2.Stop();
129
+ matrix->SetZero();
130
+
131
+ t3.Start();
132
+ /*
133
+ for (auto k : ngstd::Range(indi))
134
+ (*matrix)(indi[k], indj[k]) += val[k];
135
+ */
136
+ ParallelFor (indi.Size(), [&](size_t k)
137
+ {
138
+ AtomicAdd ( (*matrix)(indi[k], indj[k]), val[k]);
139
+ });
140
+ t3.Stop();
141
+ return matrix;
76
142
  }
77
143
 
78
144
 
@@ -16,34 +16,22 @@ namespace ngcomp
16
16
  class NGS_DLL_HEADER TangentialFacetFESpace : public FESpace
17
17
  {
18
18
  protected:
19
- /// Level
20
- // int level;
21
- /// Number of Facets
22
- // int nfacets;
23
- ///
24
- // int ncfacets;
25
- ///
26
- // int nel;
27
-
28
19
  Array<int> first_facet_dof;
29
20
  Array<int> first_inner_dof; // for highest_order_dc
30
- // int ndof_lo;
31
21
 
32
22
  int rel_order;
33
23
 
34
24
  Array<IVec<2> > order_facet;
35
25
  Array<bool> fine_facet;
36
26
 
37
- // int ndof;
38
- // Array<int> ndlevel;
39
27
  bool var_order;
40
28
  bool print;
41
29
 
42
30
  bool highest_order_dc;
43
31
  bool hide_highest_order_dc;
32
+ bool all_dofs_together;
44
33
 
45
34
  public:
46
- ///
47
35
  TangentialFacetFESpace (shared_ptr<MeshAccess> ama, const Flags & flags,
48
36
  bool parseflags = false );
49
37
 
@@ -61,20 +49,11 @@ namespace ngcomp
61
49
  virtual void SetOrder (NodeId ni, int order) override;
62
50
  virtual int GetOrder (NodeId ni) const override;
63
51
 
64
-
65
- // virtual size_t GetNDof() const throw() override { return ndof; }
66
- // virtual size_t GetNDofLevel ( int i ) const override { return ndlevel[i]; }
67
-
68
52
  virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
69
53
 
70
- // virtual int GetNDofLowOrder () const
71
- // { return ndof_lo; }
72
54
 
73
55
  virtual FiniteElement & GetFE(ElementId ei, Allocator & lh) const override;
74
56
 
75
- // virtual const FiniteElement & GetFE ( int elnr, LocalHeap & lh ) const;
76
- // virtual const FiniteElement & GetSFE ( int selnr, LocalHeap & lh ) const;
77
-
78
57
  virtual void GetFacetDofNrs (int felnr, Array<DofId> & dnums) const;
79
58
 
80
59
  virtual int GetNFacetDofs (int felnr) const;
@@ -90,6 +69,12 @@ namespace ngcomp
90
69
  virtual IVec<2> GetFacetOrder(int fnr) const;
91
70
 
92
71
  virtual int GetFirstFacetDof(int fanr) const;
72
+ const auto & GetFirstFacetDof() const { return first_facet_dof; }
73
+
74
+ IntRange GetFacetDofs (int nr) const
75
+ {
76
+ return IntRange (first_facet_dof[nr], first_facet_dof[nr+1]);
77
+ }
93
78
 
94
79
  virtual bool UsesHighestOrderDiscontinuous() const {return highest_order_dc;};
95
80
 
netgen/libngbla.dylib CHANGED
Binary file
netgen/libngcomp.dylib CHANGED
Binary file
netgen/libngfem.dylib CHANGED
Binary file
netgen/libngla.dylib CHANGED
Binary file
netgen/libngsbem.dylib ADDED
Binary file
netgen/libngsolve.dylib CHANGED
Binary file
netgen/libngstd.dylib CHANGED
Binary file
ngsolve/__init__.pyi CHANGED
@@ -44,8 +44,8 @@ from ngsolve.comp import HDiv
44
44
  from ngsolve.comp import HDivDiv
45
45
  from ngsolve.comp import HDivDivSurface
46
46
  from ngsolve.comp import HDivSurface
47
- from ngsolve.comp import Hidden as PrivateSpace
48
47
  from ngsolve.comp import Hidden
48
+ from ngsolve.comp import Hidden as PrivateSpace
49
49
  from ngsolve.comp import Integrate
50
50
  from ngsolve.comp import Interpolate
51
51
  from ngsolve.comp import L2
@@ -217,7 +217,7 @@ TET: fem.ET # value = <ET.TET: 20>
217
217
  TRIG: fem.ET # value = <ET.TRIG: 10>
218
218
  VERTEX: fem.NODE_TYPE # value = <NODE_TYPE.VERTEX: 0>
219
219
  VOL: comp.VorB # value = <VorB.VOL: 0>
220
- __version__: str = '6.2.2502'
220
+ __version__: str = '6.2.2503'
221
221
  ds: comp.DifferentialSymbol # value = <ngsolve.comp.DifferentialSymbol object>
222
222
  dx: comp.DifferentialSymbol # value = <ngsolve.comp.DifferentialSymbol object>
223
223
  ngsglobals: comp.GlobalVariables # value = <ngsolve.comp.GlobalVariables object>
@@ -1,4 +1,4 @@
1
- set(PACKAGE_VERSION "6.2.2502")
1
+ set(PACKAGE_VERSION "6.2.2503")
2
2
  find_package(Netgen CONFIG REQUIRED HINTS
3
3
  ${CMAKE_CURRENT_LIST_DIR}
4
4
  ${CMAKE_CURRENT_LIST_DIR}/..
@@ -23,15 +23,15 @@ set(NGSOLVE_PYBIND_INCLUDE_DIR "")
23
23
  set(NGSOLVE_PYTHON_INCLUDE_DIRS "/Library/Frameworks/Python.framework/Versions/3.13/include/python3.13")
24
24
  set(NGSOLVE_PYTHON_LIBRARIES "/Library/Frameworks/Python.framework/Versions/3.13/lib/libpython3.13.dylib")
25
25
  set(NGSOLVE_PYTHON_PACKAGES_INSTALL_DIR "")
26
- set(NGSOLVE_TCL_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/src/project_tcl/generic")
26
+ set(NGSOLVE_TCL_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/src/project_tcl/generic")
27
27
  set(NGSOLVE_TCL_LIBRARY "/Library/Frameworks/Python.framework/Versions/3.13/Frameworks/Tcl.framework/libtclstub8.6.a")
28
28
  set(NGSOLVE_TK_DND_LIBRARY "")
29
- set(NGSOLVE_TK_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/src/project_tk/generic")
29
+ set(NGSOLVE_TK_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/src/project_tk/generic")
30
30
  set(NGSOLVE_TK_LIBRARY "/Library/Frameworks/Python.framework/Versions/3.13/Frameworks/Tk.framework/libtkstub8.6.a")
31
31
  set(NGSOLVE_X11_X11_LIB "")
32
32
  set(NGSOLVE_X11_Xmu_LIB "")
33
- set(NGSOLVE_ZLIB_INCLUDE_DIRS "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/zlib/include")
34
- set(NGSOLVE_ZLIB_LIBRARIES "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/zlib/lib/libz.a")
33
+ set(NGSOLVE_ZLIB_INCLUDE_DIRS "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/zlib/include")
34
+ set(NGSOLVE_ZLIB_LIBRARIES "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.13/cmake-build/dependencies/zlib/lib/libz.a")
35
35
 
36
36
  set(NGSOLVE_INTEL_MIC OFF)
37
37
  set(NGSOLVE_USE_CCACHE ON)