ngsolve 6.2.2404.post109.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 (137) hide show
  1. netgen/include/arnoldi.hpp +3 -0
  2. netgen/include/basematrix.hpp +30 -19
  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/integratorcf.hpp +14 -9
  28. netgen/include/intrule.hpp +15 -1
  29. netgen/include/jacobi.hpp +3 -0
  30. netgen/include/la.hpp +1 -13
  31. netgen/include/matrix.hpp +21 -0
  32. netgen/include/meshaccess.hpp +30 -51
  33. netgen/include/mgpre.hpp +1 -1
  34. netgen/include/mptools.hpp +2145 -0
  35. netgen/include/multivector.hpp +2 -0
  36. netgen/include/ngsobject.hpp +1 -1
  37. netgen/include/nodalhofe.hpp +3 -0
  38. netgen/include/normalfacetfespace.hpp +4 -5
  39. netgen/include/normalfacetsurfacefespace.hpp +1 -1
  40. netgen/include/order.hpp +3 -1
  41. netgen/include/parallel_matrices.hpp +5 -0
  42. netgen/include/paralleldofs.hpp +44 -95
  43. netgen/include/parallelngs.hpp +2 -1
  44. netgen/include/parallelvector.hpp +12 -16
  45. netgen/include/pardisoinverse.hpp +1 -0
  46. netgen/include/periodic.hpp +1 -0
  47. netgen/include/pmltrafo.hpp +5 -2
  48. netgen/include/preconditioner.hpp +3 -1
  49. netgen/include/scalarfe.hpp +4 -1
  50. netgen/include/shapefunction_utils.hpp +40 -1
  51. netgen/include/sparsecholesky.hpp +4 -0
  52. netgen/include/sparsematrix.hpp +25 -43
  53. netgen/include/sparsematrix_dyn.hpp +2 -0
  54. netgen/include/sparsematrix_impl.hpp +66 -1
  55. netgen/include/special_matrix.hpp +7 -134
  56. netgen/include/statushandler.hpp +7 -0
  57. netgen/include/symbolicintegrator.hpp +2 -1
  58. netgen/include/tensorcoefficient.hpp +56 -54
  59. netgen/include/tpdiffop.hpp +1 -0
  60. netgen/include/tpintrule.hpp +2 -0
  61. netgen/include/umfpackinverse.hpp +58 -30
  62. netgen/include/vector.hpp +8 -2
  63. netgen/include/voxelcoefficientfunction.hpp +2 -0
  64. netgen/include/vvector.hpp +10 -1
  65. netgen/lib/libngsolve.lib +0 -0
  66. netgen/libngsolve.dll +0 -0
  67. ngsolve/_scikit_build_core_dependencies.py +8 -1
  68. ngsolve/cmake/NGSolveConfig.cmake +5 -5
  69. ngsolve/config/config.py +6 -6
  70. ngsolve/config.py +6 -6
  71. ngsolve/demos/TensorProduct/__init__.py +0 -0
  72. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  73. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  74. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  75. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  76. ngsolve/demos/__init__.py +0 -0
  77. ngsolve/demos/howto/__init__.py +0 -0
  78. ngsolve/demos/howto/hhj.py +44 -0
  79. ngsolve/demos/howto/hybrid_dg.py +53 -0
  80. ngsolve/demos/howto/mixed.py +30 -0
  81. ngsolve/demos/howto/nonlin.py +29 -0
  82. ngsolve/demos/howto/pickling.py +26 -0
  83. ngsolve/demos/howto/pml.py +31 -0
  84. ngsolve/demos/howto/taskmanager.py +20 -0
  85. ngsolve/demos/howto/tdnns.py +47 -0
  86. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  87. ngsolve/demos/howto/timeDG.py +38 -0
  88. ngsolve/demos/howto/timeDGlap.py +42 -0
  89. ngsolve/demos/howto/timeDGwave.py +61 -0
  90. ngsolve/demos/intro/__init__.py +0 -0
  91. ngsolve/demos/intro/adaptive.py +123 -0
  92. ngsolve/demos/intro/cmagnet.py +62 -0
  93. ngsolve/demos/intro/elasticity.py +76 -0
  94. ngsolve/demos/intro/navierstokes.py +74 -0
  95. ngsolve/demos/intro/poisson.ipynb +170 -0
  96. ngsolve/demos/intro/poisson.py +41 -0
  97. ngsolve/demos/mpi/__init__.py +0 -0
  98. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  99. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  100. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  101. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  102. ngsolve/internal.py +5 -0
  103. ngsolve/ngslib.pyd +0 -0
  104. {ngsolve-6.2.2404.post109.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/METADATA +2 -2
  105. {ngsolve-6.2.2404.post109.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/RECORD +137 -104
  106. {ngsolve-6.2.2404.post109.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/WHEEL +1 -1
  107. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/Scripts/ngsolve.tcl +0 -0
  108. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.geo +0 -0
  109. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/beam.vol +0 -0
  110. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.in2d +0 -0
  111. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/chip.vol +0 -0
  112. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.geo +0 -0
  113. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coil.vol +0 -0
  114. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.geo +0 -0
  115. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/coilshield.vol +0 -0
  116. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.geo +0 -0
  117. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/cube.vol +0 -0
  118. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  119. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  120. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d1_square.pde +0 -0
  121. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d2_chip.pde +0 -0
  122. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  123. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d4_cube.pde +0 -0
  124. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d5_beam.pde +0 -0
  125. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  126. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d7_coil.pde +0 -0
  127. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  128. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  129. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  130. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  131. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  132. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.geo +0 -0
  133. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/shaft.vol +0 -0
  134. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.in2d +0 -0
  135. {ngsolve-6.2.2404.post109.dev0.data → ngsolve-6.2.2406.post112.dev1.data}/data/share/ngsolve/square.vol +0 -0
  136. {ngsolve-6.2.2404.post109.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/LICENSE +0 -0
  137. {ngsolve-6.2.2404.post109.dev0.dist-info → ngsolve-6.2.2406.post112.dev1.dist-info}/top_level.txt +0 -0
@@ -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"
@@ -7,16 +7,13 @@
7
7
  /* Date: 2007,2011 */
8
8
  /* ************************************************************************/
9
9
 
10
-
11
-
12
- // #ifdef PARALLEL
10
+ #include <vvector.hpp>
11
+ #include <multivector.hpp>
12
+ #include <paralleldofs.hpp>
13
13
 
14
14
  namespace ngla
15
15
  {
16
- // using ngparallel::ParallelDofs;
17
- // using ngla::ParallelDofs;
18
-
19
-
16
+
20
17
  class NGS_DLL_HEADER ParallelBaseVector : virtual public BaseVector
21
18
  {
22
19
  protected:
@@ -24,8 +21,8 @@ namespace ngla
24
21
  shared_ptr<ParallelDofs> paralleldofs;
25
22
  shared_ptr<BaseVector> local_vec;
26
23
 
27
- Array<NG_MPI_Request> sreqs;
28
- Array<NG_MPI_Request> rreqs;
24
+ mutable NgMPI_Requests sreqs;
25
+ mutable NgMPI_Requests rreqs;
29
26
 
30
27
  public:
31
28
  ParallelBaseVector ()
@@ -86,10 +83,10 @@ namespace ngla
86
83
  virtual void Distribute() const override = 0;
87
84
  // { cerr << "ERROR -- Distribute called for BaseVector, is not parallel" << endl; }
88
85
 
89
- virtual void ISend ( int dest, NG_MPI_Request & request ) const;
86
+ virtual NgMPI_Request ISend ( int dest ) const;
90
87
  // virtual void Send ( int dest ) const;
91
88
 
92
- virtual void IRecvVec ( int dest, NG_MPI_Request & request ) = 0;
89
+ virtual NgMPI_Request IRecvVec ( int dest ) = 0;
93
90
  // { cerr << "ERROR -- IRecvVec called for BaseVector, is not parallel" << endl; }
94
91
 
95
92
  // virtual void RecvVec ( int dest )
@@ -105,7 +102,6 @@ namespace ngla
105
102
 
106
103
 
107
104
 
108
-
109
105
  inline ParallelBaseVector * dynamic_cast_ParallelBaseVector (BaseVector * x)
110
106
  {
111
107
  // cout << "my dynamic * cast" << endl;
@@ -126,7 +122,7 @@ namespace ngla
126
122
  }
127
123
  return dynamic_cast<const ParallelBaseVector*> (x);
128
124
  }
129
-
125
+
130
126
  inline ParallelBaseVector & dynamic_cast_ParallelBaseVector (BaseVector & x)
131
127
  {
132
128
  // cout << "my dynamic cast" << endl;
@@ -135,6 +131,7 @@ namespace ngla
135
131
  return dynamic_cast<ParallelBaseVector&> (**ax);
136
132
  return dynamic_cast<ParallelBaseVector&> (x);
137
133
  }
134
+
138
135
  inline const ParallelBaseVector & dynamic_cast_ParallelBaseVector (const BaseVector & x)
139
136
  {
140
137
  // cout << "my dynamic cast" << endl;
@@ -175,7 +172,7 @@ namespace ngla
175
172
  using ParallelBaseVector :: sreqs;
176
173
  using ParallelBaseVector :: rreqs;
177
174
 
178
- Table<SCAL> * recvvalues;
175
+ Table<SCAL> recvvalues;
179
176
 
180
177
  using S_BaseVectorPtr<TSCAL> :: pdata;
181
178
  using ParallelBaseVector :: local_vec;
@@ -192,7 +189,7 @@ namespace ngla
192
189
  virtual AutoVector Range (T_Range<size_t> range) const override;
193
190
  virtual AutoVector Range (DofRange range) const override;
194
191
 
195
- virtual void IRecvVec ( int dest, NG_MPI_Request & request ) override;
192
+ virtual NgMPI_Request IRecvVec ( int dest ) override;
196
193
  // virtual void RecvVec ( int dest );
197
194
  virtual void AddRecvValues( int sender ) override;
198
195
  virtual AutoVector CreateVector () const override;
@@ -269,5 +266,4 @@ namespace ngla
269
266
 
270
267
  }
271
268
 
272
- // #endif
273
269
  #endif
@@ -15,6 +15,7 @@
15
15
 
16
16
  ////////////////////////////////////////////////////////////////////////////////
17
17
 
18
+ #include "sparsecholesky.hpp" // for SparseFactorization
18
19
 
19
20
  namespace ngla
20
21
  {
@@ -80,6 +80,7 @@ namespace ngcomp
80
80
  { space->VTransformVC(ei, vec, tt); }
81
81
 
82
82
  auto & GetVertexMap() const { return vertex_map; }
83
+ auto & GetDofMap() const { return dofmap; }
83
84
  protected:
84
85
  // overload in quasiperiodic space
85
86
  virtual void DofMapped(size_t from, size_t to, size_t idnr) { ; }
@@ -298,13 +298,16 @@ namespace ngcomp
298
298
  Complex alpha;
299
299
  public:
300
300
 
301
- CartesianPML_Transformation(FlatMatrix<double> _bounds, Complex _alpha)
302
- : PML_TransformationDim<DIM>(), alpha(_alpha)
301
+ CartesianPML_Transformation(Mat<DIM,2> _bounds, Complex _alpha)
302
+ : PML_TransformationDim<DIM>(), bounds(_bounds), alpha(_alpha)
303
303
  {
304
+ /*
304
305
  bounds = 0.;
305
306
  for (int i : Range(min(int(_bounds.Height()),DIM)))
306
307
  for (int j : Range(min(int(_bounds.Width()),2)))
307
308
  bounds(i,j)=_bounds(i,j);
309
+ */
310
+ ;
308
311
  }
309
312
 
310
313
  ~CartesianPML_Transformation() {;}
@@ -7,8 +7,10 @@
7
7
  /* Date: 10. Jul. 2000 */
8
8
  /*********************************************************************/
9
9
 
10
- #include <la.hpp>
10
+ // #include <la.hpp>
11
+ #include <basematrix.hpp>
11
12
  #include <mgpre.hpp>
13
+ #include <chebyshev.hpp>
12
14
 
13
15
  namespace ngcomp
14
16
  {
@@ -288,6 +288,9 @@ namespace ngfem
288
288
  {
289
289
  for (int i = 0; i < avnums.Size(); i++) vnums[i] = avnums[i];
290
290
  }
291
+ DGFiniteElement * SetVertexNumbers (FlatArray<int> vnums) override
292
+ { VertexOrientedFE<ET>::SetVertexNumbers(vnums); return this; }
293
+
291
294
 
292
295
  /// assign vertex number
293
296
  void SetVertexNumber (int nr, int vnum) { vnums[nr] = vnum; }
@@ -301,7 +304,7 @@ namespace ngfem
301
304
  NGS_DLL_HEADER void CalcTraceMatrix (int facet, FlatMatrix<> trace) const;
302
305
  NGS_DLL_HEADER void CalcGradientMatrix (FlatMatrix<> gmat) const;
303
306
 
304
- HD NGS_DLL_HEADER virtual void GetDiagMassMatrix (FlatVector<> mass) const;
307
+ HD NGS_DLL_HEADER virtual void GetDiagMassMatrix (FlatVector<> mass) const override;
305
308
 
306
309
  NGS_DLL_HEADER virtual void GetGradient (FlatVector<> coefs, FlatMatrixFixWidth<D> grad) const;
307
310
  NGS_DLL_HEADER virtual void GetGradientTrans (FlatMatrixFixWidth<D> grad, FlatVector<> coefs) const;
@@ -66,8 +66,47 @@ namespace ngfem
66
66
  return sum;
67
67
  }
68
68
 
69
-
70
69
 
70
+ template <int D, typename SCAL>
71
+ inline auto Outer (const AutoDiff<D,SCAL> & u, const AutoDiff<D,SCAL> & v)
72
+ {
73
+ Mat<D,D,SCAL> res;
74
+ for (int i = 0; i < D; i++)
75
+ for (int j = 0; j < D; j++)
76
+ res(i,j) = u.DValue(i) * v.DValue(j);
77
+ return res;
78
+ }
79
+
80
+ template <int D, typename SCAL>
81
+ inline auto SymOuter (const AutoDiff<D,SCAL> & u, const AutoDiff<D,SCAL> & v)
82
+ {
83
+ Mat<D,D,SCAL> res;
84
+ for (int i = 0; i < D; i++)
85
+ res(i,i) = u.DValue(i) * v.DValue(i);
86
+ for (int i = 0; i < D; i++)
87
+ for (int j = 0; j < i; j++)
88
+ res(j,i) = res(i,j) =
89
+ 0.5 * (u.DValue(i) * v.DValue(j) + u.DValue(j) * v.DValue(i));
90
+ return res;
91
+ }
92
+
93
+ template <int D, typename SCAL>
94
+ inline auto MSkew (const AutoDiff<D,SCAL> & u)
95
+ {
96
+ Mat<D,D,SCAL> res;
97
+ res(0,0) = 0;
98
+ res(0,1) = -u.DValue(2);
99
+ res(0,2) = u.DValue(1);
100
+
101
+ res(1,0) = u.DValue(2);
102
+ res(1,1) = 0;
103
+ res(1,2) = -u.DValue(0);
104
+
105
+ res(2,0) = -u.DValue(1);
106
+ res(2,1) = u.DValue(0);
107
+ res(2,2) = 0;
108
+ return res;
109
+ }
71
110
  }
72
111
 
73
112
 
@@ -11,6 +11,10 @@
11
11
  sparse cholesky factorization
12
12
  */
13
13
 
14
+ #include "basematrix.hpp"
15
+ #include "sparsematrix.hpp"
16
+ #include "order.hpp"
17
+
14
18
  namespace ngla
15
19
  {
16
20