ngsolve 6.2.2506.post216.dev0__cp314-cp314-manylinux_2_28_x86_64.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.
Files changed (306) hide show
  1. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvcc +22 -0
  2. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvlink +17 -0
  3. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngscxx +15 -0
  4. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsld +11 -0
  5. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsolve.tcl +648 -0
  6. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngspy +2 -0
  7. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
  8. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
  9. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
  10. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basematrix.hpp +963 -0
  11. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basevector.hpp +1268 -0
  12. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbequations.hpp +2807 -0
  13. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
  14. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
  15. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bessel.hpp +1064 -0
  16. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bilinearform.hpp +966 -0
  17. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bla.hpp +29 -0
  18. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
  19. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
  20. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bspline.hpp +116 -0
  21. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
  22. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cg.hpp +368 -0
  23. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
  24. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cholesky.hpp +720 -0
  25. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/clapack.h +7254 -0
  26. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/code_generation.hpp +296 -0
  27. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
  28. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
  29. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
  30. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
  31. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/comp.hpp +79 -0
  32. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compatibility.hpp +41 -0
  33. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/complex_wrapper.hpp +101 -0
  34. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
  35. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/contact.hpp +239 -0
  36. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_core.hpp +216 -0
  37. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_linalg.hpp +185 -0
  38. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngbla.hpp +317 -0
  39. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngstd.hpp +414 -0
  40. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
  41. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diagonalmatrix.hpp +160 -0
  42. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
  43. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop.hpp +1286 -0
  44. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
  45. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
  46. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
  47. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/dump.hpp +949 -0
  48. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ectypes.hpp +121 -0
  49. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigen.hpp +60 -0
  50. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
  51. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
  52. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementbyelement.hpp +201 -0
  53. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
  54. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
  55. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
  56. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/expr.hpp +1693 -0
  57. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfe.hpp +175 -0
  58. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
  59. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facethofe.hpp +111 -0
  60. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
  61. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
  62. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fem.hpp +87 -0
  63. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
  64. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fespace.hpp +1454 -0
  65. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
  66. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
  67. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalspace.hpp +115 -0
  68. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
  69. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1amg.hpp +124 -0
  70. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
  71. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
  72. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
  73. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
  74. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
  75. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
  76. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
  77. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
  78. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
  79. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
  80. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
  81. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
  82. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
  83. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
  84. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
  85. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
  86. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
  87. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
  88. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
  89. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
  90. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
  91. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
  92. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
  93. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
  94. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
  95. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
  96. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
  97. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
  98. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
  99. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
  100. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hidden.hpp +74 -0
  101. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/householder.hpp +181 -0
  102. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
  103. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
  104. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integrator.hpp +2012 -0
  105. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
  106. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/interpolate.hpp +49 -0
  107. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrule.hpp +2542 -0
  108. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
  109. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/irspace.hpp +49 -0
  110. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/jacobi.hpp +153 -0
  111. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/kernels.hpp +724 -0
  112. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
  113. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
  114. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
  115. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
  116. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/la.hpp +38 -0
  117. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linalg_kernels.hpp +70 -0
  118. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linearform.hpp +266 -0
  119. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/matrix.hpp +2145 -0
  120. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/memusage.hpp +41 -0
  121. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
  122. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mgpre.hpp +204 -0
  123. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
  124. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mptools.hpp +2281 -0
  125. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multigrid.hpp +42 -0
  126. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multivector.hpp +447 -0
  127. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
  128. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
  129. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
  130. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
  131. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
  132. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
  133. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
  134. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
  135. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
  136. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngstd.hpp +72 -0
  137. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
  138. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
  139. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
  140. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
  141. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
  142. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/order.hpp +251 -0
  143. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
  144. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
  145. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
  146. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
  147. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
  148. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/periodic.hpp +129 -0
  149. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
  150. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pml.hpp +275 -0
  151. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
  152. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/postproc.hpp +142 -0
  153. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
  154. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/precomp.hpp +60 -0
  155. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
  156. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/prolongation.hpp +380 -0
  157. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_comp.hpp +107 -0
  158. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_fem.hpp +89 -0
  159. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
  160. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
  161. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
  162. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
  163. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
  164. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
  165. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
  166. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
  167. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
  168. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
  169. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/smoother.hpp +253 -0
  170. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/solve.hpp +89 -0
  171. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsecholesky.hpp +317 -0
  172. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsefactorization_interface.hpp +159 -0
  173. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix.hpp +1052 -0
  174. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
  175. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1055 -0
  176. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
  177. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/specialelement.hpp +125 -0
  178. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/statushandler.hpp +33 -0
  179. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/stringops.hpp +12 -0
  180. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
  181. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
  182. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
  183. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
  184. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
  185. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensor.hpp +522 -0
  186. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
  187. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
  188. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
  189. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
  190. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
  191. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
  192. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
  193. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpfes.hpp +133 -0
  194. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
  195. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/triangular.hpp +465 -0
  196. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
  197. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
  198. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
  199. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
  200. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vector.hpp +1452 -0
  201. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
  202. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
  203. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vvector.hpp +208 -0
  204. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/webgui.hpp +92 -0
  205. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
  206. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
  207. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +180 -0
  208. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
  209. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
  210. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
  211. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
  212. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
  213. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
  214. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
  215. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
  216. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
  217. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
  218. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
  219. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
  220. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
  221. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
  222. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
  223. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
  224. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
  225. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
  226. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  227. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  228. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  229. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  230. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
  231. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
  232. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
  233. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
  234. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
  235. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
  236. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
  237. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
  238. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
  239. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
  240. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  241. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
  242. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
  243. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
  244. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
  245. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
  246. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
  247. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
  248. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
  249. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
  250. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
  251. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
  252. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  253. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  254. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
  255. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  256. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +14 -0
  257. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
  258. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
  259. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1182 -0
  260. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
  261. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
  262. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
  263. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
  264. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
  265. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
  266. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
  267. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
  268. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/__init__.py +7 -0
  269. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/cudss.py +112 -0
  270. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
  271. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
  272. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
  273. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +671 -0
  274. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.geo +17 -0
  275. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.vol +240 -0
  276. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  277. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.vol +614 -0
  278. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.geo +12 -0
  279. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  280. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  281. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  282. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.geo +19 -0
  283. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  284. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  285. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  286. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  287. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  288. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  289. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  290. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  291. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  292. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  293. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  294. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  295. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  296. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  297. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  298. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  299. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  300. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.in2d +17 -0
  301. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.vol +149 -0
  302. ngsolve-6.2.2506.post216.dev0.dist-info/METADATA +14 -0
  303. ngsolve-6.2.2506.post216.dev0.dist-info/RECORD +306 -0
  304. ngsolve-6.2.2506.post216.dev0.dist-info/WHEEL +5 -0
  305. ngsolve-6.2.2506.post216.dev0.dist-info/licenses/LICENSE +504 -0
  306. ngsolve-6.2.2506.post216.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1359 @@
1
+ #ifndef FILE_MESHACCESS
2
+ #define FILE_MESHACCESS
3
+
4
+ /*********************************************************************/
5
+ /* File: meshaccess.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 25. Mar. 2000 */
8
+ /*********************************************************************/
9
+
10
+
11
+ #include <nginterface_v2.hpp>
12
+ #include <elementtopology.hpp>
13
+
14
+ namespace ngfem
15
+ {
16
+ class IntegrationPoint;
17
+ class CoefficientFunction;
18
+ class ElementTransformation;
19
+ }
20
+
21
+
22
+
23
+ namespace ngcomp
24
+ {
25
+ class PML_Transformation;
26
+
27
+ using netgen::Ng_Node;
28
+ using ngfem::ELEMENT_TYPE;
29
+
30
+ using namespace ngfem;
31
+
32
+ class MeshAccess;
33
+ class Ngs_Element;
34
+ class Region;
35
+
36
+ class Ngs_Element : public netgen::Ng_Element
37
+ {
38
+ ElementId ei;
39
+ public:
40
+ // static string defaultstring;
41
+ Ngs_Element (const netgen::Ng_Element & el, ElementId id)
42
+ : netgen::Ng_Element(el), ei(id) { ; }
43
+ AOWrapper<decltype(vertices)> Vertices() const { return vertices; }
44
+ AOWrapper<decltype(points)> Points() const { return points; }
45
+ AOWrapper<decltype(edges)> Edges() const { return edges; }
46
+ AOWrapper<decltype(faces)> Faces() const { return faces; }
47
+ AOWrapper<decltype(facets)> Facets() const { return facets; }
48
+ // string_view GetMaterial() const { return mat ? *mat : defaultstring; }
49
+ string_view GetMaterial() const { return mat; }
50
+ operator ElementId() const { return ei; }
51
+ auto VB() const { return ei.VB(); }
52
+ auto Nr() const { return ei.Nr(); }
53
+ /*
54
+ Converts element-type from Netgen to element-types of NGSolve.
55
+ E.g. the Netgen-types NG_TRIG and NG_TRIG6 are merged to NGSolve type ET_TRIG.
56
+ */
57
+ static INLINE ELEMENT_TYPE ConvertElementType (NG_ELEMENT_TYPE type)
58
+ {
59
+ switch (type)
60
+ {
61
+ case NG_PNT: return ET_POINT;
62
+ case NG_SEGM: case NG_SEGM3: return ET_SEGM;
63
+ case NG_TRIG: case NG_TRIG6: return ET_TRIG;
64
+ case NG_QUAD: case NG_QUAD6: case NG_QUAD8: return ET_QUAD;
65
+ case NG_TET: case NG_TET10: return ET_TET;
66
+ case NG_PRISM: case NG_PRISM12: case NG_PRISM15: return ET_PRISM;
67
+ case NG_PYRAMID: case NG_PYRAMID13: return ET_PYRAMID;
68
+ case NG_HEX7: return ET_HEXAMID;
69
+ case NG_HEX: case NG_HEX20: return ET_HEX;
70
+ // default:
71
+ }
72
+ __assume (false);
73
+ return ET_POINT; // for some compiler
74
+ }
75
+
76
+ ELEMENT_TYPE GetType () const
77
+ { return ConvertElementType (Ng_Element::GetType()); }
78
+ };
79
+
80
+ inline ostream & operator<< (ostream & ost, Ngs_Element & el)
81
+ {
82
+ ost << ElementId(el);
83
+ return ost;
84
+ }
85
+
86
+ class ElementIterator
87
+ {
88
+ const MeshAccess & ma;
89
+ ElementId ei;
90
+ public:
91
+ ElementIterator (const MeshAccess & ama, ElementId aei) : ma(ama), ei(aei) { ; }
92
+ ElementIterator operator++ () { return ElementIterator(ma, ++ei); }
93
+ INLINE Ngs_Element operator*() const;
94
+ bool operator!=(ElementIterator id2) const { return ei != id2.ei; }
95
+ bool operator==(ElementIterator id2) const { return ei == id2.ei; }
96
+ };
97
+
98
+ class ElementRange : public IntRange
99
+ {
100
+ const MeshAccess & ma;
101
+ VorB vb;
102
+ public:
103
+ ElementRange (const MeshAccess & ama, VorB avb, IntRange ar)
104
+ : IntRange(ar), ma(ama), vb(avb) { ; }
105
+ ElementId First() const { return ElementId(vb, IntRange::First()); }
106
+ ElementIterator begin () const { return ElementIterator(ma, ElementId(vb,IntRange::First())); }
107
+ ElementIterator end () const { return ElementIterator(ma, ElementId(vb,IntRange::Next())); }
108
+ ElementId operator[] (size_t nr) { return ElementId(vb, IntRange::First()+nr); }
109
+ ElementRange Split(size_t nr, size_t tot) { return ElementRange(ma, vb, IntRange::Split(nr,tot)); }
110
+ };
111
+
112
+ template <VorB VB>
113
+ class TElementIterator
114
+ {
115
+ const MeshAccess & ma;
116
+ size_t nr;
117
+ public:
118
+ INLINE TElementIterator (const MeshAccess & ama, size_t anr) : ma(ama), nr(anr) { ; }
119
+ INLINE TElementIterator operator++ () { return TElementIterator(ma, ++nr); }
120
+ INLINE Ngs_Element operator*() const; // implemented below, after MeshAccess
121
+ INLINE bool operator!=(TElementIterator id2) const { return nr != id2.nr; }
122
+ };
123
+
124
+ template <VorB VB>
125
+ class TElementRange
126
+ {
127
+ const MeshAccess & ma;
128
+ IntRange r;
129
+ public:
130
+ INLINE TElementRange (const MeshAccess & ama, IntRange ar) : ma(ama), r(ar) { ; }
131
+ INLINE TElementIterator<VB> begin () const { return TElementIterator<VB>(ma, r.First()); }
132
+ INLINE TElementIterator<VB> end () const { return TElementIterator<VB>(ma, r.Next()); }
133
+ };
134
+
135
+ template <VorB VB, int DIM>
136
+ class DimElementIterator
137
+ {
138
+ const MeshAccess & ma;
139
+ size_t nr;
140
+ public:
141
+ INLINE DimElementIterator (const MeshAccess & ama, size_t anr) : ma(ama), nr(anr) { ; }
142
+ INLINE DimElementIterator operator++ () { return DimElementIterator(ma, ++nr); }
143
+ INLINE Ngs_Element operator*() const; // implemented below, after MeshAccess
144
+ INLINE bool operator!=(DimElementIterator id2) const { return nr != id2.nr; }
145
+ };
146
+
147
+ template <VorB VB, int DIM>
148
+ class DimElementRange
149
+ {
150
+ const MeshAccess & ma;
151
+ IntRange r;
152
+ public:
153
+ INLINE DimElementRange (const MeshAccess & ama, IntRange ar) : ma(ama), r(ar) { ; }
154
+ INLINE auto begin () const { return DimElementIterator<VB,DIM>(ma, r.First()); }
155
+ INLINE auto end () const { return DimElementIterator<VB,DIM>(ma, r.Next()); }
156
+ };
157
+
158
+ /**
159
+ Access to mesh topology and geometry.
160
+
161
+ MeshAccess provides information such as element-to-vertex table,
162
+ elemenet-to-edge table etc.
163
+
164
+ It provides also element-geometry (straight or curved elements)
165
+ via GetTrafo.
166
+
167
+ Internally, MeshAccess calls functions from Netgen.
168
+ */
169
+
170
+ class GridFunction;
171
+
172
+ class NGS_DLL_HEADER MeshAccess : public enable_shared_from_this<MeshAccess>
173
+ {
174
+ netgen::Ngx_Mesh mesh;
175
+
176
+ /// buffered global quantities:
177
+ /// dimension of the domain. Set to -1 if no mesh is present
178
+ int dim;
179
+
180
+ /// number of vertex, edge, face, cell, element, facet, and global nodes
181
+ size_t nnodes[7];
182
+
183
+ // number of nodes of co-dimension i
184
+ // these are NC, NF, NE, NV in 3D,
185
+ // and NF, NE, NV, undef, in 2D
186
+ size_t nnodes_cd[4];
187
+
188
+
189
+ /// number of elements of dimension i
190
+ size_t nelements[4];
191
+ /// number of elements of co-dimension i
192
+ size_t nelements_cd[4];
193
+ /// number of multigrid levels
194
+ int nlevels;
195
+
196
+ /// number of regions of co-dimension i
197
+ int nregions[4];
198
+
199
+ //ngfem::ElementTransformation & GetTrafoDim (size_t elnr, Allocator & lh) const;
200
+ typedef ngfem::ElementTransformation & (MeshAccess::*pfunc) (size_t elnr, Allocator & lh) const;
201
+ pfunc trafo_jumptable[4];
202
+
203
+ int mesh_timestamp = -1; // timestamp of Netgen-mesh
204
+ size_t timestamp = 0;
205
+
206
+ /// for ALE
207
+ shared_ptr<GridFunction> deformation;
208
+
209
+ /// pml trafos per sub-domain
210
+ Array<shared_ptr <PML_Transformation>> pml_trafos;
211
+
212
+ Array<std::tuple<int,int>> identified_facets;
213
+
214
+ /// store periodic vertex mapping for each identification number
215
+ // shared ptr because Meshaccess is copy constructible
216
+ /*
217
+ shared_ptr<Array<Array<IVec<2>>>> periodic_node_pairs[3] = {make_shared<Array<Array<IVec<2>>>>(),
218
+ make_shared<Array<Array<IVec<2>>>>(),
219
+ make_shared<Array<Array<IVec<2>>>>()};
220
+ */
221
+ Array<Array<IVec<2>>> periodic_node_pairs[3];
222
+
223
+ DynamicTable<size_t> neighbours[4][4];
224
+ friend class Region;
225
+ public:
226
+ SimpleSignal updateSignal;
227
+ static std::true_type shallow_archive;
228
+
229
+ /// for achiving ...
230
+ MeshAccess ();
231
+ /// connects to Netgen - mesh
232
+ MeshAccess (shared_ptr<netgen::Mesh> amesh);
233
+ /// loads new mesh from file
234
+ MeshAccess (string filename, NgMPI_Comm amesh_comm = NgMPI_Comm{});
235
+ /// select this mesh in netgen visuaization
236
+ void SelectMesh() const;
237
+ /// not much to do
238
+ virtual ~MeshAccess ();
239
+
240
+ /// the spatial dimension of the mesh
241
+ int GetDimension() const { return dim; }
242
+
243
+ /// number of points. needed for isoparametric nodal elements
244
+ size_t GetNP() const { return mesh.GetNP(); }
245
+
246
+ /// number of vertices
247
+ size_t GetNV() const { return nnodes[0]; }
248
+
249
+ /// number of elements in the domain
250
+ size_t GetNE() const { return nelements_cd[0]; }
251
+
252
+ /// number of boundary elements
253
+ size_t GetNSE() const { return nelements_cd[1]; }
254
+
255
+ /// number of elements of co dimension 2
256
+ size_t GetNCD2E() const { return nelements_cd[2]; }
257
+
258
+ /// number of volume or boundary elements
259
+ size_t GetNE(VorB vb) const { return nelements_cd[vb]; }
260
+
261
+ /// number of edges in the whole mesh
262
+ size_t GetNEdges() const { return nnodes[1]; }
263
+
264
+ /// number of faces in the whole mesh
265
+ size_t GetNFaces() const { return nnodes[2]; }
266
+
267
+ /// maximal sub-domain (material) index. range is [0, ndomains)
268
+ int GetNDomains () const { return nregions[VOL]; }
269
+
270
+ /// maximal boundary condition index. range is [0, nboundaries)
271
+ int GetNBoundaries () const { return nregions[BND]; }
272
+
273
+ [[deprecated("Use GetNRegions (BBND) instead!")]]
274
+ int GetNBBoundaries() const { return nregions[BBND]; }
275
+
276
+ int GetNRegions (VorB vb) const { return nregions[vb]; }
277
+
278
+ /// returns point coordinate
279
+ template <int D>
280
+ void GetPoint (size_t pi, Vec<D> & p) const
281
+ {
282
+ auto pt = mesh.GetPoint (pi);
283
+ for (int j = 0; j < D; j++) p(j) = pt[j];
284
+ }
285
+
286
+ /// returns point coordinate
287
+ template <int D>
288
+ Vec<D> GetPoint (size_t pi) const
289
+ {
290
+ Vec<D> p;
291
+ auto pt = mesh.GetPoint (pi);
292
+ for (int j = 0; j < D; j++) p(j) = pt[j];
293
+ return p;
294
+ }
295
+
296
+ ElementRange Elements (VorB vb = VOL) const
297
+ {
298
+ return ElementRange (*this, vb, IntRange (0, GetNE(vb)));
299
+ }
300
+
301
+ template <VorB VB>
302
+ TElementRange<VB> Elements () const
303
+ {
304
+ return TElementRange<VB> (*this, IntRange (0, GetNE(VB)));
305
+ }
306
+
307
+ template <VorB VB, int DIM>
308
+ auto Elements () const
309
+ {
310
+ return DimElementRange<VB,DIM> (*this, IntRange (0, GetNE(VB)));
311
+ }
312
+
313
+ auto Nodes (NODE_TYPE nt) const
314
+ {
315
+ return T_Range<NodeId> (NodeId(nt, 0), NodeId(nt, GetNNodes(nt)));
316
+ }
317
+
318
+ template <NODE_TYPE nt>
319
+ auto Nodes () const
320
+ {
321
+ return T_Range<T_NodeId<nt>> (0, GetNNodes(nt));
322
+ }
323
+
324
+ auto Vertices() const { return Nodes<NT_VERTEX>(); }
325
+ auto Edges() const { return Nodes<NT_EDGE>(); }
326
+ auto Faces() const { return Nodes<NT_FACE>(); }
327
+ auto Cells() const { return Nodes<NT_CELL>(); }
328
+
329
+ template <typename TFUNC>
330
+ void IterateElements (VorB vb,
331
+ LocalHeap & clh,
332
+ const TFUNC & func) const
333
+ {
334
+ if (task_manager)
335
+ {
336
+ SharedLoop sl(GetNE(vb));
337
+
338
+ task_manager -> CreateJob
339
+ ( [&] (const TaskInfo & ti)
340
+ {
341
+ LocalHeap lh = clh.Split(ti.thread_nr, ti.nthreads);
342
+
343
+ for (size_t mynr : sl)
344
+ {
345
+ HeapReset hr(lh);
346
+ ElementId ei(vb, mynr);
347
+ func (GetElement(ei), lh);
348
+ }
349
+ } );
350
+ }
351
+ else
352
+ {
353
+ for (auto i : Range(GetNE(vb)))
354
+ {
355
+ HeapReset hr(clh);
356
+ ElementId ei(vb, i);
357
+ func (GetElement(ei), clh);
358
+ }
359
+ }
360
+ }
361
+
362
+ template <typename TFUNC>
363
+ void IterateElements (VorB vb,const TFUNC & func) const
364
+ {
365
+ if (task_manager)
366
+ {
367
+ SharedLoop sl(GetNE(vb));
368
+
369
+ task_manager -> CreateJob
370
+ ( [&] (const TaskInfo & ti)
371
+ {
372
+ for (size_t mynr : sl)
373
+ {
374
+ ElementId ei(vb, mynr);
375
+ func (GetElement(ei));
376
+ }
377
+ } );
378
+ }
379
+ else
380
+ {
381
+ for (auto ei : Elements(vb))
382
+ func (GetElement(ei));
383
+ }
384
+ }
385
+
386
+ /// the geometry type of the element
387
+ [[deprecated("Use GetElType with ElementId(VOL, elnr) instead!")]]
388
+ ELEMENT_TYPE GetElType (int elnr) const
389
+ { return GetElement(ElementId(VOL,elnr)).GetType(); }
390
+
391
+ /// the geometry type of the boundary element
392
+ [[deprecated("Use GetElType with ElementId(BND, elnr) instead!")]]
393
+ ELEMENT_TYPE GetSElType (int elnr) const
394
+ { return GetElement(ElementId(BND,elnr)).GetType(); }
395
+
396
+ /// the geometry type of the element
397
+ ELEMENT_TYPE GetElType (ElementId ei) const
398
+ { return GetElement(ei).GetType(); }
399
+
400
+
401
+ /// the sub-domain index of the element
402
+ [[deprecated("Use GetElIndex with ElementId(VOL, elnr) instead!")]]
403
+ int GetElIndex (int elnr) const
404
+ {
405
+ return GetElement(ElementId(VOL,elnr)).GetIndex();
406
+ }
407
+
408
+ /// the boundary-condition index of the boundary element
409
+ [[deprecated("Use GetElIndex with ElementId(BND, elnr) instead!")]]
410
+ int GetSElIndex (int elnr) const
411
+ {
412
+ return GetElement(ElementId(BND,elnr)).GetIndex();
413
+ }
414
+
415
+ [[deprecated("Use GetElIndex with ElementId(BBND, elnr) instead!")]]
416
+ int GetCD2ElIndex(int elnr) const
417
+ {
418
+ return GetElement(ElementId(BBND,elnr)).GetIndex();
419
+ }
420
+
421
+ int GetElIndex (ElementId ei) const
422
+ {
423
+ return GetElement(ei).GetIndex();
424
+ }
425
+
426
+ string_view GetMaterial(ElementId ei) const
427
+ { return GetElement(ei).GetMaterial(); }
428
+
429
+ // const string & GetMaterial(VorB vb, int region_nr) const
430
+ string_view GetMaterial(VorB vb, int region_nr) const
431
+ {
432
+ switch (vb)
433
+ {
434
+ case VOL: return mesh.GetMaterialCD<0> (region_nr);
435
+ case BND: return mesh.GetMaterialCD<1> (region_nr);
436
+ case BBND: return mesh.GetMaterialCD<2> (region_nr);
437
+ case BBBND: return mesh.GetMaterialCD<3> (region_nr);
438
+ default: throw Exception("GetMaterial not implemented for " + ToString(vb));
439
+ }
440
+ }
441
+
442
+ auto GetMaterials (VorB vb) const
443
+ {
444
+ return ArrayObject (GetNRegions(vb),
445
+ [this,vb] (size_t i) { return this->GetMaterial(vb, i); });
446
+ }
447
+
448
+
449
+ /// the material of the element
450
+ [[deprecated("Use GetMaterial with ElementId(VOL, elnr) instead!")]]
451
+ string_view GetElMaterial (int elnr) const
452
+ { return GetMaterial(ElementId(VOL, elnr)); }
453
+ // { return Ng_GetElementMaterial (elnr+1); }
454
+
455
+ /// the material of the sub-domain
456
+ [[deprecated("Use GetMaterial(VOL, region_nr) instead!")]]
457
+ string_view GetDomainMaterial (int domnr) const
458
+ { return GetMaterial(VOL, domnr); }
459
+ // { return Ng_GetDomainMaterial (domnr+1); }
460
+
461
+
462
+ /// the boundary condition name of surface element
463
+ [[deprecated("Use GetMaterial with ElementId(BND, elnr) instead!")]]
464
+ string_view GetSElBCName (int selnr) const
465
+ { return GetMaterial(ElementId(BND, selnr)); }
466
+ // { return Ng_GetSurfaceElementBCName (selnr+1); }
467
+
468
+ /// the boundary condition name of boundary condition number
469
+ [[deprecated("Use GetMaterial(BND, region_nr) instead!")]]
470
+ string_view GetBCNumBCName (int bcnr) const
471
+ { return GetMaterial(BND, bcnr); }
472
+ // { return Ng_GetBCNumBCName (bcnr); }
473
+
474
+ [[deprecated("Use GetMaterial(BBND, region_nr) instead!")]]
475
+ string_view GetCD2NumCD2Name (int cd2nr) const
476
+ { return GetMaterial(BBND, cd2nr); }
477
+ // { return Ng_GetCD2NumCD2Name (cd2nr); }
478
+
479
+
480
+ /// not sure who needs that
481
+ int GetSElSurfaceNumber (const int elnr) const
482
+ { return mesh.GetSurfaceElementSurfaceNumber (elnr+1)-1; }
483
+
484
+ /// not sure who needs that
485
+ int GetSElFDNumber (const int elnr) const
486
+ { return mesh.GetSurfaceElementFDNumber (elnr+1)-1; }
487
+
488
+
489
+
490
+ /// the sub-domain indices next to boundary element.
491
+ /// returns -1 for void
492
+ void GetSElNeighbouringDomains(const int elnr, int & in, int & out) const;
493
+
494
+
495
+ /// update buffered global quantities.
496
+ /// Must be called after every change of the mesh topology
497
+ void UpdateBuffers();
498
+
499
+
500
+
501
+ /*
502
+ Nodes are an abstraction for vertices, edges, faces, and cells
503
+ */
504
+
505
+ /// number of elements of dimension dim
506
+ size_t GetNElements (int dim) const { return nelements[dim]; }
507
+
508
+ /// number of nodes of type nt
509
+ size_t GetNNodes (NODE_TYPE nt) const { return nnodes[nt]; }
510
+
511
+
512
+ /// the topology of a domain - element
513
+ /// experimental, not recommended for use yet
514
+ // void GetTopologicElement (int elnr, TopologicElement & topel) const;
515
+
516
+
517
+ /**
518
+ returns topology of a Netgen - element. This is the new
519
+ (2008), unified concept. The function returns a direct access
520
+ to the Netgen mesh structure instead of copying point numbers
521
+ etc. The nasty 1-0 conversion is done on the fly.
522
+ */
523
+ [[deprecated("Use GetElement (ElementId ei) instead!")]]
524
+ INLINE Ngs_Element GetElement (int elnr, bool boundary = 0) const
525
+ {
526
+ switch (dim-boundary)
527
+ {
528
+ case 0: return Ngs_Element (mesh.GetElement<0> (elnr),
529
+ ElementId(boundary ? BND : VOL, elnr));
530
+ case 1: return Ngs_Element (mesh.GetElement<1> (elnr),
531
+ ElementId(boundary ? BND : VOL, elnr));
532
+ case 2: return Ngs_Element (mesh.GetElement<2> (elnr),
533
+ ElementId(boundary ? BND : VOL, elnr));
534
+ case 3:
535
+ default: return Ngs_Element (mesh.GetElement<3> (elnr),
536
+ ElementId(boundary ? BND : VOL, elnr));
537
+ }
538
+ }
539
+
540
+ INLINE Ngs_Element GetElement (ElementId ei) const
541
+ {
542
+ int hdim = dim - int(ei.VB());
543
+ switch (hdim)
544
+ {
545
+ case 0: return Ngs_Element (mesh.GetElement<0> (ei.Nr()), ei);
546
+ case 1: return Ngs_Element (mesh.GetElement<1> (ei.Nr()), ei);
547
+ case 2: return Ngs_Element (mesh.GetElement<2> (ei.Nr()), ei);
548
+ case 3:
549
+ default: return Ngs_Element (mesh.GetElement<3> (ei.Nr()), ei);
550
+ }
551
+ }
552
+
553
+ template <VorB VB, int DIM>
554
+ INLINE Ngs_Element GetElement (T_ElementId<VB,DIM> ei) const
555
+ {
556
+ constexpr int HDIM = DIM - int(VB);
557
+ return Ngs_Element (mesh.GetElement<HDIM> (ei.Nr()), ei);
558
+ }
559
+
560
+
561
+ INLINE Ngs_Element operator[] (ElementId ei) const
562
+ {
563
+ return GetElement (ei);
564
+ }
565
+
566
+
567
+ /**
568
+ returns topology of a Netgen - element. This is the new
569
+ (2008), unified concept. The function returns a direct access
570
+ to the Netgen mesh structure instead of copying point numbers
571
+ etc. The nasty 1-0 conversion is done on the fly.
572
+ */
573
+ [[deprecated("Use GetElement (ElementId (BND,nr)) instead!")]]
574
+ Ngs_Element GetSElement (int elnr) const
575
+ {
576
+ switch (dim)
577
+ {
578
+ case 1: return Ngs_Element (mesh.GetElement<0> (elnr), ElementId(BND,elnr));
579
+ case 2: return Ngs_Element (mesh.GetElement<1> (elnr), ElementId(BND,elnr));
580
+ case 3:
581
+ default: return Ngs_Element (mesh.GetElement<2> (elnr), ElementId(BND,elnr));
582
+ }
583
+ }
584
+
585
+ [[deprecated("Use GetElement (ElementId (BBND,nr)) instead!")]]
586
+ Ngs_Element GetCD2Element(int elnr) const
587
+ {
588
+ switch(dim)
589
+ {
590
+ case 1: throw Exception("No CoDim 2 Element for dimension 1");
591
+ case 2: return Ngs_Element(mesh.GetElement<0>(elnr),ElementId(BBND,elnr));
592
+ case 3:
593
+ default: return Ngs_Element(mesh.GetElement<1>(elnr),ElementId(BBND,elnr));
594
+ }
595
+ }
596
+
597
+ /**
598
+ returns element of compile-time fixed dimension
599
+ */
600
+ template <int DIM, VorB vb>
601
+ inline Ngs_Element GetElement (size_t elnr) const
602
+ {
603
+ return Ngs_Element (mesh.GetElement<DIM> (elnr), ElementId(vb, elnr));
604
+ }
605
+
606
+ auto GetTimeStamp() const { return timestamp; }
607
+
608
+ void SetRefinementFlag (ElementId ei, bool ref)
609
+ {
610
+ switch (dim-int(ei.VB()))
611
+ {
612
+ case 2: mesh.SetRefinementFlag<2>(ei.Nr(), ref); break;
613
+ case 3: mesh.SetRefinementFlag<3>(ei.Nr(), ref); break;
614
+ default: ;
615
+ }
616
+ /*
617
+ if (id.IsVolume())
618
+ Ng_SetRefinementFlag (id.Nr()+1, ref);
619
+ else
620
+ Ng_SetSurfaceRefinementFlag (id.Nr()+1, ref);
621
+ */
622
+ }
623
+
624
+ void Refine (bool onlyonce);
625
+ void Curve (int order);
626
+ int GetCurveOrder ();
627
+
628
+ void EnableTable (string name, bool set = true)
629
+ {
630
+ mesh.EnableTable(name, set);
631
+ }
632
+
633
+ void HPRefinement (int levels, double factor = 0.125)
634
+ {
635
+ mesh.HPRefinement(levels, factor);
636
+ UpdateBuffers();
637
+ }
638
+
639
+ void SetDeformation (shared_ptr<GridFunction> def = nullptr);
640
+
641
+ shared_ptr<GridFunction> GetDeformation () const
642
+ {
643
+ return deformation;
644
+ }
645
+
646
+ void SetPML (const shared_ptr<PML_Transformation> & pml_trafo, int _domnr);
647
+ void UnSetPML (int _domnr);
648
+
649
+ Array<shared_ptr<PML_Transformation>> & GetPMLTrafos();
650
+ shared_ptr<PML_Transformation> GetPML(int _domnr);
651
+
652
+ shared_ptr<netgen::Mesh> GetNetgenMesh () const
653
+ { return mesh.GetMesh(); }
654
+
655
+ netgen::Ngx_Mesh & GetNetgenMeshX () { return mesh; }
656
+
657
+
658
+ /**
659
+ returns node topology.
660
+ A facet or edge-node knows its vertices etc.
661
+ The method is not yet fully functional.
662
+ */
663
+ template <int DIM>
664
+ netgen::Ng_Node<DIM> GetNode (size_t nr) const
665
+ {
666
+ return mesh.GetNode<DIM> (nr);
667
+ }
668
+
669
+ /// returns the points of an element.
670
+ /// vertices and possibly edge-midpoints
671
+ [[deprecated("Use GetElPNums(ElementId) instead!")]]
672
+ void GetElPNums (int elnr, Array<int> & pnums) const
673
+ { pnums = ArrayObject (GetElement(ElementId(VOL,elnr)).points); }
674
+
675
+ /// returns the points of a boundary element.
676
+ /// vertex and possibly edge-midpoints
677
+ [[deprecated("Use GetElPNums(ElementId) instead!")]]
678
+ void GetSElPNums (int selnr, Array<int> & pnums) const
679
+ { pnums = ArrayObject (GetElement(ElementId(BND,selnr)).points); }
680
+
681
+ [[deprecated("Use GetElPNums(ElementId) instead!")]]
682
+ void GetElPNums (ElementId ei, Array<int> & pnums) const
683
+ { pnums = ArrayObject (GetElement(ei).points); }
684
+
685
+ auto GetElPNums (ElementId ei) const
686
+ { return ArrayObject(GetElement(ei).points); }
687
+
688
+ /// returns the vertices of an element
689
+ [[deprecated("Use GetElVertices(ElementId) instead!")]]
690
+ void GetElVertices (int elnr, Array<int> & vnums) const
691
+ { vnums = GetElement(ElementId(VOL,elnr)).Vertices(); }
692
+ ///
693
+ [[deprecated("Use GetElVertices(ElementId) -> vnums instead!")]]
694
+ void GetElVertices (ElementId ei, Array<int> & vnums) const
695
+ { vnums = GetElement(ei).Vertices(); }
696
+
697
+ auto GetElVertices (ElementId ei) const
698
+ { return GetElement(ei).Vertices(); }
699
+
700
+ /// returns the vertices of a boundary element
701
+ [[deprecated("Use vnums = GetElVertices(ElementId) instead!")]]
702
+ void GetSElVertices (int selnr, Array<int> & vnums) const
703
+ { vnums = GetElement(ElementId(BND,selnr)).Vertices(); }
704
+
705
+ [[deprecated("Use enums = GetElEdges(ElementId) instead! ")]]
706
+ void GetElEdges (ElementId ei, Array<int> & ednums) const
707
+ { ednums = GetElement(ei).Edges(); }
708
+
709
+ auto GetElEdges (ElementId ei) const { return GetElement(ei).Edges(); }
710
+
711
+ /// returns the edges of an element
712
+ [[deprecated("Use GetElEdges(ElementId) instead!")]]
713
+ void GetElEdges (int elnr, Array<int> & ednums) const
714
+ { ednums = GetElement(ElementId(VOL,elnr)).Edges(); }
715
+
716
+ // returns edge numbers and edge orientation of an element. (old style function)
717
+ // [[deprecated("Use GetElEdges(ElementId) instead!")]]
718
+ void GetElEdges (int elnr, Array<int> & ednums, Array<int> & orient) const;
719
+
720
+ /// returns the edges of a boundary element
721
+ [[deprecated("Use GetElEdges(ElementId) instead!")]]
722
+ void GetSElEdges (int selnr, Array<int> & ednums) const
723
+ { ednums = ArrayObject (GetElement(ElementId(BND,selnr)).edges); }
724
+
725
+ // returns edge numbers and edge orientation of an element. (old style function)
726
+ // [[deprecated("Use GetElEdges(ElementId) instead, orient is deprecated!")]]
727
+ void GetSElEdges (int selnr, Array<int> & ednums, Array<int> & orient) const;
728
+
729
+ /// returns the faces of an element
730
+ // [[deprecated("Use fanums = GetElFaces(ElementId) instead!")]]
731
+ void GetElFaces (ElementId ei, Array<int> & fnums) const
732
+ { fnums = GetElement(ei).Faces(); }
733
+
734
+ auto GetElFaces (ElementId ei) const
735
+ { return GetElement(ei).Faces(); }
736
+
737
+ /// returns the faces of an element
738
+ [[deprecated("Use GetElFaces(ElementId) instead!")]]
739
+ void GetElFaces (int elnr, Array<int> & fnums) const
740
+ { fnums = GetElement(ElementId(VOL,elnr)).Faces(); }
741
+
742
+ // returns face numbers and face orientation of an element. (old style function)
743
+ // [[deprecated("Use GetElFaces(ElementId) instead!")]]
744
+ void GetElFaces (int elnr, Array<int> & fnums, Array<int> & orient) const;
745
+
746
+ /// returns face number of surface element
747
+ int GetSElFace (int selnr) const;
748
+
749
+ // returns face number and orientation of surface element
750
+ // [[deprecated("orientation is deprecated! use GetSElFace(nr) instead")]]
751
+ void GetSElFace (int selnr, int & fnum, int & orient) const;
752
+
753
+ /// returns vertex numbers of face
754
+ [[deprecated("Use GetFacePNums(fnr) instead!")]]
755
+ void GetFacePNums (int fnr, Array<int> & pnums) const;
756
+
757
+ /// returns vertex numbers of face
758
+ auto GetFacePNums (size_t fnr) const
759
+ {
760
+ return ArrayObject (mesh.GetNode<2> (fnr).vertices);
761
+ }
762
+ /// returns vertex numbers of edge
763
+ [[deprecated("Use GetEdgePNums(enr) instead!")]]
764
+ void GetEdgePNums (int enr, int & pn1, int & pn2) const
765
+ {
766
+ auto edge = mesh.GetNode<1>(enr);
767
+ pn1 = edge.vertices[0];
768
+ pn2 = edge.vertices[1];
769
+ }
770
+ /// returns vertex numbers of edge
771
+ [[deprecated("Use GetEdgePNums(enr) instead!")]]
772
+ void GetEdgePNums (int enr, Array<int> & pnums) const;
773
+ /// returns vertex numbers of edge
774
+ /*
775
+ auto GetEdgePNums (size_t enr) const -> decltype(ArrayObject(IVec<2>()))
776
+ {
777
+ int v2[2];
778
+ Ng_GetEdge_Vertices (enr+1, v2);
779
+ return ArrayObject (IVec<2> (v2[0]-1, v2[1]-1));
780
+ }
781
+ */
782
+ auto GetEdgePNums (size_t enr) const
783
+ {
784
+ auto vts = mesh.GetNode<1>(enr).vertices;
785
+ return IVec<2>(vts[0],vts[1]);
786
+ }
787
+ /// returns all elements connected to an edge
788
+ void GetEdgeElements (int enr, Array<int> & elnums) const;
789
+ /// returns all elements connected to an edge
790
+ void GetEdgeSurfaceElements (int enr, Array<int> & elnums) const;
791
+ /// returns all edges of a face
792
+ [[deprecated("Use GetFaceEdges(fnr) -> edges instead!")]]
793
+ void GetFaceEdges (int fnr, Array<int> & edges) const;
794
+ INLINE auto GetFaceEdges (size_t fnr) const
795
+ { return ArrayObject(mesh.GetFaceEdges(fnr)); }
796
+ void GetEdgeFaces (int enr, Array<int> & faces) const;
797
+ /// returns elements connected to a face
798
+ void GetFaceElements (int fnr, Array<int> & elnums) const;
799
+ /// returns surface elements connected to a face
800
+ void GetFaceSurfaceElements (int fnr, Array<int> & elnums) const;
801
+ /// point numbers of a 1D element
802
+ // void GetSegmentPNums (int snr, Array<int> & pnums) const;
803
+ /// index of 1D element
804
+ // int GetSegmentIndex (int snr) const;
805
+
806
+ [[deprecated("Use sels = GetVertexElements(vnr) instead!")]]
807
+ void GetVertexElements (size_t vnr, Array<int> & elems) const;
808
+ auto GetVertexElements (size_t vnr) const
809
+ { return ArrayObject(mesh.GetNode<0> (vnr).elements); }
810
+
811
+ [[deprecated("Use sels = GetVertexSurfaceElements(vnr) instead!")]]
812
+ void GetVertexSurfaceElements (size_t vnr, Array<int> & elems) const;
813
+ auto GetVertexSurfaceElements (size_t vnr) const
814
+ { return ArrayObject(mesh.GetNode<0> (vnr).bnd_elements); }
815
+
816
+ auto GetVertexElements (size_t vnr, VorB vb) const
817
+ {
818
+ switch (vb)
819
+ {
820
+ case VOL: return ArrayObject(mesh.GetNode<0> (vnr).elements);
821
+ case BND: return ArrayObject(mesh.GetNode<0> (vnr).bnd_elements);
822
+ default: throw Exception ("GetVertexElements, unhandled vb");
823
+ }
824
+ }
825
+
826
+
827
+ /// number of facets of an element.
828
+ /// facets are edges (2D) or faces (3D)
829
+ size_t GetNFacets() const { return nnodes_cd[1]; }
830
+
831
+ /// facets of an element
832
+ auto GetElFacets (ElementId ei) const { return GetElement(ei).Facets(); }
833
+
834
+ [[deprecated("Use fanums = GetElFacets(ElementId) instead!")]]
835
+ void GetElFacets (ElementId ei, Array<int> & fnums) const
836
+ { fnums = GetElFacets(ei); }
837
+ [[deprecated("Use GetElFacets(ElementId) instead!")]]
838
+ void GetElFacets (int elnr, Array<int> & fnums) const
839
+ { fnums = GetElFacets(ElementId(VOL, elnr)); }
840
+ /// facet of a surface element
841
+ [[deprecated("Use GetElFacets(ElementId) instead!")]]
842
+ void GetSElFacets (int selnr, Array<int> & fnums) const
843
+ { fnums = GetElFacets(ElementId(BND, selnr)); }
844
+
845
+ /// vertices of a facet
846
+ void GetFacetPNums (int fnr, Array<int> & pnums) const;
847
+ /// geometry type of facet
848
+ ELEMENT_TYPE GetFaceType (int fnr) const
849
+ { return (mesh.GetNode<2>(fnr).vertices.Size() == 3) ? ET_TRIG : ET_QUAD; }
850
+ ELEMENT_TYPE GetFacetType (int fnr) const;
851
+ /// elements connected to facet
852
+ void GetFacetElements (int fnr, Array<int> & elnums) const
853
+ {
854
+ switch (dim)
855
+ {
856
+ case 1: elnums = GetVertexElements (fnr); break;
857
+ case 2: GetEdgeElements (fnr, elnums); break;
858
+ case 3: GetFaceElements (fnr, elnums); break;
859
+ }
860
+ }
861
+ void GetFacetSurfaceElements (int fnr, Array<int> & elnums) const
862
+ {
863
+ switch (dim)
864
+ {
865
+ case 1: elnums = GetVertexSurfaceElements (fnr); break;
866
+ case 2: GetEdgeSurfaceElements (fnr, elnums); break;
867
+ case 3: GetFaceSurfaceElements (fnr, elnums); break;
868
+ }
869
+ }
870
+
871
+ void CalcIdentifiedFacets();
872
+ int GetPeriodicFacet(int fnr) const
873
+ {
874
+ if(get<1>(identified_facets[fnr]) == 2) // check if identification type is periodic
875
+ return get<0>(identified_facets[fnr]);
876
+ else
877
+ return fnr;
878
+ }
879
+
880
+
881
+ /// element order stored in Netgen
882
+ int GetElOrder (int enr) const
883
+ { return mesh.GetElementOrder (enr+1); }
884
+ /// anisotropic order stored in Netgen
885
+ IVec<3> GetElOrders (int enr) const
886
+ {
887
+ IVec<3> eo;
888
+ mesh.GetElementOrders(enr+1,&eo[0],&eo[1],&eo[2]);
889
+ return eo;
890
+ }
891
+ /// set element order in Netgen
892
+ void SetElOrder (int enr, int order)
893
+ { mesh.SetElementOrder (enr+1,order); }
894
+ /// set anisotropic element order in Netgen
895
+ void SetElOrders (int enr, int ox, int oy, int oz)
896
+ { mesh.SetElementOrders (enr+1, ox,oy,oz); }
897
+ /// order of suface element
898
+ int GetSElOrder (int enr) const
899
+ { return mesh.GetSurfaceElementOrder (enr+1); }
900
+ /// anisotropic order of suface element
901
+ IVec<2> GetSElOrders (int enr) const
902
+ {
903
+ IVec<2> eo;
904
+ mesh.GetSurfaceElementOrders(enr+1,&eo[0],&eo[1]);
905
+ return eo;
906
+ }
907
+ /// set surface element order
908
+ void SetSElOrder (int enr, int order)
909
+ { mesh.SetSurfaceElementOrder (enr+1,order); }
910
+ /// set anisotropic surface element order
911
+ void SetSElOrders (int enr, int ox, int oy)
912
+ { mesh.SetSurfaceElementOrders (enr+1, ox,oy); }
913
+
914
+
915
+ /// the volume of an element (mid-point rule)
916
+ double ElementVolume (int elnr) const;
917
+ /// the area of a boundary element (mid-point rule)
918
+ double SurfaceElementVolume (int selnr) const;
919
+
920
+
921
+ /// number of multigrid levels
922
+ int GetNLevels() const { return nlevels; }
923
+ auto GetNVLevel(int level) const { return mesh.GetNVLevel(level); }
924
+ int GetHPElementLevel(ElementId ei) const { return mesh.GetHPElementLevel(ei.Nr(),1); }
925
+
926
+ /// the two parent vertices of a vertex. -1 for coarse-grid vertices
927
+ void GetParentNodes (int pi, int * parents) const
928
+ {
929
+ mesh.GetParentNodes (pi, parents);
930
+ }
931
+ IVec<2> GetParentNodes (int pi) const
932
+ {
933
+ IVec<2,int> parents;
934
+ mesh.GetParentNodes (pi, &parents[0]);
935
+ return parents;
936
+ }
937
+ /// number of parent element on next coarser mesh
938
+ [[deprecated("Use GetParentElement(ElementId) instead!")]]
939
+ int GetParentElement (int ei) const
940
+ { return mesh.GetParentElement (ei); }
941
+ /// number of parent boundary element on next coarser mesh
942
+ [[deprecated("Use GetParentElement(ElementId) instead!")]]
943
+ int GetParentSElement (int ei) const
944
+ { return mesh.GetParentSElement (ei); }
945
+
946
+ ElementId GetParentElement (ElementId ei) const
947
+ {
948
+ if (ei.VB() == VOL)
949
+ return ElementId(VOL, mesh.GetParentElement(ei.Nr()));
950
+ else if (ei.VB() == BND)
951
+ return ElementId(BND, mesh.GetParentSElement(ei.Nr()));
952
+ else
953
+ throw Exception ("GetParentElement only supported for VOL and BND");
954
+ }
955
+
956
+ bool HasParentEdges () const { return mesh.HasParentEdges(); }
957
+ auto GetParentEdges (int enr) const { return mesh.GetParentEdges(enr); }
958
+ auto GetParentFaces (int fnr) const { return mesh.GetParentFaces(fnr); }
959
+
960
+ Array<uint64_t> BuildRefinementTree() const;
961
+ void RefineFromTree(const Array<uint64_t> & tree);
962
+
963
+ /// representant of vertex for anisotropic meshes
964
+ int GetClusterRepVertex (int pi) const
965
+ { return mesh.GetClusterRepVertex (pi+1)-1; }
966
+ /// representant of edge for anisotropic meshes
967
+ int GetClusterRepEdge (int pi) const
968
+ { return mesh.GetClusterRepEdge (pi+1)-1; }
969
+ /// representant of face for anisotropic meshes
970
+ int GetClusterRepFace (int pi) const
971
+ { return mesh.GetClusterRepFace (pi+1)-1; }
972
+ /// representant of element for anisotropic meshes
973
+ int GetClusterRepElement (int pi) const
974
+ { return mesh.GetClusterRepElement (pi+1)-1; }
975
+
976
+
977
+ /// returns the transformation from the reference element to physical element.
978
+ /// Given a point in the reference element, the ElementTransformation can
979
+ /// compute the mapped point as well as the Jacobian
980
+ [[deprecated("Use GetTrafo with ElementId(vb, elnr) instead!")]]
981
+ ngfem::ElementTransformation & GetTrafo (int elnr, VorB vb, Allocator & lh) const
982
+ {
983
+ return GetTrafo(ElementId(vb, elnr),lh);
984
+ }
985
+
986
+ ngfem::ElementTransformation & GetTrafo (ElementId ei, Allocator & lh) const
987
+ {
988
+ auto ptr = trafo_jumptable[ei.VB()];
989
+ if (ptr)
990
+ return (this->*ptr)(ei.Nr(),lh);
991
+ else
992
+ return GetTrafoOld(ei, lh);
993
+ }
994
+
995
+ ngfem::ElementTransformation & GetTrafoOld (ElementId ei, Allocator & lh) const;
996
+
997
+ template <int DIM>
998
+ ngfem::ElementTransformation & GetTrafoDim (size_t elnr, Allocator & lh) const;
999
+ template <int DIM>
1000
+ ngfem::ElementTransformation & GetSTrafoDim (size_t elnr, Allocator & lh) const;
1001
+ template <int DIM>
1002
+ ngfem::ElementTransformation & GetCD2TrafoDim (size_t elnr, Allocator & lh) const;
1003
+ template <int DIM>
1004
+ ngfem::ElementTransformation & GetCD3TrafoDim (size_t elnr, Allocator & lh) const;
1005
+
1006
+ template <VorB VB,int DIM>
1007
+ ngfem::ElementTransformation & GetTrafo (T_ElementId<VB,DIM> ei, Allocator & lh) const
1008
+ {
1009
+ switch(VB)
1010
+ {
1011
+ case VOL:
1012
+ return GetTrafoDim<DIM> (ei.Nr(), lh);
1013
+ case BND:
1014
+ return GetSTrafoDim<DIM> (ei.Nr(), lh);
1015
+ case BBND:
1016
+ return GetCD2TrafoDim<DIM> (ei.Nr(),lh);
1017
+ default:
1018
+ __assume(false);
1019
+ }
1020
+ }
1021
+
1022
+ /*
1023
+ // (old style optimization)
1024
+ [[deprecated("functionality not useful anymore, just remove function call!")]]
1025
+ void SetPointSearchStartElement(const int el) const;
1026
+ */
1027
+
1028
+
1029
+ ElementId FindElementOfPoint (FlatVector<double> point,
1030
+ IntegrationPoint & ip,
1031
+ bool build_searchtree,
1032
+ const Array<int> * const indices = NULL,
1033
+ double tol = 1e-4) const;
1034
+ ElementId FindElementOfPoint (FlatVector<double> point,
1035
+ IntegrationPoint & ip,
1036
+ bool build_searchtree,
1037
+ int index, double tol = 1e-4) const;
1038
+ int FindSurfaceElementOfPoint (FlatVector<double> point,
1039
+ IntegrationPoint & ip,
1040
+ bool build_searchtree,
1041
+ const Array<int> * const indices = NULL) const;
1042
+ int FindSurfaceElementOfPoint (FlatVector<double> point,
1043
+ IntegrationPoint & ip,
1044
+ bool build_searchtree,
1045
+ int index) const;
1046
+
1047
+ /// is element straight or curved ?
1048
+ [[deprecated("Use GetElement(id).is_curved instead!")]]
1049
+ bool IsElementCurved (int elnr) const
1050
+ { return GetElement(ElementId(VOL,elnr)).is_curved; }
1051
+ // { return bool (Ng_IsElementCurved (elnr+1)); }
1052
+
1053
+ /*
1054
+ [[deprecated("Use GetPeriodicNodes(NT_VERTEX, pairs) instead!")]]
1055
+ void GetPeriodicVertices ( Array<IVec<2> > & pairs) const;
1056
+ [[deprecated("Use GetNPeriodicNodes(NT_VERTEX) instead!")]]
1057
+ int GetNPairsPeriodicVertices () const;
1058
+ [[deprecated("Use GetPeriodicNodes(NT_VERTEX, idnr) instead")]]
1059
+ void GetPeriodicVertices (int idnr, Array<IVec<2> > & pairs) const;
1060
+ [[deprecated("Use GetPeriodicNodes(NT_VERTEX, idnr).Size() instead")]]
1061
+ int GetNPairsPeriodicVertices (int idnr) const;
1062
+
1063
+ [[deprecated("Use GetPeriodicNodes(NT_EDGE, pairs) instead!")]]
1064
+ void GetPeriodicEdges ( Array<IVec<2> > & pairs) const;
1065
+ [[deprecated("Use GetNPeriodicNodes(NT_EDGE) instead!")]]
1066
+ int GetNPairsPeriodicEdges () const;
1067
+ [[deprecated("Use GetPeriodicNodes(NT_EDGE, idnr) instead")]]
1068
+ void GetPeriodicEdges (int idnr, Array<IVec<2> > & pairs) const;
1069
+ [[deprecated("Use GetPeriodicNodes(NT_EDGE, idnr).Size() instead")]]
1070
+ int GetNPairsPeriodicEdges (int idnr) const;
1071
+ */
1072
+
1073
+ int GetNPeriodicIdentifications() const
1074
+ {
1075
+ return periodic_node_pairs[NT_VERTEX].Size();
1076
+ }
1077
+ // get number of all periodic nodes of nodetype nt
1078
+ size_t GetNPeriodicNodes(NODE_TYPE nt) const;
1079
+ // write all the node pairs of type nt into array pairs
1080
+ void GetPeriodicNodes(NODE_TYPE nt, Array<IVec<2>>& pairs) const;
1081
+ // Uses 0 based identification numbers! Returns periodic node pairs of given identifcation number
1082
+ const Array<IVec<2>>& GetPeriodicNodes(NODE_TYPE nt, int idnr) const;
1083
+
1084
+ shared_ptr<CoefficientFunction> RegionCF(VorB vb, shared_ptr<CoefficientFunction> default_value,
1085
+ const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values);
1086
+
1087
+ shared_ptr<CoefficientFunction> MaterialCF(shared_ptr<CoefficientFunction> default_value,
1088
+ const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values)
1089
+ {
1090
+ return RegionCF(VOL, default_value, region_values);
1091
+ }
1092
+
1093
+ shared_ptr<CoefficientFunction> BoundaryCF(shared_ptr<CoefficientFunction> default_value,
1094
+ const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values)
1095
+ {
1096
+ return RegionCF(BND, default_value, region_values);
1097
+ }
1098
+
1099
+ private:
1100
+ mutable Table<size_t> elements_of_class[4];
1101
+ mutable size_t elements_of_class_timestamp[4] = { 0, 0, 0, 0 };
1102
+ public:
1103
+ const Table<size_t> & GetElementsOfClass(VorB vb = VOL) const; // classification by vertex numbers
1104
+
1105
+ private:
1106
+ Array<bool> higher_integration_order;
1107
+ public:
1108
+ void SetHigherIntegrationOrder(int elnr);
1109
+ void UnSetHigherIntegrationOrder(int elnr);
1110
+
1111
+ // void LoadMesh (const string & filename);
1112
+ // void LoadMesh (istream & str);
1113
+ void SaveMesh (ostream & str) const;
1114
+ void DoArchive(Archive& ar);
1115
+ // void LoadMeshFromString(const string & str);
1116
+
1117
+ // void PrecomputeGeometryData(int intorder);
1118
+
1119
+ /*
1120
+ void InitPointCurve(double red = 1, double green = 0, double blue = 0) const;
1121
+ void AddPointCurvePoint(const Vec<3> & point) const;
1122
+ */
1123
+
1124
+
1125
+ template <int DIMS, int DIMR> friend class Ng_ElementTransformation;
1126
+ template <int DIMS, int DIMR> friend class Ng_ConstElementTransformation;
1127
+
1128
+
1129
+ NgMPI_Comm GetCommunicator () const { return mesh.GetCommunicator(); }
1130
+
1131
+ /**
1132
+ Returns the list of other MPI - processes where node is present.
1133
+ The ordering coincides for all processes.
1134
+ */
1135
+ [[deprecated("Use GetDistantProcs (NodeId) instead!")]]
1136
+ void GetDistantProcs (NodeId node, Array<int> & procs) const;
1137
+
1138
+ /**
1139
+ Returns the global number of the node.
1140
+ Currently, this function works only for vertex-nodes.
1141
+ */
1142
+ /*
1143
+ [[deprecated("should not need global numbers")]]
1144
+ size_t GetGlobalNodeNum (NodeId node) const;
1145
+ */
1146
+
1147
+ size_t GetGlobalVertexNum (int locnum) const;
1148
+
1149
+ FlatArray<int> GetDistantProcs (NodeId node) const
1150
+ {
1151
+ return mesh.GetDistantProcs(StdNodeType(node.GetType(), GetDimension()), node.GetNr());
1152
+ }
1153
+
1154
+ /// Reduces MPI - distributed data associated with mesh-nodes
1155
+ template <typename T>
1156
+ void AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const;
1157
+
1158
+ private:
1159
+ void BuildNeighbours();
1160
+ };
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+ INLINE Ngs_Element ElementIterator :: operator*() const { return ma[ei]; }
1167
+
1168
+ template <VorB VB>
1169
+ INLINE Ngs_Element TElementIterator<VB>::operator*() const
1170
+ {
1171
+ return ma[ElementId(VB,nr)];
1172
+ }
1173
+
1174
+ template <VorB VB, int DIM>
1175
+ INLINE Ngs_Element DimElementIterator<VB,DIM>::operator*() const
1176
+ {
1177
+ return ma.GetElement(T_ElementId<VB,DIM>(nr));
1178
+ }
1179
+
1180
+
1181
+ class Region
1182
+ {
1183
+ shared_ptr<MeshAccess> mesh;
1184
+ VorB vb;
1185
+ shared_ptr<BitArray> mask;
1186
+ public:
1187
+ Region() {}
1188
+ NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, string pattern);
1189
+ NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, const char* pattern) : Region(amesh, avb, string(pattern)) {}
1190
+ NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, const BitArray & amask);
1191
+ NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, bool all = false);
1192
+ Region (const Region &) = default;
1193
+ explicit operator VorB () const { return vb; }
1194
+ VorB VB() const { return vb; }
1195
+ bool IsVolume () const { return vb == VOL; }
1196
+ bool IsBoundary () const { return vb == BND; }
1197
+ bool IsCoDim2() const { return vb == BBND; }
1198
+ const BitArray & Mask() const { return *mask; }
1199
+ BitArray& Mask() { return *mask; }
1200
+ operator const BitArray & () const { return *mask; }
1201
+ shared_ptr<BitArray> MaskPtr() { return mask; }
1202
+ const shared_ptr<MeshAccess> & Mesh() const { return mesh; }
1203
+ void DoArchive(Archive& ar)
1204
+ { ar.Shallow(mesh) & vb & mask; }
1205
+ Region operator+ (const Region & r2) const
1206
+ {
1207
+ return Region (mesh, vb, BitArray(*mask).Or(r2.Mask()));
1208
+ }
1209
+ Region operator- (const Region & r2) const
1210
+ {
1211
+ return Region (mesh, vb, BitArray(*mask).And(BitArray(r2.Mask()).Invert()));
1212
+ }
1213
+ Region operator~ () const
1214
+ {
1215
+ return Region (mesh, vb, BitArray(*mask).Invert());
1216
+ }
1217
+ Region operator+ (const string & pattern2) const
1218
+ {
1219
+ return *this + Region(mesh, vb, pattern2);
1220
+ }
1221
+ Region operator- (const string & pattern2) const
1222
+ {
1223
+ return *this - Region(mesh, vb, pattern2);
1224
+ }
1225
+
1226
+ Region operator* (const Region& r2) const
1227
+ {
1228
+ return Region(mesh, vb, BitArray(*mask).And(r2.Mask()));
1229
+ }
1230
+
1231
+ Region operator* (const string& pattern) const
1232
+ {
1233
+ return *this * Region(mesh, vb, pattern);
1234
+ }
1235
+
1236
+ bool operator==(const Region& other) const;
1237
+ size_t Hash() const;
1238
+
1239
+ // Get adjacent regions of codim other_vb
1240
+ Region GetNeighbours(VorB other_vb);
1241
+ Region GetBoundaries() { return GetNeighbours(VorB(int(vb)+1)); }
1242
+
1243
+ auto GetElements() const
1244
+ {
1245
+ return mesh->Elements(vb)
1246
+ | filter([&](auto ei) { return mask->Test(mesh->GetElIndex(ei)); });
1247
+ }
1248
+ };
1249
+
1250
+
1251
+ shared_ptr<CoefficientFunction>
1252
+ MakeBoundaryFromVolumeCoefficientFunction (shared_ptr<CoefficientFunction> avol_cf);
1253
+
1254
+ shared_ptr<CoefficientFunction>
1255
+ MakeTrafoCF(shared_ptr<CoefficientFunction> func,
1256
+ shared_ptr<CoefficientFunction> trafo,
1257
+ Region region);
1258
+
1259
+
1260
+ NGS_DLL_HEADER
1261
+ shared_ptr<CoefficientFunction> NumElsOnFacetCF ();
1262
+
1263
+
1264
+
1265
+ /**
1266
+ Controls the progress - output.
1267
+ It controls the Netgen - progressbar as well as console progress update.
1268
+ In parallel, all processes must enter and call the Done method.
1269
+ */
1270
+ class ProgressOutput
1271
+ {
1272
+ shared_ptr<MeshAccess> ma;
1273
+ NgMPI_Comm comm;
1274
+ string task;
1275
+ size_t total;
1276
+ double prevtime;
1277
+ bool is_root;
1278
+ bool use_mpi = true;
1279
+ bool done_called;
1280
+
1281
+ static atomic<size_t> cnt;
1282
+ static thread_local size_t thd_cnt;
1283
+ // static thread_local double thd_prev_time;
1284
+ static thread_local size_t thd_prev_time;
1285
+ public:
1286
+ NGS_DLL_HEADER ProgressOutput (shared_ptr<MeshAccess> ama,
1287
+ string atask, size_t atotal);
1288
+ NGS_DLL_HEADER ~ProgressOutput();
1289
+
1290
+ // update thd-local counter, and after some time also atomic node-local cnt
1291
+ NGS_DLL_HEADER void Update();
1292
+ // transfer thd-local counter to atomic node-local cnt
1293
+ NGS_DLL_HEADER static void SumUpLocal();
1294
+ NGS_DLL_HEADER void Update(size_t nr);
1295
+ NGS_DLL_HEADER void Done();
1296
+ // NGS_DLL_HEADER void DoneThread();
1297
+ };
1298
+
1299
+
1300
+
1301
+ /// old style, compatibility for a while
1302
+ template <typename T> [[deprecated("use ma.AllReduceNodalData instead")]]
1303
+ void AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op, const MeshAccess & ma)
1304
+ {
1305
+ ma.AllReduceNodalData (nt, data, op);
1306
+ }
1307
+
1308
+
1309
+ #ifdef PARALLEL
1310
+
1311
+ template <typename T>
1312
+ void MeshAccess::
1313
+ AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const
1314
+ {
1315
+ NgMPI_Comm comm = GetCommunicator();
1316
+ if (comm.Size() <= 1) return;
1317
+
1318
+ Array<int> cnt(comm.Size());
1319
+ cnt = 0;
1320
+ for (auto i : Range(GetNNodes(nt)))
1321
+ for (auto p : GetDistantProcs(Node(nt,i)))
1322
+ cnt[p]++;
1323
+
1324
+ Table<T> dist_data(cnt), recv_data(cnt);
1325
+
1326
+ cnt = 0;
1327
+ for (auto i : Range(GetNNodes(nt)))
1328
+ for (auto p : GetDistantProcs(Node(nt, i)))
1329
+ dist_data[p][cnt[p]++] = data[i];
1330
+
1331
+ NgMPI_Requests requests;
1332
+ for (auto i : cnt.Range())
1333
+ if (cnt[i])
1334
+ {
1335
+ requests += comm.ISend(dist_data[i], i, NG_MPI_TAG_SOLVE);
1336
+ requests += comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE);
1337
+ }
1338
+ requests.WaitAll();
1339
+
1340
+ cnt = 0;
1341
+ auto type = GetMPIType<T>();
1342
+ for (auto i : Range(GetNNodes(nt)))
1343
+ for (auto p : GetDistantProcs(Node(nt, i)))
1344
+ NG_MPI_Reduce_local (&recv_data[p][cnt[p]++],
1345
+ &data[i], 1, type, op);
1346
+ }
1347
+
1348
+
1349
+ #else
1350
+
1351
+ template <typename T>
1352
+ void MeshAccess::
1353
+ AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const { ; }
1354
+
1355
+ #endif
1356
+
1357
+ }
1358
+
1359
+ #endif