ngsolve 6.2.2505__cp310-cp310-macosx_10_15_universal2.whl → 6.2.2505.post94.dev0__cp310-cp310-macosx_10_15_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ngsolve might be problematic. Click here for more details.
- netgen/include/bilinearform.hpp +1 -1
- netgen/include/diffop_impl.hpp +3 -1
- netgen/include/fespace.hpp +4 -2
- netgen/include/gridfunction.hpp +1 -1
- netgen/include/h1amg.hpp +24 -1
- netgen/include/hcurlcurlfe.hpp +20 -0
- netgen/include/hdivhofespace.hpp +2 -0
- netgen/include/mptools.hpp +832 -97
- netgen/include/ngblas.hpp +113 -4
- netgen/include/recursive_pol.hpp +63 -11
- netgen/include/simd_complex.hpp +20 -0
- netgen/include/sparsematrix_dyn.hpp +2 -2
- netgen/include/sparsematrix_impl.hpp +25 -0
- netgen/include/vector.hpp +15 -2
- netgen/libngbla.dylib +0 -0
- netgen/libngcomp.dylib +0 -0
- netgen/libngfem.dylib +0 -0
- netgen/libngla.dylib +0 -0
- netgen/libngsbem.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/cmake/NGSolveConfig.cmake +1 -1
- ngsolve/config/config.py +5 -5
- {ngsolve-6.2.2505.dist-info → ngsolve-6.2.2505.post94.dev0.dist-info}/METADATA +2 -2
- {ngsolve-6.2.2505.dist-info → ngsolve-6.2.2505.post94.dev0.dist-info}/RECORD +60 -60
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/Netgen.icns +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/bin/ngscxx +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/bin/ngsld +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/bin/ngsolve.tcl +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/bin/ngspy +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/beam.geo +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/beam.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/chip.in2d +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/chip.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/coil.geo +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/coil.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/coilshield.geo +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/coilshield.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/cube.geo +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/cube.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d1_square.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d2_chip.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d4_cube.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d5_beam.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d6_shaft.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d7_coil.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/doubleglazing.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/shaft.geo +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/shaft.vol +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/square.in2d +0 -0
- {ngsolve-6.2.2505.data → ngsolve-6.2.2505.post94.dev0.data}/data/share/ngsolve/square.vol +0 -0
- {ngsolve-6.2.2505.dist-info → ngsolve-6.2.2505.post94.dev0.dist-info}/LICENSE +0 -0
- {ngsolve-6.2.2505.dist-info → ngsolve-6.2.2505.post94.dev0.dist-info}/WHEEL +0 -0
- {ngsolve-6.2.2505.dist-info → ngsolve-6.2.2505.post94.dev0.dist-info}/top_level.txt +0 -0
netgen/include/ngblas.hpp
CHANGED
|
@@ -584,12 +584,31 @@ namespace ngbla
|
|
|
584
584
|
}
|
|
585
585
|
}
|
|
586
586
|
|
|
587
|
-
template <typename TM, typename TVX, typename TVY>
|
|
588
|
-
extern void TestFunc (TM m, TVX x, TVY y);
|
|
589
|
-
|
|
587
|
+
// template <typename TM, typename TVX, typename TVY>
|
|
588
|
+
// extern void TestFunc (TM m, TVX x, TVY y);
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
template <typename TS, typename T> constexpr bool IsVec = false;
|
|
592
|
+
template <typename TS, int S> constexpr bool IsVec<TS, Vec<S,TS>> = true;
|
|
593
|
+
|
|
590
594
|
template <bool ADD, bool POS, typename TM, ORDERING ORD, typename TX, typename TY>
|
|
591
595
|
INLINE void NgGEMV (BareSliceMatrix<TM,ORD> a, FlatVector<const TX> x, FlatVector<TY> y)
|
|
592
596
|
{
|
|
597
|
+
if constexpr (std::is_same<TM,double>() && std::is_same<TX,TY>() && IsVec<Complex,TX>)
|
|
598
|
+
{
|
|
599
|
+
FlatMatrix<double> mx(x.Size(), sizeof(TX)/sizeof(double), (double*)(void*)x.Addr(0));
|
|
600
|
+
FlatMatrix<double> my(y.Size(), sizeof(TX)/sizeof(double), (double*)(void*)y.Addr(0));
|
|
601
|
+
NgGEMM<ADD,POS> (a.AddSize(y.Size(), x.Size()),make_SliceMatrix(mx), make_SliceMatrix(my));
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
if constexpr (std::is_same<TM,Complex>() && std::is_same<TX,TY>() && IsVec<Complex,TX>)
|
|
605
|
+
{
|
|
606
|
+
FlatMatrix<Complex> mx(x.Size(), sizeof(TX)/sizeof(Complex), &const_cast<Complex&>(*(x.Data()->Data())));
|
|
607
|
+
FlatMatrix<Complex> my(y.Size(), sizeof(TX)/sizeof(Complex), y.Data()->Data());
|
|
608
|
+
NgGEMM<ADD,POS> (a.AddSize(y.Size(), x.Size()),make_SliceMatrix(mx), make_SliceMatrix(my));
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
|
|
593
612
|
if (!ADD)
|
|
594
613
|
{
|
|
595
614
|
if (!POS)
|
|
@@ -635,6 +654,16 @@ namespace ngbla
|
|
|
635
654
|
extern NGS_DLL_HEADER
|
|
636
655
|
void NgGEMV (double s, BareSliceMatrix<double,ord> a, SliceVector<double> x, SliceVector<double> y) NETGEN_NOEXCEPT;
|
|
637
656
|
*/
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
/* *********************** GEMV - SliceVector **************************** */
|
|
665
|
+
|
|
666
|
+
|
|
638
667
|
|
|
639
668
|
template <bool ADD, ORDERING ord>
|
|
640
669
|
extern NGS_DLL_HEADER
|
|
@@ -714,7 +743,30 @@ namespace ngbla
|
|
|
714
743
|
}
|
|
715
744
|
|
|
716
745
|
|
|
717
|
-
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
template <bool ADD, bool POS, typename TM, ORDERING ORD, typename TX, typename TY>
|
|
749
|
+
INLINE void NgGEMV (BareSliceMatrix<TM,ORD> a, SliceVector<TX> x, SliceVector<TY> y)
|
|
750
|
+
{
|
|
751
|
+
if constexpr (std::is_same<TM,double>() && std::is_same<TX,TY>() && IsVec<Complex,TX>)
|
|
752
|
+
{
|
|
753
|
+
constexpr int VS = sizeof(TX)/sizeof(double);
|
|
754
|
+
SliceMatrix<double> mx(x.Size(), VS, x.Dist()*VS, (double*)(void*)x.Addr(0));
|
|
755
|
+
SliceMatrix<double> my(y.Size(), VS, y.Dist()*VS, (double*)(void*)y.Addr(0));
|
|
756
|
+
NgGEMM<ADD,POS> (a.AddSize(y.Size(), x.Size()),make_SliceMatrix(mx), make_SliceMatrix(my));
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
else if constexpr (std::is_same<TM,Complex>() && std::is_same<TX,TY>() && IsVec<Complex,TX>)
|
|
760
|
+
{
|
|
761
|
+
constexpr int VS = sizeof(TX)/sizeof(Complex);
|
|
762
|
+
SliceMatrix<Complex> mx(x.Size(), VS, x.Dist()*VS, &const_cast<Complex&>(*(x.Data()->Data())));
|
|
763
|
+
SliceMatrix<Complex> my(y.Size(), VS, y.Dist()*VS, y.Data()->Data());
|
|
764
|
+
NgGEMM<ADD,POS> (a.AddSize(y.Size(), x.Size()),make_SliceMatrix(mx), make_SliceMatrix(my));
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
else
|
|
768
|
+
NgGEMV<ADD> (POS ? 1.0 : -1.0, a, x, y);
|
|
769
|
+
}
|
|
718
770
|
|
|
719
771
|
|
|
720
772
|
|
|
@@ -880,9 +932,14 @@ namespace ngbla
|
|
|
880
932
|
FlatVector<const TB>(prod.View().B().Range(0,w)),
|
|
881
933
|
FlatVector<T>(self.Spec().Range(0,h)));
|
|
882
934
|
else
|
|
935
|
+
NgGEMV<ADD,POS> (make_BareSliceMatrix(prod.View().A()),
|
|
936
|
+
SliceVector<TB>(prod.View().B().Range(0,w)),
|
|
937
|
+
SliceVector<T>(self.Spec().Range(0,h)));
|
|
938
|
+
/*
|
|
883
939
|
NgGEMV<ADD> (POS ? 1.0 : -1.0, make_BareSliceMatrix(prod.View().A()),
|
|
884
940
|
SliceVector<TB>(prod.View().B().Range(0,w)),
|
|
885
941
|
SliceVector<T>(self.Spec().Range(0,h)));
|
|
942
|
+
*/
|
|
886
943
|
return self.Spec();
|
|
887
944
|
}
|
|
888
945
|
};
|
|
@@ -1099,8 +1156,60 @@ namespace ngbla
|
|
|
1099
1156
|
}
|
|
1100
1157
|
};
|
|
1101
1158
|
|
|
1159
|
+
// typedef void (*pmatmatcRR)(size_t, size_t, BareSliceMatrix<Complex,RowMajor>, BareSliceMatrix<Complex,RowMajor>,BareSliceMatrix<Complex,RowMajor>);
|
|
1160
|
+
|
|
1161
|
+
template <ORDERING OA, ORDERING OB>
|
|
1162
|
+
using pmatmatc = void (*)(size_t, size_t, BareSliceMatrix<Complex, OA>, BareSliceMatrix<Complex,OB>,BareSliceMatrix<Complex,RowMajor>);
|
|
1163
|
+
template <bool ADD, bool POS, ORDERING OA, ORDERING OB>
|
|
1164
|
+
extern NGS_DLL_HEADER pmatmatc<OA,OB> dispatch_matmatc[9];
|
|
1165
|
+
|
|
1166
|
+
template <bool ADD, bool POS, ORDERING OA, ORDERING OB>
|
|
1167
|
+
extern NGS_DLL_HEADER void NgGEMMBare (size_t ah, size_t aw, size_t bw, BareSliceMatrix<Complex,OA> a, BareSliceMatrix<Complex,OB> b, BareSliceMatrix<Complex,RowMajor> c);
|
|
1102
1168
|
|
|
1103
1169
|
|
|
1170
|
+
template <bool ADD, bool POS, ORDERING OA, ORDERING OB>
|
|
1171
|
+
void NgGEMM (SliceMatrix<Complex,OA> a, SliceMatrix<Complex,OB> b, SliceMatrix<Complex,RowMajor> c)
|
|
1172
|
+
{
|
|
1173
|
+
size_t ah = a.Height();
|
|
1174
|
+
size_t aw = a.Width();
|
|
1175
|
+
size_t bw = b.Width();
|
|
1176
|
+
if (aw < std::size(dispatch_matmatc<ADD,POS,OA,OB>))
|
|
1177
|
+
{
|
|
1178
|
+
(*dispatch_matmatc<ADD,POS,OA,OB>[aw])(ah, bw, make_BareSliceMatrix(a), make_BareSliceMatrix(b), make_BareSliceMatrix(c));
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
NgGEMMBare<ADD,POS>(ah, aw, bw, make_BareSliceMatrix(a), make_BareSliceMatrix(b), make_BareSliceMatrix(c));
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
template <bool ADD, bool POS, ORDERING OA, ORDERING OB>
|
|
1186
|
+
void NgGEMM (SliceMatrix<Complex,OA> a, SliceMatrix<Complex,OB> b, SliceMatrix<Complex,ColMajor> c)
|
|
1187
|
+
{
|
|
1188
|
+
NgGEMM<ADD,POS> (Trans(b), Trans(a), Trans(c));
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
template <typename OP, typename T, typename TA, typename TB>
|
|
1192
|
+
class assign_trait<OP, T, MultExpr<TA, TB>,
|
|
1193
|
+
enable_if_t<IsConvertibleToSliceMatrix<TA,Complex>() &&
|
|
1194
|
+
IsConvertibleToSliceMatrix<TB,Complex>() &&
|
|
1195
|
+
IsConvertibleToSliceMatrix<T,Complex>(), int>>
|
|
1196
|
+
{
|
|
1197
|
+
public:
|
|
1198
|
+
static inline T & Assign (MatExpr<T> & self, const Expr<MultExpr<TA, TB>> & prod)
|
|
1199
|
+
{
|
|
1200
|
+
constexpr bool ADD = std::is_same<OP,typename MatExpr<T>::AsAdd>::value || std::is_same<OP,typename MatExpr<T>::AsSub>::value;
|
|
1201
|
+
constexpr bool POS = std::is_same<OP,typename MatExpr<T>::As>::value || std::is_same<OP,typename MatExpr<T>::AsAdd>::value;
|
|
1202
|
+
|
|
1203
|
+
size_t n = CombinedSize(prod.View().A().Height(), self.Spec().Height());
|
|
1204
|
+
size_t m = CombinedSize(prod.View().B().Width(), self.Spec().Width());
|
|
1205
|
+
size_t k = CombinedSize(prod.View().A().Width(), prod.View().B().Height());
|
|
1206
|
+
|
|
1207
|
+
NgGEMM<ADD,POS> (make_BareSliceMatrix(prod.View().A()).AddSize(n,k).RemoveConst(),
|
|
1208
|
+
make_BareSliceMatrix(prod.View().B()).AddSize(k,m).RemoveConst(),
|
|
1209
|
+
make_BareSliceMatrix(self.Spec()).AddSize(n,m));
|
|
1210
|
+
return self.Spec();
|
|
1211
|
+
}
|
|
1212
|
+
};
|
|
1104
1213
|
|
|
1105
1214
|
|
|
1106
1215
|
|
netgen/include/recursive_pol.hpp
CHANGED
|
@@ -1507,9 +1507,24 @@ namespace ngfem
|
|
|
1507
1507
|
class NormalizedLegendreFunctions : public RecursivePolynomialNonStatic<NormalizedLegendreFunctions>
|
|
1508
1508
|
{
|
|
1509
1509
|
int m;
|
|
1510
|
+
static Matrix<double,ColMajor> matA, matB;
|
|
1510
1511
|
public:
|
|
1511
1512
|
NormalizedLegendreFunctions (size_t _m) : m(_m) { }
|
|
1512
1513
|
|
|
1514
|
+
|
|
1515
|
+
static void Calc(int mmax)
|
|
1516
|
+
{
|
|
1517
|
+
if (matA.Height() >= mmax+1) return;
|
|
1518
|
+
matA.SetSize(mmax+1, mmax+1);
|
|
1519
|
+
matB.SetSize(mmax+1, mmax+1);
|
|
1520
|
+
for (int m = 0; m <= mmax; m++)
|
|
1521
|
+
for (int n = m+2; n <= mmax; n++)
|
|
1522
|
+
{
|
|
1523
|
+
matA(n,m) = (2*n-1) / sqrt((n-m+0.0)*(n+m));
|
|
1524
|
+
matB(n,m) = sqrt((n+m-1.0)*(n-m-1.0)) / sqrt((n-m+0.0)*(n+m));
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1513
1528
|
template <typename T, typename S>
|
|
1514
1529
|
NormalizedLegendreFunctions (size_t mmax, size_t nmax, T x, S && values)
|
|
1515
1530
|
{
|
|
@@ -1524,23 +1539,60 @@ namespace ngfem
|
|
|
1524
1539
|
auto y = Trans(values);
|
|
1525
1540
|
|
|
1526
1541
|
y = 0.0;
|
|
1527
|
-
|
|
1542
|
+
T u = -sqrt((1-x)*(1+x));
|
|
1528
1543
|
y(0,0)=1;
|
|
1529
|
-
|
|
1530
|
-
|
|
1544
|
+
|
|
1545
|
+
if (mmax+1 > matA.Height() || nmax > matA.Width())
|
|
1546
|
+
{
|
|
1547
|
+
for (double m = 0; m <= mmax; m++)
|
|
1548
|
+
{
|
|
1549
|
+
if (m > 0)
|
|
1550
|
+
y(m,m)=y(m-1,m-1)*u*sqrt((2*m-1.0)/(2*m));
|
|
1551
|
+
if (m < nmax)
|
|
1552
|
+
y(m+1,m)=x*y(m,m)*sqrt(2*m+1.0);
|
|
1553
|
+
for (int n = m+2; n <= nmax; n++)
|
|
1554
|
+
y(n,m)=((2*n-1)*x*y(n-1,m) -
|
|
1555
|
+
sqrt((n+m-1.0)*(n-m-1.0))*y(n-2,m))
|
|
1556
|
+
/sqrt((n-m+0.0)*(n+m));
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
else
|
|
1531
1560
|
{
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1561
|
+
for (double m = 0; m <= mmax; m++)
|
|
1562
|
+
{
|
|
1563
|
+
if (m > 0)
|
|
1564
|
+
y(m,m)=y(m-1,m-1)*u*sqrt((2*m-1.0)/(2*m));
|
|
1565
|
+
if (m < nmax)
|
|
1566
|
+
{
|
|
1567
|
+
T valold = y(m,m);
|
|
1568
|
+
|
|
1569
|
+
T val = x*valold*sqrt(2*m+1.0);
|
|
1570
|
+
y(m+1,m)=val;
|
|
1571
|
+
|
|
1572
|
+
auto coefsA = matA.Col(m);
|
|
1573
|
+
auto coefsB = matB.Col(m);
|
|
1574
|
+
|
|
1575
|
+
for (int n = m+2; n <= nmax; n++)
|
|
1576
|
+
{
|
|
1577
|
+
T valnew = coefsA(n) * x * val - coefsB(n) * valold;
|
|
1578
|
+
y(n,m) = valnew;
|
|
1579
|
+
valold = val;
|
|
1580
|
+
val = valnew;
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
/*
|
|
1584
|
+
for (int n = m+2; n <= nmax; n++)
|
|
1585
|
+
y(n,m) = matA(n,m) * x * y(n-1,m) - matB(n,m) * y(n-2,m);
|
|
1586
|
+
*/
|
|
1587
|
+
}
|
|
1540
1588
|
}
|
|
1589
|
+
|
|
1541
1590
|
for (int n = 0; n <= nmax; n++)
|
|
1591
|
+
y.Row(n).Range(0,n+1) *= sqrt(2*n+1.0);
|
|
1592
|
+
/*
|
|
1542
1593
|
for (int m = 0; m <= n; m++)
|
|
1543
1594
|
y(n,m)=y(n,m)*sqrt(2*n+1.0);
|
|
1595
|
+
*/
|
|
1544
1596
|
}
|
|
1545
1597
|
|
|
1546
1598
|
template <class S>
|
netgen/include/simd_complex.hpp
CHANGED
|
@@ -56,6 +56,17 @@ namespace ngcore
|
|
|
56
56
|
auto & imag() { return im; }
|
|
57
57
|
|
|
58
58
|
|
|
59
|
+
auto Lo() const
|
|
60
|
+
{
|
|
61
|
+
if constexpr (N == 2) return Complex(re.Lo(), im.Lo());
|
|
62
|
+
else return SIMD<Complex,N/2> (re.Lo(), im.Lo());
|
|
63
|
+
}
|
|
64
|
+
auto Hi() const
|
|
65
|
+
{
|
|
66
|
+
if constexpr (N == 2) return Complex(re.Hi(), im.Hi());
|
|
67
|
+
else return SIMD<Complex,N/2> (re.Hi(), im.Hi());
|
|
68
|
+
}
|
|
69
|
+
|
|
59
70
|
// Numbers in SIMD structure are not necessarily in same order as in memory
|
|
60
71
|
// for instance:
|
|
61
72
|
// [x0,y0,x1,y1,x2,y2,x3,y3] -> [x0,x2,x1,x3,y0,y2,y1,y3]
|
|
@@ -266,6 +277,15 @@ namespace ngcore
|
|
|
266
277
|
return SIMD<Complex, N> (IfPos (a.real(), b.real(), c.real()),
|
|
267
278
|
IfPos (a.real(), b.imag(), c.imag()));
|
|
268
279
|
}
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
template <int N>
|
|
283
|
+
INLINE SIMD<Complex, N> If (SIMD<mask64, N> a, SIMD<Complex, N> b, SIMD<Complex, N> c)
|
|
284
|
+
{
|
|
285
|
+
return SIMD<Complex, N> (If (a, b.real(), c.real()),
|
|
286
|
+
If (a, b.imag(), c.imag()));
|
|
287
|
+
}
|
|
288
|
+
|
|
269
289
|
}
|
|
270
290
|
|
|
271
291
|
|
|
@@ -50,9 +50,9 @@ namespace ngla
|
|
|
50
50
|
virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
51
51
|
|
|
52
52
|
AutoVector CreateRowVector() const override
|
|
53
|
-
{
|
|
53
|
+
{ return make_unique<VVector<TSCAL>> (VWidth()); }
|
|
54
54
|
AutoVector CreateColVector() const override
|
|
55
|
-
{
|
|
55
|
+
{ return make_unique<VVector<TSCAL>> (VHeight()); }
|
|
56
56
|
|
|
57
57
|
virtual tuple<int,int> EntrySizes() const override { return { bh, bw }; }
|
|
58
58
|
};
|
|
@@ -475,6 +475,31 @@ namespace ngla
|
|
|
475
475
|
}
|
|
476
476
|
}
|
|
477
477
|
return this->CreateFromCOO(indi, indj, val, this->Height(), this->Width());
|
|
478
|
+
|
|
479
|
+
/*
|
|
480
|
+
// needs parallelization and testing
|
|
481
|
+
Array<int> cnt(this->Height());
|
|
482
|
+
cnt = 0;
|
|
483
|
+
size_t cnt0 = 0;
|
|
484
|
+
for (auto i : Range(this->Height()))
|
|
485
|
+
for (auto j : Range(firsti[i], firsti[i+1]))
|
|
486
|
+
if (ngbla::L2Norm2(data[j]) > tol*tol)
|
|
487
|
+
cnt[i]++;
|
|
488
|
+
else
|
|
489
|
+
cnt0++;
|
|
490
|
+
|
|
491
|
+
cout << "zero-els = " << cnt0 << endl;
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
auto matrix = make_shared<SparseMatrix<TM>> (cnt, this->Width());
|
|
495
|
+
|
|
496
|
+
for (auto i : Range(this->Height()))
|
|
497
|
+
for (auto j : Range(firsti[i], firsti[i+1]))
|
|
498
|
+
if (ngbla::L2Norm2(data[j]) > tol*tol)
|
|
499
|
+
(*matrix)(i, colnr[i]) = data[j];
|
|
500
|
+
|
|
501
|
+
return matrix;
|
|
502
|
+
*/
|
|
478
503
|
}
|
|
479
504
|
|
|
480
505
|
template <class TM>
|
netgen/include/vector.hpp
CHANGED
|
@@ -701,7 +701,8 @@ namespace ngbla
|
|
|
701
701
|
*/
|
|
702
702
|
|
|
703
703
|
Vec (const Vec &) = default;
|
|
704
|
-
auto & HTData()
|
|
704
|
+
auto & HTData() { return data; }
|
|
705
|
+
const auto & HTData() const { return data; }
|
|
705
706
|
template <typename T2>
|
|
706
707
|
Vec (const Vec<S,T2> & v2) : data(v2.HTData()) { ; }
|
|
707
708
|
|
|
@@ -1196,10 +1197,22 @@ namespace ngbla
|
|
|
1196
1197
|
for (int i = 0; i < DIM; i++)
|
|
1197
1198
|
AtomicAdd (x(i), y(i));
|
|
1198
1199
|
}
|
|
1199
|
-
|
|
1200
1200
|
|
|
1201
|
+
|
|
1202
|
+
template <typename T, typename TS, typename TDIST, typename TB>
|
|
1203
|
+
inline void AtomicAdd (VectorView<T,TS,TDIST> v, const Expr<TB> & v2)
|
|
1204
|
+
{
|
|
1205
|
+
auto viewv2 = v2.View();
|
|
1206
|
+
auto combsize = CombinedSize(v.Size(), v2.Height());
|
|
1207
|
+
for (size_t i = 0; i < combsize; i++)
|
|
1208
|
+
AtomicAdd (v(i), viewv2(i));
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
|
|
1201
1212
|
}
|
|
1202
1213
|
|
|
1214
|
+
|
|
1215
|
+
|
|
1203
1216
|
namespace ngstd
|
|
1204
1217
|
{
|
|
1205
1218
|
template <typename ARCHIVE, int S, typename T>
|
netgen/libngbla.dylib
CHANGED
|
Binary file
|
netgen/libngcomp.dylib
CHANGED
|
Binary file
|
netgen/libngfem.dylib
CHANGED
|
Binary file
|
netgen/libngla.dylib
CHANGED
|
Binary file
|
netgen/libngsbem.dylib
CHANGED
|
Binary file
|
netgen/libngstd.dylib
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.2505"
|
|
33
|
-
NGSOLVE_VERSION_GIT = "v6.2.2505-
|
|
34
|
-
NGSOLVE_VERSION_PYTHON = "6.2.2505"
|
|
32
|
+
NGSOLVE_VERSION = "6.2.2505-94-geb7c3f7d9"
|
|
33
|
+
NGSOLVE_VERSION_GIT = "v6.2.2505-94-geb7c3f7d9"
|
|
34
|
+
NGSOLVE_VERSION_PYTHON = "6.2.2505.post94.dev0"
|
|
35
35
|
|
|
36
36
|
NGSOLVE_VERSION_MAJOR = "6"
|
|
37
37
|
NGSOLVE_VERSION_MINOR = "2"
|
|
38
|
-
NGSOLVE_VERSION_TWEAK = "
|
|
38
|
+
NGSOLVE_VERSION_TWEAK = "94"
|
|
39
39
|
NGSOLVE_VERSION_PATCH = "2505"
|
|
40
|
-
NGSOLVE_VERSION_HASH = "
|
|
40
|
+
NGSOLVE_VERSION_HASH = "geb7c3f7d9"
|
|
41
41
|
|
|
42
42
|
CMAKE_CXX_COMPILER = "/Library/Developer/CommandLineTools/usr/bin/c++"
|
|
43
43
|
CMAKE_CUDA_COMPILER = ""
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ngsolve
|
|
3
|
-
Version: 6.2.2505
|
|
3
|
+
Version: 6.2.2505.post94.dev0
|
|
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.2505)
|
|
10
|
+
Requires-Dist: netgen-mesher (==6.2.2505.post45.dev0)
|
|
11
11
|
|
|
12
12
|
UNKNOWN
|
|
13
13
|
|