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.

Files changed (134) hide show
  1. netgen/include/arnoldi.hpp +3 -0
  2. netgen/include/basematrix.hpp +27 -22
  3. netgen/include/basevector.hpp +43 -71
  4. netgen/include/bdbequations.hpp +14 -3
  5. netgen/include/bilinearform.hpp +8 -59
  6. netgen/include/blockjacobi.hpp +4 -0
  7. netgen/include/cg.hpp +3 -0
  8. netgen/include/chebyshev.hpp +3 -0
  9. netgen/include/coefficient.hpp +6 -2
  10. netgen/include/comp.hpp +0 -4
  11. netgen/include/diagonalmatrix.hpp +154 -0
  12. netgen/include/dump.hpp +5 -5
  13. netgen/include/eigen.hpp +3 -0
  14. netgen/include/elementbyelement.hpp +6 -0
  15. netgen/include/elementtopology.hpp +0 -3
  16. netgen/include/expr.hpp +13 -8
  17. netgen/include/fespace.hpp +12 -14
  18. netgen/include/finiteelement.hpp +7 -7
  19. netgen/include/globalspace.hpp +28 -2
  20. netgen/include/gridfunction.hpp +4 -0
  21. netgen/include/h1amg.hpp +3 -1
  22. netgen/include/h1hofe.hpp +1 -1
  23. netgen/include/hcurlhdivfes.hpp +2 -0
  24. netgen/include/hcurlhofespace.hpp +4 -3
  25. netgen/include/hdivfes.hpp +3 -3
  26. netgen/include/hdivhosurfacefespace.hpp +3 -3
  27. netgen/include/intrule.hpp +15 -1
  28. netgen/include/jacobi.hpp +3 -0
  29. netgen/include/la.hpp +1 -13
  30. netgen/include/matrix.hpp +21 -0
  31. netgen/include/meshaccess.hpp +24 -51
  32. netgen/include/mgpre.hpp +1 -1
  33. netgen/include/mptools.hpp +1 -2
  34. netgen/include/multivector.hpp +2 -0
  35. netgen/include/ngsobject.hpp +1 -1
  36. netgen/include/nodalhofe.hpp +3 -0
  37. netgen/include/normalfacetfespace.hpp +4 -5
  38. netgen/include/normalfacetsurfacefespace.hpp +1 -1
  39. netgen/include/order.hpp +3 -1
  40. netgen/include/parallel_matrices.hpp +5 -0
  41. netgen/include/paralleldofs.hpp +44 -95
  42. netgen/include/parallelngs.hpp +2 -1
  43. netgen/include/parallelvector.hpp +12 -16
  44. netgen/include/pardisoinverse.hpp +1 -0
  45. netgen/include/periodic.hpp +1 -0
  46. netgen/include/pmltrafo.hpp +5 -2
  47. netgen/include/preconditioner.hpp +3 -1
  48. netgen/include/scalarfe.hpp +4 -1
  49. netgen/include/sparsecholesky.hpp +4 -0
  50. netgen/include/sparsematrix.hpp +18 -45
  51. netgen/include/sparsematrix_dyn.hpp +2 -0
  52. netgen/include/sparsematrix_impl.hpp +66 -1
  53. netgen/include/special_matrix.hpp +7 -138
  54. netgen/include/statushandler.hpp +7 -0
  55. netgen/include/symbolicintegrator.hpp +2 -1
  56. netgen/include/tensorcoefficient.hpp +56 -54
  57. netgen/include/tpdiffop.hpp +1 -0
  58. netgen/include/tpintrule.hpp +2 -0
  59. netgen/include/umfpackinverse.hpp +58 -30
  60. netgen/include/vector.hpp +6 -1
  61. netgen/include/voxelcoefficientfunction.hpp +2 -0
  62. netgen/include/vvector.hpp +10 -1
  63. netgen/lib/libngsolve.lib +0 -0
  64. netgen/libngsolve.dll +0 -0
  65. ngsolve/_scikit_build_core_dependencies.py +8 -1
  66. ngsolve/cmake/NGSolveConfig.cmake +1 -1
  67. ngsolve/config/config.py +6 -6
  68. ngsolve/config.py +6 -6
  69. ngsolve/demos/TensorProduct/__init__.py +0 -0
  70. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  71. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  72. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  73. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  74. ngsolve/demos/__init__.py +0 -0
  75. ngsolve/demos/howto/__init__.py +0 -0
  76. ngsolve/demos/howto/hhj.py +44 -0
  77. ngsolve/demos/howto/hybrid_dg.py +53 -0
  78. ngsolve/demos/howto/mixed.py +30 -0
  79. ngsolve/demos/howto/nonlin.py +29 -0
  80. ngsolve/demos/howto/pickling.py +26 -0
  81. ngsolve/demos/howto/pml.py +31 -0
  82. ngsolve/demos/howto/taskmanager.py +20 -0
  83. ngsolve/demos/howto/tdnns.py +47 -0
  84. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  85. ngsolve/demos/howto/timeDG.py +38 -0
  86. ngsolve/demos/howto/timeDGlap.py +42 -0
  87. ngsolve/demos/howto/timeDGwave.py +61 -0
  88. ngsolve/demos/intro/__init__.py +0 -0
  89. ngsolve/demos/intro/adaptive.py +123 -0
  90. ngsolve/demos/intro/cmagnet.py +62 -0
  91. ngsolve/demos/intro/elasticity.py +76 -0
  92. ngsolve/demos/intro/navierstokes.py +74 -0
  93. ngsolve/demos/intro/poisson.ipynb +170 -0
  94. ngsolve/demos/intro/poisson.py +41 -0
  95. ngsolve/demos/mpi/__init__.py +0 -0
  96. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  97. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  98. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  99. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  100. ngsolve/ngslib.pyd +0 -0
  101. {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/METADATA +2 -2
  102. {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/RECORD +134 -102
  103. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/Scripts/ngsolve.tcl +0 -0
  104. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.geo +0 -0
  105. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.vol +0 -0
  106. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.in2d +0 -0
  107. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.vol +0 -0
  108. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.geo +0 -0
  109. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.vol +0 -0
  110. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.geo +0 -0
  111. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.vol +0 -0
  112. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.geo +0 -0
  113. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.vol +0 -0
  114. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  115. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  116. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d1_square.pde +0 -0
  117. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d2_chip.pde +0 -0
  118. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  119. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d4_cube.pde +0 -0
  120. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d5_beam.pde +0 -0
  121. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  122. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d7_coil.pde +0 -0
  123. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  124. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  125. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  126. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  127. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  128. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.geo +0 -0
  129. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.vol +0 -0
  130. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.in2d +0 -0
  131. {ngsolve-6.2.2404.post156.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.vol +0 -0
  132. {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/LICENSE +0 -0
  133. {ngsolve-6.2.2404.post156.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/WHEEL +0 -0
  134. {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
  {
@@ -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
- const shared_ptr<GridFunction> & GetDeformation () const
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]->Size();
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
- Array<NG_MPI_Request> requests;
1330
+ NgMPI_Requests requests;
1358
1331
  for (auto i : cnt.Range())
1359
1332
  if (cnt[i])
1360
1333
  {
1361
- requests.Append (comm.ISend(dist_data[i], i, NG_MPI_TAG_SOLVE));
1362
- requests.Append (comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE));
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
- MyMPI_WaitAll (requests);
1337
+ requests.WaitAll();
1365
1338
 
1366
1339
  cnt = 0;
1367
- NG_MPI_Datatype type = GetMPIType<T>();
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
- &data[i], 1, type, op);
1344
+ &data[i], 1, type, op);
1372
1345
  }
1373
1346
 
1374
1347
 
netgen/include/mgpre.hpp CHANGED
@@ -9,7 +9,7 @@
9
9
  /*********************************************************************/
10
10
 
11
11
  #include <bilinearform.hpp>
12
- #include <la.hpp>
12
+ // #include <la.hpp>
13
13
 
14
14
  namespace ngmg
15
15
  {
@@ -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
 
@@ -7,6 +7,8 @@
7
7
  /* Date: June 2020 */
8
8
  /*********************************************************************/
9
9
 
10
+ #include "basevector.hpp"
11
+
10
12
  namespace ngla {
11
13
 
12
14
  /* TODO:
@@ -2,7 +2,7 @@
2
2
  #define FILE_NGSOBJECT
3
3
 
4
4
  /*********************************************************************/
5
- /* File: ngsobject.hh */
5
+ /* File: ngsobject.hpp */
6
6
  /* Author: Joachim Schoeberl */
7
7
  /* Date: 2. Aug. 2000 */
8
8
  /*********************************************************************/
@@ -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
 
@@ -25,7 +25,7 @@ namespace ngcomp
25
25
  int ndof;
26
26
  Array<int> ndlevel;
27
27
  bool var_order;
28
- bool print;
28
+ bool print = false;
29
29
 
30
30
 
31
31
  public:
netgen/include/order.hpp CHANGED
@@ -2,7 +2,7 @@
2
2
  #define FILE_ORDER
3
3
 
4
4
  /* *************************************************************************/
5
- /* File: order.hh */
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
@@ -7,6 +7,11 @@
7
7
  /* Date: 2007,2011 */
8
8
  /* ************************************************************************/
9
9
 
10
+
11
+ #include <basematrix.hpp>
12
+ #include <sparsematrix.hpp>
13
+ #include <paralleldofs.hpp>
14
+
10
15
  namespace ngla
11
16
  {
12
17
 
@@ -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 (NG_MPI_Comm acomm, Table<int> && adist_procs,
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 (NG_MPI_Comm acomm, Table<int> && adist_procs,
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
- if(!dps.Size()) continue;
230
- int master = min2(rank, dps[0]);
231
- if(rank==master)
232
- for(auto p:dps)
233
- nrecv[p]++;
234
- else
235
- nsend[master]++;
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
- if(!dps.Size()) continue;
246
- int master = min2(rank, dps[0]);
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
- Array<NG_MPI_Request> requests;
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
- requests.Append (comm.ISend(send_data[i], i, NG_MPI_TAG_SOLVE));
255
+ send_requests += comm.ISend(send_data[i], i, NG_MPI_TAG_SOLVE);
256
256
  if (nrecv[i])
257
- requests.Append (comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE));
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
- FlatArray<int> distprocs = GetDistantProcs (i);
270
- for (int j = 0; j < distprocs.Size(); j++)
271
- NG_MPI_Reduce_local (&recv_data[distprocs[j]][cnt[distprocs[j]]++],
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
- Array<NG_MPI_Request> requests;
315
+ NgMPI_Requests requests;
340
316
  for (int i = 0; i < ntasks; i++)
341
317
  {
342
318
  if (nsend[i])
343
- requests.Append (comm.ISend (send_data[i], i, NG_MPI_TAG_SOLVE));
319
+ requests += comm.ISend (send_data[i], i, NG_MPI_TAG_SOLVE);
344
320
  if (nrecv[i])
345
- requests.Append (comm.IRecv (recv_data[i], i, NG_MPI_TAG_SOLVE));
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
@@ -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"