ngsolve 6.2.2506.post33.dev0__cp311-cp311-win_amd64.whl → 6.2.2506.post38.dev0__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.

Potentially problematic release.


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

Files changed (43) hide show
  1. netgen/include/kernels.hpp +3 -4
  2. netgen/include/mptools.hpp +393 -173
  3. netgen/include/recursive_pol.hpp +2 -2
  4. netgen/include/sparsematrix.hpp +1 -1
  5. netgen/lib/libngsolve.lib +0 -0
  6. netgen/libngsolve.dll +0 -0
  7. ngsolve/cmake/NGSolveConfig.cmake +1 -1
  8. ngsolve/config/config.py +5 -5
  9. ngsolve/ngslib.pyd +0 -0
  10. {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/METADATA +1 -1
  11. {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/RECORD +43 -43
  12. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/Scripts/ngsolve.tcl +0 -0
  13. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.geo +0 -0
  14. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.vol +0 -0
  15. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.in2d +0 -0
  16. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.vol +0 -0
  17. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.geo +0 -0
  18. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.vol +0 -0
  19. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coilshield.geo +0 -0
  20. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coilshield.vol +0 -0
  21. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.geo +0 -0
  22. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.vol +0 -0
  23. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  24. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  25. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d1_square.pde +0 -0
  26. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d2_chip.pde +0 -0
  27. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  28. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d4_cube.pde +0 -0
  29. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d5_beam.pde +0 -0
  30. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  31. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d7_coil.pde +0 -0
  32. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  33. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  34. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  35. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  36. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  37. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.geo +0 -0
  38. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.vol +0 -0
  39. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/square.in2d +0 -0
  40. {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/square.vol +0 -0
  41. {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/LICENSE +0 -0
  42. {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/WHEEL +0 -0
  43. {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/top_level.txt +0 -0
@@ -485,10 +485,9 @@ namespace ngsbem
485
485
 
486
486
  void AddSource (SingularMLExpansion<Complex> & mp, Vec<3> pnt, Vec<3> nv, BareSliceVector<Complex> val) const
487
487
  {
488
- /*
489
- mp.AddCharge(pnt, Complex(0, -kappa)*val(0));
490
- mp.AddDipole(pnt, -nv, val(0));
491
- */
488
+ // mp.AddCharge(pnt, Complex(0, -kappa)*val(0));
489
+ // mp.AddDipole(pnt, -nv, val(0));
490
+
492
491
  mp.AddChargeDipole (pnt, Complex(0, -kappa)*val(0), -nv, val(0));
493
492
  }
494
493
 
@@ -25,6 +25,7 @@ namespace ngsbem
25
25
 
26
26
  constexpr int FMM_SW = 4;
27
27
 
28
+
28
29
 
29
30
  // ************************ SIMD - creation (should end up in simd.hpp) *************
30
31
 
@@ -42,7 +43,19 @@ namespace ngsbem
42
43
  }
43
44
 
44
45
 
45
-
46
+ class NGS_DLL_HEADER PrecomputedSqrts
47
+ {
48
+ public:
49
+ Array<double> sqrt_int;
50
+ // Array<double> inv_sqrt_int;
51
+ Array<double> sqrt_n_np1; // sqrt(n*(n+1))
52
+ Array<double> inv_sqrt_2np1_2np3; // 1/sqrt( (2n+1)*(2n+3) )
53
+
54
+ PrecomputedSqrts();
55
+ };
56
+
57
+ extern NGS_DLL_HEADER PrecomputedSqrts presqrt;
58
+
46
59
 
47
60
 
48
61
 
@@ -189,18 +202,26 @@ namespace ngsbem
189
202
  void RotateY (double alpha, bool parallel = false);
190
203
 
191
204
 
205
+
192
206
  static double CalcAmn (int m, int n)
193
207
  {
194
208
  if (m < 0) m=-m;
195
209
  if (n < m) return 0;
196
- return sqrt( (n+1.0+m)*(n+1.0-m) / ( (2*n+1)*(2*n+3) ));
210
+
211
+ if (2*n+1 < presqrt.sqrt_int.Size())
212
+ return presqrt.sqrt_int[n+1+m]*presqrt.sqrt_int[n+1-m] * presqrt.inv_sqrt_2np1_2np3[n];
213
+ else
214
+ return sqrt( (n+1.0+m)*(n+1.0-m) / ( (2*n+1)*(2*n+3) ));
197
215
  }
198
216
 
199
217
  static double CalcBmn (int m, int n)
200
218
  {
201
219
  double sgn = (m >= 0) ? 1 : -1;
202
- if ( (m > n) || (-m > n) ) return 0;
203
- return sgn * sqrt( (n-m-1.0)*(n-m) / ( (2*n-1.0)*(2*n+1)));
220
+ if ( (m >= n) || (-m > n) ) return 0;
221
+ if (n <= presqrt.inv_sqrt_2np1_2np3.Size())
222
+ return sgn * presqrt.sqrt_n_np1[n-m-1] * presqrt.inv_sqrt_2np1_2np3[n-1];
223
+ else
224
+ return sgn * sqrt( (n-m-1.0)*(n-m) / ( (2*n-1.0)*(2*n+1)));
204
225
  }
205
226
 
206
227
  static double CalcDmn (int m, int n)
@@ -543,7 +564,7 @@ namespace ngsbem
543
564
  };
544
565
 
545
566
 
546
- static void ProcessBatch(FlatArray<RecordingSS*> batch, double len, double theta) {
567
+ static void ProcessBatchSS(FlatArray<RecordingSS*> batch, double len, double theta) {
547
568
  constexpr int vec_length = VecLength<entry_type>;
548
569
  int batch_size = batch.Size();
549
570
  int N = batch_size * vec_length;
@@ -555,42 +576,45 @@ namespace ngsbem
555
576
  }
556
577
  }
557
578
  else if (N <= 3) {
558
- ProcessVectorizedBatch<3, vec_length>(batch, len, theta);
579
+ ProcessVectorizedBatchSS<3, vec_length>(batch, len, theta);
559
580
  }
560
581
  else if (N <= 4) {
561
- ProcessVectorizedBatch<4, vec_length>(batch, len, theta);
582
+ ProcessVectorizedBatchSS<4, vec_length>(batch, len, theta);
562
583
  }
563
584
  else if (N <= 6) {
564
- ProcessVectorizedBatch<6, vec_length>(batch, len, theta);
585
+ ProcessVectorizedBatchSS<6, vec_length>(batch, len, theta);
565
586
  }
566
587
  else if (N <= 12) {
567
- ProcessVectorizedBatch<12, vec_length>(batch, len, theta);
588
+ ProcessVectorizedBatchSS<12, vec_length>(batch, len, theta);
568
589
  }
569
590
  else if (N <= 24) {
570
- ProcessVectorizedBatch<24, vec_length>(batch, len, theta);
591
+ ProcessVectorizedBatchSS<24, vec_length>(batch, len, theta);
571
592
  }
572
593
  else if (N <= 48) {
573
- ProcessVectorizedBatch<48, vec_length>(batch, len, theta);
594
+ ProcessVectorizedBatchSS<48, vec_length>(batch, len, theta);
574
595
  }
575
596
  else if (N <= 96) {
576
- ProcessVectorizedBatch<96, vec_length>(batch, len, theta);
597
+ ProcessVectorizedBatchSS<96, vec_length>(batch, len, theta);
577
598
  }
578
599
  else if (N <= 192) {
579
- ProcessVectorizedBatch<192, vec_length>(batch, len, theta);
600
+ ProcessVectorizedBatchSS<192, vec_length>(batch, len, theta);
580
601
  }
581
602
  else {
582
603
  // Split large batches
583
- ProcessBatch(batch.Range(0, 192 / vec_length), len, theta);
584
- ProcessBatch(batch.Range(192 / vec_length, batch_size), len, theta);
604
+ ProcessBatchSS(batch.Range(0, 192 / vec_length), len, theta);
605
+ ProcessBatchSS(batch.Range(192 / vec_length, batch_size), len, theta);
585
606
  }
586
607
  }
587
608
 
588
609
  template<int N, int vec_length>
589
- static void ProcessVectorizedBatch(FlatArray<RecordingSS*> batch, double len, double theta) {
610
+ static void ProcessVectorizedBatchSS(FlatArray<RecordingSS*> batch, double len, double theta) {
590
611
 
591
612
  // *testout << "Processing vectorized S->S batch of size " << batch.Size() << ", with N = " << N << ", vec_length = " << vec_length << ", len = " << len << ", theta = " << theta << endl;
592
- SphericalExpansion<Singular, Vec<N,Complex>> vec_source(batch[0]->mp_source->Order(), batch[0]->mp_source->Kappa(), batch[0]->mp_source->RTyp());
593
- SphericalExpansion<Singular, Vec<N,Complex>> vec_target(batch[0]->mp_target->Order(), batch[0]->mp_target->Kappa(), batch[0]->mp_target->RTyp());
613
+ double kappa = batch[0]->mp_source->Kappa();
614
+ int so = batch[0]->mp_source->Order();
615
+ int to = batch[0]->mp_target->Order();
616
+ SphericalExpansion<Singular, Vec<N,Complex>> vec_source(so, kappa, batch[0]->mp_source->RTyp());
617
+ SphericalExpansion<Singular, Vec<N,Complex>> vec_target(to, kappa, batch[0]->mp_target->RTyp());
594
618
 
595
619
  // Copy multipoles into vectorized multipole
596
620
  for (int i = 0; i < batch.Size(); i++)
@@ -688,10 +712,10 @@ namespace ngsbem
688
712
  for (auto [sp,ep,j,num] : currents)
689
713
  AddCurrent (sp,ep,j,num);
690
714
 
691
- charges.SetSize0();
692
- dipoles.SetSize0();
693
- chargedipoles.SetSize0();
694
- currents.SetSize0();
715
+ charges.DeleteAll();
716
+ dipoles.DeleteAll();
717
+ chargedipoles.DeleteAll();
718
+ currents.DeleteAll();
695
719
  }
696
720
 
697
721
 
@@ -718,7 +742,7 @@ namespace ngsbem
718
742
 
719
743
  // if (r*mp.Kappa() < 1e-8) return;
720
744
  if (level > 20) return;
721
- if (charges.Size() < maxdirect && r*mp.Kappa() < 1)
745
+ if (charges.Size() < maxdirect && r*mp.Kappa() < 5)
722
746
  return;
723
747
 
724
748
  SendSourcesToChilds();
@@ -746,8 +770,9 @@ namespace ngsbem
746
770
  }
747
771
 
748
772
  dipoles.Append (tuple{x,d,c});
749
-
750
- if (dipoles.Size() < maxdirect || r < 1e-8)
773
+
774
+ if (level > 20) return;
775
+ if (dipoles.Size() < maxdirect)
751
776
  return;
752
777
 
753
778
  SendSourcesToChilds();
@@ -797,7 +822,7 @@ namespace ngsbem
797
822
  Array<double> split;
798
823
  split.Append(0);
799
824
  for (int i = 0; i < 3; i++)
800
- if (sp(i) < center(i) != ep(i) < center(i))
825
+ if ((sp(i) < center(i)) != (ep(i) < center(i)))
801
826
  split += (center(i)-sp(i)) / (ep(i)-sp(i)); // segment cuts i-th coordinate plane
802
827
  split.Append(1);
803
828
  BubbleSort(split);
@@ -948,6 +973,7 @@ namespace ngsbem
948
973
  if (simd_chargedipoles.Size())
949
974
  {
950
975
  // static Timer t("mptool singmp, evaluate, simd chargedipoles"); RegionTimer r(t);
976
+ // t.AddFlops (simd_chargedipoles.Size()*FMM_SW);
951
977
 
952
978
  simd_entry_type vsum{0.0};
953
979
  for (auto [x,c,d,c2] : simd_chargedipoles)
@@ -971,6 +997,7 @@ namespace ngsbem
971
997
  else
972
998
  {
973
999
  // static Timer t("mptool singmp, evaluate, chargedipoles"); RegionTimer r(t);
1000
+ // t.AddFlops (chargedipoles.Size());
974
1001
 
975
1002
  for (auto [x,c,d,c2] : chargedipoles)
976
1003
  if (double rho = L2Norm(p-x); rho > 0)
@@ -1134,8 +1161,6 @@ namespace ngsbem
1134
1161
  simd_chargedipoles[ii] = MakeSimd(di);
1135
1162
  }
1136
1163
 
1137
-
1138
-
1139
1164
 
1140
1165
  if (nodes_to_process)
1141
1166
  *nodes_to_process += this;
@@ -1224,6 +1249,14 @@ namespace ngsbem
1224
1249
  num += ch->NumCoefficients();
1225
1250
  return num;
1226
1251
  }
1252
+
1253
+ void TraverseTree (const std::function<void(Node&)> & func)
1254
+ {
1255
+ func(*this);
1256
+ for (auto & child : childs)
1257
+ if (child)
1258
+ child->TraverseTree(func);
1259
+ }
1227
1260
  };
1228
1261
 
1229
1262
  Node root;
@@ -1313,89 +1346,93 @@ namespace ngsbem
1313
1346
 
1314
1347
  root.CalcTotalSources();
1315
1348
 
1316
- if (false)
1349
+ if constexpr (false)
1317
1350
  // direct evaluation of S->S
1318
1351
  root.CalcMP(nullptr, nullptr);
1319
1352
  else
1320
1353
  {
1321
1354
 
1322
- Array<RecordingSS> recording;
1323
- Array<Node*> nodes_to_process;
1355
+ Array<RecordingSS> recording;
1356
+ Array<Node*> nodes_to_process;
1324
1357
 
1325
- {
1326
- RegionTimer reg(trec);
1327
- root.CalcMP(&recording, &nodes_to_process);
1328
- }
1358
+ {
1359
+ RegionTimer reg(trec);
1360
+ root.CalcMP(&recording, &nodes_to_process);
1361
+ }
1329
1362
 
1330
- {
1331
- RegionTimer rs2mp(ts2mp);
1332
- ParallelFor(nodes_to_process.Size(), [&](int i){
1333
- auto node = nodes_to_process[i];
1334
- for (auto [x,c]: node->charges)
1335
- node->mp.AddCharge(x-node->center, c);
1336
- for (auto [x,d,c]: node->dipoles)
1337
- node->mp.AddDipole(x-node->center, d, c);
1338
- for (auto [x,c,d,c2]: node->chargedipoles)
1339
- node->mp.AddChargeDipole(x-node->center, c, d, c2);
1340
- for (auto [sp,ep,j,num]: node->currents)
1341
- node->mp.AddCurrent(sp-node->center, ep-node->center, j, num);
1342
- }, TasksPerThread(4));
1343
- }
1344
-
1345
- {
1346
- RegionTimer reg(tsort);
1347
- QuickSort (recording, [] (auto & a, auto & b)
1348
- {
1349
- if (a.len < (1-1e-8) * b.len) return true;
1350
- if (a.len > (1+1e-8) * b.len) return false;
1351
- return a.theta < b.theta;
1352
- });
1353
- }
1363
+ {
1364
+ RegionTimer rs2mp(ts2mp);
1365
+ ParallelFor(nodes_to_process.Size(), [&](int i)
1366
+ {
1367
+ auto node = nodes_to_process[i];
1368
+ for (auto [x,c]: node->charges)
1369
+ node->mp.AddCharge(x-node->center, c);
1370
+ for (auto [x,d,c]: node->dipoles)
1371
+ node->mp.AddDipole(x-node->center, d, c);
1372
+ for (auto [x,c,d,c2]: node->chargedipoles)
1373
+ node->mp.AddChargeDipole(x-node->center, c, d, c2);
1374
+ for (auto [sp,ep,j,num]: node->currents)
1375
+ node->mp.AddCurrent(sp-node->center, ep-node->center, j, num);
1376
+ }, TasksPerThread(4));
1377
+ }
1378
+
1379
+ {
1380
+ RegionTimer reg(tsort);
1381
+ QuickSort (recording, [] (auto & a, auto & b)
1382
+ {
1383
+ if (a.len < (1-1e-8) * b.len) return true;
1384
+ if (a.len > (1+1e-8) * b.len) return false;
1385
+ return a.theta < b.theta;
1386
+ });
1387
+ }
1354
1388
 
1355
- double current_len = -1e100;
1356
- double current_theta = -1e100;
1357
- Array<RecordingSS*> current_batch;
1358
- Array<Array<RecordingSS*>> batch_group;
1359
- Array<double> group_lengths;
1360
- Array<double> group_thetas;
1361
- for (auto & record : recording)
1362
- {
1363
- bool len_changed = fabs(record.len - current_len) > 1e-8;
1364
- bool theta_changed = fabs(record.theta - current_theta) > 1e-8;
1365
- if ((len_changed || theta_changed) && current_batch.Size() > 0) {
1389
+ double current_len = -1e100;
1390
+ double current_theta = -1e100;
1391
+ Array<RecordingSS*> current_batch;
1392
+ Array<Array<RecordingSS*>> batch_group;
1393
+ Array<double> group_lengths;
1394
+ Array<double> group_thetas;
1395
+ for (auto & record : recording)
1396
+ {
1397
+ bool len_changed = fabs(record.len - current_len) > 1e-8;
1398
+ bool theta_changed = fabs(record.theta - current_theta) > 1e-8;
1399
+ if ((len_changed || theta_changed) && current_batch.Size() > 0) {
1400
+ batch_group.Append(current_batch);
1401
+ group_lengths.Append(current_len);
1402
+ group_thetas.Append(current_theta);
1403
+ current_batch.SetSize(0);
1404
+ }
1405
+
1406
+ current_len = record.len;
1407
+ current_theta = record.theta;
1408
+ current_batch.Append(&record);
1409
+ }
1410
+
1411
+ if (current_batch.Size() > 0) {
1366
1412
  batch_group.Append(current_batch);
1367
1413
  group_lengths.Append(current_len);
1368
1414
  group_thetas.Append(current_theta);
1369
- current_batch.SetSize(0);
1370
- }
1415
+ }
1371
1416
 
1372
- current_len = record.len;
1373
- current_theta = record.theta;
1374
- current_batch.Append(&record);
1417
+ {
1418
+ RegionTimer rS2S(tS2S);
1419
+ // ParallelFor(batch_group.Size(), [&](int i) {
1420
+ for (int i = 0; i < batch_group.Size(); i++){
1421
+ // *testout << "Processing batch " << i << " of size " << batch_group[i].Size() << ", with len = " << group_lengths[i] << ", theta = " << group_thetas[i] << endl;
1422
+ int chunk_size = 24;
1423
+ if (batch_group[i].Size() < chunk_size)
1424
+ ProcessBatchSS(batch_group[i], group_lengths[i], group_thetas[i]);
1425
+ else
1426
+ ParallelForRange(IntRange(batch_group[i].Size()), [&](IntRange range) {
1427
+ auto sub_batch = batch_group[i].Range(range.First(), range.Next());
1428
+ ProcessBatchSS(sub_batch, group_lengths[i], group_thetas[i]);
1429
+ }, TasksPerThread(4));
1430
+ }
1431
+ }
1375
1432
  }
1376
- if (current_batch.Size() > 0) {
1377
- batch_group.Append(current_batch);
1378
- group_lengths.Append(current_len);
1379
- group_thetas.Append(current_theta);
1380
- }
1381
1433
 
1382
- {
1383
- RegionTimer rS2S(tS2S);
1384
- // ParallelFor(batch_group.Size(), [&](int i) {
1385
- for (int i = 0; i < batch_group.Size(); i++){
1386
- // *testout << "Processing batch " << i << " of size " << batch_group[i].Size() << ", with len = " << group_lengths[i] << ", theta = " << group_thetas[i] << endl;
1387
- int chunk_size = 24;
1388
- if (batch_group[i].Size() < chunk_size)
1389
- ProcessBatch(batch_group[i], group_lengths[i], group_thetas[i]);
1390
- else
1391
- ParallelForRange(IntRange(batch_group[i].Size()), [&](IntRange range) {
1392
- auto sub_batch = batch_group[i].Range(range.First(), range.Next());
1393
- ProcessBatch(sub_batch, group_lengths[i], group_thetas[i]);
1394
- }, TasksPerThread(4));
1395
- }
1396
- }
1397
- }
1398
-
1434
+ // cout << "have singular:" << endl;
1435
+ // PrintStatistics (cout);
1399
1436
  havemp = true;
1400
1437
  }
1401
1438
 
@@ -1407,6 +1444,41 @@ namespace ngsbem
1407
1444
  return root.Evaluate(p);
1408
1445
  }
1409
1446
 
1447
+
1448
+ void PrintStatistics (ostream & ost)
1449
+ {
1450
+ int levels = 0;
1451
+ int cnt = 0;
1452
+ root.TraverseTree( [&](Node & node) {
1453
+ levels = max(levels, node.level);
1454
+ cnt++;
1455
+ });
1456
+ ost << "levels: " << levels << endl;
1457
+ ost << "nodes: " << cnt << endl;
1458
+
1459
+ Array<int> num_on_level(levels+1);
1460
+ Array<int> order_on_level(levels+1);
1461
+ Array<size_t> coefs_on_level(levels+1);
1462
+ num_on_level = 0;
1463
+ order_on_level = 0;
1464
+ root.TraverseTree( [&](Node & node) {
1465
+ num_on_level[node.level]++;
1466
+ order_on_level[node.level] = max(order_on_level[node.level],node.mp.Order());
1467
+ coefs_on_level[node.level] += node.mp.SH().Coefs().Size();
1468
+ });
1469
+
1470
+ cout << "num on level" << endl;
1471
+ for (int i = 0; i < num_on_level.Size(); i++)
1472
+ cout << i << ": " << num_on_level[i] << ", order = " << order_on_level[i] << ", coefs " << coefs_on_level[i] << endl;
1473
+
1474
+ size_t totcoefs = 0;
1475
+ for (auto n : coefs_on_level)
1476
+ totcoefs += n;
1477
+ cout << "total mem in coefs: " << sizeof(entry_type)*totcoefs / sqr(1024) << " MB" << endl;
1478
+ }
1479
+
1480
+
1481
+
1410
1482
  template <typename entry_type2>
1411
1483
  friend class RegularMLExpansion;
1412
1484
  };
@@ -1420,6 +1492,9 @@ namespace ngsbem
1420
1492
  }
1421
1493
 
1422
1494
 
1495
+ // *********************************** Regular multilevel Expansion
1496
+
1497
+
1423
1498
  template <typename elem_type=Complex>
1424
1499
  class NGS_DLL_HEADER RegularMLExpansion
1425
1500
  {
@@ -1456,28 +1531,28 @@ namespace ngsbem
1456
1531
  }
1457
1532
  }
1458
1533
  else if (N <= 3) {
1459
- ProcessVectorizedBatch<3, vec_length>(batch, len, theta);
1534
+ ProcessVectorizedBatchRS<3, vec_length>(batch, len, theta);
1460
1535
  }
1461
1536
  else if (N <= 4) {
1462
- ProcessVectorizedBatch<4, vec_length>(batch, len, theta);
1537
+ ProcessVectorizedBatchRS<4, vec_length>(batch, len, theta);
1463
1538
  }
1464
1539
  else if (N <= 6) {
1465
- ProcessVectorizedBatch<6, vec_length>(batch, len, theta);
1540
+ ProcessVectorizedBatchRS<6, vec_length>(batch, len, theta);
1466
1541
  }
1467
1542
  else if (N <= 12) {
1468
- ProcessVectorizedBatch<12, vec_length>(batch, len, theta);
1543
+ ProcessVectorizedBatchRS<12, vec_length>(batch, len, theta);
1469
1544
  }
1470
1545
  else if (N <= 24) {
1471
- ProcessVectorizedBatch<24, vec_length>(batch, len, theta);
1546
+ ProcessVectorizedBatchRS<24, vec_length>(batch, len, theta);
1472
1547
  }
1473
1548
  else if (N <= 48) {
1474
- ProcessVectorizedBatch<48, vec_length>(batch, len, theta);
1549
+ ProcessVectorizedBatchRS<48, vec_length>(batch, len, theta);
1475
1550
  }
1476
1551
  else if (N <= 96) {
1477
- ProcessVectorizedBatch<96, vec_length>(batch, len, theta);
1552
+ ProcessVectorizedBatchRS<96, vec_length>(batch, len, theta);
1478
1553
  }
1479
1554
  else if (N <= 192) {
1480
- ProcessVectorizedBatch<192, vec_length>(batch, len, theta);
1555
+ ProcessVectorizedBatchRS<192, vec_length>(batch, len, theta);
1481
1556
  }
1482
1557
  else {
1483
1558
  // Split large batches
@@ -1509,7 +1584,7 @@ namespace ngsbem
1509
1584
 
1510
1585
 
1511
1586
  template<int N, int vec_length>
1512
- static void ProcessVectorizedBatch(FlatArray<RecordingRS*> batch, double len, double theta) {
1587
+ static void ProcessVectorizedBatchRS(FlatArray<RecordingRS*> batch, double len, double theta) {
1513
1588
 
1514
1589
  // static Timer t("ProcessVectorizedBatch, N = "+ToString(N) + ", vec_len = " + ToString(vec_length));
1515
1590
  // RegionTimer reg(t, batch[0]->mpS->SH().Order());
@@ -1570,6 +1645,7 @@ namespace ngsbem
1570
1645
  std::array<unique_ptr<Node>,8> childs;
1571
1646
  SphericalExpansion<Regular,elem_type> mp;
1572
1647
  Array<Vec<3>> targets;
1648
+ Array<tuple<Vec<3>,double>> vol_targets;
1573
1649
  int total_targets;
1574
1650
  std::mutex node_mutex;
1575
1651
  atomic<bool> have_childs{false};
@@ -1577,15 +1653,22 @@ namespace ngsbem
1577
1653
  Array<const typename SingularMLExpansion<elem_type>::Node*> singnodes;
1578
1654
 
1579
1655
  Node (Vec<3> acenter, double ar, int alevel, double kappa)
1580
- : center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, ar) // 1.0/min(1.0, 0.25*r*kappa))
1656
+ : center(acenter), r(ar), level(alevel),
1657
+ // mp(MPOrder(ar*kappa), kappa, ar) // 1.0/min(1.0, 0.25*r*kappa))
1658
+ mp(-1, kappa, ar)
1581
1659
  // : center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, 1.0)
1582
1660
  {
1583
1661
  if (level < nodes_on_level.Size())
1584
1662
  nodes_on_level[level]++;
1585
1663
  }
1586
1664
 
1587
-
1588
- void CreateChilds()
1665
+ void Allocate()
1666
+ {
1667
+ mp = SphericalExpansion<Regular,elem_type>(MPOrder(r*mp.Kappa()), mp.Kappa(), r);
1668
+ }
1669
+
1670
+
1671
+ void CreateChilds(bool allocate = false)
1589
1672
  {
1590
1673
  if (childs[0]) throw Exception("have already childs");
1591
1674
  // create children nodes:
@@ -1596,6 +1679,8 @@ namespace ngsbem
1596
1679
  cc(1) += (i&2) ? r/2 : -r/2;
1597
1680
  cc(2) += (i&4) ? r/2 : -r/2;
1598
1681
  childs[i] = make_unique<Node> (cc, r/2, level+1, mp.Kappa());
1682
+ if (allocate)
1683
+ childs[i] -> Allocate();
1599
1684
  }
1600
1685
  have_childs = true;
1601
1686
  }
@@ -1648,7 +1733,7 @@ namespace ngsbem
1648
1733
  if (allow_refine)
1649
1734
  {
1650
1735
  if (!childs[0])
1651
- CreateChilds();
1736
+ CreateChilds(true);
1652
1737
 
1653
1738
  for (auto & ch : childs)
1654
1739
  ch -> AddSingularNode (singnode, allow_refine, recording);
@@ -1668,7 +1753,7 @@ namespace ngsbem
1668
1753
  childs[nr] -> AddSingularNode (singnode, allow_refine, recording);
1669
1754
  });
1670
1755
 
1671
- if (targets.Size())
1756
+ if (targets.Size()+vol_targets.Size())
1672
1757
  singnodes.Append(&singnode);
1673
1758
  }
1674
1759
  }
@@ -1683,7 +1768,7 @@ namespace ngsbem
1683
1768
  {
1684
1769
  if (allow_refine)
1685
1770
  if (mp.Order() > 30 && !childs[0])
1686
- CreateChilds();
1771
+ CreateChilds(allow_refine);
1687
1772
 
1688
1773
  if (childs[0])
1689
1774
  {
@@ -1754,6 +1839,14 @@ namespace ngsbem
1754
1839
  return sum;
1755
1840
  }
1756
1841
 
1842
+ void TraverseTree (const std::function<void(Node&)> & func)
1843
+ {
1844
+ func(*this);
1845
+ for (auto & child : childs)
1846
+ if (child)
1847
+ child->TraverseTree(func);
1848
+ }
1849
+
1757
1850
  double Norm() const
1758
1851
  {
1759
1852
  double norm = L2Norm(mp.SH().Coefs());
@@ -1771,17 +1864,23 @@ namespace ngsbem
1771
1864
  num += ch->NumCoefficients();
1772
1865
  return num;
1773
1866
  }
1774
-
1867
+
1868
+ int GetChildNum (Vec<3> x) const
1869
+ {
1870
+ int childnum = 0;
1871
+ if (x(0) > center(0)) childnum += 1;
1872
+ if (x(1) > center(1)) childnum += 2;
1873
+ if (x(2) > center(2)) childnum += 4;
1874
+ return childnum;
1875
+ }
1876
+
1775
1877
  void AddTarget (Vec<3> x)
1776
1878
  {
1777
1879
  // if (childs[0])
1778
1880
  if (have_childs) // quick check without locking
1779
1881
  {
1780
1882
  // directly send to childs:
1781
- int childnum = 0;
1782
- if (x(0) > center(0)) childnum += 1;
1783
- if (x(1) > center(1)) childnum += 2;
1784
- if (x(2) > center(2)) childnum += 4;
1883
+ int childnum = GetChildNum(x);
1785
1884
  childs[childnum] -> AddTarget( x );
1786
1885
  return;
1787
1886
  }
@@ -1791,32 +1890,74 @@ namespace ngsbem
1791
1890
  if (have_childs) // test again after locking
1792
1891
  {
1793
1892
  // directly send to childs:
1794
- int childnum = 0;
1795
- if (x(0) > center(0)) childnum += 1;
1796
- if (x(1) > center(1)) childnum += 2;
1797
- if (x(2) > center(2)) childnum += 4;
1893
+ int childnum = GetChildNum(x);
1798
1894
  childs[childnum] -> AddTarget(x);
1799
1895
  return;
1800
1896
  }
1801
1897
 
1802
-
1803
1898
  targets.Append( x );
1804
1899
 
1805
1900
  // if (r*mp.Kappa() < 1e-8) return;
1806
1901
  if (level > 20) return;
1807
- if (targets.Size() < maxdirect && r*mp.Kappa() < 1)
1902
+ if (targets.Size() < maxdirect && r*mp.Kappa() < 5)
1903
+ return;
1904
+
1905
+ CreateChilds();
1906
+
1907
+ for (auto t : targets)
1908
+ AddTarget (t);
1909
+ for (auto [x,r] : vol_targets)
1910
+ AddVolumeTarget (x,r);
1911
+
1912
+ targets.SetSize0();
1913
+ vol_targets.SetSize0();
1914
+ }
1915
+
1916
+
1917
+ void AddVolumeTarget (Vec<3> x, double tr)
1918
+ {
1919
+ if (MaxNorm(x-center) > r+tr) return;
1920
+
1921
+ if (have_childs)
1922
+ {
1923
+ for (auto & child : childs)
1924
+ child->AddVolumeTarget(x, tr);
1925
+ return;
1926
+ }
1927
+
1928
+
1929
+ lock_guard<mutex> guard(node_mutex);
1930
+
1931
+ if (have_childs)
1932
+ {
1933
+ for (auto & child : childs)
1934
+ child->AddVolumeTarget(x, tr);
1935
+ return;
1936
+ }
1937
+
1938
+
1939
+ vol_targets.Append (tuple(x,tr));
1940
+
1941
+ if (level > 20) return;
1942
+ if (vol_targets.Size() < maxdirect && (r*mp.Kappa() < 5))
1808
1943
  return;
1809
1944
 
1810
1945
  CreateChilds();
1811
1946
 
1812
1947
  for (auto t : targets)
1813
1948
  AddTarget (t);
1949
+ for (auto [x,r] : vol_targets)
1950
+ AddVolumeTarget (x,r);
1951
+
1814
1952
  targets.SetSize0();
1953
+ vol_targets.SetSize0();
1815
1954
  }
1816
1955
 
1956
+
1957
+
1817
1958
  void CalcTotalTargets()
1818
1959
  {
1819
- total_targets = targets.Size();
1960
+ total_targets = targets.Size() + vol_targets.Size();
1820
1961
  for (auto & child : childs)
1821
1962
  if (child)
1822
1963
  {
@@ -1838,6 +1979,19 @@ namespace ngsbem
1838
1979
  if (total_targets == 0)
1839
1980
  mp = SphericalExpansion<Regular,elem_type>(-1, mp.Kappa(),1.);
1840
1981
  }
1982
+
1983
+ void AllocateMemory()
1984
+ {
1985
+ for (auto & child : childs)
1986
+ if (child)
1987
+ child->AllocateMemory();
1988
+
1989
+ if (total_targets > 0)
1990
+ Allocate();
1991
+ // mp = SphericalExpansion<Regular,elem_type>(MPOrder(r*mp.Kappa()), mp.Kappa(), r); // -1, mp.Kappa(),1.);
1992
+ }
1993
+
1994
+
1841
1995
 
1842
1996
 
1843
1997
  void Print (ostream & ost, size_t childnr = -1) const
@@ -1863,7 +2017,8 @@ namespace ngsbem
1863
2017
  : root(center, r, 0, asingmp->Kappa()), singmp(asingmp)
1864
2018
  {
1865
2019
  if (!singmp->havemp) throw Exception("first call Calc for singular MP");
1866
-
2020
+ root.Allocate();
2021
+
1867
2022
  nodes_on_level = 0;
1868
2023
  nodes_on_level[0] = 1;
1869
2024
  {
@@ -1901,73 +2056,98 @@ namespace ngsbem
1901
2056
  root.AddTarget (t);
1902
2057
  }
1903
2058
 
2059
+ void AddVolumeTarget (Vec<3> t, double r)
2060
+ {
2061
+ root.AddVolumeTarget (t, r);
2062
+ }
2063
+
1904
2064
  void CalcMP(shared_ptr<SingularMLExpansion<elem_type>> asingmp, bool onlytargets = true)
1905
2065
  {
1906
2066
  static Timer t("mptool regular MLMP"); RegionTimer rg(t);
2067
+ static Timer tremove("removeempty");
1907
2068
  static Timer trec("mptool regular MLMP - recording");
1908
2069
  static Timer tsort("mptool regular MLMP - sort");
1909
2070
 
1910
2071
  singmp = asingmp;
1911
2072
 
2073
+
1912
2074
  root.CalcTotalTargets();
2075
+ // cout << "before remove empty trees:" << endl;
2076
+ // PrintStatistics(cout);
2077
+
2078
+ /*
2079
+ tremove.Start();
1913
2080
  if (onlytargets)
1914
2081
  root.RemoveEmptyTrees();
1915
-
2082
+ tremove.Stop();
2083
+ */
1916
2084
 
1917
- // root.AddSingularNode(singmp->root, !onlytargets, nullptr);
2085
+ root.AllocateMemory();
1918
2086
 
1919
- // /*
1920
- Array<RecordingRS> recording;
1921
- {
1922
- RegionTimer rrec(trec);
1923
- root.AddSingularNode(singmp->root, !onlytargets, &recording);
1924
- }
1925
-
1926
- // cout << "recorded: " << recording.Size() << endl;
1927
- {
1928
- RegionTimer reg(tsort);
1929
- QuickSort (recording, [] (auto & a, auto & b)
1930
- {
1931
- if (a.len < (1-1e-8) * b.len) return true;
1932
- if (a.len > (1+1e-8) * b.len) return false;
1933
- return a.theta < b.theta;
1934
- });
1935
- }
1936
-
1937
- double current_len = -1e100;
1938
- double current_theta = -1e100;
1939
- Array<RecordingRS*> current_batch;
1940
- Array<Array<RecordingRS*>> batch_group;
1941
- Array<double> group_lengths;
1942
- Array<double> group_thetas;
1943
- for (auto & record : recording)
2087
+ // cout << "after allocating regular:" << endl;
2088
+ // PrintStatistics(cout);
2089
+
2090
+ // cout << "starting S-R converion" << endl;
2091
+ // PrintStatistics(cout);
2092
+
2093
+
2094
+ if constexpr (false)
1944
2095
  {
1945
- bool len_changed = fabs(record.len - current_len) > 1e-8;
1946
- bool theta_changed = fabs(record.theta - current_theta) > 1e-8;
1947
- if ((len_changed || theta_changed) && current_batch.Size() > 0) {
2096
+ root.AddSingularNode(singmp->root, !onlytargets, nullptr);
2097
+ }
2098
+ else
2099
+ { // use recording
2100
+ Array<RecordingRS> recording;
2101
+ {
2102
+ RegionTimer rrec(trec);
2103
+ root.AddSingularNode(singmp->root, !onlytargets, &recording);
2104
+ }
2105
+
2106
+ // cout << "recorded: " << recording.Size() << endl;
2107
+ {
2108
+ RegionTimer reg(tsort);
2109
+ QuickSort (recording, [] (auto & a, auto & b)
2110
+ {
2111
+ if (a.len < (1-1e-8) * b.len) return true;
2112
+ if (a.len > (1+1e-8) * b.len) return false;
2113
+ return a.theta < b.theta;
2114
+ });
2115
+ }
2116
+
2117
+ double current_len = -1e100;
2118
+ double current_theta = -1e100;
2119
+ Array<RecordingRS*> current_batch;
2120
+ Array<Array<RecordingRS*>> batch_group;
2121
+ Array<double> group_lengths;
2122
+ Array<double> group_thetas;
2123
+ for (auto & record : recording)
2124
+ {
2125
+ bool len_changed = fabs(record.len - current_len) > 1e-8;
2126
+ bool theta_changed = fabs(record.theta - current_theta) > 1e-8;
2127
+ if ((len_changed || theta_changed) && current_batch.Size() > 0) {
2128
+ // ProcessBatch(current_batch, current_len, current_theta);
2129
+ batch_group.Append(current_batch);
2130
+ group_lengths.Append(current_len);
2131
+ group_thetas.Append(current_theta);
2132
+ current_batch.SetSize(0);
2133
+ }
2134
+
2135
+ current_len = record.len;
2136
+ current_theta = record.theta;
2137
+ current_batch.Append(&record);
2138
+ }
2139
+ if (current_batch.Size() > 0) {
1948
2140
  // ProcessBatch(current_batch, current_len, current_theta);
1949
2141
  batch_group.Append(current_batch);
1950
2142
  group_lengths.Append(current_len);
1951
2143
  group_thetas.Append(current_theta);
1952
- current_batch.SetSize(0);
1953
- }
1954
-
1955
- current_len = record.len;
1956
- current_theta = record.theta;
1957
- current_batch.Append(&record);
2144
+ }
2145
+
2146
+ ParallelFor(batch_group.Size(), [&](int i) {
2147
+ ProcessBatchRS(batch_group[i], group_lengths[i], group_thetas[i]);
2148
+ }, TasksPerThread(4));
1958
2149
  }
1959
- if (current_batch.Size() > 0) {
1960
- // ProcessBatch(current_batch, current_len, current_theta);
1961
- batch_group.Append(current_batch);
1962
- group_lengths.Append(current_len);
1963
- group_thetas.Append(current_theta);
1964
- }
1965
-
1966
- ParallelFor(batch_group.Size(), [&](int i) {
1967
- ProcessBatchRS(batch_group[i], group_lengths[i], group_thetas[i]);
1968
- }, TasksPerThread(4));
1969
- // */
1970
-
2150
+
1971
2151
 
1972
2152
  /*
1973
2153
  int maxlevel = 0;
@@ -1978,10 +2158,49 @@ namespace ngsbem
1978
2158
  cout << "reg " << i << ": " << RegularMLExpansion::nodes_on_level[i] << endl;
1979
2159
  */
1980
2160
 
2161
+ // cout << "starting R-R converion" << endl;
2162
+ // PrintStatistics(cout);
2163
+
1981
2164
  static Timer tloc("mptool regular localize expansion"); RegionTimer rloc(tloc);
1982
2165
  root.LocalizeExpansion(!onlytargets);
2166
+
2167
+
2168
+ // cout << "R-R conversion done" << endl;
2169
+ // PrintStatistics(cout);
1983
2170
  }
1984
2171
 
2172
+ void PrintStatistics (ostream & ost)
2173
+ {
2174
+ int levels = 0;
2175
+ int cnt = 0;
2176
+ root.TraverseTree( [&](Node & node) {
2177
+ levels = max(levels, node.level);
2178
+ cnt++;
2179
+ });
2180
+ ost << "levels: " << levels << endl;
2181
+ ost << "nodes: " << cnt << endl;
2182
+
2183
+ Array<int> num_on_level(levels+1);
2184
+ Array<int> order_on_level(levels+1);
2185
+ Array<size_t> coefs_on_level(levels+1);
2186
+ num_on_level = 0;
2187
+ order_on_level = 0;
2188
+ root.TraverseTree( [&](Node & node) {
2189
+ num_on_level[node.level]++;
2190
+ order_on_level[node.level] = max(order_on_level[node.level],node.mp.Order());
2191
+ coefs_on_level[node.level] += node.mp.SH().Coefs().Size();
2192
+ });
2193
+
2194
+ cout << "num on level" << endl;
2195
+ for (int i = 0; i < num_on_level.Size(); i++)
2196
+ cout << i << ": " << num_on_level[i] << ", order = " << order_on_level[i] << ", coefs " << coefs_on_level[i] << endl;
2197
+
2198
+ size_t totcoefs = 0;
2199
+ for (auto n : coefs_on_level)
2200
+ totcoefs += n;
2201
+ cout << "total mem in coefs: " << sizeof(elem_type)*totcoefs / sqr(1024) << " MB" << endl;
2202
+ }
2203
+
1985
2204
  void Print (ostream & ost) const
1986
2205
  {
1987
2206
  root.Print(ost);
@@ -2001,6 +2220,7 @@ namespace ngsbem
2001
2220
  {
2002
2221
  // static Timer t("mptool Eval MLMP regular"); RegionTimer r(t);
2003
2222
  // if (L2Norm(p-root.center) > root.r) return elem_type{0.0};
2223
+
2004
2224
  if (MaxNorm(p-root.center) > root.r)
2005
2225
  return singmp->Evaluate(p);
2006
2226
  return root.Evaluate(p);
@@ -1544,7 +1544,7 @@ namespace ngfem
1544
1544
 
1545
1545
  if (mmax+1 > matA.Height() || nmax > matA.Width())
1546
1546
  {
1547
- for (double m = 0; m <= mmax; m++)
1547
+ for (int m = 0; m <= mmax; m++)
1548
1548
  {
1549
1549
  if (m > 0)
1550
1550
  y(m,m)=y(m-1,m-1)*u*sqrt((2*m-1.0)/(2*m));
@@ -1558,7 +1558,7 @@ namespace ngfem
1558
1558
  }
1559
1559
  else
1560
1560
  {
1561
- for (double m = 0; m <= mmax; m++)
1561
+ for (int m = 0; m <= mmax; m++)
1562
1562
  {
1563
1563
  if (m > 0)
1564
1564
  y(m,m)=y(m-1,m-1)*u*sqrt((2*m-1.0)/(2*m));
@@ -619,7 +619,7 @@ namespace ngla
619
619
 
620
620
 
621
621
  BaseMatrix::OperatorInfo GetOperatorInfo () const override
622
- { return { string("SparseMatrix")+typeid(TM).name(), this->Height(), this->Width() }; }
622
+ { return { string("SparseMatrix")+typeid(TM).name()+" (nze="+ToString(this->NZE())+")", this->Height(), this->Width() }; }
623
623
 
624
624
  virtual shared_ptr<BaseJacobiPrecond>
625
625
  CreateJacobiPrecond (shared_ptr<BitArray> inner) const override;
netgen/lib/libngsolve.lib CHANGED
Binary file
netgen/libngsolve.dll CHANGED
Binary file
@@ -1,4 +1,4 @@
1
- set(PACKAGE_VERSION "6.2.2506-33-g6156da6de")
1
+ set(PACKAGE_VERSION "6.2.2506-38-gc3cacfb0d")
2
2
  find_package(Netgen CONFIG REQUIRED HINTS
3
3
  ${CMAKE_CURRENT_LIST_DIR}
4
4
  ${CMAKE_CURRENT_LIST_DIR}/..
ngsolve/config/config.py CHANGED
@@ -29,15 +29,15 @@ NGSOLVE_INSTALL_DIR_INCLUDE = "netgen/include"
29
29
  NGSOLVE_INSTALL_DIR_CMAKE = "ngsolve/cmake"
30
30
  NGSOLVE_INSTALL_DIR_RES = "share"
31
31
 
32
- NGSOLVE_VERSION = "6.2.2506-33-g6156da6de"
33
- NGSOLVE_VERSION_GIT = "v6.2.2506-33-g6156da6de"
34
- NGSOLVE_VERSION_PYTHON = "6.2.2506.post33.dev0"
32
+ NGSOLVE_VERSION = "6.2.2506-38-gc3cacfb0d"
33
+ NGSOLVE_VERSION_GIT = "v6.2.2506-38-gc3cacfb0d"
34
+ NGSOLVE_VERSION_PYTHON = "6.2.2506.post38.dev0"
35
35
 
36
36
  NGSOLVE_VERSION_MAJOR = "6"
37
37
  NGSOLVE_VERSION_MINOR = "2"
38
- NGSOLVE_VERSION_TWEAK = "33"
38
+ NGSOLVE_VERSION_TWEAK = "38"
39
39
  NGSOLVE_VERSION_PATCH = "2506"
40
- NGSOLVE_VERSION_HASH = "g6156da6de"
40
+ NGSOLVE_VERSION_HASH = "gc3cacfb0d"
41
41
 
42
42
  CMAKE_CXX_COMPILER = "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
43
43
  CMAKE_CUDA_COMPILER = ""
ngsolve/ngslib.pyd CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ngsolve
3
- Version: 6.2.2506.post33.dev0
3
+ Version: 6.2.2506.post38.dev0
4
4
  Summary: NGSolve
5
5
  Author: The NGSolve team
6
6
  License: LGPL2.1
@@ -1,4 +1,4 @@
1
- netgen/libngsolve.dll,sha256=ohhNP4LTYcufMVgTEiwQVb1MeqFVYsgNM9cga0_dad8,37380608
1
+ netgen/libngsolve.dll,sha256=dPYViInLK0ULH9kU0PTGsf8YMcJvhGha2zkqfphtxAc,37466112
2
2
  netgen/ngscxx.bat,sha256=VoM77lA1caaCxceVKRtN_SRBB3U1Duofhz1B-LtAGsg,698
3
3
  netgen/ngsld.bat,sha256=YD1I1rK70K_YvLev7aYQMD9mCcwF55k1B_8pRWPpob0,428
4
4
  netgen/ngspy,sha256=3e0duHqv6lx2t8qE3kj2nTLz76Pd-RwjY7L7J-94UP4,70
@@ -100,7 +100,7 @@ netgen/include/intrule.hpp,sha256=zZAu7zxZ6oiHjE-UfRyRPZOJi5LMgJFItQHz0pORNvM,83
100
100
  netgen/include/intrules_SauterSchwab.hpp,sha256=2f9Lb77H6sgaVq7576L78zNGbv4MYgHpddIzfc36TKA,675
101
101
  netgen/include/irspace.hpp,sha256=UFWeaFVUDwsHCJZqtZBBDnhWC4Oyy34z9Pr6KzofHPg,1557
102
102
  netgen/include/jacobi.hpp,sha256=LvjGz2p4Eew3TPsRU34oWMNPXIZ_-tU6prsgjUiqgEs,4891
103
- netgen/include/kernels.hpp,sha256=18-rfOBO6NL9iK5VFTcl4KUYYqzC_fYPW_OjrUMz8FQ,21144
103
+ netgen/include/kernels.hpp,sha256=GLY2-mHanp5kuc3ccNFyWBUWCkteHWtbSweXqrt7HvA,21132
104
104
  netgen/include/l2hofe.hpp,sha256=03O8VX8PyBM6v8IrrVooN85H_X-NM4j2neDPivn-xGI,6843
105
105
  netgen/include/l2hofe_impl.hpp,sha256=GyZPQ2RFQWxBoiS82cg1I3LjTq1M7uFeZ6IHhZVe7Lw,16412
106
106
  netgen/include/l2hofefo.hpp,sha256=ZA3Rqc_aGnLkS12eUz_W9AAV0hybvPSOzCIJeIMgIqE,17134
@@ -112,7 +112,7 @@ netgen/include/memusage.hpp,sha256=m_-fuupqepSve37WkRkoFHHyTtE9PdGnOVPIdQHlDiw,1
112
112
  netgen/include/meshaccess.hpp,sha256=RSkB9LhWTXRIU8AoVsu-TbksjpXjbNzJfWuKDJ6y5_Q,48492
113
113
  netgen/include/mgpre.hpp,sha256=5Zqt3pzrvm3EOfr84iU6rQx23LTkntUTd_s4_i6wEzI,5029
114
114
  netgen/include/mp_coefficient.hpp,sha256=gZ7E6DbHH2pmRUWxXvTT0EsaA6ixFGrO-xMCmBgC18E,5125
115
- netgen/include/mptools.hpp,sha256=4aLSlDo7D8jiDVc7Oo8idZvZP9mpelB89S8VlrxVB3M,65528
115
+ netgen/include/mptools.hpp,sha256=jIeN0h359sPuvFYbxyF961A3CHizuDza350Y6NZfpgc,72442
116
116
  netgen/include/multigrid.hpp,sha256=7YgJfeGTBnb-aFWHrbcVk3dos6XYU0iVCgiY8UvRopY,898
117
117
  netgen/include/multivector.hpp,sha256=5rkNSqyPhIXAb1lGKLcy908D9Uw9oqY4wpUXZEXbEPE,13082
118
118
  netgen/include/mumpsinverse.hpp,sha256=8YiUlQZMFVsJ0kuwaSphGZvxyEZJAZZApH8XahiTeEo,4249
@@ -149,7 +149,7 @@ netgen/include/python_comp.hpp,sha256=FgujlcVk9FKWwMBEo9CfJ-q_Kb4TNcCziotVTFIuXv
149
149
  netgen/include/python_fem.hpp,sha256=pdSB1RLhv2Vi52TaRoGpjQ21EHOA3RFAF0jeiWDp6EQ,3161
150
150
  netgen/include/python_linalg.hpp,sha256=HdWTpdddyVmv3ZO73sG0BoHleKiREg9emIcyjFl3au8,1761
151
151
  netgen/include/python_ngstd.hpp,sha256=8NptP1VGDLDZ6gRC2kbayi-fHVg1IRNCZhgalJ4LUQ4,10803
152
- netgen/include/recursive_pol.hpp,sha256=qqyyowpyEhtZNqvZQJQjcutfg_yJEturoT7o1B0DPuk,125229
152
+ netgen/include/recursive_pol.hpp,sha256=k9kqexbmIuj52667hRGB-znHTXeQfLIGqJrPOr5HmTg,125223
153
153
  netgen/include/recursive_pol_tet.hpp,sha256=TKnMfmn1K7XvmNRD8kmLxPlooLRK6irBMKOwvRowsn4,9863
154
154
  netgen/include/recursive_pol_trig.hpp,sha256=UylKioGKIXXgSlSEbD4XPnzhJvP24JwD3bBYvFppHpg,11333
155
155
  netgen/include/reorderedfespace.hpp,sha256=8k8RKvV4941tMgnehPf8ZDX85VPMtrsVEyCZ-GBDUBU,3085
@@ -160,7 +160,7 @@ netgen/include/simd_complex.hpp,sha256=JOmBhwEPK-LtuXmofWR01ziUWXGTcmzRtoFl34Zp0
160
160
  netgen/include/smoother.hpp,sha256=SoVZvhFynyPSIAe-x8EloVluIHUE0k78Dp3sQFu-Yfo,6896
161
161
  netgen/include/solve.hpp,sha256=lzCGHU1QOj9VXG43Q8MzvDi48-BfVH_fG8R0ttU8Xfg,2123
162
162
  netgen/include/sparsecholesky.hpp,sha256=hOzFoXMEelAdJROF1q4zkYv0yfZgSDhjwaYvRRmiMcE,9201
163
- netgen/include/sparsematrix.hpp,sha256=vyk1ViL0oXSiPZX4FfrFgy8whefffUrTmSlTS60SbrU,33744
163
+ netgen/include/sparsematrix.hpp,sha256=c_FdF060SJ0_qQK3WRQg5Gu042neowQHQ31n8cj3r1E,33779
164
164
  netgen/include/sparsematrix_dyn.hpp,sha256=1azpAkASyjwRKiDZ_FVVyBPiLpiZocsW0S9bEMTjprI,2746
165
165
  netgen/include/sparsematrix_impl.hpp,sha256=WpqmiecTQpbvE6LSfoouvKBCY6T2Y4FetCclHPa8RTI,31232
166
166
  netgen/include/special_matrix.hpp,sha256=j_9NSuEudoEzX3hx6TAdSwOEka5MiQgqJ1lAOwno4ng,16989
@@ -191,7 +191,7 @@ netgen/include/voxelcoefficientfunction.hpp,sha256=zPlatX_nf2ODK2X979wvpm1HXHEzn
191
191
  netgen/include/vtkoutput.hpp,sha256=GwPaFtOVY27_1hKwSqpNHV4ppOk3CVsLdMpocm27odQ,6628
192
192
  netgen/include/vvector.hpp,sha256=vpnwWlNWsEJB26ve8cKADbUMGVBTTVCFvrBC4r_LDDQ,4785
193
193
  netgen/include/webgui.hpp,sha256=xm1S5KHockrzf_R4zHzQ9fzwfQ4H5aZaZm9ItCaR41s,2199
194
- netgen/lib/libngsolve.lib,sha256=3500cQsylrJLvXwBHaZcs2iCVnPwN2GOmwDLrQrPbvI,13913570
194
+ netgen/lib/libngsolve.lib,sha256=dmUKoCIJS0F2NFuGh8MGv83siDbrXCS_Nuy9aNQ2IeA,13924238
195
195
  ngsolve/TensorProductTools.py,sha256=jD4LtJdEiLt2dDsU6STMXb10yrau_i20gatwGlqbiFQ,8562
196
196
  ngsolve/__console.py,sha256=QLnfw1ONU9eVPQZ_LjzY-7b_gfZpRRRdI7imHR1lJR8,2983
197
197
  ngsolve/__expr.py,sha256=ZAtv94PVtAdvWWKFIvQGJC55aIEY6ajo-l5Hp-1V-6s,4396
@@ -206,7 +206,7 @@ ngsolve/meshes.py,sha256=nz95LP1EEIVAEJ0jyQGqq0E-62uuy2tvIRgqIrEqDHQ,27534
206
206
  ngsolve/ngs2petsc.py,sha256=PLAkvu4H-ZEXd0-bM2v0OJX7gga-OJ9d-NB7g322-wQ,12809
207
207
  ngsolve/ngscxx.py,sha256=r9TV49w0MKIxE6fgJYO4FNv-5wcM9eAFYIG9GspUy_A,1335
208
208
  ngsolve/ngslib.lib,sha256=PMhmZBaGh5nKKYoOl2fg3yeDwwLKpe7a5XttqXXc5xc,1716
209
- ngsolve/ngslib.pyd,sha256=Yk5cm8L7bHirX7UG-Js5Ie-C1jCRgIlO_W19ZXWKC_I,123392
209
+ ngsolve/ngslib.pyd,sha256=hR9gePpli1j6uGTaBwNI4Omo4KTijRHHXibRBBxP7S0,123392
210
210
  ngsolve/nonlinearsolvers.py,sha256=nKd-SVJseTWztHZPEPKsbv0mLwQjFILZtOh7Ggft0xs,8419
211
211
  ngsolve/preconditioners.py,sha256=vsbO1lQG-ibmk88AHsiizDZcBYsfHEL-13_E_l-tYuw,250
212
212
  ngsolve/solve_implementation.py,sha256=hMoKsE83sNu5hknrcl3XDMW617GI8h59QaUUkqwE9Pk,5215
@@ -215,12 +215,12 @@ ngsolve/timestepping.py,sha256=SuKsFS7cDXRixKWdMMIWW4flet12HLeqWTBC0DFhPwg,8535
215
215
  ngsolve/timing.py,sha256=j_Plbbh51pS9QwMq93hyvFDSrbywmdKZ6Z6OOZmZoe4,4093
216
216
  ngsolve/utils.py,sha256=jg6smLuKF6G9Rvg-EXjyYwjFJGyyiqSRknevdjp-9J4,4724
217
217
  ngsolve/webgui.py,sha256=HVJnfG96eGuO6ZRfqiWQlRaKbK_Yv5y0QbicfNFAf6A,24983
218
- ngsolve/cmake/NGSolveConfig.cmake,sha256=nItz73GNCV0uDitvUiBhMYUCtChyrD5-r9qe0bTtdWE,5182
218
+ ngsolve/cmake/NGSolveConfig.cmake,sha256=TE9ydvhG_B_O2svFOYOjwLFCYyomKAAyR97c4BtKyjI,5182
219
219
  ngsolve/cmake/ngsolve-targets-release.cmake,sha256=knQjCmz6J-x_Egg5DosY5hU_CZdZlSQxQ4Za7pS07fA,907
220
220
  ngsolve/cmake/ngsolve-targets.cmake,sha256=CDY3Uo0eZa6NGJVRTLZDkbgSrLqTnub8olMieARMi48,5905
221
221
  ngsolve/config/__init__.py,sha256=IjGKWBHvRx572Z6m-5z0q82xuQaWlBABy1whwy2Uxak,23
222
222
  ngsolve/config/__main__.py,sha256=anI_XpgrpEnVnMyrFiH3Yon_tpQZkehnqRTNC02NiBI,93
223
- ngsolve/config/config.py,sha256=67kHJGQNzIkDCdccnfKpTR-ujmnY6Fk1TjlDly5o5M0,2549
223
+ ngsolve/config/config.py,sha256=DgNpOn-hHNe6q_AeSHkkXjqIl67fn2u5rfw1KNY7e3A,2549
224
224
  ngsolve/demos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
225
  ngsolve/demos/TensorProduct/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
226
  ngsolve/demos/TensorProduct/tp_dg_1d_1d.py,sha256=3Q9ntmVJGIKQ-JLdGWgECR_kDjTG8FPVCSiTJkxyi40,2188
@@ -252,37 +252,37 @@ ngsolve/demos/mpi/mpi_cmagnet.py,sha256=59TuQvIIGoDStyJneH47NG131nppBoQpZQ9rfvG_
252
252
  ngsolve/demos/mpi/mpi_navierstokes.py,sha256=ieAWMDd9LoH99L14iBgF_YmX_xk7gltZ9MruTFN6xAY,3028
253
253
  ngsolve/demos/mpi/mpi_poisson.py,sha256=_-H0HFqlwlpasiVD9OQjUvJbWJcQ34-4y-va1WOSOzE,2557
254
254
  ngsolve/demos/mpi/mpi_timeDG.py,sha256=FUOh_1dzOGUU-uAsD4iyz0RVT382jMiMiuYkZjarhAE,1963
255
- ngsolve-6.2.2506.post33.dev0.data/data/Scripts/ngsolve.tcl,sha256=8KBOXZKYU_qx8785PIjdmVjcUbCxR5aYrod0BZ4UgGc,21637
256
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/beam.geo,sha256=HTv0A6IUoVuavifolhGKY6U44z0hni07Htonqe6rw_A,404
257
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/beam.vol,sha256=QZbM9JE4rBs5nVXaw7ZAbDf60yXbX19bm1OnOScF57M,13834
258
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/chip.in2d,sha256=561AjEIPnlzMZHIzep5lRjocQDm8w7o7IDna5u8s9JQ,592
259
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/chip.vol,sha256=gkEmBWlQh8BkSFNTf-XISfmuGzHXDKANV4Uoww_BwJI,28511
260
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/coil.geo,sha256=ylB2OiWEZztFXPx99qTNRJKmZFIDPEezEgQt4EPtZRA,376
261
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/coil.vol,sha256=t8cWP_YX38FMw0S-7vEVUOcSH0VK6DlaqVWG_zmBo-4,147284
262
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/coilshield.geo,sha256=Sq8w7i22WQ0viaiM3bU_63lZGFWp8JgyDqs3RdjeTe0,629
263
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/coilshield.vol,sha256=JiZOM9A529-hikvv1kyLwffTRpeatLtaVTNcu42o1fo,165576
264
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/cube.geo,sha256=Wd9AnPdoQgjQ-JK6zmoXjsNxPR9B8ED4pdHVwmRoe1M,405
265
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/cube.vol,sha256=RS8bay_KlF6IZM0QDDr7_dGaFLqoxszQU_w8TYutMKY,92127
266
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde,sha256=lK3sXmK74eFEMk8F6hwFHe_tBYnOdRq3F-RbzKpDK0c,1354
267
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde,sha256=VuEQtkZaIJA9yuvjG_jcx1UB9UtAaZSoeJYFHcHeYxk,1141
268
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d1_square.pde,sha256=24ZZ0nlbr5LKl_mPyeZZMSkiCBiBk1fzNElo3yITX2A,1072
269
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d2_chip.pde,sha256=yGIbzuTdCEjdoC9Ig_hbcy5qz69_wxgPZeYmhY1rN7k,985
270
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d3_helmholtz.pde,sha256=gWqQTh1M9NiKGohlu5JxDJuvRz-T28WlNSVbwmMvM-0,590
271
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d4_cube.pde,sha256=6kL43ehAh1PdwnFlLjadg325bFjpz02p2PpAOxlDFuc,1079
272
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d5_beam.pde,sha256=VQt9WbqAVWObFH9Jy1YieE9WHnVZ_hnsKVTz6ysEBxI,2059
273
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d6_shaft.pde,sha256=y10nLFA2-GwEwnAs5R-8wppRq-09vYJ_C9LJ3DSvlS0,1974
274
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d7_coil.pde,sha256=KFkqtZiPD4LQsGnghwwdq1qmpWf0T5xQR4HwbRL9ZZA,1250
275
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d8_coilshield.pde,sha256=9XG0TcgZ7mComh_pVntnuzDldEx5PD-C7gqK05PTWus,1190
276
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/d9_hybridDG.pde,sha256=vYschVRu5vC91YpyVZFCBFuno-ZlOcRznPD-OvJTLtQ,1551
277
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/doubleglazing.in2d,sha256=lDCukUh9iTpkiH-qJAVdeAlMpiYF0AibAA6g3jOeWDY,533
278
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/doubleglazing.vol,sha256=IUOhUrZi8WMnvrIJe--A8cYPN6mscslA8_4yxvKShb0,35724
279
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz,sha256=RuxM0vtYljoAImOH6U6avt0LmWaUbGNao37n8p_Yd1w,496477
280
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/shaft.geo,sha256=Y3OVQlWjgICe2Dwz6-Qs8r0tLanjwtWP0xFx5AwNRJk,2507
281
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/shaft.vol,sha256=IqViJ4hJKk3Uf66PkVJ-kHpBQ_ZpkigRuh5g1Po4euY,274741
282
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/square.in2d,sha256=5dewiEjTsRFiNkBlmaTjBAZejq55TTlusp8ALfTMc2M,209
283
- ngsolve-6.2.2506.post33.dev0.data/data/share/ngsolve/square.vol,sha256=tWdPeQ52deUNgWOsWKhqgNVsJKhkJmEAVp5-xjhzEwg,9311
284
- ngsolve-6.2.2506.post33.dev0.dist-info/LICENSE,sha256=iFoD9UsVeWEjb0aEPnmXKr_NaJC2y7NovH7KMo_5WhI,26934
285
- ngsolve-6.2.2506.post33.dev0.dist-info/METADATA,sha256=X2ZRb6fB3uU2AQDg36MyL7-p-VwRFmFD51cVp_DF2fs,227
286
- ngsolve-6.2.2506.post33.dev0.dist-info/WHEEL,sha256=m80YfzNz3jW1qC3l3wcIVYwAZZ7BsFPRWWkkti4tjCc,96
287
- ngsolve-6.2.2506.post33.dev0.dist-info/top_level.txt,sha256=1llU44DxNIP85uPT4RChsIuV3h2d0_5j0Ui_Df5vV8E,15
288
- ngsolve-6.2.2506.post33.dev0.dist-info/RECORD,,
255
+ ngsolve-6.2.2506.post38.dev0.data/data/Scripts/ngsolve.tcl,sha256=8KBOXZKYU_qx8785PIjdmVjcUbCxR5aYrod0BZ4UgGc,21637
256
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/beam.geo,sha256=HTv0A6IUoVuavifolhGKY6U44z0hni07Htonqe6rw_A,404
257
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/beam.vol,sha256=QZbM9JE4rBs5nVXaw7ZAbDf60yXbX19bm1OnOScF57M,13834
258
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/chip.in2d,sha256=561AjEIPnlzMZHIzep5lRjocQDm8w7o7IDna5u8s9JQ,592
259
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/chip.vol,sha256=gkEmBWlQh8BkSFNTf-XISfmuGzHXDKANV4Uoww_BwJI,28511
260
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coil.geo,sha256=ylB2OiWEZztFXPx99qTNRJKmZFIDPEezEgQt4EPtZRA,376
261
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coil.vol,sha256=t8cWP_YX38FMw0S-7vEVUOcSH0VK6DlaqVWG_zmBo-4,147284
262
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coilshield.geo,sha256=Sq8w7i22WQ0viaiM3bU_63lZGFWp8JgyDqs3RdjeTe0,629
263
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coilshield.vol,sha256=JiZOM9A529-hikvv1kyLwffTRpeatLtaVTNcu42o1fo,165576
264
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/cube.geo,sha256=Wd9AnPdoQgjQ-JK6zmoXjsNxPR9B8ED4pdHVwmRoe1M,405
265
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/cube.vol,sha256=RS8bay_KlF6IZM0QDDr7_dGaFLqoxszQU_w8TYutMKY,92127
266
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde,sha256=lK3sXmK74eFEMk8F6hwFHe_tBYnOdRq3F-RbzKpDK0c,1354
267
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde,sha256=VuEQtkZaIJA9yuvjG_jcx1UB9UtAaZSoeJYFHcHeYxk,1141
268
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d1_square.pde,sha256=24ZZ0nlbr5LKl_mPyeZZMSkiCBiBk1fzNElo3yITX2A,1072
269
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d2_chip.pde,sha256=yGIbzuTdCEjdoC9Ig_hbcy5qz69_wxgPZeYmhY1rN7k,985
270
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d3_helmholtz.pde,sha256=gWqQTh1M9NiKGohlu5JxDJuvRz-T28WlNSVbwmMvM-0,590
271
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d4_cube.pde,sha256=6kL43ehAh1PdwnFlLjadg325bFjpz02p2PpAOxlDFuc,1079
272
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d5_beam.pde,sha256=VQt9WbqAVWObFH9Jy1YieE9WHnVZ_hnsKVTz6ysEBxI,2059
273
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d6_shaft.pde,sha256=y10nLFA2-GwEwnAs5R-8wppRq-09vYJ_C9LJ3DSvlS0,1974
274
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d7_coil.pde,sha256=KFkqtZiPD4LQsGnghwwdq1qmpWf0T5xQR4HwbRL9ZZA,1250
275
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d8_coilshield.pde,sha256=9XG0TcgZ7mComh_pVntnuzDldEx5PD-C7gqK05PTWus,1190
276
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d9_hybridDG.pde,sha256=vYschVRu5vC91YpyVZFCBFuno-ZlOcRznPD-OvJTLtQ,1551
277
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/doubleglazing.in2d,sha256=lDCukUh9iTpkiH-qJAVdeAlMpiYF0AibAA6g3jOeWDY,533
278
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/doubleglazing.vol,sha256=IUOhUrZi8WMnvrIJe--A8cYPN6mscslA8_4yxvKShb0,35724
279
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz,sha256=RuxM0vtYljoAImOH6U6avt0LmWaUbGNao37n8p_Yd1w,496477
280
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/shaft.geo,sha256=Y3OVQlWjgICe2Dwz6-Qs8r0tLanjwtWP0xFx5AwNRJk,2507
281
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/shaft.vol,sha256=IqViJ4hJKk3Uf66PkVJ-kHpBQ_ZpkigRuh5g1Po4euY,274741
282
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/square.in2d,sha256=5dewiEjTsRFiNkBlmaTjBAZejq55TTlusp8ALfTMc2M,209
283
+ ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/square.vol,sha256=tWdPeQ52deUNgWOsWKhqgNVsJKhkJmEAVp5-xjhzEwg,9311
284
+ ngsolve-6.2.2506.post38.dev0.dist-info/LICENSE,sha256=iFoD9UsVeWEjb0aEPnmXKr_NaJC2y7NovH7KMo_5WhI,26934
285
+ ngsolve-6.2.2506.post38.dev0.dist-info/METADATA,sha256=Xyta4NDD1xbAXXK7K72sNod6AbWFc_R8Z_kstzAr5mY,227
286
+ ngsolve-6.2.2506.post38.dev0.dist-info/WHEEL,sha256=m80YfzNz3jW1qC3l3wcIVYwAZZ7BsFPRWWkkti4tjCc,96
287
+ ngsolve-6.2.2506.post38.dev0.dist-info/top_level.txt,sha256=1llU44DxNIP85uPT4RChsIuV3h2d0_5j0Ui_Df5vV8E,15
288
+ ngsolve-6.2.2506.post38.dev0.dist-info/RECORD,,