ngsolve 6.2.2503__cp39-cp39-win_amd64.whl → 6.2.2504__cp39-cp39-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/integrator.hpp +4 -16
- netgen/include/mp_coefficient.hpp +140 -0
- netgen/include/mptools.hpp +42 -161
- netgen/include/symbolicintegrator.hpp +1 -0
- netgen/lib/libngsolve.lib +0 -0
- netgen/libngsolve.dll +0 -0
- ngsolve/__init__.py +1 -0
- ngsolve/cmake/NGSolveConfig.cmake +1 -1
- ngsolve/config/config.py +5 -5
- ngsolve/ngslib.pyd +0 -0
- ngsolve/solve_implementation.py +146 -0
- {ngsolve-6.2.2503.dist-info → ngsolve-6.2.2504.dist-info}/METADATA +2 -2
- {ngsolve-6.2.2503.dist-info → ngsolve-6.2.2504.dist-info}/RECORD +45 -43
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/Scripts/ngsolve.tcl +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/beam.geo +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/beam.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/chip.in2d +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/chip.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coil.geo +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coil.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coilshield.geo +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coilshield.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/cube.geo +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/cube.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d1_square.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d2_chip.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d4_cube.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d5_beam.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d6_shaft.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d7_coil.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/doubleglazing.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/shaft.geo +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/shaft.vol +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/square.in2d +0 -0
- {ngsolve-6.2.2503.data → ngsolve-6.2.2504.data}/data/share/ngsolve/square.vol +0 -0
- {ngsolve-6.2.2503.dist-info → ngsolve-6.2.2504.dist-info}/LICENSE +0 -0
- {ngsolve-6.2.2503.dist-info → ngsolve-6.2.2504.dist-info}/WHEEL +0 -0
- {ngsolve-6.2.2503.dist-info → ngsolve-6.2.2504.dist-info}/top_level.txt +0 -0
netgen/include/integrator.hpp
CHANGED
|
@@ -781,20 +781,14 @@ namespace ngfem
|
|
|
781
781
|
const FiniteElement & volumefel2, int LocalFacetNr2,
|
|
782
782
|
const ElementTransformation & eltrans2, FlatArray<int> & ElVertices2,
|
|
783
783
|
FlatVector<double> elx, FlatVector<double> ely,
|
|
784
|
-
LocalHeap & lh) const
|
|
785
|
-
{
|
|
786
|
-
throw Exception ("FacetBilinearFormIntegrator::ApplyFacetMatrix for inner facets not implemented!");
|
|
787
|
-
}
|
|
784
|
+
LocalHeap & lh) const;
|
|
788
785
|
virtual void
|
|
789
786
|
ApplyFacetMatrix (const FiniteElement & volumefel1, int LocalFacetNr1,
|
|
790
787
|
const ElementTransformation & eltrans1, FlatArray<int> & ElVertices1,
|
|
791
788
|
const FiniteElement & volumefel2, int LocalFacetNr2,
|
|
792
789
|
const ElementTransformation & eltrans2, FlatArray<int> & ElVertices2,
|
|
793
790
|
FlatVector<Complex> elx, FlatVector<Complex> ely,
|
|
794
|
-
LocalHeap & lh) const
|
|
795
|
-
{
|
|
796
|
-
throw Exception ("FacetBilinearFormIntegrator::ApplyFacetMatrix for inner facets not implemented!");
|
|
797
|
-
}
|
|
791
|
+
LocalHeap & lh) const;
|
|
798
792
|
|
|
799
793
|
|
|
800
794
|
virtual void
|
|
@@ -841,19 +835,13 @@ namespace ngfem
|
|
|
841
835
|
const ElementTransformation & eltrans, FlatArray<int> & ElVertices,
|
|
842
836
|
const ElementTransformation & seltrans, FlatArray<int> & SElVertices,
|
|
843
837
|
FlatVector<double> elx, FlatVector<double> ely,
|
|
844
|
-
LocalHeap & lh) const
|
|
845
|
-
{
|
|
846
|
-
throw Exception ("FacetBilinearFormIntegrator::ApplyFacetMatrix for boundary facets not implemented!");
|
|
847
|
-
}
|
|
838
|
+
LocalHeap & lh) const;
|
|
848
839
|
virtual void
|
|
849
840
|
ApplyFacetMatrix (const FiniteElement & volumefel, int LocalFacetNr,
|
|
850
841
|
const ElementTransformation & eltrans, FlatArray<int> & ElVertices,
|
|
851
842
|
const ElementTransformation & seltrans, FlatArray<int> & SElVertices,
|
|
852
843
|
FlatVector<Complex> elx, FlatVector<Complex> ely,
|
|
853
|
-
LocalHeap & lh) const
|
|
854
|
-
{
|
|
855
|
-
throw Exception ("FacetBilinearFormIntegrator::ApplyFacetMatrix for boundary facets not implemented!");
|
|
856
|
-
}
|
|
844
|
+
LocalHeap & lh) const;
|
|
857
845
|
|
|
858
846
|
|
|
859
847
|
// calculate traces in integration points
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#ifndef MP_COEFFICIENT
|
|
2
|
+
#define MP_COEFFICIENT
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
#include "mptools.hpp"
|
|
6
|
+
|
|
7
|
+
namespace ngsbem
|
|
8
|
+
{
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// ******************** Coefficient Functions *********************
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SphericalHarmonicsCF : public CoefficientFunction
|
|
15
|
+
{
|
|
16
|
+
SphericalHarmonics<Complex> sh;
|
|
17
|
+
public:
|
|
18
|
+
SphericalHarmonicsCF (int order)
|
|
19
|
+
: CoefficientFunction(1, true), sh(order) { }
|
|
20
|
+
Complex & Coef(int n, int m) { return sh.Coef(n,m); }
|
|
21
|
+
|
|
22
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
23
|
+
{ throw Exception("real eval not available"); }
|
|
24
|
+
|
|
25
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
26
|
+
{
|
|
27
|
+
values(0) = sh.Eval(mip.GetPoint());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
virtual void Evaluate (const BaseMappedIntegrationRule & ir, BareSliceMatrix<Complex> values) const override
|
|
31
|
+
{
|
|
32
|
+
for (int i = 0; i < ir.Size(); i++)
|
|
33
|
+
{
|
|
34
|
+
auto & mip = ir[i];
|
|
35
|
+
values(i,0) = sh.Eval(mip.GetPoint());
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
auto & SH() { return sh; }
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
template <typename entry_type> class RegularMLMultiPoleCF;
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
template <typename RADIAL, typename entry_type=Complex>
|
|
48
|
+
class MultiPoleCF : public CoefficientFunction
|
|
49
|
+
{
|
|
50
|
+
MultiPole<RADIAL, entry_type> mp;
|
|
51
|
+
Vec<3> center;
|
|
52
|
+
public:
|
|
53
|
+
MultiPoleCF (int order, double kappa, Vec<3> acenter, double rtyp = 1)
|
|
54
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mp(order, kappa, rtyp), center(acenter) { }
|
|
55
|
+
|
|
56
|
+
entry_type & Coef(int n, int m) { return mp.Coef(n,m); }
|
|
57
|
+
auto & SH() { return mp.SH(); }
|
|
58
|
+
auto & MP() { return mp; }
|
|
59
|
+
Vec<3> Center() const { return center; }
|
|
60
|
+
|
|
61
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
62
|
+
{ throw Exception("real eval not available"); }
|
|
63
|
+
|
|
64
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
65
|
+
{
|
|
66
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
67
|
+
values(0) = mp.Eval(mip.GetPoint()-center);
|
|
68
|
+
else
|
|
69
|
+
values = mp.Eval(mip.GetPoint()-center);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
template <typename TARGET>
|
|
73
|
+
void ShiftZ (double z, MultiPole<TARGET, entry_type> & target) { mp.ShiftZ(z, target); }
|
|
74
|
+
|
|
75
|
+
using CoefficientFunction::Transform;
|
|
76
|
+
template <typename TARGET>
|
|
77
|
+
void Transform (MultiPoleCF<TARGET, entry_type> & target)
|
|
78
|
+
{
|
|
79
|
+
mp.Transform (target.MP(), target.Center()-center);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
template <typename entry_type>
|
|
84
|
+
class SingularMLMultiPoleCF : public CoefficientFunction
|
|
85
|
+
{
|
|
86
|
+
shared_ptr<SingularMLMultiPole<entry_type>> mlmp;
|
|
87
|
+
public:
|
|
88
|
+
SingularMLMultiPoleCF (Vec<3> center, double r, double kappa)
|
|
89
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<SingularMLMultiPole<entry_type>>(center, r, kappa)} { }
|
|
90
|
+
|
|
91
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
92
|
+
{ throw Exception("real eval not available"); }
|
|
93
|
+
|
|
94
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
95
|
+
{
|
|
96
|
+
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
97
|
+
|
|
98
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
99
|
+
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
100
|
+
else
|
|
101
|
+
values = mlmp->Evaluate(mip.GetPoint());
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
shared_ptr<SingularMLMultiPole<entry_type>> MLMP() const { return mlmp; }
|
|
107
|
+
shared_ptr<RegularMLMultiPoleCF<entry_type>> CreateRegularExpansion(Vec<3> center, double r) const;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
template <typename entry_type>
|
|
112
|
+
class RegularMLMultiPoleCF : public CoefficientFunction
|
|
113
|
+
{
|
|
114
|
+
shared_ptr<RegularMLMultiPole<entry_type>> mlmp;
|
|
115
|
+
public:
|
|
116
|
+
RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPoleCF<entry_type>> asingmp, Vec<3> center, double r)
|
|
117
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp->MLMP(), center, r)} { }
|
|
118
|
+
RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPole<entry_type>> asingmp, Vec<3> center, double r)
|
|
119
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp, center, r)} { }
|
|
120
|
+
|
|
121
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
122
|
+
{ throw Exception("real eval not available"); }
|
|
123
|
+
|
|
124
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
125
|
+
{
|
|
126
|
+
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
127
|
+
|
|
128
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
129
|
+
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
130
|
+
else
|
|
131
|
+
values = mlmp->Evaluate(mip.GetPoint());
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
shared_ptr<RegularMLMultiPole<entry_type>> MLMP() { return mlmp; }
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
#endif
|
netgen/include/mptools.hpp
CHANGED
|
@@ -218,13 +218,11 @@ namespace ngsbem
|
|
|
218
218
|
class MPSingular
|
|
219
219
|
{
|
|
220
220
|
public:
|
|
221
|
-
/*
|
|
222
221
|
template <typename T>
|
|
223
222
|
static void Eval (int order, double r, double scale, T && values)
|
|
224
223
|
{
|
|
225
224
|
SphericalHankel1(order, r, scale, values);
|
|
226
225
|
}
|
|
227
|
-
*/
|
|
228
226
|
|
|
229
227
|
template <typename T>
|
|
230
228
|
static void Eval (int order, double kappa, double r, double rtyp, T && values)
|
|
@@ -235,7 +233,8 @@ namespace ngsbem
|
|
|
235
233
|
|
|
236
234
|
static double Scale (double kappa, double rtyp)
|
|
237
235
|
{
|
|
238
|
-
return min(1.0, rtyp*kappa);
|
|
236
|
+
// return min(1.0, rtyp*kappa);
|
|
237
|
+
return min(1.0, 0.5*rtyp*kappa);
|
|
239
238
|
}
|
|
240
239
|
};
|
|
241
240
|
|
|
@@ -245,13 +244,11 @@ namespace ngsbem
|
|
|
245
244
|
class MPRegular
|
|
246
245
|
{
|
|
247
246
|
public:
|
|
248
|
-
/*
|
|
249
247
|
template <typename T>
|
|
250
248
|
static void Eval (int order, double r, double scale, T && values)
|
|
251
249
|
{
|
|
252
250
|
SphericalBessel (order, r, 1.0/scale, values);
|
|
253
251
|
}
|
|
254
|
-
*/
|
|
255
252
|
|
|
256
253
|
template <typename T>
|
|
257
254
|
static void Eval (int order, double kappa, double r, double rtyp, T && values)
|
|
@@ -262,7 +259,8 @@ namespace ngsbem
|
|
|
262
259
|
|
|
263
260
|
static double Scale (double kappa, double rtyp)
|
|
264
261
|
{
|
|
265
|
-
return 1.0/ min(1.0, 0.25*rtyp*kappa);
|
|
262
|
+
// return 1.0/ min(1.0, 0.25*rtyp*kappa);
|
|
263
|
+
return 1.0/ min(1.0, 0.5*rtyp*kappa);
|
|
266
264
|
}
|
|
267
265
|
|
|
268
266
|
};
|
|
@@ -276,12 +274,7 @@ namespace ngsbem
|
|
|
276
274
|
SphericalHarmonics<entry_type> sh;
|
|
277
275
|
double kappa;
|
|
278
276
|
double rtyp;
|
|
279
|
-
// double scale;
|
|
280
277
|
public:
|
|
281
|
-
/*
|
|
282
|
-
MultiPole (int aorder, double akappa, double ascale = 1)
|
|
283
|
-
: sh(aorder), kappa(akappa), scale(ascale) { }
|
|
284
|
-
*/
|
|
285
278
|
|
|
286
279
|
MultiPole (int aorder, double akappa, double artyp)
|
|
287
280
|
: sh(aorder), kappa(akappa), rtyp(artyp) { }
|
|
@@ -362,8 +355,8 @@ namespace ngsbem
|
|
|
362
355
|
return;
|
|
363
356
|
}
|
|
364
357
|
|
|
365
|
-
static Timer t("mptool Transform "+ToString(typeid(RADIAL).name())+ToString(typeid(TARGET).name()));
|
|
366
|
-
RegionTimer reg(t);
|
|
358
|
+
// static Timer t("mptool Transform "+ToString(typeid(RADIAL).name())+ToString(typeid(TARGET).name()));
|
|
359
|
+
// RegionTimer reg(t);
|
|
367
360
|
|
|
368
361
|
double len = L2Norm(dist);
|
|
369
362
|
double theta, phi;
|
|
@@ -379,7 +372,10 @@ namespace ngsbem
|
|
|
379
372
|
phi = atan2(dist(1), dist(0));
|
|
380
373
|
|
|
381
374
|
|
|
382
|
-
MultiPole<RADIAL,entry_type> tmp
|
|
375
|
+
// MultiPole<RADIAL,entry_type> tmp{*this};
|
|
376
|
+
MultiPole<RADIAL,entry_type> tmp(Order(), kappa, rtyp);
|
|
377
|
+
tmp.SH().Coefs() = SH().Coefs();
|
|
378
|
+
|
|
383
379
|
tmp.SH().RotateZ(phi);
|
|
384
380
|
tmp.SH().RotateY(theta);
|
|
385
381
|
|
|
@@ -434,11 +430,9 @@ namespace ngsbem
|
|
|
434
430
|
Array<tuple<Vec<3>, Vec<3>, Complex,int>> currents;
|
|
435
431
|
int total_sources;
|
|
436
432
|
|
|
437
|
-
Node (Vec<3> acenter, double ar, int alevel,
|
|
438
|
-
: center(acenter), r(ar), level(alevel), mp(MPOrder(ar*
|
|
439
|
-
// : center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, 1.0)
|
|
433
|
+
Node (Vec<3> acenter, double ar, int alevel, double akappa)
|
|
434
|
+
: center(acenter), r(ar), level(alevel), mp(MPOrder(ar*akappa), akappa, ar) // min(1.0, ar*akappa))
|
|
440
435
|
{
|
|
441
|
-
// cout << "singml, add node, level = " << level << endl;
|
|
442
436
|
if (level < nodes_on_level.Size())
|
|
443
437
|
nodes_on_level[level]++;
|
|
444
438
|
}
|
|
@@ -453,7 +447,7 @@ namespace ngsbem
|
|
|
453
447
|
cc(0) += (i&1) ? r/2 : -r/2;
|
|
454
448
|
cc(1) += (i&2) ? r/2 : -r/2;
|
|
455
449
|
cc(2) += (i&4) ? r/2 : -r/2;
|
|
456
|
-
childs[i] = make_unique<Node> (cc, r/2, level+1,
|
|
450
|
+
childs[i] = make_unique<Node> (cc, r/2, level+1, mp.Kappa());
|
|
457
451
|
}
|
|
458
452
|
}
|
|
459
453
|
|
|
@@ -473,7 +467,8 @@ namespace ngsbem
|
|
|
473
467
|
|
|
474
468
|
charges.Append( tuple{x,c} );
|
|
475
469
|
|
|
476
|
-
if (r*mp.Kappa() < 1e-8) return;
|
|
470
|
+
// if (r*mp.Kappa() < 1e-8) return;
|
|
471
|
+
if (level > 20) return;
|
|
477
472
|
if (charges.Size() < maxdirect && r*mp.Kappa() < 1)
|
|
478
473
|
return;
|
|
479
474
|
|
|
@@ -588,9 +583,17 @@ namespace ngsbem
|
|
|
588
583
|
return sum;
|
|
589
584
|
}
|
|
590
585
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
586
|
+
// static Timer t("fmm direct eval"); RegionTimer reg(t);
|
|
587
|
+
if (mp.Kappa() < 1e-8)
|
|
588
|
+
{
|
|
589
|
+
for (auto [x,c] : charges)
|
|
590
|
+
if (double rho = L2Norm(p-x); rho > 0)
|
|
591
|
+
sum += (1/(4*M_PI))*Complex(1,rho*mp.Kappa()) / rho * c;
|
|
592
|
+
}
|
|
593
|
+
else
|
|
594
|
+
for (auto [x,c] : charges)
|
|
595
|
+
if (double rho = L2Norm(p-x); rho > 0)
|
|
596
|
+
sum += (1/(4*M_PI))*exp(Complex(0,rho*mp.Kappa())) / rho * c;
|
|
594
597
|
|
|
595
598
|
for (auto [x,d,c] : dipoles)
|
|
596
599
|
if (double rho = L2Norm(p-x); rho > 0)
|
|
@@ -771,8 +774,8 @@ namespace ngsbem
|
|
|
771
774
|
bool havemp = false;
|
|
772
775
|
|
|
773
776
|
public:
|
|
774
|
-
SingularMLMultiPole (Vec<3> center, double r,
|
|
775
|
-
: root(center, r, 0,
|
|
777
|
+
SingularMLMultiPole (Vec<3> center, double r, double kappa)
|
|
778
|
+
: root(center, r, 0, kappa)
|
|
776
779
|
{
|
|
777
780
|
nodes_on_level = 0;
|
|
778
781
|
nodes_on_level[0] = 1;
|
|
@@ -842,6 +845,7 @@ namespace ngsbem
|
|
|
842
845
|
for (int i = 0; i <= maxlevel; i++)
|
|
843
846
|
cout << "sing " << i << ": " << nodes_on_level[i] << endl;
|
|
844
847
|
*/
|
|
848
|
+
|
|
845
849
|
root.CalcTotalSources();
|
|
846
850
|
root.CalcMP();
|
|
847
851
|
|
|
@@ -886,8 +890,8 @@ namespace ngsbem
|
|
|
886
890
|
|
|
887
891
|
Array<const typename SingularMLMultiPole<elem_type>::Node*> singnodes;
|
|
888
892
|
|
|
889
|
-
Node (Vec<3> acenter, double ar, int alevel,
|
|
890
|
-
: center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, 1.0/min(1.0, 0.25*r*kappa))
|
|
893
|
+
Node (Vec<3> acenter, double ar, int alevel, double kappa)
|
|
894
|
+
: center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, ar) // 1.0/min(1.0, 0.25*r*kappa))
|
|
891
895
|
// : center(acenter), r(ar), level(alevel), mp(MPOrder(ar*kappa), kappa, 1.0)
|
|
892
896
|
{
|
|
893
897
|
if (level < nodes_on_level.Size())
|
|
@@ -905,7 +909,7 @@ namespace ngsbem
|
|
|
905
909
|
cc(0) += (i&1) ? r/2 : -r/2;
|
|
906
910
|
cc(1) += (i&2) ? r/2 : -r/2;
|
|
907
911
|
cc(2) += (i&4) ? r/2 : -r/2;
|
|
908
|
-
childs[i] = make_unique<Node> (cc, r/2, level+1,
|
|
912
|
+
childs[i] = make_unique<Node> (cc, r/2, level+1, mp.Kappa());
|
|
909
913
|
}
|
|
910
914
|
}
|
|
911
915
|
|
|
@@ -1027,7 +1031,7 @@ namespace ngsbem
|
|
|
1027
1031
|
sum = mp.Eval(p-center);
|
|
1028
1032
|
|
|
1029
1033
|
|
|
1030
|
-
static Timer t("mptool direct evaluate"); RegionTimer r(t);
|
|
1034
|
+
// static Timer t("mptool direct evaluate"); RegionTimer r(t);
|
|
1031
1035
|
for (auto sn : singnodes)
|
|
1032
1036
|
sum += sn->EvaluateMP(p);
|
|
1033
1037
|
|
|
@@ -1089,7 +1093,8 @@ namespace ngsbem
|
|
|
1089
1093
|
|
|
1090
1094
|
targets.Append( x );
|
|
1091
1095
|
|
|
1092
|
-
if (r*mp.Kappa() < 1e-8) return;
|
|
1096
|
+
// if (r*mp.Kappa() < 1e-8) return;
|
|
1097
|
+
if (level > 20) return;
|
|
1093
1098
|
if (targets.Size() < maxdirect && r*mp.Kappa() < 1)
|
|
1094
1099
|
return;
|
|
1095
1100
|
|
|
@@ -1145,8 +1150,8 @@ namespace ngsbem
|
|
|
1145
1150
|
shared_ptr<SingularMLMultiPole<elem_type>> singmp;
|
|
1146
1151
|
|
|
1147
1152
|
public:
|
|
1148
|
-
RegularMLMultiPole (shared_ptr<SingularMLMultiPole<elem_type>> asingmp, Vec<3> center, double r
|
|
1149
|
-
: root(center, r, 0,
|
|
1153
|
+
RegularMLMultiPole (shared_ptr<SingularMLMultiPole<elem_type>> asingmp, Vec<3> center, double r)
|
|
1154
|
+
: root(center, r, 0, asingmp->Kappa()), singmp(asingmp)
|
|
1150
1155
|
{
|
|
1151
1156
|
if (!singmp->havemp) throw Exception("first call Calc for singular MP");
|
|
1152
1157
|
|
|
@@ -1175,8 +1180,8 @@ namespace ngsbem
|
|
|
1175
1180
|
}
|
|
1176
1181
|
}
|
|
1177
1182
|
|
|
1178
|
-
RegularMLMultiPole (Vec<3> center, double r,
|
|
1179
|
-
: root(center, r, 0,
|
|
1183
|
+
RegularMLMultiPole (Vec<3> center, double r, double kappa)
|
|
1184
|
+
: root(center, r, 0, kappa)
|
|
1180
1185
|
{
|
|
1181
1186
|
nodes_on_level = 0;
|
|
1182
1187
|
nodes_on_level[0] = 1;
|
|
@@ -1189,6 +1194,8 @@ namespace ngsbem
|
|
|
1189
1194
|
|
|
1190
1195
|
void CalcMP(shared_ptr<SingularMLMultiPole<elem_type>> asingmp)
|
|
1191
1196
|
{
|
|
1197
|
+
static Timer t("mptool regular MLMP"); RegionTimer rg(t);
|
|
1198
|
+
|
|
1192
1199
|
singmp = asingmp;
|
|
1193
1200
|
|
|
1194
1201
|
root.CalcTotalTargets();
|
|
@@ -1205,6 +1212,7 @@ namespace ngsbem
|
|
|
1205
1212
|
cout << "reg " << i << ": " << RegularMLMultiPole::nodes_on_level[i] << endl;
|
|
1206
1213
|
*/
|
|
1207
1214
|
|
|
1215
|
+
static Timer tloc("mptool regular localize expansion"); RegionTimer rloc(tloc);
|
|
1208
1216
|
root.LocalizeExpansion(false);
|
|
1209
1217
|
}
|
|
1210
1218
|
|
|
@@ -1251,132 +1259,5 @@ namespace ngsbem
|
|
|
1251
1259
|
|
|
1252
1260
|
|
|
1253
1261
|
|
|
1254
|
-
// ******************** Coefficient Functions *********************
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
class SphericalHarmonicsCF : public CoefficientFunction
|
|
1258
|
-
{
|
|
1259
|
-
SphericalHarmonics<Complex> sh;
|
|
1260
|
-
public:
|
|
1261
|
-
SphericalHarmonicsCF (int order)
|
|
1262
|
-
: CoefficientFunction(1, true), sh(order) { }
|
|
1263
|
-
Complex & Coef(int n, int m) { return sh.Coef(n,m); }
|
|
1264
|
-
|
|
1265
|
-
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
1266
|
-
{ throw Exception("real eval not available"); }
|
|
1267
|
-
|
|
1268
|
-
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
1269
|
-
{
|
|
1270
|
-
values(0) = sh.Eval(mip.GetPoint());
|
|
1271
|
-
}
|
|
1272
|
-
|
|
1273
|
-
virtual void Evaluate (const BaseMappedIntegrationRule & ir, BareSliceMatrix<Complex> values) const override
|
|
1274
|
-
{
|
|
1275
|
-
for (int i = 0; i < ir.Size(); i++)
|
|
1276
|
-
{
|
|
1277
|
-
auto & mip = ir[i];
|
|
1278
|
-
values(i,0) = sh.Eval(mip.GetPoint());
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
|
-
auto & SH() { return sh; }
|
|
1283
|
-
};
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
template <typename entry_type> class RegularMLMultiPoleCF;
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
template <typename RADIAL, typename entry_type=Complex>
|
|
1291
|
-
class MultiPoleCF : public CoefficientFunction
|
|
1292
|
-
{
|
|
1293
|
-
MultiPole<RADIAL, entry_type> mp;
|
|
1294
|
-
Vec<3> center;
|
|
1295
|
-
public:
|
|
1296
|
-
MultiPoleCF (int order, double kappa, Vec<3> acenter, double scale = 1)
|
|
1297
|
-
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mp(order, kappa, scale), center(acenter) { }
|
|
1298
|
-
|
|
1299
|
-
entry_type & Coef(int n, int m) { return mp.Coef(n,m); }
|
|
1300
|
-
auto & SH() { return mp.SH(); }
|
|
1301
|
-
auto & MP() { return mp; }
|
|
1302
|
-
Vec<3> Center() const { return center; }
|
|
1303
|
-
|
|
1304
|
-
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
1305
|
-
{ throw Exception("real eval not available"); }
|
|
1306
|
-
|
|
1307
|
-
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
1308
|
-
{
|
|
1309
|
-
if constexpr (std::is_same<entry_type, Complex>())
|
|
1310
|
-
values(0) = mp.Eval(mip.GetPoint()-center);
|
|
1311
|
-
else
|
|
1312
|
-
values = mp.Eval(mip.GetPoint()-center);
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
template <typename TARGET>
|
|
1316
|
-
void ShiftZ (double z, MultiPole<TARGET, entry_type> & target) { mp.ShiftZ(z, target); }
|
|
1317
|
-
|
|
1318
|
-
using CoefficientFunction::Transform;
|
|
1319
|
-
template <typename TARGET>
|
|
1320
|
-
void Transform (MultiPoleCF<TARGET, entry_type> & target)
|
|
1321
|
-
{
|
|
1322
|
-
mp.Transform (target.MP(), target.Center()-center);
|
|
1323
|
-
}
|
|
1324
|
-
};
|
|
1325
|
-
|
|
1326
|
-
template <typename entry_type>
|
|
1327
|
-
class SingularMLMultiPoleCF : public CoefficientFunction
|
|
1328
|
-
{
|
|
1329
|
-
shared_ptr<SingularMLMultiPole<entry_type>> mlmp;
|
|
1330
|
-
public:
|
|
1331
|
-
SingularMLMultiPoleCF (Vec<3> center, double r, int order, double kappa)
|
|
1332
|
-
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<SingularMLMultiPole<entry_type>>(center, r, order, kappa)} { }
|
|
1333
|
-
|
|
1334
|
-
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
1335
|
-
{ throw Exception("real eval not available"); }
|
|
1336
|
-
|
|
1337
|
-
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
1338
|
-
{
|
|
1339
|
-
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
1340
|
-
|
|
1341
|
-
if constexpr (std::is_same<entry_type, Complex>())
|
|
1342
|
-
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
1343
|
-
else
|
|
1344
|
-
values = mlmp->Evaluate(mip.GetPoint());
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
shared_ptr<SingularMLMultiPole<entry_type>> MLMP() const { return mlmp; }
|
|
1350
|
-
shared_ptr<RegularMLMultiPoleCF<entry_type>> CreateRegularExpansion(Vec<3> center, double r) const;
|
|
1351
|
-
};
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
template <typename entry_type>
|
|
1355
|
-
class RegularMLMultiPoleCF : public CoefficientFunction
|
|
1356
|
-
{
|
|
1357
|
-
shared_ptr<RegularMLMultiPole<entry_type>> mlmp;
|
|
1358
|
-
public:
|
|
1359
|
-
RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPoleCF<entry_type>> asingmp, Vec<3> center, double r, int order)
|
|
1360
|
-
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp->MLMP(), center, r, order)} { }
|
|
1361
|
-
RegularMLMultiPoleCF (shared_ptr<SingularMLMultiPole<entry_type>> asingmp, Vec<3> center, double r, int order)
|
|
1362
|
-
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLMultiPole<entry_type>>(asingmp, center, r, order)} { }
|
|
1363
|
-
|
|
1364
|
-
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
1365
|
-
{ throw Exception("real eval not available"); }
|
|
1366
|
-
|
|
1367
|
-
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
1368
|
-
{
|
|
1369
|
-
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
1370
|
-
|
|
1371
|
-
if constexpr (std::is_same<entry_type, Complex>())
|
|
1372
|
-
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
1373
|
-
else
|
|
1374
|
-
values = mlmp->Evaluate(mip.GetPoint());
|
|
1375
|
-
}
|
|
1376
|
-
|
|
1377
|
-
shared_ptr<RegularMLMultiPole<entry_type>> MLMP() { return mlmp; }
|
|
1378
|
-
};
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
1262
|
}
|
|
1382
1263
|
#endif
|
netgen/lib/libngsolve.lib
CHANGED
|
Binary file
|
netgen/libngsolve.dll
CHANGED
|
Binary file
|
ngsolve/__init__.py
CHANGED
|
@@ -75,6 +75,7 @@ from .utils import x, y, z, dx, ds, grad, Grad, curl, div, Deviator, PyId, PyTra
|
|
|
75
75
|
from . import solvers
|
|
76
76
|
from . import preconditioners
|
|
77
77
|
from . import timestepping
|
|
78
|
+
from .solve_implementation import Solve
|
|
78
79
|
|
|
79
80
|
try:
|
|
80
81
|
from netgen.occ import unit_square, unit_cube
|
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.
|
|
33
|
-
NGSOLVE_VERSION_GIT = "v6.2.
|
|
34
|
-
NGSOLVE_VERSION_PYTHON = "6.2.
|
|
32
|
+
NGSOLVE_VERSION = "6.2.2504"
|
|
33
|
+
NGSOLVE_VERSION_GIT = "v6.2.2504-0-g7dd7ba8dd"
|
|
34
|
+
NGSOLVE_VERSION_PYTHON = "6.2.2504"
|
|
35
35
|
|
|
36
36
|
NGSOLVE_VERSION_MAJOR = "6"
|
|
37
37
|
NGSOLVE_VERSION_MINOR = "2"
|
|
38
38
|
NGSOLVE_VERSION_TWEAK = "0"
|
|
39
|
-
NGSOLVE_VERSION_PATCH = "
|
|
40
|
-
NGSOLVE_VERSION_HASH = "
|
|
39
|
+
NGSOLVE_VERSION_PATCH = "2504"
|
|
40
|
+
NGSOLVE_VERSION_HASH = "g7dd7ba8dd"
|
|
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
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
|
|
3
|
+
from ngsolve import (
|
|
4
|
+
BilinearForm,
|
|
5
|
+
GridFunction,
|
|
6
|
+
CoefficientFunction,
|
|
7
|
+
Region,
|
|
8
|
+
BND,
|
|
9
|
+
Preconditioner,
|
|
10
|
+
)
|
|
11
|
+
from .nonlinearsolvers import NewtonSolver
|
|
12
|
+
from .krylovspace import GMResSolver, LinearSolver
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Dirichlet:
|
|
16
|
+
def __init__(self, cf, region):
|
|
17
|
+
self.cf = cf
|
|
18
|
+
self.region = region
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Application:
|
|
22
|
+
def __init__(self, a: BilinearForm, gf: GridFunction):
|
|
23
|
+
self.a = a
|
|
24
|
+
self.gf = gf
|
|
25
|
+
|
|
26
|
+
def Solve(
|
|
27
|
+
self,
|
|
28
|
+
rhs,
|
|
29
|
+
*args,
|
|
30
|
+
dirichlet = None,
|
|
31
|
+
pre = None,
|
|
32
|
+
printrates: bool = False,
|
|
33
|
+
**kwargs,
|
|
34
|
+
):
|
|
35
|
+
raise NotImplementedError("Solve method must be implemented in subclasses")
|
|
36
|
+
|
|
37
|
+
def __eq__(self, other):
|
|
38
|
+
return Equation(self, other)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class NonLinearApplication(Application):
|
|
42
|
+
def Solve(
|
|
43
|
+
self,
|
|
44
|
+
rhs=None,
|
|
45
|
+
dirichlet = None,
|
|
46
|
+
printing: bool = False,
|
|
47
|
+
**kwargs,
|
|
48
|
+
):
|
|
49
|
+
solver_args = {}
|
|
50
|
+
|
|
51
|
+
if rhs is not None and rhs != 0:
|
|
52
|
+
rhs.Assemble()
|
|
53
|
+
solver_args["rhs"] = rhs
|
|
54
|
+
solver = NewtonSolver(self.a, self.gf, **solver_args)
|
|
55
|
+
if dirichlet is not None:
|
|
56
|
+
dirichlet_gf = GridFunction(self.gf.space)
|
|
57
|
+
if isinstance(dirichlet, Dirichlet):
|
|
58
|
+
dirichlet_gf.Set(dirichlet.cf, definedon=dirichlet.region)
|
|
59
|
+
else:
|
|
60
|
+
dirichlet_gf.Set(dirichlet, BND)
|
|
61
|
+
solver.SetDirichlet(dirichlet_gf.vec)
|
|
62
|
+
solver.Solve(**kwargs)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class LinearApplication(Application):
|
|
66
|
+
def Assemble(self):
|
|
67
|
+
if not hasattr(self, "vec"):
|
|
68
|
+
self.vec = self.gf.vec.CreateVector()
|
|
69
|
+
self.a.Apply(self.gf.vec, self.vec)
|
|
70
|
+
|
|
71
|
+
def Solve(
|
|
72
|
+
self,
|
|
73
|
+
rhs,
|
|
74
|
+
*args,
|
|
75
|
+
dirichlet = None,
|
|
76
|
+
pre = None,
|
|
77
|
+
lin_solver=None,
|
|
78
|
+
lin_solver_args = None,
|
|
79
|
+
printrates: bool = False,
|
|
80
|
+
):
|
|
81
|
+
self.a.Assemble()
|
|
82
|
+
for arg in args:
|
|
83
|
+
if isinstance(arg, Dirichlet) or isinstance(arg, CoefficientFunction):
|
|
84
|
+
assert dirichlet is None, "Only one dirichlet condition can be set"
|
|
85
|
+
dirichlet = arg
|
|
86
|
+
if isinstance(arg, Preconditioner):
|
|
87
|
+
assert pre is None, "Only one preconditioner can be set"
|
|
88
|
+
pre = arg
|
|
89
|
+
if isinstance(arg, type) and issubclass(arg, LinearSolver):
|
|
90
|
+
assert lin_solver is None, "Only one linear solver can be set"
|
|
91
|
+
lin_solver = arg
|
|
92
|
+
rhs.Assemble()
|
|
93
|
+
if dirichlet is not None:
|
|
94
|
+
if isinstance(dirichlet, Dirichlet):
|
|
95
|
+
self.gf.Set(dirichlet.cf, definedon=dirichlet.region)
|
|
96
|
+
else:
|
|
97
|
+
self.gf.Set(dirichlet, BND)
|
|
98
|
+
rhs.vec.data += -self.a.mat * self.gf.vec
|
|
99
|
+
else:
|
|
100
|
+
self.gf.vec[:] = 0.0
|
|
101
|
+
if self.a.condense:
|
|
102
|
+
rhs.vec.data += self.a.harmonic_extension_trans * rhs.vec
|
|
103
|
+
if pre is None and lin_solver is None:
|
|
104
|
+
ainv = self.a.mat.Inverse(self.a.space.FreeDofs(self.a.condense))
|
|
105
|
+
else:
|
|
106
|
+
if lin_solver is None:
|
|
107
|
+
lin_solver = GMResSolver
|
|
108
|
+
if lin_solver_args is None:
|
|
109
|
+
lin_solver_args = {}
|
|
110
|
+
if pre is None:
|
|
111
|
+
freedofs = self.a.space.FreeDofs(self.a.condense)
|
|
112
|
+
else:
|
|
113
|
+
freedofs = None
|
|
114
|
+
if "printrates" not in lin_solver_args:
|
|
115
|
+
lin_solver_args["printrates"] = printrates
|
|
116
|
+
ainv = lin_solver(
|
|
117
|
+
mat=self.a.mat, pre=pre, freedofs=freedofs, **lin_solver_args
|
|
118
|
+
)
|
|
119
|
+
self.gf.vec.data += ainv * rhs.vec
|
|
120
|
+
if self.a.condense:
|
|
121
|
+
self.gf.vec.data += self.a.harmonic_extension * self.gf.vec
|
|
122
|
+
self.gf.vec.data += self.a.inner_solve * rhs.vec
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class Equation:
|
|
126
|
+
def __init__(self, lhs, rhs):
|
|
127
|
+
self.lhs = lhs
|
|
128
|
+
self.rhs = rhs
|
|
129
|
+
|
|
130
|
+
@functools.wraps(Application.Solve)
|
|
131
|
+
def Solve(self, *args, **kwargs):
|
|
132
|
+
self.lhs.Solve(self.rhs, *args, **kwargs)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _create_lin_appl(self, gfu: GridFunction) -> LinearApplication:
|
|
136
|
+
if not isinstance(gfu, GridFunction):
|
|
137
|
+
raise TypeError("gfu must be a GridFunction")
|
|
138
|
+
return LinearApplication(self, gfu)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
BilinearForm.__mul__ = _create_lin_appl
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@functools.wraps(Application.Solve)
|
|
145
|
+
def Solve(eq: Equation, *args, **kwargs):
|
|
146
|
+
eq.Solve(*args, **kwargs)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ngsolve
|
|
3
|
-
Version: 6.2.
|
|
3
|
+
Version: 6.2.2504
|
|
4
4
|
Summary: NGSolve
|
|
5
5
|
Home-page: UNKNOWN
|
|
6
6
|
Author: The NGSolve team
|
|
7
7
|
License: LGPL2.1
|
|
8
8
|
Platform: UNKNOWN
|
|
9
9
|
License-File: LICENSE
|
|
10
|
-
Requires-Dist: netgen-mesher==6.2.
|
|
10
|
+
Requires-Dist: netgen-mesher==6.2.2504
|
|
11
11
|
Requires-Dist: mkl
|
|
12
12
|
|
|
13
13
|
UNKNOWN
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
netgen/libngsolve.dll,sha256=
|
|
1
|
+
netgen/libngsolve.dll,sha256=Qe3NHZxdToFFq2libhTY_w-rQ3hubimx9rbSB6czqf4,36452352
|
|
2
2
|
netgen/ngscxx.bat,sha256=DjwBtuQlVFSBYmdu08f4H88Li7YN0uCu2LRLkd_MsLI,697
|
|
3
3
|
netgen/ngsld.bat,sha256=YD1I1rK70K_YvLev7aYQMD9mCcwF55k1B_8pRWPpob0,428
|
|
4
4
|
netgen/ngspy,sha256=RJeJY2bsimN2kO97US752sBKFTV-yv7sniRlz7Fy1j8,69
|
|
@@ -91,7 +91,7 @@ netgen/include/hidden.hpp,sha256=t_dOumFNhFSPbqVVEnH2N7J4kZjKIdBCzIgGAXa9YXg,272
|
|
|
91
91
|
netgen/include/householder.hpp,sha256=DUZUZ-zG7zVTtpgUB7Bpo3-1l-w0QciSVBvzEmi7h_A,6101
|
|
92
92
|
netgen/include/hypre_ams_precond.hpp,sha256=fi2sMKV46VwHxj1mIcOorpA3eK0dJg2magch0YexSLE,3288
|
|
93
93
|
netgen/include/hypre_precond.hpp,sha256=_85-R4NqLi2w7GT-vHAk1SMIlbnxYUl1JDAwCpkIdTI,1918
|
|
94
|
-
netgen/include/integrator.hpp,sha256=
|
|
94
|
+
netgen/include/integrator.hpp,sha256=NsPm_eyi-OP6iSUTGfoiigGROuT4PgW3Z7qEHA8Btno,67156
|
|
95
95
|
netgen/include/integratorcf.hpp,sha256=YFUZSINM8_aUfXc73ewJEBVesuR6wD-mnt9rHoiB5Wg,8119
|
|
96
96
|
netgen/include/interpolate.hpp,sha256=mM3hYHpyjUtVlrinl59DaCUGA04F82-ZAJUCYMuh76M,1689
|
|
97
97
|
netgen/include/intrule.hpp,sha256=XxsIC1L5b4DMfXu9xe7Kr9gKgFki9g0p39nByE-k2eY,83361
|
|
@@ -108,7 +108,8 @@ netgen/include/matrix.hpp,sha256=0UT4qQMFBMf3eq8FS7XTkMbQaVSgz--EiNdVMzGq-Sc,579
|
|
|
108
108
|
netgen/include/memusage.hpp,sha256=m_-fuupqepSve37WkRkoFHHyTtE9PdGnOVPIdQHlDiw,1209
|
|
109
109
|
netgen/include/meshaccess.hpp,sha256=Yk5VSmQx4cp5WEHnfsZXUOijVlooEoozTAaUu75zla8,48419
|
|
110
110
|
netgen/include/mgpre.hpp,sha256=5Zqt3pzrvm3EOfr84iU6rQx23LTkntUTd_s4_i6wEzI,5029
|
|
111
|
-
netgen/include/
|
|
111
|
+
netgen/include/mp_coefficient.hpp,sha256=TroJJa2ZrOfh8xaU2TY4m8raSaxvMU4pBXpxAeOZSt8,4876
|
|
112
|
+
netgen/include/mptools.hpp,sha256=ZiykV7RaX07CpRK5fJRO-vCUGJs_iusPXNK6G8rmKt8,35737
|
|
112
113
|
netgen/include/multigrid.hpp,sha256=7YgJfeGTBnb-aFWHrbcVk3dos6XYU0iVCgiY8UvRopY,898
|
|
113
114
|
netgen/include/multivector.hpp,sha256=5rkNSqyPhIXAb1lGKLcy908D9Uw9oqY4wpUXZEXbEPE,13082
|
|
114
115
|
netgen/include/mumpsinverse.hpp,sha256=8YiUlQZMFVsJ0kuwaSphGZvxyEZJAZZApH8XahiTeEo,4249
|
|
@@ -164,7 +165,7 @@ netgen/include/specialelement.hpp,sha256=ovP0KuLWkBRnoc72hfzGgrrigzNQBdJexVAgSUj
|
|
|
164
165
|
netgen/include/statushandler.hpp,sha256=IJPw19bARTth8D8wc6kHTBkxE4o3QTWB-cGDGz1Q2oE,679
|
|
165
166
|
netgen/include/stringops.hpp,sha256=vN_DL7f2M5e9dLpZOHIVDXzwoSovbqtuqClZdYMVDrA,274
|
|
166
167
|
netgen/include/superluinverse.hpp,sha256=A5YmUv_5R0qAzcD4zIxpUPAB6HqLcXuFU6J91Ygmnio,3301
|
|
167
|
-
netgen/include/symbolicintegrator.hpp,sha256=
|
|
168
|
+
netgen/include/symbolicintegrator.hpp,sha256=LreQR0qRXW4V6VFG-Ihkw2YhTzj89CxQ27RpqfZxedc,36882
|
|
168
169
|
netgen/include/symmetricmatrix.hpp,sha256=M79mq0z70ohLFoi8cxPAxxlqD3RjFZAkbCrHwQrhvY8,2954
|
|
169
170
|
netgen/include/tangentialfacetfe.hpp,sha256=iEP_cU3nBtVUnH67dvzeMqIS-JM6SeILhB738YX9Spg,7491
|
|
170
171
|
netgen/include/tangentialfacetfespace.hpp,sha256=Ot0m9OA3ps0xh7AWiLUK-yeZ40ogeFx7zY6dGWQuTPc,2808
|
|
@@ -187,11 +188,11 @@ netgen/include/voxelcoefficientfunction.hpp,sha256=zPlatX_nf2ODK2X979wvpm1HXHEzn
|
|
|
187
188
|
netgen/include/vtkoutput.hpp,sha256=GwPaFtOVY27_1hKwSqpNHV4ppOk3CVsLdMpocm27odQ,6628
|
|
188
189
|
netgen/include/vvector.hpp,sha256=vpnwWlNWsEJB26ve8cKADbUMGVBTTVCFvrBC4r_LDDQ,4785
|
|
189
190
|
netgen/include/webgui.hpp,sha256=xm1S5KHockrzf_R4zHzQ9fzwfQ4H5aZaZm9ItCaR41s,2199
|
|
190
|
-
netgen/lib/libngsolve.lib,sha256=
|
|
191
|
+
netgen/lib/libngsolve.lib,sha256=j_NAN6gL6LE9VguJzPSt19Hk4_8HJWMEBUDjkPCbsnI,13493084
|
|
191
192
|
ngsolve/TensorProductTools.py,sha256=jD4LtJdEiLt2dDsU6STMXb10yrau_i20gatwGlqbiFQ,8562
|
|
192
193
|
ngsolve/__console.py,sha256=QLnfw1ONU9eVPQZ_LjzY-7b_gfZpRRRdI7imHR1lJR8,2983
|
|
193
194
|
ngsolve/__expr.py,sha256=ZAtv94PVtAdvWWKFIvQGJC55aIEY6ajo-l5Hp-1V-6s,4396
|
|
194
|
-
ngsolve/__init__.py,sha256=
|
|
195
|
+
ngsolve/__init__.py,sha256=_pRJLhaBNqv2q1vigj9p-2YqRbiROROrnl3iVM9G2ow,5620
|
|
195
196
|
ngsolve/_scikit_build_core_dependencies.py,sha256=usioLq44m3uusEH205dW0czyzGmzy87PZgizZKUoPs0,765
|
|
196
197
|
ngsolve/bvp.py,sha256=STQCDhEphVgEK3hfWGJyVkS1vi_ubTTKHq7fnuR-POo,2065
|
|
197
198
|
ngsolve/directsolvers.py,sha256=lVfEluGDFd_u6Y-vyQ08VjHA02xQuklIQ91hMopj-40,1021
|
|
@@ -202,20 +203,21 @@ ngsolve/meshes.py,sha256=nz95LP1EEIVAEJ0jyQGqq0E-62uuy2tvIRgqIrEqDHQ,27534
|
|
|
202
203
|
ngsolve/ngs2petsc.py,sha256=PLAkvu4H-ZEXd0-bM2v0OJX7gga-OJ9d-NB7g322-wQ,12809
|
|
203
204
|
ngsolve/ngscxx.py,sha256=r9TV49w0MKIxE6fgJYO4FNv-5wcM9eAFYIG9GspUy_A,1335
|
|
204
205
|
ngsolve/ngslib.lib,sha256=_HzV4t-JUpCMSs1rNu4Jjtmr69v0FQUaOatAn17WF4A,1716
|
|
205
|
-
ngsolve/ngslib.pyd,sha256=
|
|
206
|
+
ngsolve/ngslib.pyd,sha256=fUMb1klKZ1GSkV6DLDFN9Z3Gi9tM-RXGX2SnWdsEK0I,121344
|
|
206
207
|
ngsolve/nonlinearsolvers.py,sha256=nKd-SVJseTWztHZPEPKsbv0mLwQjFILZtOh7Ggft0xs,8419
|
|
207
208
|
ngsolve/preconditioners.py,sha256=2To9cGdhZscFRKrIb6NfjKLBXoIfkemnhryaXrdgNC8,218
|
|
209
|
+
ngsolve/solve_implementation.py,sha256=djtTbzhY_CE_7kIh9NLKoeieUu7JJxJ6nqXf6UH9VG0,4524
|
|
208
210
|
ngsolve/solvers.py,sha256=Vbm5RfIJ83nMtQ1pYJL0uBBuys4-mcY6b63MNkyiqxU,311
|
|
209
211
|
ngsolve/timestepping.py,sha256=SuKsFS7cDXRixKWdMMIWW4flet12HLeqWTBC0DFhPwg,8535
|
|
210
212
|
ngsolve/timing.py,sha256=j_Plbbh51pS9QwMq93hyvFDSrbywmdKZ6Z6OOZmZoe4,4093
|
|
211
213
|
ngsolve/utils.py,sha256=jg6smLuKF6G9Rvg-EXjyYwjFJGyyiqSRknevdjp-9J4,4724
|
|
212
214
|
ngsolve/webgui.py,sha256=MG9bzYvfZYodiC5-DR-9auveCzKX3d13AGOgKANne-A,24902
|
|
213
|
-
ngsolve/cmake/NGSolveConfig.cmake,sha256=
|
|
215
|
+
ngsolve/cmake/NGSolveConfig.cmake,sha256=kn99hiEcNUI4VM9qgFNwHjPU125V8KivoFtMVeT15Oo,5158
|
|
214
216
|
ngsolve/cmake/ngsolve-targets-release.cmake,sha256=knQjCmz6J-x_Egg5DosY5hU_CZdZlSQxQ4Za7pS07fA,907
|
|
215
217
|
ngsolve/cmake/ngsolve-targets.cmake,sha256=9O8Mr67wk_queSLb4HYG_2ckvp2yBE989LRUhlb2o2I,6176
|
|
216
218
|
ngsolve/config/__init__.py,sha256=IjGKWBHvRx572Z6m-5z0q82xuQaWlBABy1whwy2Uxak,23
|
|
217
219
|
ngsolve/config/__main__.py,sha256=anI_XpgrpEnVnMyrFiH3Yon_tpQZkehnqRTNC02NiBI,93
|
|
218
|
-
ngsolve/config/config.py,sha256=
|
|
220
|
+
ngsolve/config/config.py,sha256=BSFOkdhRpKIZzWo6HM3QOlO8kv0o4026casnjY3ol30,2520
|
|
219
221
|
ngsolve/demos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
220
222
|
ngsolve/demos/TensorProduct/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
221
223
|
ngsolve/demos/TensorProduct/tp_dg_1d_1d.py,sha256=3Q9ntmVJGIKQ-JLdGWgECR_kDjTG8FPVCSiTJkxyi40,2188
|
|
@@ -247,37 +249,37 @@ ngsolve/demos/mpi/mpi_cmagnet.py,sha256=59TuQvIIGoDStyJneH47NG131nppBoQpZQ9rfvG_
|
|
|
247
249
|
ngsolve/demos/mpi/mpi_navierstokes.py,sha256=ieAWMDd9LoH99L14iBgF_YmX_xk7gltZ9MruTFN6xAY,3028
|
|
248
250
|
ngsolve/demos/mpi/mpi_poisson.py,sha256=_-H0HFqlwlpasiVD9OQjUvJbWJcQ34-4y-va1WOSOzE,2557
|
|
249
251
|
ngsolve/demos/mpi/mpi_timeDG.py,sha256=FUOh_1dzOGUU-uAsD4iyz0RVT382jMiMiuYkZjarhAE,1963
|
|
250
|
-
ngsolve-6.2.
|
|
251
|
-
ngsolve-6.2.
|
|
252
|
-
ngsolve-6.2.
|
|
253
|
-
ngsolve-6.2.
|
|
254
|
-
ngsolve-6.2.
|
|
255
|
-
ngsolve-6.2.
|
|
256
|
-
ngsolve-6.2.
|
|
257
|
-
ngsolve-6.2.
|
|
258
|
-
ngsolve-6.2.
|
|
259
|
-
ngsolve-6.2.
|
|
260
|
-
ngsolve-6.2.
|
|
261
|
-
ngsolve-6.2.
|
|
262
|
-
ngsolve-6.2.
|
|
263
|
-
ngsolve-6.2.
|
|
264
|
-
ngsolve-6.2.
|
|
265
|
-
ngsolve-6.2.
|
|
266
|
-
ngsolve-6.2.
|
|
267
|
-
ngsolve-6.2.
|
|
268
|
-
ngsolve-6.2.
|
|
269
|
-
ngsolve-6.2.
|
|
270
|
-
ngsolve-6.2.
|
|
271
|
-
ngsolve-6.2.
|
|
272
|
-
ngsolve-6.2.
|
|
273
|
-
ngsolve-6.2.
|
|
274
|
-
ngsolve-6.2.
|
|
275
|
-
ngsolve-6.2.
|
|
276
|
-
ngsolve-6.2.
|
|
277
|
-
ngsolve-6.2.
|
|
278
|
-
ngsolve-6.2.
|
|
279
|
-
ngsolve-6.2.
|
|
280
|
-
ngsolve-6.2.
|
|
281
|
-
ngsolve-6.2.
|
|
282
|
-
ngsolve-6.2.
|
|
283
|
-
ngsolve-6.2.
|
|
252
|
+
ngsolve-6.2.2504.data/data/Scripts/ngsolve.tcl,sha256=8KBOXZKYU_qx8785PIjdmVjcUbCxR5aYrod0BZ4UgGc,21637
|
|
253
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/beam.geo,sha256=HTv0A6IUoVuavifolhGKY6U44z0hni07Htonqe6rw_A,404
|
|
254
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/beam.vol,sha256=QZbM9JE4rBs5nVXaw7ZAbDf60yXbX19bm1OnOScF57M,13834
|
|
255
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/chip.in2d,sha256=561AjEIPnlzMZHIzep5lRjocQDm8w7o7IDna5u8s9JQ,592
|
|
256
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/chip.vol,sha256=gkEmBWlQh8BkSFNTf-XISfmuGzHXDKANV4Uoww_BwJI,28511
|
|
257
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/coil.geo,sha256=ylB2OiWEZztFXPx99qTNRJKmZFIDPEezEgQt4EPtZRA,376
|
|
258
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/coil.vol,sha256=t8cWP_YX38FMw0S-7vEVUOcSH0VK6DlaqVWG_zmBo-4,147284
|
|
259
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/coilshield.geo,sha256=Sq8w7i22WQ0viaiM3bU_63lZGFWp8JgyDqs3RdjeTe0,629
|
|
260
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/coilshield.vol,sha256=JiZOM9A529-hikvv1kyLwffTRpeatLtaVTNcu42o1fo,165576
|
|
261
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/cube.geo,sha256=Wd9AnPdoQgjQ-JK6zmoXjsNxPR9B8ED4pdHVwmRoe1M,405
|
|
262
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/cube.vol,sha256=RS8bay_KlF6IZM0QDDr7_dGaFLqoxszQU_w8TYutMKY,92127
|
|
263
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d10_DGdoubleglazing.pde,sha256=lK3sXmK74eFEMk8F6hwFHe_tBYnOdRq3F-RbzKpDK0c,1354
|
|
264
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d11_chip_nitsche.pde,sha256=VuEQtkZaIJA9yuvjG_jcx1UB9UtAaZSoeJYFHcHeYxk,1141
|
|
265
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d1_square.pde,sha256=24ZZ0nlbr5LKl_mPyeZZMSkiCBiBk1fzNElo3yITX2A,1072
|
|
266
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d2_chip.pde,sha256=yGIbzuTdCEjdoC9Ig_hbcy5qz69_wxgPZeYmhY1rN7k,985
|
|
267
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d3_helmholtz.pde,sha256=gWqQTh1M9NiKGohlu5JxDJuvRz-T28WlNSVbwmMvM-0,590
|
|
268
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d4_cube.pde,sha256=6kL43ehAh1PdwnFlLjadg325bFjpz02p2PpAOxlDFuc,1079
|
|
269
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d5_beam.pde,sha256=VQt9WbqAVWObFH9Jy1YieE9WHnVZ_hnsKVTz6ysEBxI,2059
|
|
270
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d6_shaft.pde,sha256=y10nLFA2-GwEwnAs5R-8wppRq-09vYJ_C9LJ3DSvlS0,1974
|
|
271
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d7_coil.pde,sha256=KFkqtZiPD4LQsGnghwwdq1qmpWf0T5xQR4HwbRL9ZZA,1250
|
|
272
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d8_coilshield.pde,sha256=9XG0TcgZ7mComh_pVntnuzDldEx5PD-C7gqK05PTWus,1190
|
|
273
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/d9_hybridDG.pde,sha256=vYschVRu5vC91YpyVZFCBFuno-ZlOcRznPD-OvJTLtQ,1551
|
|
274
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/doubleglazing.in2d,sha256=lDCukUh9iTpkiH-qJAVdeAlMpiYF0AibAA6g3jOeWDY,533
|
|
275
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/doubleglazing.vol,sha256=IUOhUrZi8WMnvrIJe--A8cYPN6mscslA8_4yxvKShb0,35724
|
|
276
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/piezo2d40round4.vol.gz,sha256=RuxM0vtYljoAImOH6U6avt0LmWaUbGNao37n8p_Yd1w,496477
|
|
277
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/shaft.geo,sha256=Y3OVQlWjgICe2Dwz6-Qs8r0tLanjwtWP0xFx5AwNRJk,2507
|
|
278
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/shaft.vol,sha256=IqViJ4hJKk3Uf66PkVJ-kHpBQ_ZpkigRuh5g1Po4euY,274741
|
|
279
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/square.in2d,sha256=5dewiEjTsRFiNkBlmaTjBAZejq55TTlusp8ALfTMc2M,209
|
|
280
|
+
ngsolve-6.2.2504.data/data/share/ngsolve/square.vol,sha256=tWdPeQ52deUNgWOsWKhqgNVsJKhkJmEAVp5-xjhzEwg,9311
|
|
281
|
+
ngsolve-6.2.2504.dist-info/LICENSE,sha256=iFoD9UsVeWEjb0aEPnmXKr_NaJC2y7NovH7KMo_5WhI,26934
|
|
282
|
+
ngsolve-6.2.2504.dist-info/METADATA,sha256=O-fqK8hTdXj3yvYZutnfOYuVm6Q-AKqwst7qlKGmFxE,254
|
|
283
|
+
ngsolve-6.2.2504.dist-info/WHEEL,sha256=qDFAnWyk8KPVgFtn4Ts7GL4WTDWO6sseESMI7KyWq64,94
|
|
284
|
+
ngsolve-6.2.2504.dist-info/top_level.txt,sha256=1llU44DxNIP85uPT4RChsIuV3h2d0_5j0Ui_Df5vV8E,15
|
|
285
|
+
ngsolve-6.2.2504.dist-info/RECORD,,
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|