ngstrefftz 0.3.2607.dev11__tar.gz → 0.3.2607.dev25__tar.gz

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 (162) hide show
  1. ngstrefftz-0.3.2607.dev25/.github/workflows/build.yml +261 -0
  2. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/CMakeLists.txt +63 -19
  3. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/PKG-INFO +4 -2
  4. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/_version.py +3 -3
  5. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/requirements.txt +0 -2
  6. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/pyproject.toml +7 -3
  7. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/__init__.py +22 -6
  8. ngstrefftz-0.3.2607.dev25/src/aggregatedl2space.cpp +160 -0
  9. ngstrefftz-0.3.2607.dev25/src/aggregatedl2space.hpp +45 -0
  10. ngstrefftz-0.3.2607.dev25/src/dofpatches.hpp +24 -0
  11. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.cpp +877 -696
  12. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.hpp +43 -12
  13. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.cpp +15 -13
  14. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.hpp +1 -0
  15. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufe.hpp +10 -0
  16. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufespace.cpp +56 -6
  17. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufespace.hpp +3 -1
  18. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/python_trefftz.cpp +26 -3
  19. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.cpp +1 -1
  20. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/twavetents.cpp +1 -1
  21. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/twavetents.hpp +1 -1
  22. ngstrefftz-0.3.2607.dev25/test/aggregate_embtrefftz.py +61 -0
  23. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/conforming_trefftz.py +2 -2
  24. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/embt.py +54 -0
  25. ngstrefftz-0.3.2607.dev11/.github/workflows/build.yml +0 -393
  26. ngstrefftz-0.3.2607.dev11/.gitmodules +0 -3
  27. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/.github/workflows/build.yml +0 -76
  28. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/.gitignore +0 -1
  29. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/README.md +0 -129
  30. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -393
  31. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/advection2d.py +0 -75
  32. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -69
  33. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -262
  34. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -54
  35. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -61
  36. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -279
  37. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/euler2d.py +0 -53
  38. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -76
  39. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -68
  40. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -108
  41. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -141
  42. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -183
  43. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -126
  44. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -143
  45. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -186
  46. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -32
  47. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -32
  48. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/horn.py +0 -88
  49. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave2d.py +0 -68
  50. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -83
  51. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave3d.py +0 -75
  52. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -785
  53. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -690
  54. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/_config.yml +0 -37
  55. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/_toc.yml +0 -12
  56. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/assets/css/style.scss +0 -2
  57. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/do +0 -2
  58. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
  59. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/dag.png +0 -0
  60. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/map.png +0 -0
  61. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/ngsTentsLogo.png +0 -0
  62. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
  63. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/index.ipynb +0 -49
  64. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/requirements.txt +0 -107
  65. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/__init__.py +0 -13
  66. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/conslaw/__init__.py +0 -73
  67. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/__init__.py +0 -4
  68. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/_drawtents.py +0 -44
  69. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -98
  70. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/pyproject.toml +0 -55
  71. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/CMakeLists.txt +0 -45
  72. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/advection.cpp +0 -89
  73. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/burgers.cpp +0 -168
  74. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/concurrentqueue.h +0 -3398
  75. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/conservationlaw.hpp +0 -501
  76. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/euler.cpp +0 -492
  77. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/maxwell.cpp +0 -145
  78. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -97
  79. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/paralleldepend.hpp +0 -134
  80. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/python_conslaw.cpp +0 -299
  81. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/python_tents.cpp +0 -139
  82. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/symbolic.cpp +0 -231
  83. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -877
  84. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tents.cpp +0 -1295
  85. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tents.hpp +0 -369
  86. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tentsolver.hpp +0 -140
  87. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -194
  88. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/vis3d.cpp +0 -223
  89. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/vis3d.hpp +0 -35
  90. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/wave.cpp +0 -178
  91. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -39
  92. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_causal_tents.py +0 -132
  93. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_conslaw.py +0 -73
  94. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -44
  95. ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_tentlayers.py +0 -18
  96. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.clang-format +0 -0
  97. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.git-blame-ignore-revs +0 -0
  98. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/fix_auditwheel_policy.py +0 -0
  99. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/Dockerfile +0 -0
  100. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/build_in_docker.sh +0 -0
  101. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/merge.py +0 -0
  102. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/requirements.txt +0 -0
  103. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.gitignore +0 -0
  104. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/CONTRIBUTING.md +0 -0
  105. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/Dockerfile +0 -0
  106. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/LICENSE +0 -0
  107. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/README.md +0 -0
  108. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/Doxyfile.in +0 -0
  109. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/_static/breadcrumbs.html +0 -0
  110. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/_static/css/mytheme.css +0 -0
  111. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/conf.py +0 -0
  112. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/contrib.rst +0 -0
  113. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/docu.rst +0 -0
  114. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/index.rst +0 -0
  115. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/intro.rst +0 -0
  116. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
  117. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
  118. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-ns.ipynb +0 -0
  119. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
  120. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-stokes.ipynb +0 -0
  121. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
  122. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz.ipynb +0 -0
  123. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/helmholtz.ipynb +0 -0
  124. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/index.ipynb +0 -0
  125. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/laplace.ipynb +0 -0
  126. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtelliptic.ipynb +0 -0
  127. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtwave.ipynb +0 -0
  128. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/tunfitted.ipynb +0 -0
  129. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twave.ipynb +0 -0
  130. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twavetents.ipynb +0 -0
  131. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/codemeta.json +0 -0
  132. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.bib +0 -0
  133. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.md +0 -0
  134. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/readme.rst +0 -0
  135. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/airy.cpp +0 -0
  136. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.cpp +0 -0
  137. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.hpp +0 -0
  138. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/condensedg.cpp +0 -0
  139. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/condensedg.hpp +0 -0
  140. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/diffopmapped.hpp +0 -0
  141. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.cpp +0 -0
  142. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.hpp +0 -0
  143. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.hpp +0 -0
  144. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.cpp +0 -0
  145. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/ngsttd.hpp +0 -0
  146. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.cpp +0 -0
  147. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.hpp +0 -0
  148. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufe.cpp +0 -0
  149. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.cpp +0 -0
  150. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.hpp +0 -0
  151. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.cpp +0 -0
  152. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.hpp +0 -0
  153. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.cpp +0 -0
  154. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.hpp +0 -0
  155. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.hpp +0 -0
  156. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.cpp +0 -0
  157. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.hpp +0 -0
  158. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/boxint.py +0 -0
  159. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/dg.py +0 -0
  160. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/embtrefftz_gtest.cpp +0 -0
  161. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/tents.py +0 -0
  162. {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/trefftz.py +0 -0
@@ -0,0 +1,261 @@
1
+ name: build
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ ngsolve_version:
7
+ description: NGSolve version (empty builds the current checkout)
8
+ type: string
9
+ dry_run:
10
+ description: Build and test without uploading to PyPI
11
+ type: boolean
12
+ default: true
13
+ level:
14
+ description: 'build level'
15
+ required: true
16
+ default: 'full'
17
+ type: choice
18
+ options:
19
+ - quick
20
+ - full
21
+ push:
22
+ branches: [main, main-dev]
23
+ release:
24
+ types: [published]
25
+
26
+ permissions:
27
+ contents: read
28
+
29
+ concurrency:
30
+ group: ${{ github.workflow }}
31
+ cancel-in-progress: false
32
+
33
+ jobs:
34
+ prepare:
35
+ name: Prepare release
36
+ runs-on: ubuntu-latest
37
+ outputs:
38
+ version: ${{ steps.release.outputs.version }}
39
+ published: ${{ steps.release.outputs.published }}
40
+ steps:
41
+ - uses: actions/checkout@v6
42
+ if: inputs.ngsolve_version != ''
43
+ with:
44
+ fetch-depth: 0
45
+ - uses: PaulSt/ngsolve-release-watcher@main
46
+ id: release
47
+ with:
48
+ ngsolve_version: ${{ inputs.ngsolve_version }}
49
+ dry_run: ${{ inputs.dry_run }}
50
+ - uses: actions/upload-artifact@v7
51
+ if: inputs.ngsolve_version != ''
52
+ with:
53
+ name: release-pyproject
54
+ path: pyproject.toml
55
+
56
+ check_formatting:
57
+ name: Check Formatting with Clang Format
58
+ runs-on: ubuntu-24.04
59
+ steps:
60
+ - uses: actions/checkout@v6
61
+ with:
62
+ path: "NGSTrefftz"
63
+ fetch-depth: 0
64
+ - uses: RafikFarhad/clang-format-github-action@v4
65
+ with:
66
+ sources: "src/**/*.hpp,src/**/*.cpp,test/**/*.cpp"
67
+ style: file
68
+
69
+ test_linux:
70
+ name: Test on Linux
71
+ needs: prepare
72
+ runs-on: ubuntu-24.04
73
+ steps:
74
+ - uses: actions/checkout@v6
75
+ with:
76
+ fetch-depth: 0
77
+ - uses: actions/setup-python@v6
78
+ with:
79
+ python-version: "3.14"
80
+ - uses: actions/download-artifact@v7
81
+ if: inputs.ngsolve_version != ''
82
+ with:
83
+ name: release-pyproject
84
+ - name: Build and test
85
+ run: |
86
+ sudo apt-get update
87
+ sudo apt-get install -y libgtest-dev libopenblas0-pthread
88
+ python -m pip install . numpy scipy matplotlib
89
+ cmake -S . -B build -DNGSTREFFTZ_USE_GTEST=ON -DCMAKE_BUILD_TYPE=Release
90
+ cmake --build build --parallel 2
91
+ ctest --test-dir build --output-on-failure
92
+
93
+ build_wheels:
94
+ name: Build wheels on ${{ matrix.os }}
95
+ needs: [prepare, test_linux]
96
+ runs-on: ${{ matrix.os }}
97
+ strategy:
98
+ matrix:
99
+ os: [macos-15-intel, ubuntu-latest, windows-2022]
100
+ env:
101
+ CIBW_BUILD: ${{ inputs.level == 'quick' && 'cp314-*' || 'cp310-* cp311-* cp312-* cp313-* cp314-*' }}
102
+ CIBW_ARCHS_WINDOWS: AMD64
103
+ CIBW_ENVIRONMENT_WINDOWS: >
104
+ CMAKE_GENERATOR='Visual Studio 17 2022'
105
+ CMAKE_GENERATOR_PLATFORM=x64
106
+ steps:
107
+ - uses: actions/checkout@v6
108
+ with:
109
+ fetch-tags: true
110
+ fetch-depth: 0
111
+ - uses: actions/download-artifact@v7
112
+ if: inputs.ngsolve_version != ''
113
+ with:
114
+ name: release-pyproject
115
+ - name: Free disk space for Linux wheel build
116
+ if: matrix.os == 'ubuntu-latest'
117
+ run: |
118
+ df -h
119
+ sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc
120
+ sudo apt-get clean
121
+ sudo rm -rf /var/lib/apt/lists/*
122
+ df -h
123
+ - uses: pypa/cibuildwheel@v3.2.1
124
+ env:
125
+ SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ: ${{ needs.prepare.outputs.version }}
126
+ CIBW_ENVIRONMENT_PASS_LINUX: SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ
127
+ CIBW_BUILD_VERBOSITY: 1
128
+ - uses: actions/upload-artifact@v7
129
+ with:
130
+ name: cibw-wheels-${{ matrix.os }}
131
+ path: ./wheelhouse/*.whl
132
+
133
+ build_sdist:
134
+ name: Build source distribution
135
+ if: ${{ inputs.level != 'quick' }}
136
+ needs: [prepare, test_linux]
137
+ runs-on: ubuntu-latest
138
+ container: quay.io/pypa/manylinux_2_28_x86_64
139
+ steps:
140
+ - uses: actions/checkout@v6
141
+ with:
142
+ fetch-tags: true
143
+ fetch-depth: 0
144
+ - uses: actions/download-artifact@v7
145
+ if: inputs.ngsolve_version != ''
146
+ with:
147
+ name: release-pyproject
148
+ - name: Build sdist
149
+ env:
150
+ SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ: ${{ needs.prepare.outputs.version }}
151
+ run: uv tool run --python 3.14 --from build pyproject-build --sdist
152
+ - uses: actions/upload-artifact@v7
153
+ with:
154
+ name: cibw-sdist
155
+ path: dist/*.tar.gz
156
+
157
+ upload_pypi:
158
+ if: ${{ !inputs.dry_run && needs.prepare.outputs.published != 'true' }}
159
+ needs: [prepare, build_wheels, build_sdist]
160
+ runs-on: ubuntu-latest
161
+ environment: pypi
162
+ permissions:
163
+ id-token: write
164
+ steps:
165
+ - uses: actions/download-artifact@v7
166
+ with:
167
+ pattern: cibw-*
168
+ path: dist
169
+ merge-multiple: true
170
+ - uses: pypa/gh-action-pypi-publish@release/v1
171
+ if: github.ref == 'refs/heads/main' || github.event_name == 'release' || inputs.ngsolve_version != ''
172
+ with:
173
+ skip-existing: true
174
+ password: ${{ secrets.PYPI_API_TOKEN }}
175
+ - uses: pypa/gh-action-pypi-publish@release/v1
176
+ if: github.ref == 'refs/heads/main-dev' && inputs.ngsolve_version == ''
177
+ with:
178
+ skip-existing: true
179
+ password: ${{ secrets.PYPI_API_TOKEN }}
180
+ repository-url: https://test.pypi.org/legacy/
181
+
182
+ docker:
183
+ if: inputs.ngsolve_version == ''
184
+ needs: [upload_pypi]
185
+ runs-on: ubuntu-latest
186
+ steps:
187
+ - uses: actions/checkout@v6
188
+ - id: meta
189
+ uses: docker/metadata-action@v6
190
+ with:
191
+ # list of Docker images to use as base name for tags
192
+ images: paulstdocker/ngstrefftz
193
+ # generate Docker tags based on the following events/attributes
194
+ tags: |
195
+ type=ref,event=branch
196
+ type=ref,event=pr
197
+ type=semver,pattern={{version}}
198
+ type=semver,pattern={{major}}.{{minor}}
199
+ - if: github.event_name == 'release' && github.event.action == 'published'
200
+ uses: docker/login-action@v4
201
+ with:
202
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
203
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
204
+ - uses: docker/build-push-action@v7
205
+ with:
206
+ context: .
207
+ file: Dockerfile
208
+ push: ${{ github.event_name == 'release' && github.event.action == 'published' }}
209
+ tags: ${{ steps.meta.outputs.tags }}
210
+
211
+ docs:
212
+ needs: [build_wheels]
213
+ runs-on: ubuntu-latest
214
+ container: python:3.14
215
+ steps:
216
+ - uses: actions/checkout@v6
217
+ with:
218
+ fetch-depth: 0
219
+ path: "NGSTrefftz"
220
+ - uses: actions/download-artifact@v7
221
+ with:
222
+ name: cibw-wheels-ubuntu-latest
223
+ path: wheels
224
+ - name: Install wheel and documentation dependencies
225
+ run: |
226
+ apt update -y && DEBIAN_FRONTEND="noninteractive" apt install -y build-essential git pandoc
227
+ python -m pip install "$GITHUB_WORKSPACE"/wheels/*-cp314-cp314-*.whl -r "$GITHUB_WORKSPACE/NGSTrefftz/docs/requirements.txt"
228
+ - name: Build Sphinx HTML
229
+ run: sphinx-build -b html $GITHUB_WORKSPACE/NGSTrefftz/docs $GITHUB_WORKSPACE/NGSTrefftz/docs/_build/html
230
+ - uses: actions/upload-pages-artifact@v5
231
+ with:
232
+ path: ${{ github.workspace }}/NGSTrefftz/docs/_build/html
233
+
234
+ deploy-docs:
235
+ needs: docs
236
+ permissions:
237
+ pages: write # to deploy to Pages
238
+ id-token: write # to verify the deployment originates from an appropriate source
239
+ environment:
240
+ name: github-pages
241
+ url: ${{ steps.deployment.outputs.page_url }}
242
+ runs-on: ubuntu-latest
243
+ if: github.ref == 'refs/heads/main' && !inputs.dry_run
244
+ steps:
245
+ - id: deployment
246
+ uses: actions/deploy-pages@v5
247
+
248
+ paper:
249
+ runs-on: ubuntu-latest
250
+ if: ${{ inputs.level != 'quick' }}
251
+ name: Paper Draft
252
+ steps:
253
+ - uses: actions/checkout@v6
254
+ - uses: openjournals/openjournals-draft-action@master
255
+ with:
256
+ journal: joss
257
+ paper-path: docs/paper/paper.md
258
+ - uses: actions/upload-artifact@v7
259
+ with:
260
+ name: joss_paper
261
+ path: docs/paper/paper.pdf
@@ -36,10 +36,43 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/cmake_modules)
36
36
 
37
37
  set(addon_name ngstrefftz)
38
38
  project(ngstrefftz)
39
- include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src) # SYSTEM to suppress warnings from headers
40
39
  include(${CMAKE_BINARY_DIR}/cmake_modules/ngsolve_addon.cmake)
40
+ set(NGSTREFFTZ_USE_XFEM AUTO CACHE STRING "Build with xfem support")
41
+ set_property(CACHE NGSTREFFTZ_USE_XFEM PROPERTY STRINGS AUTO ON OFF)
42
+ if(NOT NGSTREFFTZ_USE_XFEM STREQUAL "OFF")
43
+ if(NOT xfem_DIR)
44
+ execute_process(COMMAND ${Python3_EXECUTABLE} -c
45
+ "import importlib.util; from pathlib import Path; print(Path(importlib.util.find_spec('xfem').origin).parent / 'cmake')"
46
+ OUTPUT_VARIABLE xfem_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
47
+ endif()
48
+ find_package(xfem CONFIG QUIET)
49
+ if(xfem_FOUND)
50
+ set(NGSTREFFTZ_USE_XFEM ON)
51
+ elseif(NGSTREFFTZ_USE_XFEM STREQUAL "ON")
52
+ message(FATAL_ERROR "NGSTREFFTZ_USE_XFEM=ON but xfem was not found")
53
+ else()
54
+ set(NGSTREFFTZ_USE_XFEM OFF)
55
+ message(WARNING "xfem not found, building without aggregation support")
56
+ endif()
57
+ endif()
58
+ set(NGSTREFFTZ_USE_NGSTENTS AUTO CACHE STRING "Build with ngstents support")
59
+ set_property(CACHE NGSTREFFTZ_USE_NGSTENTS PROPERTY STRINGS AUTO ON OFF)
60
+ if(NOT NGSTREFFTZ_USE_NGSTENTS STREQUAL "OFF")
61
+ if(NOT ngstents_DIR)
62
+ execute_process(COMMAND ${Python3_EXECUTABLE} -m ngstents.config
63
+ OUTPUT_VARIABLE ngstents_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
64
+ endif()
65
+ find_package(ngstents CONFIG QUIET)
66
+ if(ngstents_FOUND)
67
+ set(NGSTREFFTZ_USE_NGSTENTS ON)
68
+ elseif(NGSTREFFTZ_USE_NGSTENTS STREQUAL "ON")
69
+ message(FATAL_ERROR "NGSTREFFTZ_USE_NGSTENTS=ON but ngstents was not found")
70
+ else()
71
+ set(NGSTREFFTZ_USE_NGSTENTS OFF)
72
+ message(WARNING "ngstents not found, building without tent-pitching support")
73
+ endif()
74
+ endif()
41
75
  add_ngsolve_addon(ngstrefftz
42
- ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
43
76
  src/python_trefftz.cpp
44
77
  src/diffopmapped.hpp
45
78
  src/scalarmappedfe.cpp
@@ -47,11 +80,9 @@ add_ngsolve_addon(ngstrefftz
47
80
  src/trefftzfespace.cpp
48
81
  src/specialcoefficientfunction.cpp
49
82
  src/specialintegrator.cpp
50
- src/twavetents.cpp
51
83
  src/embtrefftz.cpp
52
84
  src/lapack_loader.cpp
53
85
  src/monomialfespace.cpp
54
- src/mesh1dtents.cpp
55
86
  src/condensedg.cpp
56
87
  src/pufe.cpp
57
88
  src/pufespace.cpp
@@ -60,7 +91,17 @@ add_ngsolve_addon(ngstrefftz
60
91
  #src/airy.cpp #for testing, requires boost
61
92
  )
62
93
  target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_EXPORTS)
63
- target_compile_definitions(ngstrefftz PRIVATE NGSTENT_EXPORTS)
94
+ if(NGSTREFFTZ_USE_XFEM)
95
+ target_sources(ngstrefftz PRIVATE src/aggregatedl2space.cpp)
96
+ target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_XFEM)
97
+ target_link_libraries(ngstrefftz PRIVATE xfem::core)
98
+ endif()
99
+ if(NGSTREFFTZ_USE_NGSTENTS)
100
+ target_sources(ngstrefftz PRIVATE src/twavetents.cpp src/mesh1dtents.cpp)
101
+ target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_NGSTENTS)
102
+ target_link_libraries(ngstrefftz PRIVATE ngstents::core)
103
+ endif()
104
+ ngsolve_addon_set_relative_rpath(ngstrefftz "../ngstents" "../xfem")
64
105
  # add dynamic loader library to link libraries (on linux)
65
106
  if(CMAKE_DL_LIBS)
66
107
  target_link_libraries(ngstrefftz PRIVATE ${CMAKE_DL_LIBS})
@@ -74,10 +115,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
74
115
  -Wpedantic
75
116
  -Wno-vla # ngsolve uses VLAs anyway
76
117
  )
77
- set_source_files_properties(
78
- ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
79
- PROPERTIES COMPILE_FLAGS "-w" #suppress all warnings
80
- )
81
118
  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
82
119
  target_compile_options(ngstrefftz PRIVATE
83
120
  -Wall
@@ -86,10 +123,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
86
123
  -Wtype-limits
87
124
  -Wuninitialized
88
125
  )
89
- set_source_files_properties(
90
- ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
91
- PROPERTIES COMPILE_FLAGS "-w" #suppress all warnings
92
- )
93
126
  endif()
94
127
 
95
128
  ### user options
@@ -127,6 +160,8 @@ message("${BoldCyan}
127
160
  Enabled functionality:
128
161
  Doxygen: ........... ${NGSTREFFTZ_BUILD_DOC}
129
162
  GTest: ............. ${NGSTREFFTZ_USE_GTEST}
163
+ ngstents: .......... ${NGSTREFFTZ_USE_NGSTENTS}
164
+ xfem: .............. ${NGSTREFFTZ_USE_XFEM}
130
165
 
131
166
  With 'make install' the package will be installed to: ${CMAKE_INSTALL_PREFIX}
132
167
  Make sure to add it to the python path:
@@ -144,14 +179,23 @@ file(COPY
144
179
  ${CMAKE_SOURCE_DIR}/test/tents.py
145
180
  ${CMAKE_SOURCE_DIR}/test/conforming_trefftz.py
146
181
  ${CMAKE_SOURCE_DIR}/test/boxint.py
182
+ ${CMAKE_SOURCE_DIR}/test/aggregate_embtrefftz.py
147
183
  DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing)
148
- add_test(NAME embtrefftz COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/embt.py)
149
- add_test(NAME conforming_trefftz COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/conforming_trefftz.py)
150
- add_test(NAME trefftz COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/trefftz.py)
151
- add_test(NAME tents COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/tents.py)
152
- add_test(NAME box COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/boxint.py)
184
+ add_test(NAME embtrefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/embt.py)
185
+ add_test(NAME conforming_trefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/conforming_trefftz.py)
186
+ add_test(NAME trefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/trefftz.py)
187
+ set(tests_with_pythonpath embtrefftz conforming_trefftz trefftz box)
188
+ if(NGSTREFFTZ_USE_NGSTENTS)
189
+ add_test(NAME tents COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/tents.py)
190
+ list(APPEND tests_with_pythonpath tents)
191
+ endif()
192
+ add_test(NAME box COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/boxint.py)
193
+ if(NGSTREFFTZ_USE_XFEM)
194
+ add_test(NAME aggregate_embtrefftz COMMAND ${Python3_EXECUTABLE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/aggregate_embtrefftz.py)
195
+ list(APPEND tests_with_pythonpath aggregate_embtrefftz)
196
+ endif()
153
197
  #WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR }
154
- set_tests_properties(embtrefftz trefftz tents
198
+ set_tests_properties(${tests_with_pythonpath}
155
199
  PROPERTIES ENVIRONMENT PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${NGSOLVE_INSTALL_DIR}/${NGSOLVE_INSTALL_DIR_PYTHON}:$ENV{PYTHONPATH})
156
200
 
157
201
  if(NGSTREFFTZ_USE_GTEST)
@@ -1,13 +1,15 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ngstrefftz
3
- Version: 0.3.2607.dev11
3
+ Version: 0.3.2607.dev25
4
4
  Summary: NGSTrefftz is an add-on to NGSolve for Trefftz methods.
5
5
  Author-Email: Paul Stocker <paul.stocker@univie.ac.at>
6
6
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
7
7
  Project-URL: Documentation, https://paulst.github.io/NGSTrefftz
8
8
  Project-URL: Repository, https://github.com/PaulSt/ngstrefftz
9
9
  Requires-Python: >=3.10
10
- Requires-Dist: ngsolve==6.2.2607
10
+ Requires-Dist: ngsolve==6.2.2608
11
+ Requires-Dist: ngstents==0.1.2608rc1
12
+ Requires-Dist: xfem==2.1.2608
11
13
  Description-Content-Type: text/markdown
12
14
 
13
15
  # NGSTrefftz
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.3.2607.dev11'
22
- __version_tuple__ = version_tuple = (0, 3, 2607, 'dev11')
21
+ __version__ = version = '0.3.2607.dev25'
22
+ __version_tuple__ = version_tuple = (0, 3, 2607, 'dev25')
23
23
 
24
- __commit_id__ = commit_id = 'g1f041fc38'
24
+ __commit_id__ = commit_id = 'g2526e1fdf'
@@ -22,5 +22,3 @@ myst_parser>=3.0.1
22
22
  numpy>=2.0.0
23
23
  scipy>=1.13.1
24
24
  webgui-jupyter-widgets>=0.2.35
25
-
26
- # xfem==2.1.2606
@@ -9,7 +9,9 @@ classifiers = [
9
9
  "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
10
10
  ]
11
11
  dependencies = [
12
- "ngsolve==6.2.2607",
12
+ "ngsolve==6.2.2608",
13
+ "ngstents==0.1.2608rc1",
14
+ "xfem==2.1.2608",
13
15
  ]
14
16
 
15
17
  [project.urls]
@@ -18,7 +20,9 @@ Repository = "https://github.com/PaulSt/ngstrefftz"
18
20
 
19
21
  [build-system]
20
22
  requires = [
21
- "ngsolve==6.2.2607",
23
+ "ngsolve==6.2.2608",
24
+ "ngstents==0.1.2608rc1",
25
+ "xfem==2.1.2608",
22
26
  "scikit-build-core>=0.9.0",
23
27
  "pybind11_stubgen",
24
28
  "setuptools>=45",
@@ -43,8 +47,8 @@ local_scheme = "no-local-version"
43
47
  [tool.cibuildwheel]
44
48
  #build-verbosity = 1
45
49
  manylinux-x86_64-image = "cerbsim/manylinux_2_28_x86_64_cuda_12.9"
50
+ test-command = "python -c \"import ngstents; import ngstrefftz\""
46
51
  skip = """
47
- pp*
48
52
  *_i686
49
53
  *musllinux*
50
54
  *win32
@@ -1,4 +1,20 @@
1
1
  import ngsolve
2
+ import sys
3
+
4
+ # xfem registers its DLL directory before loading our extension on Windows.
5
+ if sys.platform == "win32":
6
+ try:
7
+ import xfem as _xfem
8
+ except ModuleNotFoundError as _error:
9
+ if _error.name != "xfem":
10
+ raise
11
+
12
+ try:
13
+ import ngstents as _ngstents
14
+ except ModuleNotFoundError as _error:
15
+ if _error.name != "ngstents":
16
+ raise
17
+
2
18
  from ngsolve.fem import ET,IntegrationRule
3
19
  from ngsolve.comp import L2,BilinearForm,LinearForm,SymbolicBFI,SymbolicLFI,FESpace
4
20
  from ngsolve.fem import CoordCF
@@ -25,7 +41,6 @@ def GetWave(self,U):
25
41
  f += SymbolicLFI(ipfct*v).SetIntegrationRule(eltyp,intrule)
26
42
  f.Assemble()
27
43
  U.vec.data = a.mat.Inverse(inverse='sparsecholesky') * f.vec
28
- # return gfu
29
44
  else:
30
45
  fes = L2(initmesh, order=order-1)**(D+1)
31
46
  u,v = fes.TnT()
@@ -46,8 +61,9 @@ def GetWave(self,U):
46
61
  dbox = BoxDifferentialSymbol()
47
62
  dball = dbox(boxtype=BOXTYPE.BALL)
48
63
 
49
- setattr(TWaveTents1, 'GetWave', GetWave)
50
- setattr(TWaveTents2, 'GetWave', GetWave)
51
- setattr(TWaveTents3, 'GetWave', GetWave)
52
- setattr(QTWaveTents1, 'GetWave', GetWave)
53
- setattr(QTWaveTents2, 'GetWave', GetWave)
64
+ if "TWaveTents1" in globals():
65
+ setattr(TWaveTents1, 'GetWave', GetWave)
66
+ setattr(TWaveTents2, 'GetWave', GetWave)
67
+ setattr(TWaveTents3, 'GetWave', GetWave)
68
+ setattr(QTWaveTents1, 'GetWave', GetWave)
69
+ setattr(QTWaveTents2, 'GetWave', GetWave)
@@ -0,0 +1,160 @@
1
+ #include "aggregatedl2space.hpp"
2
+
3
+ #include <python_comp.hpp>
4
+
5
+ namespace ngcomp
6
+ {
7
+ AggregatedL2Space::AggregatedL2Space (
8
+ shared_ptr<MeshAccess> ama, const Flags &flags,
9
+ shared_ptr<ElementAggregation> aaggregation)
10
+ : MonomialFESpace (ama, Flags (flags).SetFlag (
11
+ "order", flags.GetNumFlag ("order", 0))),
12
+ aggregation (aaggregation)
13
+ {
14
+ type = "aggregatedl2";
15
+ }
16
+
17
+ void AggregatedL2Space::Update ()
18
+ {
19
+ FESpace::Update ();
20
+
21
+ const size_t ne = ma->GetNE (VOL);
22
+ const size_t npatches = aggregation->GetNPatches (true);
23
+ element_to_patch.SetSize (ne);
24
+ element_to_patch = -1;
25
+ centers2.SetSize (npatches);
26
+ centers3.SetSize (npatches);
27
+ scales.SetSize (npatches);
28
+
29
+ Array<size_t> els;
30
+ for (size_t patch = 0; patch < npatches; patch++)
31
+ {
32
+ aggregation->GetPatch (patch, els);
33
+ for (size_t el : els)
34
+ element_to_patch[el] = patch;
35
+ if (D == 2)
36
+ UpdateGeometry<2> (patch, els);
37
+ else
38
+ UpdateGeometry<3> (patch, els);
39
+ }
40
+
41
+ SetNDof (npatches * local_ndof);
42
+ UpdateCouplingDofArray ();
43
+ }
44
+
45
+ void AggregatedL2Space::UpdateCouplingDofArray ()
46
+ {
47
+ ctofdof.SetSize (GetNDof ());
48
+ ctofdof = UNUSED_DOF;
49
+ for (size_t el : Range (ma->GetNE (VOL)))
50
+ if (element_to_patch[el] >= 0 && DefinedOn (ElementId (VOL, el)))
51
+ for (size_t j : Range (local_ndof))
52
+ ctofdof[element_to_patch[el] * local_ndof + j]
53
+ = aggregation->GetElsInNontrivialPatch ()->Test (el)
54
+ ? WIREBASKET_DOF
55
+ : LOCAL_DOF;
56
+ }
57
+
58
+ void AggregatedL2Space::GetDofNrs (ElementId ei, Array<DofId> &dnums) const
59
+ {
60
+ dnums.SetSize0 ();
61
+ if (ei.VB () != VOL || !DefinedOn (ei) || element_to_patch[ei.Nr ()] < 0)
62
+ return;
63
+ const int first = element_to_patch[ei.Nr ()] * local_ndof;
64
+ for (size_t j : Range (local_ndof))
65
+ dnums.Append (first + j);
66
+ }
67
+
68
+ DofPatches AggregatedL2Space::GetDofPatches () const
69
+ {
70
+ size_t npatches = aggregation->GetNPatches (true);
71
+ TableCreator<size_t> elements (npatches);
72
+ Array<size_t> els;
73
+ for (; !elements.Done (); elements++)
74
+ for (size_t p : Range (npatches))
75
+ {
76
+ aggregation->GetPatch (p, els);
77
+ for (size_t el : els)
78
+ elements.Add (p, el);
79
+ }
80
+ DofPatches patches{ elements.MoveTable (),
81
+ Table<DofId> (npatches, local_ndof) };
82
+ auto dofs = patches.dofs.AsArray ();
83
+ for (size_t d : Range (dofs))
84
+ dofs[d] = d;
85
+ return patches;
86
+ }
87
+
88
+ FiniteElement &
89
+ AggregatedL2Space::GetFE (ElementId ei, Allocator &alloc) const
90
+ {
91
+ if (ei.VB () != VOL)
92
+ return MonomialFESpace::GetFE (ei, alloc);
93
+ const int patch = element_to_patch[ei.Nr ()];
94
+ const ELEMENT_TYPE et = ma->GetElType (ei);
95
+ if (patch < 0 || !DefinedOn (ei))
96
+ return SwitchET<ET_TRIG, ET_QUAD, ET_TET, ET_HEX, ET_PRISM, ET_PYRAMID> (
97
+ et, [&alloc] (auto type) -> FiniteElement & {
98
+ return *new (alloc) DummyFE<type.ElementType ()>;
99
+ });
100
+ if (D == 2)
101
+ return *(new (alloc) ScalarMappedElement<2> (local_ndof, order, basismat,
102
+ et, centers2[patch],
103
+ Vec<2> (scales[patch])));
104
+ return *(new (alloc) ScalarMappedElement<3> (local_ndof, order, basismat,
105
+ et, centers3[patch],
106
+ Vec<3> (scales[patch])));
107
+ }
108
+
109
+ template <int DIM>
110
+ void AggregatedL2Space::UpdateGeometry (size_t patch, FlatArray<size_t> els)
111
+ {
112
+ Vec<DIM> center = 0.0;
113
+ size_t npoints = 0;
114
+ for (size_t el : els)
115
+ for (int vertex : ma->GetElVertices (ElementId (VOL, el)))
116
+ {
117
+ center += ma->GetPoint<DIM> (vertex);
118
+ npoints++;
119
+ }
120
+ center *= 1.0 / npoints;
121
+
122
+ double diameter = 0.0;
123
+ for (size_t el : els)
124
+ for (int vertex : ma->GetElVertices (ElementId (VOL, el)))
125
+ diameter
126
+ = max (diameter, L2Norm (ma->GetPoint<DIM> (vertex) - center));
127
+
128
+ if constexpr (DIM == 2)
129
+ centers2[patch] = center;
130
+ else
131
+ centers3[patch] = center;
132
+ scales[patch] = 1.0 / diameter;
133
+ }
134
+
135
+ template void
136
+ AggregatedL2Space::UpdateGeometry<2> (size_t, FlatArray<size_t>);
137
+ template void
138
+ AggregatedL2Space::UpdateGeometry<3> (size_t, FlatArray<size_t>);
139
+ }
140
+
141
+ #ifdef NGS_PYTHON
142
+ void ExportAggregatedL2Space (py::module m)
143
+ {
144
+ using namespace ngcomp;
145
+ py::class_<AggregatedL2Space, shared_ptr<AggregatedL2Space>, FESpace> (
146
+ m, "AggregatedL2Space")
147
+ .def (py::init ([] (shared_ptr<MeshAccess> ma,
148
+ shared_ptr<ElementAggregation> aggregation,
149
+ py::kwargs kwargs) {
150
+ Flags flags = ngcore::CreateFlagsFromKwArgs (kwargs);
151
+ auto fes
152
+ = make_shared<AggregatedL2Space> (ma, flags, aggregation);
153
+ fes->Update ();
154
+ fes->FinalizeUpdate ();
155
+ fes->ConnectAutoUpdate ();
156
+ return fes;
157
+ }),
158
+ py::arg ("mesh"), py::arg ("aggregation"));
159
+ }
160
+ #endif