ngsolve 6.2.2506.post74.dev0__cp314-cp314-macosx_10_15_universal2.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

Files changed (315) hide show
  1. netgen/include/analytic_integrals.hpp +10 -0
  2. netgen/include/arnoldi.hpp +55 -0
  3. netgen/include/bandmatrix.hpp +334 -0
  4. netgen/include/basematrix.hpp +957 -0
  5. netgen/include/basevector.hpp +1268 -0
  6. netgen/include/bdbequations.hpp +2805 -0
  7. netgen/include/bdbintegrator.hpp +1660 -0
  8. netgen/include/bem_diffops.hpp +475 -0
  9. netgen/include/bessel.hpp +1064 -0
  10. netgen/include/bilinearform.hpp +963 -0
  11. netgen/include/bla.hpp +29 -0
  12. netgen/include/blockalloc.hpp +95 -0
  13. netgen/include/blockjacobi.hpp +328 -0
  14. netgen/include/bspline.hpp +116 -0
  15. netgen/include/calcinverse.hpp +141 -0
  16. netgen/include/cg.hpp +368 -0
  17. netgen/include/chebyshev.hpp +44 -0
  18. netgen/include/cholesky.hpp +720 -0
  19. netgen/include/clapack.h +7254 -0
  20. netgen/include/code_generation.hpp +296 -0
  21. netgen/include/coefficient.hpp +2033 -0
  22. netgen/include/coefficient_impl.hpp +19 -0
  23. netgen/include/coefficient_stdmath.hpp +167 -0
  24. netgen/include/commutingAMG.hpp +106 -0
  25. netgen/include/comp.hpp +79 -0
  26. netgen/include/compatibility.hpp +41 -0
  27. netgen/include/complex_wrapper.hpp +73 -0
  28. netgen/include/compressedfespace.hpp +110 -0
  29. netgen/include/contact.hpp +235 -0
  30. netgen/include/diagonalmatrix.hpp +154 -0
  31. netgen/include/differentialoperator.hpp +276 -0
  32. netgen/include/diffop.hpp +1286 -0
  33. netgen/include/diffop_impl.hpp +328 -0
  34. netgen/include/diffopwithfactor.hpp +123 -0
  35. netgen/include/discontinuous.hpp +84 -0
  36. netgen/include/dump.hpp +949 -0
  37. netgen/include/ectypes.hpp +121 -0
  38. netgen/include/eigen.hpp +60 -0
  39. netgen/include/eigensystem.hpp +18 -0
  40. netgen/include/elasticity_equations.hpp +595 -0
  41. netgen/include/elementbyelement.hpp +195 -0
  42. netgen/include/elementtopology.hpp +1760 -0
  43. netgen/include/elementtransformation.hpp +339 -0
  44. netgen/include/evalfunc.hpp +405 -0
  45. netgen/include/expr.hpp +1686 -0
  46. netgen/include/facetfe.hpp +175 -0
  47. netgen/include/facetfespace.hpp +180 -0
  48. netgen/include/facethofe.hpp +111 -0
  49. netgen/include/facetsurffespace.hpp +112 -0
  50. netgen/include/fe_interfaces.hpp +32 -0
  51. netgen/include/fem.hpp +87 -0
  52. netgen/include/fesconvert.hpp +14 -0
  53. netgen/include/fespace.hpp +1449 -0
  54. netgen/include/finiteelement.hpp +286 -0
  55. netgen/include/globalinterfacespace.hpp +77 -0
  56. netgen/include/globalspace.hpp +115 -0
  57. netgen/include/gridfunction.hpp +525 -0
  58. netgen/include/h1amg.hpp +124 -0
  59. netgen/include/h1hofe.hpp +188 -0
  60. netgen/include/h1hofe_impl.hpp +1262 -0
  61. netgen/include/h1hofefo.hpp +148 -0
  62. netgen/include/h1hofefo_impl.hpp +185 -0
  63. netgen/include/h1hofespace.hpp +167 -0
  64. netgen/include/h1lofe.hpp +1240 -0
  65. netgen/include/h1lumping.hpp +41 -0
  66. netgen/include/hcurl_equations.hpp +1381 -0
  67. netgen/include/hcurlcurlfe.hpp +2241 -0
  68. netgen/include/hcurlcurlfespace.hpp +78 -0
  69. netgen/include/hcurlfe.hpp +259 -0
  70. netgen/include/hcurlfe_utils.hpp +107 -0
  71. netgen/include/hcurlhdiv_dshape.hpp +857 -0
  72. netgen/include/hcurlhdivfes.hpp +308 -0
  73. netgen/include/hcurlhofe.hpp +175 -0
  74. netgen/include/hcurlhofe_impl.hpp +1871 -0
  75. netgen/include/hcurlhofespace.hpp +193 -0
  76. netgen/include/hcurllofe.hpp +1146 -0
  77. netgen/include/hdiv_equations.hpp +880 -0
  78. netgen/include/hdivdivfe.hpp +2923 -0
  79. netgen/include/hdivdivsurfacespace.hpp +76 -0
  80. netgen/include/hdivfe.hpp +206 -0
  81. netgen/include/hdivfe_utils.hpp +717 -0
  82. netgen/include/hdivfes.hpp +75 -0
  83. netgen/include/hdivhofe.hpp +447 -0
  84. netgen/include/hdivhofe_impl.hpp +1107 -0
  85. netgen/include/hdivhofefo.hpp +229 -0
  86. netgen/include/hdivhofespace.hpp +177 -0
  87. netgen/include/hdivhosurfacefespace.hpp +106 -0
  88. netgen/include/hdivlofe.hpp +773 -0
  89. netgen/include/hidden.hpp +74 -0
  90. netgen/include/householder.hpp +181 -0
  91. netgen/include/hypre_ams_precond.hpp +123 -0
  92. netgen/include/hypre_precond.hpp +73 -0
  93. netgen/include/integrator.hpp +2012 -0
  94. netgen/include/integratorcf.hpp +253 -0
  95. netgen/include/interpolate.hpp +49 -0
  96. netgen/include/intrule.hpp +2542 -0
  97. netgen/include/intrules_SauterSchwab.hpp +25 -0
  98. netgen/include/irspace.hpp +49 -0
  99. netgen/include/jacobi.hpp +153 -0
  100. netgen/include/kernels.hpp +762 -0
  101. netgen/include/l2hofe.hpp +194 -0
  102. netgen/include/l2hofe_impl.hpp +564 -0
  103. netgen/include/l2hofefo.hpp +542 -0
  104. netgen/include/l2hofespace.hpp +344 -0
  105. netgen/include/la.hpp +38 -0
  106. netgen/include/linearform.hpp +266 -0
  107. netgen/include/matrix.hpp +2140 -0
  108. netgen/include/memusage.hpp +41 -0
  109. netgen/include/meshaccess.hpp +1359 -0
  110. netgen/include/mgpre.hpp +204 -0
  111. netgen/include/mp_coefficient.hpp +145 -0
  112. netgen/include/mptools.hpp +2281 -0
  113. netgen/include/multigrid.hpp +42 -0
  114. netgen/include/multivector.hpp +447 -0
  115. netgen/include/mumpsinverse.hpp +187 -0
  116. netgen/include/mycomplex.hpp +361 -0
  117. netgen/include/ng_lapack.hpp +1661 -0
  118. netgen/include/ngblas.hpp +1232 -0
  119. netgen/include/ngs_defines.hpp +30 -0
  120. netgen/include/ngs_stdcpp_include.hpp +106 -0
  121. netgen/include/ngs_utils.hpp +121 -0
  122. netgen/include/ngsobject.hpp +1019 -0
  123. netgen/include/ngsstream.hpp +113 -0
  124. netgen/include/ngstd.hpp +72 -0
  125. netgen/include/nodalhofe.hpp +96 -0
  126. netgen/include/nodalhofe_impl.hpp +141 -0
  127. netgen/include/normalfacetfe.hpp +223 -0
  128. netgen/include/normalfacetfespace.hpp +98 -0
  129. netgen/include/normalfacetsurfacefespace.hpp +84 -0
  130. netgen/include/order.hpp +251 -0
  131. netgen/include/parallel_matrices.hpp +222 -0
  132. netgen/include/paralleldofs.hpp +340 -0
  133. netgen/include/parallelngs.hpp +23 -0
  134. netgen/include/parallelvector.hpp +269 -0
  135. netgen/include/pardisoinverse.hpp +200 -0
  136. netgen/include/periodic.hpp +129 -0
  137. netgen/include/plateaufespace.hpp +25 -0
  138. netgen/include/pml.hpp +275 -0
  139. netgen/include/pmltrafo.hpp +631 -0
  140. netgen/include/postproc.hpp +142 -0
  141. netgen/include/potentialtools.hpp +22 -0
  142. netgen/include/precomp.hpp +60 -0
  143. netgen/include/preconditioner.hpp +602 -0
  144. netgen/include/prolongation.hpp +377 -0
  145. netgen/include/python_comp.hpp +107 -0
  146. netgen/include/python_fem.hpp +89 -0
  147. netgen/include/python_linalg.hpp +58 -0
  148. netgen/include/python_ngstd.hpp +386 -0
  149. netgen/include/recursive_pol.hpp +4896 -0
  150. netgen/include/recursive_pol_tet.hpp +395 -0
  151. netgen/include/recursive_pol_trig.hpp +492 -0
  152. netgen/include/reorderedfespace.hpp +81 -0
  153. netgen/include/sample_sort.hpp +105 -0
  154. netgen/include/scalarfe.hpp +335 -0
  155. netgen/include/shapefunction_utils.hpp +113 -0
  156. netgen/include/simd_complex.hpp +329 -0
  157. netgen/include/smoother.hpp +253 -0
  158. netgen/include/solve.hpp +89 -0
  159. netgen/include/sparsecholesky.hpp +313 -0
  160. netgen/include/sparsematrix.hpp +1038 -0
  161. netgen/include/sparsematrix_dyn.hpp +90 -0
  162. netgen/include/sparsematrix_impl.hpp +1013 -0
  163. netgen/include/special_matrix.hpp +463 -0
  164. netgen/include/specialelement.hpp +125 -0
  165. netgen/include/statushandler.hpp +33 -0
  166. netgen/include/stringops.hpp +12 -0
  167. netgen/include/superluinverse.hpp +136 -0
  168. netgen/include/symbolicintegrator.hpp +850 -0
  169. netgen/include/symmetricmatrix.hpp +144 -0
  170. netgen/include/tangentialfacetfe.hpp +224 -0
  171. netgen/include/tangentialfacetfespace.hpp +91 -0
  172. netgen/include/tensor.hpp +522 -0
  173. netgen/include/tensorcoefficient.hpp +446 -0
  174. netgen/include/tensorproductintegrator.hpp +113 -0
  175. netgen/include/thcurlfe.hpp +128 -0
  176. netgen/include/thcurlfe_impl.hpp +380 -0
  177. netgen/include/thdivfe.hpp +80 -0
  178. netgen/include/thdivfe_impl.hpp +492 -0
  179. netgen/include/tpdiffop.hpp +461 -0
  180. netgen/include/tpfes.hpp +133 -0
  181. netgen/include/tpintrule.hpp +224 -0
  182. netgen/include/triangular.hpp +465 -0
  183. netgen/include/tscalarfe.hpp +245 -0
  184. netgen/include/tscalarfe_impl.hpp +1029 -0
  185. netgen/include/umfpackinverse.hpp +148 -0
  186. netgen/include/vector.hpp +1273 -0
  187. netgen/include/voxelcoefficientfunction.hpp +41 -0
  188. netgen/include/vtkoutput.hpp +198 -0
  189. netgen/include/vvector.hpp +208 -0
  190. netgen/include/webgui.hpp +92 -0
  191. netgen/libngbla.dylib +0 -0
  192. netgen/libngcomp.dylib +0 -0
  193. netgen/libngfem.dylib +0 -0
  194. netgen/libngla.dylib +0 -0
  195. netgen/libngsbem.dylib +0 -0
  196. netgen/libngsolve.dylib +0 -0
  197. netgen/libngstd.dylib +0 -0
  198. ngsolve/TensorProductTools.py +210 -0
  199. ngsolve/__console.py +94 -0
  200. ngsolve/__expr.py +181 -0
  201. ngsolve/__init__.py +148 -0
  202. ngsolve/__init__.pyi +233 -0
  203. ngsolve/_scikit_build_core_dependencies.py +30 -0
  204. ngsolve/bla.pyi +1153 -0
  205. ngsolve/bvp.py +78 -0
  206. ngsolve/bvp.pyi +32 -0
  207. ngsolve/cmake/NGSolveConfig.cmake +102 -0
  208. ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
  209. ngsolve/cmake/ngsolve-targets.cmake +163 -0
  210. ngsolve/comp/__init__.pyi +5449 -0
  211. ngsolve/comp/pml.pyi +89 -0
  212. ngsolve/config/__init__.py +1 -0
  213. ngsolve/config/__init__.pyi +43 -0
  214. ngsolve/config/__main__.py +4 -0
  215. ngsolve/config/config.py +60 -0
  216. ngsolve/config/config.pyi +45 -0
  217. ngsolve/demos/TensorProduct/__init__.py +0 -0
  218. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  219. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  220. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  221. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  222. ngsolve/demos/__init__.py +0 -0
  223. ngsolve/demos/howto/__init__.py +0 -0
  224. ngsolve/demos/howto/hhj.py +44 -0
  225. ngsolve/demos/howto/hybrid_dg.py +53 -0
  226. ngsolve/demos/howto/mixed.py +30 -0
  227. ngsolve/demos/howto/nonlin.py +29 -0
  228. ngsolve/demos/howto/pickling.py +26 -0
  229. ngsolve/demos/howto/pml.py +31 -0
  230. ngsolve/demos/howto/taskmanager.py +20 -0
  231. ngsolve/demos/howto/tdnns.py +47 -0
  232. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  233. ngsolve/demos/howto/timeDG.py +38 -0
  234. ngsolve/demos/howto/timeDGlap.py +42 -0
  235. ngsolve/demos/howto/timeDGwave.py +61 -0
  236. ngsolve/demos/intro/__init__.py +0 -0
  237. ngsolve/demos/intro/adaptive.py +123 -0
  238. ngsolve/demos/intro/cmagnet.py +59 -0
  239. ngsolve/demos/intro/elasticity.py +76 -0
  240. ngsolve/demos/intro/navierstokes.py +74 -0
  241. ngsolve/demos/intro/poisson.ipynb +170 -0
  242. ngsolve/demos/intro/poisson.py +41 -0
  243. ngsolve/demos/mpi/__init__.py +0 -0
  244. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  245. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  246. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  247. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  248. ngsolve/directsolvers.py +26 -0
  249. ngsolve/directsolvers.pyi +15 -0
  250. ngsolve/eigenvalues.py +364 -0
  251. ngsolve/eigenvalues.pyi +30 -0
  252. ngsolve/fem.pyi +1647 -0
  253. ngsolve/internal.py +89 -0
  254. ngsolve/krylovspace.py +1013 -0
  255. ngsolve/krylovspace.pyi +298 -0
  256. ngsolve/la.pyi +1230 -0
  257. ngsolve/meshes.py +748 -0
  258. ngsolve/ngs2petsc.py +310 -0
  259. ngsolve/ngscxx.py +42 -0
  260. ngsolve/ngslib.so +0 -0
  261. ngsolve/ngstd.pyi +59 -0
  262. ngsolve/nonlinearsolvers.py +203 -0
  263. ngsolve/nonlinearsolvers.pyi +95 -0
  264. ngsolve/preconditioners.py +11 -0
  265. ngsolve/preconditioners.pyi +7 -0
  266. ngsolve/solve.pyi +109 -0
  267. ngsolve/solve_implementation.py +168 -0
  268. ngsolve/solve_implementation.pyi +42 -0
  269. ngsolve/solvers.py +7 -0
  270. ngsolve/solvers.pyi +14 -0
  271. ngsolve/timestepping.py +185 -0
  272. ngsolve/timestepping.pyi +28 -0
  273. ngsolve/timing.py +108 -0
  274. ngsolve/timing.pyi +54 -0
  275. ngsolve/utils.py +167 -0
  276. ngsolve/utils.pyi +273 -0
  277. ngsolve/webgui.py +670 -0
  278. ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
  279. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
  280. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
  281. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
  282. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
  283. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
  284. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
  285. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  286. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
  287. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
  288. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  289. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  290. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  291. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
  292. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  293. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  294. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  295. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  296. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  297. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  298. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  299. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  300. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  301. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  302. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  303. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  304. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  305. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  306. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  307. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  308. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  309. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
  310. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
  311. ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
  312. ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
  313. ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
  314. ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
  315. ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,253 @@
1
+ #ifndef FILE_INTEGRATORCF
2
+ #define FILE_INTEGRATORCF
3
+
4
+
5
+ // WIP, need a bit more design ...
6
+
7
+ #include "coefficient.hpp"
8
+ #include "integrator.hpp"
9
+ #include "symbolicintegrator.hpp"
10
+
11
+ namespace ngfem
12
+ {
13
+ class Integral;
14
+ class DifferentialSymbol
15
+ {
16
+ public:
17
+ VorB vb;
18
+ VorB element_vb = VOL;
19
+ bool skeleton = false;
20
+ optional<variant<BitArray,string>> definedon;
21
+ int bonus_intorder = 0;
22
+ shared_ptr<ngcomp::GridFunction> deformation;
23
+ std::map<ELEMENT_TYPE,shared_ptr<IntegrationRule>> userdefined_intrules;
24
+ shared_ptr<BitArray> definedonelements;
25
+
26
+ DifferentialSymbol (VorB _vb) : vb(_vb) { ; }
27
+ DifferentialSymbol (VorB _vb, VorB _element_vb, bool _skeleton, // const BitArray & _definedon,
28
+ int _bonus_intorder)
29
+ : vb(_vb), element_vb(_element_vb), skeleton(_skeleton), /* definedon(_definedon), */ bonus_intorder(_bonus_intorder) { ; }
30
+
31
+ virtual ~DifferentialSymbol() { }
32
+ virtual shared_ptr<Integral> MakeIntegral(shared_ptr<CoefficientFunction> cf) const
33
+ {
34
+ return make_shared<Integral> (cf, *this);
35
+ }
36
+ };
37
+
38
+
39
+ class Integral
40
+ {
41
+ public:
42
+ shared_ptr<CoefficientFunction> cf;
43
+ DifferentialSymbol dx;
44
+ shared_ptr<Integral> linearization;
45
+ Integral (shared_ptr<CoefficientFunction> _cf,
46
+ DifferentialSymbol _dx)
47
+ : cf(_cf), dx(_dx) { ; }
48
+ virtual ~Integral() { }
49
+
50
+ template <typename TSCAL>
51
+ TSCAL T_Integrate (const ngcomp::MeshAccess & ma,
52
+ FlatVector<TSCAL> element_wise);
53
+
54
+ NGS_DLL_HEADER virtual double Integrate (const ngcomp::MeshAccess & ma,
55
+ FlatVector<double> element_wise);
56
+
57
+ NGS_DLL_HEADER virtual Complex Integrate (const ngcomp::MeshAccess & ma,
58
+ FlatVector<Complex> element_wise);
59
+
60
+ NGS_DLL_HEADER virtual shared_ptr<BilinearFormIntegrator> MakeBilinearFormIntegrator() const;
61
+ NGS_DLL_HEADER virtual shared_ptr<LinearFormIntegrator> MakeLinearFormIntegrator() const;
62
+
63
+ NGS_DLL_HEADER virtual shared_ptr<Integral> CreateSameIntegralType (shared_ptr<CoefficientFunction> _cf)
64
+ {
65
+ return make_shared<Integral> (_cf, dx);
66
+ }
67
+ };
68
+
69
+ inline Integral operator* (double fac, const Integral & cf)
70
+ {
71
+ return Integral (fac * cf.cf, cf.dx);
72
+ }
73
+
74
+ inline Integral operator* (Complex fac, const Integral & cf)
75
+ {
76
+ return Integral (fac * cf.cf, cf.dx);
77
+ }
78
+
79
+
80
+ inline ostream & operator<< (ostream & ost, const Integral & igl)
81
+ {
82
+ ost << *igl.cf << " " << igl.dx.vb << endl;
83
+ return ost;
84
+ }
85
+
86
+ class SumOfIntegrals
87
+ {
88
+ public:
89
+ Array<shared_ptr<Integral>> icfs;
90
+ Array<shared_ptr<Integral>> linearization_icfs;
91
+
92
+ SumOfIntegrals() = default;
93
+ SumOfIntegrals (shared_ptr<Integral> icf)
94
+ { icfs += icf; }
95
+
96
+ auto begin() const { return icfs.begin(); }
97
+ auto end() const { return icfs.end(); }
98
+
99
+ shared_ptr<SumOfIntegrals>
100
+ Replace (std::map<shared_ptr<CoefficientFunction>, shared_ptr<CoefficientFunction>> replace)
101
+
102
+ {
103
+ auto repl = make_shared<SumOfIntegrals>();
104
+ CoefficientFunction::T_Transform transform;
105
+ transform.replace = replace;
106
+ for (auto & icf : icfs)
107
+ repl->icfs += icf->CreateSameIntegralType (icf->cf->Transform(transform));
108
+ return repl;
109
+ }
110
+
111
+ Array<shared_ptr<ProxyFunction>> GetProxies (bool trialproxies)
112
+ {
113
+ Array<shared_ptr<ProxyFunction>> proxies;
114
+
115
+ for (auto & icf : icfs)
116
+ icf->cf->TraverseTree
117
+ ( [&] (CoefficientFunction & nodecf)
118
+ {
119
+ auto proxy = dynamic_pointer_cast<ProxyFunction> ((&nodecf)->shared_from_this());
120
+ if (proxy)
121
+ {
122
+ if (proxy->IsTrialFunction() == trialproxies)
123
+ {
124
+ if (!proxies.Contains(proxy))
125
+ proxies.Append(proxy);
126
+ }
127
+ }
128
+ });
129
+
130
+ return proxies;
131
+ }
132
+
133
+ shared_ptr<SumOfIntegrals>
134
+ Diff (shared_ptr<CoefficientFunction> var,
135
+ shared_ptr<CoefficientFunction> dir) const
136
+ {
137
+ auto deriv = make_shared<SumOfIntegrals>();
138
+ for (auto & icf : icfs)
139
+ deriv->icfs += icf->CreateSameIntegralType (icf->cf->Diff(var.get(), dir));
140
+ return deriv;
141
+ }
142
+
143
+ shared_ptr<SumOfIntegrals>
144
+ DiffShape (shared_ptr<CoefficientFunction> dir) const
145
+ {
146
+ auto deriv = make_shared<SumOfIntegrals>();
147
+ auto grad = dir->Operator("grad");
148
+ if (!grad)
149
+ throw Exception("In SumOfIntegrals::DiffShape: dir does not have a grad operator");
150
+ auto divdir = TraceCF(grad);
151
+ auto sgrad = dynamic_pointer_cast<ProxyFunction>(grad)->Trace();
152
+ auto sdivdir = TraceCF(sgrad);
153
+
154
+ auto tang = TangentialVectorCF(dir->Dimension(), false) -> Reshape(dir->Dimension(), 1);
155
+ auto bsdivdir = InnerProduct(sgrad*tang,tang);
156
+
157
+ DiffShapeCF shape;
158
+ //cout << "should add Eulerian here" << endl;
159
+
160
+ for (auto & icf : icfs)
161
+ {
162
+ switch (icf->dx.vb)
163
+ {
164
+ case VOL:
165
+ if (icf->dx.element_vb == VOL)
166
+ deriv->icfs += icf->CreateSameIntegralType ( icf->cf->Diff(&shape, dir) + divdir*icf->cf);
167
+ else
168
+ throw Exception("In DiffShape: for vb=VOL only element_vb=VOL implemented!");
169
+ break;
170
+ case BND:
171
+ if (icf->dx.element_vb == VOL)
172
+ deriv->icfs += icf->CreateSameIntegralType ( icf->cf->Diff(&shape, dir) + sdivdir*icf->cf);
173
+ else if (icf->dx.element_vb == BND && dir->Dimension() == 3)
174
+ deriv->icfs += icf->CreateSameIntegralType ( icf->cf->Diff(&shape, dir) + bsdivdir*icf->cf);
175
+ else if (icf->dx.element_vb == BND && dir->Dimension() == 2)
176
+ deriv->icfs += icf->CreateSameIntegralType ( icf->cf->Diff(&shape, dir));
177
+ else
178
+ throw Exception("In DiffShape: for vb=BND something went wrong!");
179
+ break;
180
+ default:
181
+ throw Exception("In DiffShape: for vb="+ToString(icf->dx.vb)+" and element_vb="+ToString(icf->dx.element_vb) + " not implemented!");
182
+ }
183
+ }
184
+ return deriv;
185
+ }
186
+
187
+
188
+ shared_ptr<SumOfIntegrals>
189
+ Compile (bool realcompile, bool wait, bool keep_files) const
190
+ {
191
+ auto compiled = make_shared<SumOfIntegrals>();
192
+ for (auto & icf : icfs)
193
+ compiled->icfs += icf->CreateSameIntegralType (::ngfem::Compile (icf->cf, realcompile, 2, wait, keep_files));
194
+ return compiled;
195
+ }
196
+
197
+ void SetDefinedOnElements(shared_ptr<BitArray> defon)
198
+ {
199
+ for(auto& icf : icfs)
200
+ icf->dx.definedonelements = defon;
201
+ }
202
+ };
203
+
204
+ inline auto operator+ (const SumOfIntegrals & c1, const SumOfIntegrals & c2)
205
+ {
206
+ SumOfIntegrals sum;
207
+ for (auto & ci : c1.icfs) sum.icfs += ci;
208
+ for (auto & ci : c2.icfs) sum.icfs += ci;
209
+ return sum;
210
+ }
211
+
212
+ inline auto operator* (double fac, SumOfIntegrals c1)
213
+ {
214
+ SumOfIntegrals faccf;
215
+ for (auto & ci : c1.icfs) faccf.icfs += ci->CreateSameIntegralType(fac*(ci->cf));
216
+ return faccf;
217
+ }
218
+
219
+ inline auto operator* (Complex fac, SumOfIntegrals c1)
220
+ {
221
+ SumOfIntegrals faccf;
222
+ for (auto & ci : c1.icfs) faccf.icfs += ci->CreateSameIntegralType(fac*(ci->cf));
223
+ return faccf;
224
+ }
225
+
226
+ inline auto operator- (const SumOfIntegrals & c1, const SumOfIntegrals & c2)
227
+ {
228
+ return c1 + (-1)*c2;
229
+ }
230
+
231
+ inline ostream & operator<< (ostream & ost, const SumOfIntegrals & igls)
232
+ {
233
+ for (auto & igl : igls.icfs)
234
+ ost << *igl;
235
+ return ost;
236
+ }
237
+
238
+ class Variation
239
+ {
240
+ public:
241
+ shared_ptr<SumOfIntegrals> igls;
242
+ Variation (shared_ptr<SumOfIntegrals> _igls) : igls(_igls) { ; }
243
+
244
+ auto Compile (bool realcompile, bool wait, bool keep_files) const
245
+ {
246
+ return Variation(igls->Compile(realcompile, wait, keep_files));
247
+ }
248
+ };
249
+
250
+ }
251
+
252
+
253
+ #endif
@@ -0,0 +1,49 @@
1
+ #ifndef FILE_NGS_INTERPOLATE
2
+ #define FILE_NGS_INTERPOLATE
3
+
4
+ /**********************************************************************/
5
+ /* File: interpolate.cpp */
6
+ /* Author: L Kogler, M Neunteufel, J Schoeberl */
7
+ /* Date: June 2020 */
8
+ /**********************************************************************/
9
+
10
+ /*
11
+ Interpolation of CoefficientFunctions using
12
+ dual shapes
13
+ */
14
+
15
+ #include "fespace.hpp"
16
+
17
+ namespace ngcomp
18
+ {
19
+
20
+ class InterpolateProxy : public ProxyFunction
21
+ {
22
+ protected:
23
+ shared_ptr<CoefficientFunction> func;
24
+ shared_ptr<FESpace> space;
25
+ bool testfunction;
26
+ shared_ptr<DifferentialOperator> final_diffop;
27
+ int bonus_intorder;
28
+ public:
29
+ InterpolateProxy (shared_ptr<CoefficientFunction> func,
30
+ shared_ptr<FESpace> aspace,
31
+ bool testfunction,
32
+ shared_ptr<DifferentialOperator> diffop,
33
+ int bonus_intorder=0, VorB vb=VOL);
34
+
35
+ shared_ptr<ProxyFunction> GetAdditionalProxy (string name) const override;
36
+
37
+ shared_ptr<CoefficientFunction> Diff (const CoefficientFunction * var, shared_ptr<CoefficientFunction> dir) const override;
38
+ };
39
+
40
+
41
+ NGS_DLL_HEADER
42
+ shared_ptr<CoefficientFunction> InterpolateCF (shared_ptr<CoefficientFunction> func, shared_ptr<FESpace> space,
43
+ int bonus_intorder=0,
44
+ optional<string> opname=nullopt);
45
+
46
+
47
+ }
48
+
49
+ #endif // FILE_NGS_INTERPOLATE