ngsolve 6.2.2404.post156.dev0__cp39-cp39-win_amd64.whl → 6.2.2406.post112.dev1__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/arnoldi.hpp +3 -0
- netgen/include/basematrix.hpp +27 -22
- netgen/include/basevector.hpp +43 -71
- netgen/include/bdbequations.hpp +14 -3
- netgen/include/bilinearform.hpp +8 -59
- netgen/include/blockjacobi.hpp +4 -0
- netgen/include/cg.hpp +3 -0
- netgen/include/chebyshev.hpp +3 -0
- netgen/include/coefficient.hpp +6 -2
- netgen/include/comp.hpp +0 -4
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/dump.hpp +5 -5
- netgen/include/eigen.hpp +3 -0
- netgen/include/elementbyelement.hpp +6 -0
- netgen/include/elementtopology.hpp +0 -3
- netgen/include/expr.hpp +13 -8
- netgen/include/fespace.hpp +12 -14
- netgen/include/finiteelement.hpp +7 -7
- netgen/include/globalspace.hpp +28 -2
- netgen/include/gridfunction.hpp +4 -0
- netgen/include/h1amg.hpp +3 -1
- netgen/include/h1hofe.hpp +1 -1
- netgen/include/hcurlhdivfes.hpp +2 -0
- netgen/include/hcurlhofespace.hpp +4 -3
- netgen/include/hdivfes.hpp +3 -3
- netgen/include/hdivhosurfacefespace.hpp +3 -3
- netgen/include/intrule.hpp +15 -1
- netgen/include/jacobi.hpp +3 -0
- netgen/include/la.hpp +1 -13
- netgen/include/matrix.hpp +21 -0
- netgen/include/meshaccess.hpp +24 -51
- netgen/include/mgpre.hpp +1 -1
- netgen/include/mptools.hpp +1 -2
- netgen/include/multivector.hpp +2 -0
- netgen/include/ngsobject.hpp +1 -1
- netgen/include/nodalhofe.hpp +3 -0
- netgen/include/normalfacetfespace.hpp +4 -5
- netgen/include/normalfacetsurfacefespace.hpp +1 -1
- netgen/include/order.hpp +3 -1
- netgen/include/parallel_matrices.hpp +5 -0
- netgen/include/paralleldofs.hpp +44 -95
- netgen/include/parallelngs.hpp +2 -1
- netgen/include/parallelvector.hpp +12 -16
- netgen/include/pardisoinverse.hpp +1 -0
- netgen/include/periodic.hpp +1 -0
- netgen/include/pmltrafo.hpp +5 -2
- netgen/include/preconditioner.hpp +3 -1
- netgen/include/scalarfe.hpp +4 -1
- netgen/include/sparsecholesky.hpp +4 -0
- netgen/include/sparsematrix.hpp +18 -45
- netgen/include/sparsematrix_dyn.hpp +2 -0
- netgen/include/sparsematrix_impl.hpp +66 -1
- netgen/include/special_matrix.hpp +7 -138
- netgen/include/statushandler.hpp +7 -0
- netgen/include/symbolicintegrator.hpp +2 -1
- netgen/include/tensorcoefficient.hpp +56 -54
- netgen/include/tpdiffop.hpp +1 -0
- netgen/include/tpintrule.hpp +2 -0
- netgen/include/umfpackinverse.hpp +58 -30
- netgen/include/vector.hpp +6 -1
- netgen/include/voxelcoefficientfunction.hpp +2 -0
- netgen/include/vvector.hpp +10 -1
- netgen/lib/libngsolve.lib +0 -0
- netgen/libngsolve.dll +0 -0
- ngsolve/_scikit_build_core_dependencies.py +8 -1
- ngsolve/cmake/NGSolveConfig.cmake +1 -1
- ngsolve/config/config.py +6 -6
- ngsolve/config.py +6 -6
- ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve/demos/__init__.py +0 -0
- ngsolve/demos/howto/__init__.py +0 -0
- ngsolve/demos/howto/hhj.py +44 -0
- ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve/demos/howto/mixed.py +30 -0
- ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve/demos/howto/pickling.py +26 -0
- ngsolve/demos/howto/pml.py +31 -0
- ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve/demos/intro/__init__.py +0 -0
- ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve/demos/intro/cmagnet.py +62 -0
- ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve/demos/intro/poisson.py +41 -0
- ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve/ngslib.pyd +0 -0
- {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/METADATA +2 -2
- {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/RECORD +134 -102
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/Scripts/ngsolve.tcl +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.geo +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.in2d +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.geo +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.geo +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.geo +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d1_square.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d2_chip.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d4_cube.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d5_beam.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d6_shaft.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d7_coil.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.geo +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.in2d +0 -0
- {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.vol +0 -0
- {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/LICENSE +0 -0
- {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/WHEEL +0 -0
- {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/top_level.txt +0 -0
netgen/include/matrix.hpp
CHANGED
|
@@ -243,11 +243,21 @@ namespace ngbla
|
|
|
243
243
|
return FlatMatrix (next-first, w, data+first*w);
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
INLINE FlatMatrix Rows (size_t next) const
|
|
247
|
+
{
|
|
248
|
+
return FlatMatrix (next, w, data);
|
|
249
|
+
}
|
|
250
|
+
|
|
246
251
|
INLINE SliceMatrix<T> Cols (size_t first, size_t next) const
|
|
247
252
|
{
|
|
248
253
|
return SliceMatrix<T> (h, next-first, w, data+first);
|
|
249
254
|
}
|
|
250
255
|
|
|
256
|
+
INLINE SliceMatrix<T> Cols (size_t next) const
|
|
257
|
+
{
|
|
258
|
+
return SliceMatrix<T> (h, next, w, data);
|
|
259
|
+
}
|
|
260
|
+
|
|
251
261
|
INLINE FlatMatrix Rows (IntRange range) const
|
|
252
262
|
{
|
|
253
263
|
return FlatMatrix (range.Next()-range.First(), w, data+range.First()*w);
|
|
@@ -1356,6 +1366,12 @@ namespace ngbla
|
|
|
1356
1366
|
return MatrixView<T,ORD,TH,size_t,TDIST> (h, next-first, Dist(), Addr(0,first));
|
|
1357
1367
|
}
|
|
1358
1368
|
|
|
1369
|
+
INLINE auto Cols (size_t next) const
|
|
1370
|
+
{
|
|
1371
|
+
return Cols(0, next);
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
|
|
1359
1375
|
INLINE auto Rows (size_t first, size_t next) const
|
|
1360
1376
|
{
|
|
1361
1377
|
if constexpr (ORD==RowMajor)
|
|
@@ -1369,6 +1385,11 @@ namespace ngbla
|
|
|
1369
1385
|
return Rows (range.First(), range.Next());
|
|
1370
1386
|
}
|
|
1371
1387
|
|
|
1388
|
+
INLINE auto Rows (size_t next) const
|
|
1389
|
+
{
|
|
1390
|
+
return Rows (0, next);
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1372
1393
|
template <int R>
|
|
1373
1394
|
INLINE auto Rows() const
|
|
1374
1395
|
{
|
netgen/include/meshaccess.hpp
CHANGED
|
@@ -9,8 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
#include <nginterface_v2.hpp>
|
|
12
|
-
#include <core/ranges.hpp>
|
|
13
|
-
|
|
14
12
|
#include <elementtopology.hpp>
|
|
15
13
|
|
|
16
14
|
namespace ngfem
|
|
@@ -26,7 +24,6 @@ namespace ngcomp
|
|
|
26
24
|
{
|
|
27
25
|
class PML_Transformation;
|
|
28
26
|
|
|
29
|
-
// using ngcore::INT;
|
|
30
27
|
using netgen::Ng_Node;
|
|
31
28
|
using ngfem::ELEMENT_TYPE;
|
|
32
29
|
|
|
@@ -158,30 +155,6 @@ namespace ngcomp
|
|
|
158
155
|
INLINE auto end () const { return DimElementIterator<VB,DIM>(ma, r.Next()); }
|
|
159
156
|
};
|
|
160
157
|
|
|
161
|
-
/*
|
|
162
|
-
class NodeIterator
|
|
163
|
-
{
|
|
164
|
-
NodeId ni;
|
|
165
|
-
public:
|
|
166
|
-
NodeIterator (NodeId ani) : ni(ani) { ; }
|
|
167
|
-
NodeIterator operator++ () { return NodeIterator(++ni); }
|
|
168
|
-
INLINE NodeId operator*() const { return ni; }
|
|
169
|
-
bool operator!=(NodeIterator id2) const { return ni != id2.ni; }
|
|
170
|
-
bool operator==(NodeIterator id2) const { return ni == id2.ni; }
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
class NodeRange : public IntRange
|
|
174
|
-
{
|
|
175
|
-
NODE_TYPE nt;
|
|
176
|
-
public:
|
|
177
|
-
NodeRange (NODE_TYPE ant, IntRange ar)
|
|
178
|
-
: IntRange(ar), nt(ant) { ; }
|
|
179
|
-
NodeIterator begin () const { return NodeIterator(NodeId(nt,IntRange::First())); }
|
|
180
|
-
NodeIterator end () const { return NodeIterator(NodeId(nt,IntRange::Next())); }
|
|
181
|
-
NodeId operator[] (size_t nr) { return NodeId(nt, IntRange::First()+nr); }
|
|
182
|
-
};
|
|
183
|
-
*/
|
|
184
|
-
|
|
185
158
|
/**
|
|
186
159
|
Access to mesh topology and geometry.
|
|
187
160
|
|
|
@@ -240,14 +213,18 @@ namespace ngcomp
|
|
|
240
213
|
|
|
241
214
|
/// store periodic vertex mapping for each identification number
|
|
242
215
|
// shared ptr because Meshaccess is copy constructible
|
|
216
|
+
/*
|
|
243
217
|
shared_ptr<Array<Array<IVec<2>>>> periodic_node_pairs[3] = {make_shared<Array<Array<IVec<2>>>>(),
|
|
244
218
|
make_shared<Array<Array<IVec<2>>>>(),
|
|
245
219
|
make_shared<Array<Array<IVec<2>>>>()};
|
|
220
|
+
*/
|
|
221
|
+
Array<Array<IVec<2>>> periodic_node_pairs[3];
|
|
246
222
|
|
|
247
223
|
DynamicTable<size_t> neighbours[4][4];
|
|
248
224
|
friend class Region;
|
|
249
225
|
public:
|
|
250
226
|
SimpleSignal updateSignal;
|
|
227
|
+
static std::true_type shallow_archive;
|
|
251
228
|
|
|
252
229
|
/// for achiving ...
|
|
253
230
|
MeshAccess ();
|
|
@@ -661,7 +638,7 @@ namespace ngcomp
|
|
|
661
638
|
|
|
662
639
|
void SetDeformation (shared_ptr<GridFunction> def = nullptr);
|
|
663
640
|
|
|
664
|
-
|
|
641
|
+
shared_ptr<GridFunction> GetDeformation () const
|
|
665
642
|
{
|
|
666
643
|
return deformation;
|
|
667
644
|
}
|
|
@@ -816,15 +793,6 @@ namespace ngcomp
|
|
|
816
793
|
void GetFaceEdges (int fnr, Array<int> & edges) const;
|
|
817
794
|
INLINE auto GetFaceEdges (size_t fnr) const
|
|
818
795
|
{ return ArrayObject(mesh.GetFaceEdges(fnr)); }
|
|
819
|
-
/*
|
|
820
|
-
{
|
|
821
|
-
ArrayMem<int,4> f2ed;
|
|
822
|
-
GetFaceEdges (fnr, f2ed);
|
|
823
|
-
f2ed.NothingToDelete(); // dynamic allocation never needed
|
|
824
|
-
return f2ed;
|
|
825
|
-
}
|
|
826
|
-
*/
|
|
827
|
-
|
|
828
796
|
void GetEdgeFaces (int enr, Array<int> & faces) const;
|
|
829
797
|
/// returns elements connected to a face
|
|
830
798
|
void GetFaceElements (int fnr, Array<int> & elnums) const;
|
|
@@ -910,7 +878,6 @@ namespace ngcomp
|
|
|
910
878
|
}
|
|
911
879
|
|
|
912
880
|
|
|
913
|
-
// void GetVertexElements (int vnr, Array<int> & elnrs) const;
|
|
914
881
|
/// element order stored in Netgen
|
|
915
882
|
int GetElOrder (int enr) const
|
|
916
883
|
{ return mesh.GetElementOrder (enr+1); }
|
|
@@ -1052,11 +1019,11 @@ namespace ngcomp
|
|
|
1052
1019
|
}
|
|
1053
1020
|
}
|
|
1054
1021
|
|
|
1055
|
-
|
|
1022
|
+
/*
|
|
1056
1023
|
// (old style optimization)
|
|
1057
1024
|
[[deprecated("functionality not useful anymore, just remove function call!")]]
|
|
1058
1025
|
void SetPointSearchStartElement(const int el) const;
|
|
1059
|
-
|
|
1026
|
+
*/
|
|
1060
1027
|
|
|
1061
1028
|
|
|
1062
1029
|
ElementId FindElementOfPoint (FlatVector<double> point,
|
|
@@ -1082,6 +1049,7 @@ namespace ngcomp
|
|
|
1082
1049
|
{ return GetElement(ElementId(VOL,elnr)).is_curved; }
|
|
1083
1050
|
// { return bool (Ng_IsElementCurved (elnr+1)); }
|
|
1084
1051
|
|
|
1052
|
+
/*
|
|
1085
1053
|
[[deprecated("Use GetPeriodicNodes(NT_VERTEX, pairs) instead!")]]
|
|
1086
1054
|
void GetPeriodicVertices ( Array<IVec<2> > & pairs) const;
|
|
1087
1055
|
[[deprecated("Use GetNPeriodicNodes(NT_VERTEX) instead!")]]
|
|
@@ -1099,10 +1067,11 @@ namespace ngcomp
|
|
|
1099
1067
|
void GetPeriodicEdges (int idnr, Array<IVec<2> > & pairs) const;
|
|
1100
1068
|
[[deprecated("Use GetPeriodicNodes(NT_EDGE, idnr).Size() instead")]]
|
|
1101
1069
|
int GetNPairsPeriodicEdges (int idnr) const;
|
|
1102
|
-
|
|
1070
|
+
*/
|
|
1071
|
+
|
|
1103
1072
|
int GetNPeriodicIdentifications() const
|
|
1104
1073
|
{
|
|
1105
|
-
return periodic_node_pairs[NT_VERTEX]
|
|
1074
|
+
return periodic_node_pairs[NT_VERTEX].Size();
|
|
1106
1075
|
}
|
|
1107
1076
|
// get number of all periodic nodes of nodetype nt
|
|
1108
1077
|
size_t GetNPeriodicNodes(NODE_TYPE nt) const;
|
|
@@ -1146,9 +1115,10 @@ namespace ngcomp
|
|
|
1146
1115
|
|
|
1147
1116
|
// void PrecomputeGeometryData(int intorder);
|
|
1148
1117
|
|
|
1118
|
+
/*
|
|
1149
1119
|
void InitPointCurve(double red = 1, double green = 0, double blue = 0) const;
|
|
1150
1120
|
void AddPointCurvePoint(const Vec<3> & point) const;
|
|
1151
|
-
|
|
1121
|
+
*/
|
|
1152
1122
|
|
|
1153
1123
|
|
|
1154
1124
|
template <int DIMS, int DIMR> friend class Ng_ElementTransformation;
|
|
@@ -1168,10 +1138,11 @@ namespace ngcomp
|
|
|
1168
1138
|
Returns the global number of the node.
|
|
1169
1139
|
Currently, this function works only for vertex-nodes.
|
|
1170
1140
|
*/
|
|
1171
|
-
|
|
1141
|
+
/*
|
|
1172
1142
|
[[deprecated("should not need global numbers")]]
|
|
1173
1143
|
size_t GetGlobalNodeNum (NodeId node) const;
|
|
1174
|
-
|
|
1144
|
+
*/
|
|
1145
|
+
|
|
1175
1146
|
size_t GetGlobalVertexNum (int locnum) const;
|
|
1176
1147
|
|
|
1177
1148
|
FlatArray<int> GetDistantProcs (NodeId node) const
|
|
@@ -1228,6 +1199,8 @@ namespace ngcomp
|
|
|
1228
1199
|
operator const BitArray & () const { return *mask; }
|
|
1229
1200
|
shared_ptr<BitArray> MaskPtr() { return mask; }
|
|
1230
1201
|
const shared_ptr<MeshAccess> & Mesh() const { return mesh; }
|
|
1202
|
+
void DoArchive(Archive& ar)
|
|
1203
|
+
{ ar & mesh & vb & mask; }
|
|
1231
1204
|
Region operator+ (const Region & r2) const
|
|
1232
1205
|
{
|
|
1233
1206
|
return Region (mesh, vb, BitArray(*mask).Or(r2.Mask()));
|
|
@@ -1354,21 +1327,21 @@ namespace ngcomp
|
|
|
1354
1327
|
for (auto p : GetDistantProcs(Node(nt, i)))
|
|
1355
1328
|
dist_data[p][cnt[p]++] = data[i];
|
|
1356
1329
|
|
|
1357
|
-
|
|
1330
|
+
NgMPI_Requests requests;
|
|
1358
1331
|
for (auto i : cnt.Range())
|
|
1359
1332
|
if (cnt[i])
|
|
1360
1333
|
{
|
|
1361
|
-
requests
|
|
1362
|
-
requests
|
|
1334
|
+
requests += comm.ISend(dist_data[i], i, NG_MPI_TAG_SOLVE);
|
|
1335
|
+
requests += comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE);
|
|
1363
1336
|
}
|
|
1364
|
-
|
|
1337
|
+
requests.WaitAll();
|
|
1365
1338
|
|
|
1366
1339
|
cnt = 0;
|
|
1367
|
-
|
|
1340
|
+
auto type = GetMPIType<T>();
|
|
1368
1341
|
for (auto i : Range(GetNNodes(nt)))
|
|
1369
1342
|
for (auto p : GetDistantProcs(Node(nt, i)))
|
|
1370
1343
|
NG_MPI_Reduce_local (&recv_data[p][cnt[p]++],
|
|
1371
|
-
|
|
1344
|
+
&data[i], 1, type, op);
|
|
1372
1345
|
}
|
|
1373
1346
|
|
|
1374
1347
|
|
netgen/include/mgpre.hpp
CHANGED
netgen/include/mptools.hpp
CHANGED
|
@@ -813,7 +813,6 @@ c
|
|
|
813
813
|
scale = newscale;
|
|
814
814
|
}
|
|
815
815
|
|
|
816
|
-
|
|
817
816
|
template <typename TARGET>
|
|
818
817
|
void Transform (MultiPole<TARGET> & target, Vec<3> dist) const
|
|
819
818
|
{
|
|
@@ -2095,12 +2094,12 @@ c
|
|
|
2095
2094
|
template <typename TARGET>
|
|
2096
2095
|
void ShiftZ (double z, MultiPole<TARGET> & target) { mp.ShiftZ(z, target); }
|
|
2097
2096
|
|
|
2097
|
+
using CoefficientFunction::Transform;
|
|
2098
2098
|
template <typename TARGET>
|
|
2099
2099
|
void Transform (MultiPoleCF<TARGET> & target)
|
|
2100
2100
|
{
|
|
2101
2101
|
mp.Transform (target.MP(), target.Center()-center);
|
|
2102
2102
|
}
|
|
2103
|
-
|
|
2104
2103
|
};
|
|
2105
2104
|
|
|
2106
2105
|
|
netgen/include/multivector.hpp
CHANGED
netgen/include/ngsobject.hpp
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#define FILE_NGSOBJECT
|
|
3
3
|
|
|
4
4
|
/*********************************************************************/
|
|
5
|
-
/* File: ngsobject.
|
|
5
|
+
/* File: ngsobject.hpp */
|
|
6
6
|
/* Author: Joachim Schoeberl */
|
|
7
7
|
/* Date: 2. Aug. 2000 */
|
|
8
8
|
/*********************************************************************/
|
netgen/include/nodalhofe.hpp
CHANGED
|
@@ -29,8 +29,11 @@ namespace ngfem
|
|
|
29
29
|
using ET_trait<ET>::PolDimension;
|
|
30
30
|
using ET_trait<ET>::PolBubbleDimension;
|
|
31
31
|
|
|
32
|
+
|
|
32
33
|
public:
|
|
33
34
|
using VertexOrientedFE<ET>::SetVertexNumbers;
|
|
35
|
+
NodalHOFE * SetVertexNumbers (FlatArray<int> vnums) override
|
|
36
|
+
{ VertexOrientedFE<ELEMENT_TYPE(ET)>::SetVertexNumbers(vnums); return this; } // cast for msvc ?
|
|
34
37
|
using ET_trait<ET>::ElementType;
|
|
35
38
|
|
|
36
39
|
/// builds a functional element of order aorder.
|
|
@@ -25,8 +25,8 @@ namespace ngcomp
|
|
|
25
25
|
Array<IVec<2> > order_facet;
|
|
26
26
|
Array<bool> fine_facet;
|
|
27
27
|
|
|
28
|
-
int ndof;
|
|
29
|
-
Array<int> ndlevel;
|
|
28
|
+
// int ndof;
|
|
29
|
+
// Array<int> ndlevel;
|
|
30
30
|
bool var_order;
|
|
31
31
|
bool print;
|
|
32
32
|
|
|
@@ -51,9 +51,8 @@ namespace ngcomp
|
|
|
51
51
|
virtual void SetOrder (NodeId ni, int order) override;
|
|
52
52
|
virtual int GetOrder (NodeId ni) const override;
|
|
53
53
|
|
|
54
|
-
virtual size_t GetNDof() const throw() override { return ndof; }
|
|
55
|
-
|
|
56
|
-
virtual size_t GetNDofLevel ( int i ) const override { return ndlevel[i]; }
|
|
54
|
+
// virtual size_t GetNDof() const throw() override { return ndof; }
|
|
55
|
+
// virtual size_t GetNDofLevel ( int i ) const override { return ndlevel[i]; }
|
|
57
56
|
|
|
58
57
|
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
|
|
59
58
|
|
netgen/include/order.hpp
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#define FILE_ORDER
|
|
3
3
|
|
|
4
4
|
/* *************************************************************************/
|
|
5
|
-
/* File: order.
|
|
5
|
+
/* File: order.hpp */
|
|
6
6
|
/* Author: Joachim Schoeberl */
|
|
7
7
|
/* Date: 18. Jun. 97 */
|
|
8
8
|
/* *************************************************************************/
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
namespace ngla
|
|
12
12
|
{
|
|
13
|
+
using namespace ngcore;
|
|
14
|
+
using namespace ngstd;
|
|
13
15
|
|
|
14
16
|
/*
|
|
15
17
|
reordering for sparse cholesky factoriztion
|
netgen/include/paralleldofs.hpp
CHANGED
|
@@ -8,10 +8,14 @@
|
|
|
8
8
|
/**************************************************************************/
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
#include <core/mpi_wrapper.hpp>
|
|
12
|
+
#include <ngstd.hpp>
|
|
11
13
|
|
|
12
14
|
namespace ngla
|
|
13
15
|
{
|
|
16
|
+
using namespace ngstd;
|
|
14
17
|
|
|
18
|
+
|
|
15
19
|
#ifdef PARALLEL
|
|
16
20
|
|
|
17
21
|
/**
|
|
@@ -54,7 +58,7 @@ namespace ngla
|
|
|
54
58
|
Table adist_procs must provide the distant processes for each dof.
|
|
55
59
|
table
|
|
56
60
|
*/
|
|
57
|
-
ParallelDofs (
|
|
61
|
+
ParallelDofs (NgMPI_Comm acomm, Table<int> && adist_procs,
|
|
58
62
|
int dim = 1, bool iscomplex = false);
|
|
59
63
|
|
|
60
64
|
shared_ptr<ParallelDofs> SubSet (shared_ptr<BitArray> take_dofs) const;
|
|
@@ -131,9 +135,9 @@ namespace ngla
|
|
|
131
135
|
bool complex;
|
|
132
136
|
BitArray masterdofs;
|
|
133
137
|
public:
|
|
134
|
-
ParallelDofs (
|
|
138
|
+
ParallelDofs (NgMPI_Comm acomm, Table<int> && adist_procs,
|
|
135
139
|
int dim = 1, bool iscomplex = false)
|
|
136
|
-
: es(dim), complex(iscomplex)
|
|
140
|
+
: ndof(adist_procs.Size()), es(dim), complex(iscomplex)
|
|
137
141
|
{ ; }
|
|
138
142
|
|
|
139
143
|
int GetNDofLocal () const { return ndof; }
|
|
@@ -174,42 +178,41 @@ namespace ngla
|
|
|
174
178
|
};
|
|
175
179
|
|
|
176
180
|
#endif
|
|
181
|
+
|
|
177
182
|
|
|
178
|
-
|
|
179
|
-
|
|
183
|
+
|
|
180
184
|
template <typename T>
|
|
185
|
+
[[deprecated("use pardofs.ReduceDofData")]]
|
|
181
186
|
void ReduceDofData (FlatArray<T> data, NG_MPI_Op op, const shared_ptr<ParallelDofs> & pardofs)
|
|
182
187
|
{
|
|
183
188
|
if (pardofs)
|
|
184
189
|
pardofs->ReduceDofData(data, op);
|
|
185
190
|
}
|
|
186
|
-
|
|
191
|
+
|
|
187
192
|
template <typename T>
|
|
193
|
+
[[deprecated("use pardofs.ScatterDofData")]]
|
|
188
194
|
void ScatterDofData (FlatArray<T> data, const shared_ptr<ParallelDofs> & pardofs)
|
|
189
195
|
{
|
|
190
196
|
if (pardofs)
|
|
191
197
|
pardofs->ScatterDofData (data);
|
|
192
198
|
}
|
|
193
|
-
|
|
199
|
+
|
|
194
200
|
template <typename T>
|
|
201
|
+
[[deprecated("use pardofs.AllReduceDofData")]]
|
|
195
202
|
void AllReduceDofData (FlatArray<T> data, NG_MPI_Op op,
|
|
196
203
|
const shared_ptr<ParallelDofs> & pardofs)
|
|
197
204
|
{
|
|
198
205
|
if (pardofs)
|
|
199
206
|
pardofs->AllReduceDofData (data, op);
|
|
200
207
|
}
|
|
201
|
-
|
|
202
|
-
|
|
208
|
+
|
|
203
209
|
|
|
204
210
|
|
|
205
211
|
#ifdef PARALLEL
|
|
206
212
|
|
|
207
213
|
template <typename T>
|
|
208
|
-
void ParallelDofs::ReduceDofData (FlatArray<T> data, NG_MPI_Op op) const
|
|
214
|
+
void ParallelDofs :: ReduceDofData (FlatArray<T> data, NG_MPI_Op op) const
|
|
209
215
|
{
|
|
210
|
-
// if (this == NULL) // illformed C++, shall get rid of this
|
|
211
|
-
// throw Exception("ReduceDofData for null-object");
|
|
212
|
-
|
|
213
216
|
static Timer t0("ParallelDofs :: ReduceDofData");
|
|
214
217
|
RegionTimer rt(t0);
|
|
215
218
|
|
|
@@ -224,53 +227,48 @@ namespace ngla
|
|
|
224
227
|
nrecv = 0;
|
|
225
228
|
|
|
226
229
|
/** Count send/recv size **/
|
|
227
|
-
for (int i = 0; i < GetNDofLocal(); i++)
|
|
228
|
-
auto dps = GetDistantProcs(i);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
230
|
+
for (int i = 0; i < GetNDofLocal(); i++)
|
|
231
|
+
if (auto dps = GetDistantProcs(i); dps.Size())
|
|
232
|
+
{
|
|
233
|
+
if (rank < dps[0])
|
|
234
|
+
for (auto p : dps)
|
|
235
|
+
nrecv[p]++;
|
|
236
|
+
else
|
|
237
|
+
nsend[dps[0]]++;
|
|
238
|
+
}
|
|
239
|
+
|
|
238
240
|
Table<T> send_data(nsend);
|
|
239
241
|
Table<T> recv_data(nrecv);
|
|
240
242
|
|
|
241
243
|
/** Fill send_data **/
|
|
242
244
|
nsend = 0;
|
|
243
|
-
for (int i = 0; i < GetNDofLocal(); i++)
|
|
244
|
-
auto dps = GetDistantProcs(i);
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
if(master!=rank)
|
|
248
|
-
send_data[master][nsend[master]++] = data[i];
|
|
249
|
-
}
|
|
245
|
+
for (int i = 0; i < GetNDofLocal(); i++)
|
|
246
|
+
if (auto dps = GetDistantProcs(i); dps.Size())
|
|
247
|
+
if (rank > dps[0])
|
|
248
|
+
send_data[dps[0]][nsend[dps[0]]++] = data[i];
|
|
250
249
|
|
|
251
|
-
|
|
250
|
+
NgMPI_Requests send_requests;
|
|
251
|
+
NgMPI_Requests recv_requests;
|
|
252
252
|
for (int i = 0; i < ntasks; i++)
|
|
253
253
|
{
|
|
254
254
|
if (nsend[i])
|
|
255
|
-
|
|
255
|
+
send_requests += comm.ISend(send_data[i], i, NG_MPI_TAG_SOLVE);
|
|
256
256
|
if (nrecv[i])
|
|
257
|
-
|
|
257
|
+
recv_requests += comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE);
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
MyMPI_WaitAll (requests);
|
|
261
|
-
|
|
262
260
|
Array<int> cnt(ntasks);
|
|
263
261
|
cnt = 0;
|
|
264
262
|
|
|
265
263
|
NG_MPI_Datatype type = GetMPIType<T>();
|
|
264
|
+
|
|
265
|
+
recv_requests.WaitAll();
|
|
266
266
|
for (int i = 0; i < GetNDofLocal(); i++)
|
|
267
267
|
if (IsMasterDof(i))
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
&data[i], 1, type, op);
|
|
273
|
-
}
|
|
268
|
+
for (auto p : GetDistantProcs (i))
|
|
269
|
+
NG_MPI_Reduce_local (&recv_data[p][cnt[p]++], &data[i], 1, type, op);
|
|
270
|
+
|
|
271
|
+
send_requests.WaitAll();
|
|
274
272
|
}
|
|
275
273
|
|
|
276
274
|
|
|
@@ -293,18 +291,6 @@ namespace ngla
|
|
|
293
291
|
nrecv = 0;
|
|
294
292
|
|
|
295
293
|
/** Count send/recv size **/
|
|
296
|
-
/*
|
|
297
|
-
for (int i = 0; i < GetNDofLocal(); i++) {
|
|
298
|
-
auto dps = GetDistantProcs(i);
|
|
299
|
-
if(!dps.Size()) continue;
|
|
300
|
-
int master = min2(rank, dps[0]);
|
|
301
|
-
if(rank==master)
|
|
302
|
-
for(auto p:dps)
|
|
303
|
-
nsend[p]++;
|
|
304
|
-
else
|
|
305
|
-
nrecv[master]++;
|
|
306
|
-
}
|
|
307
|
-
*/
|
|
308
294
|
for (int i = 0; i < GetNDofLocal(); i++)
|
|
309
295
|
if (auto dps = GetDistantProcs(i); dps.Size() > 0)
|
|
310
296
|
{
|
|
@@ -320,48 +306,25 @@ namespace ngla
|
|
|
320
306
|
|
|
321
307
|
/** Fill send_data **/
|
|
322
308
|
nsend = 0;
|
|
323
|
-
/*
|
|
324
|
-
for (int i = 0; i < GetNDofLocal(); i++) {
|
|
325
|
-
auto dps = GetDistantProcs(i);
|
|
326
|
-
if(!dps.Size()) continue;
|
|
327
|
-
int master = min2(rank, dps[0]);
|
|
328
|
-
if(rank==master)
|
|
329
|
-
for(auto p:dps)
|
|
330
|
-
send_data[p][nsend[p]++] = data[i];
|
|
331
|
-
}
|
|
332
|
-
*/
|
|
333
309
|
for (int i = 0; i < GetNDofLocal(); i++)
|
|
334
310
|
if (auto dps = GetDistantProcs(i); dps.Size() > 0)
|
|
335
311
|
if (rank < dps[0])
|
|
336
312
|
for (auto p : dps)
|
|
337
313
|
send_data[p][nsend[p]++] = data[i];
|
|
338
314
|
|
|
339
|
-
|
|
315
|
+
NgMPI_Requests requests;
|
|
340
316
|
for (int i = 0; i < ntasks; i++)
|
|
341
317
|
{
|
|
342
318
|
if (nsend[i])
|
|
343
|
-
requests
|
|
319
|
+
requests += comm.ISend (send_data[i], i, NG_MPI_TAG_SOLVE);
|
|
344
320
|
if (nrecv[i])
|
|
345
|
-
requests
|
|
321
|
+
requests += comm.IRecv (recv_data[i], i, NG_MPI_TAG_SOLVE);
|
|
346
322
|
}
|
|
347
|
-
|
|
348
|
-
MyMPI_WaitAll (requests);
|
|
323
|
+
requests.WaitAll();
|
|
349
324
|
|
|
350
325
|
Array<int> cnt(ntasks);
|
|
351
326
|
cnt = 0;
|
|
352
327
|
|
|
353
|
-
/*
|
|
354
|
-
for (int i = 0; i < GetNDofLocal(); i++)
|
|
355
|
-
if (!IsMasterDof(i))
|
|
356
|
-
{
|
|
357
|
-
FlatArray<int> distprocs = GetDistantProcs (i);
|
|
358
|
-
|
|
359
|
-
int master = ntasks;
|
|
360
|
-
for (int j = 0; j < distprocs.Size(); j++)
|
|
361
|
-
master = min (master, distprocs[j]);
|
|
362
|
-
data[i] = recv_data[master][cnt[master]++];
|
|
363
|
-
}
|
|
364
|
-
*/
|
|
365
328
|
for (int i = 0; i < GetNDofLocal(); i++)
|
|
366
329
|
if (!IsMasterDof(i))
|
|
367
330
|
{
|
|
@@ -372,20 +335,6 @@ namespace ngla
|
|
|
372
335
|
|
|
373
336
|
#endif //PARALLEL
|
|
374
337
|
|
|
375
|
-
|
|
376
|
-
class DofRange : public T_Range<size_t>
|
|
377
|
-
{
|
|
378
|
-
shared_ptr<ParallelDofs> pardofs;
|
|
379
|
-
public:
|
|
380
|
-
DofRange () { }
|
|
381
|
-
DofRange (T_Range<size_t> range, shared_ptr<ParallelDofs> apardofs)
|
|
382
|
-
: T_Range<size_t>(range), pardofs(apardofs) { ; }
|
|
383
|
-
shared_ptr<ParallelDofs> GetParallelDofs() const { return pardofs; }
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
|
|
387
338
|
}
|
|
388
339
|
|
|
389
|
-
|
|
390
|
-
|
|
391
340
|
#endif
|
netgen/include/parallelngs.hpp
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#ifndef FILE_PARALLELNGS
|
|
2
2
|
#define FILE_PARALLELNGS
|
|
3
3
|
|
|
4
|
+
/*
|
|
4
5
|
#include <ngstd.hpp>
|
|
5
6
|
#include <la.hpp>
|
|
6
7
|
|
|
@@ -9,7 +10,7 @@ namespace ngparallel
|
|
|
9
10
|
using namespace ngstd;
|
|
10
11
|
using namespace ngla;
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
+
*/
|
|
13
14
|
|
|
14
15
|
#include "parallelvector.hpp"
|
|
15
16
|
#include "parallel_matrices.hpp"
|