ngsolve 6.2.2506.post33.dev0__cp312-cp312-win_amd64.whl → 6.2.2506.post38.dev0__cp312-cp312-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.
- netgen/include/kernels.hpp +3 -4
- netgen/include/mptools.hpp +393 -173
- netgen/include/recursive_pol.hpp +2 -2
- netgen/include/sparsematrix.hpp +1 -1
- netgen/lib/libngsolve.lib +0 -0
- netgen/libngsolve.dll +0 -0
- ngsolve/cmake/NGSolveConfig.cmake +1 -1
- ngsolve/config/config.py +5 -5
- ngsolve/ngslib.pyd +0 -0
- {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/METADATA +1 -1
- {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/RECORD +43 -43
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/Scripts/ngsolve.tcl +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.geo +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.in2d +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.geo +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coilshield.geo +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coilshield.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.geo +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d1_square.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d2_chip.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d4_cube.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d5_beam.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d6_shaft.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d7_coil.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/doubleglazing.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.geo +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/square.in2d +0 -0
- {ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/square.vol +0 -0
- {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/WHEEL +0 -0
- {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/licenses/LICENSE +0 -0
- {ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/top_level.txt +0 -0
netgen/include/kernels.hpp
CHANGED
|
@@ -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.
|
|
490
|
-
|
|
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
|
|
netgen/include/mptools.hpp
CHANGED
|
@@ -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
|
-
|
|
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
|
|
203
|
-
|
|
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
|
|
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
|
-
|
|
579
|
+
ProcessVectorizedBatchSS<3, vec_length>(batch, len, theta);
|
|
559
580
|
}
|
|
560
581
|
else if (N <= 4) {
|
|
561
|
-
|
|
582
|
+
ProcessVectorizedBatchSS<4, vec_length>(batch, len, theta);
|
|
562
583
|
}
|
|
563
584
|
else if (N <= 6) {
|
|
564
|
-
|
|
585
|
+
ProcessVectorizedBatchSS<6, vec_length>(batch, len, theta);
|
|
565
586
|
}
|
|
566
587
|
else if (N <= 12) {
|
|
567
|
-
|
|
588
|
+
ProcessVectorizedBatchSS<12, vec_length>(batch, len, theta);
|
|
568
589
|
}
|
|
569
590
|
else if (N <= 24) {
|
|
570
|
-
|
|
591
|
+
ProcessVectorizedBatchSS<24, vec_length>(batch, len, theta);
|
|
571
592
|
}
|
|
572
593
|
else if (N <= 48) {
|
|
573
|
-
|
|
594
|
+
ProcessVectorizedBatchSS<48, vec_length>(batch, len, theta);
|
|
574
595
|
}
|
|
575
596
|
else if (N <= 96) {
|
|
576
|
-
|
|
597
|
+
ProcessVectorizedBatchSS<96, vec_length>(batch, len, theta);
|
|
577
598
|
}
|
|
578
599
|
else if (N <= 192) {
|
|
579
|
-
|
|
600
|
+
ProcessVectorizedBatchSS<192, vec_length>(batch, len, theta);
|
|
580
601
|
}
|
|
581
602
|
else {
|
|
582
603
|
// Split large batches
|
|
583
|
-
|
|
584
|
-
|
|
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
|
|
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
|
-
|
|
593
|
-
|
|
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.
|
|
692
|
-
dipoles.
|
|
693
|
-
chargedipoles.
|
|
694
|
-
currents.
|
|
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() <
|
|
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 (
|
|
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
|
-
|
|
1323
|
-
|
|
1355
|
+
Array<RecordingSS> recording;
|
|
1356
|
+
Array<Node*> nodes_to_process;
|
|
1324
1357
|
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1358
|
+
{
|
|
1359
|
+
RegionTimer reg(trec);
|
|
1360
|
+
root.CalcMP(&recording, &nodes_to_process);
|
|
1361
|
+
}
|
|
1329
1362
|
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
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
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
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
|
-
|
|
1370
|
-
}
|
|
1415
|
+
}
|
|
1371
1416
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1534
|
+
ProcessVectorizedBatchRS<3, vec_length>(batch, len, theta);
|
|
1460
1535
|
}
|
|
1461
1536
|
else if (N <= 4) {
|
|
1462
|
-
|
|
1537
|
+
ProcessVectorizedBatchRS<4, vec_length>(batch, len, theta);
|
|
1463
1538
|
}
|
|
1464
1539
|
else if (N <= 6) {
|
|
1465
|
-
|
|
1540
|
+
ProcessVectorizedBatchRS<6, vec_length>(batch, len, theta);
|
|
1466
1541
|
}
|
|
1467
1542
|
else if (N <= 12) {
|
|
1468
|
-
|
|
1543
|
+
ProcessVectorizedBatchRS<12, vec_length>(batch, len, theta);
|
|
1469
1544
|
}
|
|
1470
1545
|
else if (N <= 24) {
|
|
1471
|
-
|
|
1546
|
+
ProcessVectorizedBatchRS<24, vec_length>(batch, len, theta);
|
|
1472
1547
|
}
|
|
1473
1548
|
else if (N <= 48) {
|
|
1474
|
-
|
|
1549
|
+
ProcessVectorizedBatchRS<48, vec_length>(batch, len, theta);
|
|
1475
1550
|
}
|
|
1476
1551
|
else if (N <= 96) {
|
|
1477
|
-
|
|
1552
|
+
ProcessVectorizedBatchRS<96, vec_length>(batch, len, theta);
|
|
1478
1553
|
}
|
|
1479
1554
|
else if (N <= 192) {
|
|
1480
|
-
|
|
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
|
|
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),
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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() <
|
|
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
|
-
|
|
2085
|
+
root.AllocateMemory();
|
|
1918
2086
|
|
|
1919
|
-
//
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
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
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
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
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
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
|
-
|
|
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);
|
netgen/include/recursive_pol.hpp
CHANGED
|
@@ -1544,7 +1544,7 @@ namespace ngfem
|
|
|
1544
1544
|
|
|
1545
1545
|
if (mmax+1 > matA.Height() || nmax > matA.Width())
|
|
1546
1546
|
{
|
|
1547
|
-
for (
|
|
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 (
|
|
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));
|
netgen/include/sparsematrix.hpp
CHANGED
|
@@ -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
|
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
|
-
NGSOLVE_VERSION_GIT = "v6.2.2506-
|
|
34
|
-
NGSOLVE_VERSION_PYTHON = "6.2.2506.
|
|
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 = "
|
|
38
|
+
NGSOLVE_VERSION_TWEAK = "38"
|
|
39
39
|
NGSOLVE_VERSION_PATCH = "2506"
|
|
40
|
-
NGSOLVE_VERSION_HASH = "
|
|
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,4 +1,4 @@
|
|
|
1
|
-
netgen/libngsolve.dll,sha256=
|
|
1
|
+
netgen/libngsolve.dll,sha256=D1S8Ot4qolrvikDDoqHatD3pQ5J3nchKC4RBOx4uPUY,37181440
|
|
2
2
|
netgen/ngscxx.bat,sha256=OHagH0Xm9cOpt3urQF1XRhzsoBOIdfl3KE3wB1hG0i4,670
|
|
3
3
|
netgen/ngsld.bat,sha256=YD1I1rK70K_YvLev7aYQMD9mCcwF55k1B_8pRWPpob0,428
|
|
4
4
|
netgen/include/analytic_integrals.hpp,sha256=oPgn5R2aQOu3ELN-NIMK-h2UFFJbmFlx-cZd_Nqm7rQ,248
|
|
@@ -99,7 +99,7 @@ netgen/include/intrule.hpp,sha256=zZAu7zxZ6oiHjE-UfRyRPZOJi5LMgJFItQHz0pORNvM,83
|
|
|
99
99
|
netgen/include/intrules_SauterSchwab.hpp,sha256=2f9Lb77H6sgaVq7576L78zNGbv4MYgHpddIzfc36TKA,675
|
|
100
100
|
netgen/include/irspace.hpp,sha256=UFWeaFVUDwsHCJZqtZBBDnhWC4Oyy34z9Pr6KzofHPg,1557
|
|
101
101
|
netgen/include/jacobi.hpp,sha256=LvjGz2p4Eew3TPsRU34oWMNPXIZ_-tU6prsgjUiqgEs,4891
|
|
102
|
-
netgen/include/kernels.hpp,sha256=
|
|
102
|
+
netgen/include/kernels.hpp,sha256=GLY2-mHanp5kuc3ccNFyWBUWCkteHWtbSweXqrt7HvA,21132
|
|
103
103
|
netgen/include/l2hofe.hpp,sha256=03O8VX8PyBM6v8IrrVooN85H_X-NM4j2neDPivn-xGI,6843
|
|
104
104
|
netgen/include/l2hofe_impl.hpp,sha256=GyZPQ2RFQWxBoiS82cg1I3LjTq1M7uFeZ6IHhZVe7Lw,16412
|
|
105
105
|
netgen/include/l2hofefo.hpp,sha256=ZA3Rqc_aGnLkS12eUz_W9AAV0hybvPSOzCIJeIMgIqE,17134
|
|
@@ -111,7 +111,7 @@ netgen/include/memusage.hpp,sha256=m_-fuupqepSve37WkRkoFHHyTtE9PdGnOVPIdQHlDiw,1
|
|
|
111
111
|
netgen/include/meshaccess.hpp,sha256=RSkB9LhWTXRIU8AoVsu-TbksjpXjbNzJfWuKDJ6y5_Q,48492
|
|
112
112
|
netgen/include/mgpre.hpp,sha256=5Zqt3pzrvm3EOfr84iU6rQx23LTkntUTd_s4_i6wEzI,5029
|
|
113
113
|
netgen/include/mp_coefficient.hpp,sha256=gZ7E6DbHH2pmRUWxXvTT0EsaA6ixFGrO-xMCmBgC18E,5125
|
|
114
|
-
netgen/include/mptools.hpp,sha256=
|
|
114
|
+
netgen/include/mptools.hpp,sha256=jIeN0h359sPuvFYbxyF961A3CHizuDza350Y6NZfpgc,72442
|
|
115
115
|
netgen/include/multigrid.hpp,sha256=7YgJfeGTBnb-aFWHrbcVk3dos6XYU0iVCgiY8UvRopY,898
|
|
116
116
|
netgen/include/multivector.hpp,sha256=5rkNSqyPhIXAb1lGKLcy908D9Uw9oqY4wpUXZEXbEPE,13082
|
|
117
117
|
netgen/include/mumpsinverse.hpp,sha256=8YiUlQZMFVsJ0kuwaSphGZvxyEZJAZZApH8XahiTeEo,4249
|
|
@@ -148,7 +148,7 @@ netgen/include/python_comp.hpp,sha256=FgujlcVk9FKWwMBEo9CfJ-q_Kb4TNcCziotVTFIuXv
|
|
|
148
148
|
netgen/include/python_fem.hpp,sha256=pdSB1RLhv2Vi52TaRoGpjQ21EHOA3RFAF0jeiWDp6EQ,3161
|
|
149
149
|
netgen/include/python_linalg.hpp,sha256=HdWTpdddyVmv3ZO73sG0BoHleKiREg9emIcyjFl3au8,1761
|
|
150
150
|
netgen/include/python_ngstd.hpp,sha256=8NptP1VGDLDZ6gRC2kbayi-fHVg1IRNCZhgalJ4LUQ4,10803
|
|
151
|
-
netgen/include/recursive_pol.hpp,sha256=
|
|
151
|
+
netgen/include/recursive_pol.hpp,sha256=k9kqexbmIuj52667hRGB-znHTXeQfLIGqJrPOr5HmTg,125223
|
|
152
152
|
netgen/include/recursive_pol_tet.hpp,sha256=TKnMfmn1K7XvmNRD8kmLxPlooLRK6irBMKOwvRowsn4,9863
|
|
153
153
|
netgen/include/recursive_pol_trig.hpp,sha256=UylKioGKIXXgSlSEbD4XPnzhJvP24JwD3bBYvFppHpg,11333
|
|
154
154
|
netgen/include/reorderedfespace.hpp,sha256=8k8RKvV4941tMgnehPf8ZDX85VPMtrsVEyCZ-GBDUBU,3085
|
|
@@ -159,7 +159,7 @@ netgen/include/simd_complex.hpp,sha256=JOmBhwEPK-LtuXmofWR01ziUWXGTcmzRtoFl34Zp0
|
|
|
159
159
|
netgen/include/smoother.hpp,sha256=SoVZvhFynyPSIAe-x8EloVluIHUE0k78Dp3sQFu-Yfo,6896
|
|
160
160
|
netgen/include/solve.hpp,sha256=lzCGHU1QOj9VXG43Q8MzvDi48-BfVH_fG8R0ttU8Xfg,2123
|
|
161
161
|
netgen/include/sparsecholesky.hpp,sha256=hOzFoXMEelAdJROF1q4zkYv0yfZgSDhjwaYvRRmiMcE,9201
|
|
162
|
-
netgen/include/sparsematrix.hpp,sha256=
|
|
162
|
+
netgen/include/sparsematrix.hpp,sha256=c_FdF060SJ0_qQK3WRQg5Gu042neowQHQ31n8cj3r1E,33779
|
|
163
163
|
netgen/include/sparsematrix_dyn.hpp,sha256=1azpAkASyjwRKiDZ_FVVyBPiLpiZocsW0S9bEMTjprI,2746
|
|
164
164
|
netgen/include/sparsematrix_impl.hpp,sha256=WpqmiecTQpbvE6LSfoouvKBCY6T2Y4FetCclHPa8RTI,31232
|
|
165
165
|
netgen/include/special_matrix.hpp,sha256=j_9NSuEudoEzX3hx6TAdSwOEka5MiQgqJ1lAOwno4ng,16989
|
|
@@ -190,7 +190,7 @@ netgen/include/voxelcoefficientfunction.hpp,sha256=zPlatX_nf2ODK2X979wvpm1HXHEzn
|
|
|
190
190
|
netgen/include/vtkoutput.hpp,sha256=GwPaFtOVY27_1hKwSqpNHV4ppOk3CVsLdMpocm27odQ,6628
|
|
191
191
|
netgen/include/vvector.hpp,sha256=vpnwWlNWsEJB26ve8cKADbUMGVBTTVCFvrBC4r_LDDQ,4785
|
|
192
192
|
netgen/include/webgui.hpp,sha256=xm1S5KHockrzf_R4zHzQ9fzwfQ4H5aZaZm9ItCaR41s,2199
|
|
193
|
-
netgen/lib/libngsolve.lib,sha256=
|
|
193
|
+
netgen/lib/libngsolve.lib,sha256=hHJqfDAQlmcu2WDs3lLvAsxdMKVnvkKtryEduOshqbY,13923870
|
|
194
194
|
ngsolve/TensorProductTools.py,sha256=jD4LtJdEiLt2dDsU6STMXb10yrau_i20gatwGlqbiFQ,8562
|
|
195
195
|
ngsolve/__console.py,sha256=QLnfw1ONU9eVPQZ_LjzY-7b_gfZpRRRdI7imHR1lJR8,2983
|
|
196
196
|
ngsolve/__expr.py,sha256=ZAtv94PVtAdvWWKFIvQGJC55aIEY6ajo-l5Hp-1V-6s,4396
|
|
@@ -205,7 +205,7 @@ ngsolve/meshes.py,sha256=nz95LP1EEIVAEJ0jyQGqq0E-62uuy2tvIRgqIrEqDHQ,27534
|
|
|
205
205
|
ngsolve/ngs2petsc.py,sha256=PLAkvu4H-ZEXd0-bM2v0OJX7gga-OJ9d-NB7g322-wQ,12809
|
|
206
206
|
ngsolve/ngscxx.py,sha256=r9TV49w0MKIxE6fgJYO4FNv-5wcM9eAFYIG9GspUy_A,1335
|
|
207
207
|
ngsolve/ngslib.lib,sha256=PMhmZBaGh5nKKYoOl2fg3yeDwwLKpe7a5XttqXXc5xc,1716
|
|
208
|
-
ngsolve/ngslib.pyd,sha256=
|
|
208
|
+
ngsolve/ngslib.pyd,sha256=UFTb_N_i8ndua82PGhYoWJplSjuQAysUGBrlAodDqKw,123904
|
|
209
209
|
ngsolve/nonlinearsolvers.py,sha256=nKd-SVJseTWztHZPEPKsbv0mLwQjFILZtOh7Ggft0xs,8419
|
|
210
210
|
ngsolve/preconditioners.py,sha256=vsbO1lQG-ibmk88AHsiizDZcBYsfHEL-13_E_l-tYuw,250
|
|
211
211
|
ngsolve/solve_implementation.py,sha256=hMoKsE83sNu5hknrcl3XDMW617GI8h59QaUUkqwE9Pk,5215
|
|
@@ -214,12 +214,12 @@ ngsolve/timestepping.py,sha256=SuKsFS7cDXRixKWdMMIWW4flet12HLeqWTBC0DFhPwg,8535
|
|
|
214
214
|
ngsolve/timing.py,sha256=j_Plbbh51pS9QwMq93hyvFDSrbywmdKZ6Z6OOZmZoe4,4093
|
|
215
215
|
ngsolve/utils.py,sha256=jg6smLuKF6G9Rvg-EXjyYwjFJGyyiqSRknevdjp-9J4,4724
|
|
216
216
|
ngsolve/webgui.py,sha256=HVJnfG96eGuO6ZRfqiWQlRaKbK_Yv5y0QbicfNFAf6A,24983
|
|
217
|
-
ngsolve/cmake/NGSolveConfig.cmake,sha256=
|
|
217
|
+
ngsolve/cmake/NGSolveConfig.cmake,sha256=8AGOwlrH2rjwZ4TNGP15i_KQGXpRKKjlTfAoxE2ae38,5155
|
|
218
218
|
ngsolve/cmake/ngsolve-targets-release.cmake,sha256=knQjCmz6J-x_Egg5DosY5hU_CZdZlSQxQ4Za7pS07fA,907
|
|
219
219
|
ngsolve/cmake/ngsolve-targets.cmake,sha256=CDY3Uo0eZa6NGJVRTLZDkbgSrLqTnub8olMieARMi48,5905
|
|
220
220
|
ngsolve/config/__init__.py,sha256=IjGKWBHvRx572Z6m-5z0q82xuQaWlBABy1whwy2Uxak,23
|
|
221
221
|
ngsolve/config/__main__.py,sha256=anI_XpgrpEnVnMyrFiH3Yon_tpQZkehnqRTNC02NiBI,93
|
|
222
|
-
ngsolve/config/config.py,sha256=
|
|
222
|
+
ngsolve/config/config.py,sha256=WGvMHzPx6CYJXqeoC4Db2M45zLvrpBacVXys8U498Ac,2549
|
|
223
223
|
ngsolve/demos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
224
224
|
ngsolve/demos/TensorProduct/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
225
|
ngsolve/demos/TensorProduct/tp_dg_1d_1d.py,sha256=3Q9ntmVJGIKQ-JLdGWgECR_kDjTG8FPVCSiTJkxyi40,2188
|
|
@@ -251,37 +251,37 @@ ngsolve/demos/mpi/mpi_cmagnet.py,sha256=59TuQvIIGoDStyJneH47NG131nppBoQpZQ9rfvG_
|
|
|
251
251
|
ngsolve/demos/mpi/mpi_navierstokes.py,sha256=ieAWMDd9LoH99L14iBgF_YmX_xk7gltZ9MruTFN6xAY,3028
|
|
252
252
|
ngsolve/demos/mpi/mpi_poisson.py,sha256=_-H0HFqlwlpasiVD9OQjUvJbWJcQ34-4y-va1WOSOzE,2557
|
|
253
253
|
ngsolve/demos/mpi/mpi_timeDG.py,sha256=FUOh_1dzOGUU-uAsD4iyz0RVT382jMiMiuYkZjarhAE,1963
|
|
254
|
-
ngsolve-6.2.2506.
|
|
255
|
-
ngsolve-6.2.2506.
|
|
256
|
-
ngsolve-6.2.2506.
|
|
257
|
-
ngsolve-6.2.2506.
|
|
258
|
-
ngsolve-6.2.2506.
|
|
259
|
-
ngsolve-6.2.2506.
|
|
260
|
-
ngsolve-6.2.2506.
|
|
261
|
-
ngsolve-6.2.2506.
|
|
262
|
-
ngsolve-6.2.2506.
|
|
263
|
-
ngsolve-6.2.2506.
|
|
264
|
-
ngsolve-6.2.2506.
|
|
265
|
-
ngsolve-6.2.2506.
|
|
266
|
-
ngsolve-6.2.2506.
|
|
267
|
-
ngsolve-6.2.2506.
|
|
268
|
-
ngsolve-6.2.2506.
|
|
269
|
-
ngsolve-6.2.2506.
|
|
270
|
-
ngsolve-6.2.2506.
|
|
271
|
-
ngsolve-6.2.2506.
|
|
272
|
-
ngsolve-6.2.2506.
|
|
273
|
-
ngsolve-6.2.2506.
|
|
274
|
-
ngsolve-6.2.2506.
|
|
275
|
-
ngsolve-6.2.2506.
|
|
276
|
-
ngsolve-6.2.2506.
|
|
277
|
-
ngsolve-6.2.2506.
|
|
278
|
-
ngsolve-6.2.2506.
|
|
279
|
-
ngsolve-6.2.2506.
|
|
280
|
-
ngsolve-6.2.2506.
|
|
281
|
-
ngsolve-6.2.2506.
|
|
282
|
-
ngsolve-6.2.2506.
|
|
283
|
-
ngsolve-6.2.2506.
|
|
284
|
-
ngsolve-6.2.2506.
|
|
285
|
-
ngsolve-6.2.2506.
|
|
286
|
-
ngsolve-6.2.2506.
|
|
287
|
-
ngsolve-6.2.2506.
|
|
254
|
+
ngsolve-6.2.2506.post38.dev0.data/data/Scripts/ngsolve.tcl,sha256=8KBOXZKYU_qx8785PIjdmVjcUbCxR5aYrod0BZ4UgGc,21637
|
|
255
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/beam.geo,sha256=HTv0A6IUoVuavifolhGKY6U44z0hni07Htonqe6rw_A,404
|
|
256
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/beam.vol,sha256=QZbM9JE4rBs5nVXaw7ZAbDf60yXbX19bm1OnOScF57M,13834
|
|
257
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/chip.in2d,sha256=561AjEIPnlzMZHIzep5lRjocQDm8w7o7IDna5u8s9JQ,592
|
|
258
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/chip.vol,sha256=gkEmBWlQh8BkSFNTf-XISfmuGzHXDKANV4Uoww_BwJI,28511
|
|
259
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coil.geo,sha256=ylB2OiWEZztFXPx99qTNRJKmZFIDPEezEgQt4EPtZRA,376
|
|
260
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coil.vol,sha256=t8cWP_YX38FMw0S-7vEVUOcSH0VK6DlaqVWG_zmBo-4,147284
|
|
261
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coilshield.geo,sha256=Sq8w7i22WQ0viaiM3bU_63lZGFWp8JgyDqs3RdjeTe0,629
|
|
262
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/coilshield.vol,sha256=JiZOM9A529-hikvv1kyLwffTRpeatLtaVTNcu42o1fo,165576
|
|
263
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/cube.geo,sha256=Wd9AnPdoQgjQ-JK6zmoXjsNxPR9B8ED4pdHVwmRoe1M,405
|
|
264
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/cube.vol,sha256=RS8bay_KlF6IZM0QDDr7_dGaFLqoxszQU_w8TYutMKY,92127
|
|
265
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde,sha256=lK3sXmK74eFEMk8F6hwFHe_tBYnOdRq3F-RbzKpDK0c,1354
|
|
266
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde,sha256=VuEQtkZaIJA9yuvjG_jcx1UB9UtAaZSoeJYFHcHeYxk,1141
|
|
267
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d1_square.pde,sha256=24ZZ0nlbr5LKl_mPyeZZMSkiCBiBk1fzNElo3yITX2A,1072
|
|
268
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d2_chip.pde,sha256=yGIbzuTdCEjdoC9Ig_hbcy5qz69_wxgPZeYmhY1rN7k,985
|
|
269
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d3_helmholtz.pde,sha256=gWqQTh1M9NiKGohlu5JxDJuvRz-T28WlNSVbwmMvM-0,590
|
|
270
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d4_cube.pde,sha256=6kL43ehAh1PdwnFlLjadg325bFjpz02p2PpAOxlDFuc,1079
|
|
271
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d5_beam.pde,sha256=VQt9WbqAVWObFH9Jy1YieE9WHnVZ_hnsKVTz6ysEBxI,2059
|
|
272
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d6_shaft.pde,sha256=y10nLFA2-GwEwnAs5R-8wppRq-09vYJ_C9LJ3DSvlS0,1974
|
|
273
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d7_coil.pde,sha256=KFkqtZiPD4LQsGnghwwdq1qmpWf0T5xQR4HwbRL9ZZA,1250
|
|
274
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d8_coilshield.pde,sha256=9XG0TcgZ7mComh_pVntnuzDldEx5PD-C7gqK05PTWus,1190
|
|
275
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/d9_hybridDG.pde,sha256=vYschVRu5vC91YpyVZFCBFuno-ZlOcRznPD-OvJTLtQ,1551
|
|
276
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/doubleglazing.in2d,sha256=lDCukUh9iTpkiH-qJAVdeAlMpiYF0AibAA6g3jOeWDY,533
|
|
277
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/doubleglazing.vol,sha256=IUOhUrZi8WMnvrIJe--A8cYPN6mscslA8_4yxvKShb0,35724
|
|
278
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz,sha256=RuxM0vtYljoAImOH6U6avt0LmWaUbGNao37n8p_Yd1w,496477
|
|
279
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/shaft.geo,sha256=Y3OVQlWjgICe2Dwz6-Qs8r0tLanjwtWP0xFx5AwNRJk,2507
|
|
280
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/shaft.vol,sha256=IqViJ4hJKk3Uf66PkVJ-kHpBQ_ZpkigRuh5g1Po4euY,274741
|
|
281
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/square.in2d,sha256=5dewiEjTsRFiNkBlmaTjBAZejq55TTlusp8ALfTMc2M,209
|
|
282
|
+
ngsolve-6.2.2506.post38.dev0.data/data/share/ngsolve/square.vol,sha256=tWdPeQ52deUNgWOsWKhqgNVsJKhkJmEAVp5-xjhzEwg,9311
|
|
283
|
+
ngsolve-6.2.2506.post38.dev0.dist-info/licenses/LICENSE,sha256=iFoD9UsVeWEjb0aEPnmXKr_NaJC2y7NovH7KMo_5WhI,26934
|
|
284
|
+
ngsolve-6.2.2506.post38.dev0.dist-info/METADATA,sha256=WB2U_GaL2i24MHq0tU6x333o95jNaM6Y_3aFCew8-KM,325
|
|
285
|
+
ngsolve-6.2.2506.post38.dev0.dist-info/WHEEL,sha256=3cUY9TiuvxHsB0dWaW6wa9MO8pP_yfFeO2_t7ly9aNg,96
|
|
286
|
+
ngsolve-6.2.2506.post38.dev0.dist-info/top_level.txt,sha256=1llU44DxNIP85uPT4RChsIuV3h2d0_5j0Ui_Df5vV8E,15
|
|
287
|
+
ngsolve-6.2.2506.post38.dev0.dist-info/RECORD,,
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/Scripts/ngsolve.tcl
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.geo
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/beam.vol
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.in2d
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/chip.vol
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.geo
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/coil.vol
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.geo
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/cube.vol
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.geo
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.data → ngsolve-6.2.2506.post38.dev0.data}/data/share/ngsolve/shaft.vol
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{ngsolve-6.2.2506.post33.dev0.dist-info → ngsolve-6.2.2506.post38.dev0.dist-info}/top_level.txt
RENAMED
|
File without changes
|