ngstrefftz 0.3.2406.dev41__tar.gz → 0.3.2406.dev89__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 (155) hide show
  1. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/build.yml +13 -11
  2. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/CMakeLists.txt +10 -14
  3. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/Dockerfile +1 -1
  4. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/PKG-INFO +13 -4
  5. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/README.md +10 -1
  6. ngstrefftz-0.3.2406.dev89/_version.py +21 -0
  7. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/conf.py +1 -0
  8. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/docu.rst +5 -1
  9. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-adv.ipynb +5 -3
  10. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-helm.ipynb +3 -3
  11. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-poi.ipynb +81 -5
  12. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-stokes.ipynb +4 -4
  13. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-wave.ipynb +3 -3
  14. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz.ipynb +38 -31
  15. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/index.ipynb +1 -1
  16. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/laplace.ipynb +1 -1
  17. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/pyproject.toml +4 -4
  18. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/__init__.py +1 -1
  19. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/boxintegral.cpp +87 -38
  20. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/boxintegral.hpp +40 -17
  21. ngstrefftz-0.3.2406.dev89/src/embtrefftz.cpp +1424 -0
  22. ngstrefftz-0.3.2406.dev89/src/embtrefftz.hpp +182 -0
  23. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/planewavefe.cpp +30 -17
  24. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/trefftzfespace.cpp +6 -10
  25. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/boxint.py +12 -10
  26. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/conforming_trefftz.py +139 -79
  27. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/dg.py +80 -0
  28. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/embt.py +176 -141
  29. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/embtrefftz_gtest.cpp +32 -4
  30. ngstrefftz-0.3.2406.dev41/_version.py +0 -16
  31. ngstrefftz-0.3.2406.dev41/src/embtrefftz.cpp +0 -1449
  32. ngstrefftz-0.3.2406.dev41/src/embtrefftz.hpp +0 -190
  33. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.clang-format +0 -0
  34. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/fix_auditwheel_policy.py +0 -0
  35. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/Dockerfile +0 -0
  36. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/build_in_docker.sh +0 -0
  37. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/merge.py +0 -0
  38. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/requirements.txt +0 -0
  39. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.gitignore +0 -0
  40. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.gitmodules +0 -0
  41. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/CONTRIBUTING.md +0 -0
  42. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/LICENSE +0 -0
  43. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/Doxyfile.in +0 -0
  44. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/_static/breadcrumbs.html +0 -0
  45. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/_static/css/mytheme.css +0 -0
  46. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/contrib.rst +0 -0
  47. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/index.rst +0 -0
  48. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/intro.rst +0 -0
  49. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/helmholtz.ipynb +0 -0
  50. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/qtelliptic.ipynb +0 -0
  51. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/qtwave.ipynb +0 -0
  52. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/tunfitted.ipynb +0 -0
  53. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/twave.ipynb +0 -0
  54. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/twavetents.ipynb +0 -0
  55. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/codemeta.json +0 -0
  56. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/paper.bib +0 -0
  57. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/paper.md +0 -0
  58. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/readme.rst +0 -0
  59. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/requirements.txt +0 -0
  60. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/.github/workflows/build.yml +0 -0
  61. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/.gitignore +0 -0
  62. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/README.md +0 -0
  63. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -0
  64. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/advection2d.py +0 -0
  65. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -0
  66. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -0
  67. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -0
  68. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -0
  69. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -0
  70. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/euler2d.py +0 -0
  71. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -0
  72. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -0
  73. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -0
  74. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -0
  75. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -0
  76. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -0
  77. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -0
  78. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -0
  79. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -0
  80. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -0
  81. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/horn.py +0 -0
  82. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave2d.py +0 -0
  83. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -0
  84. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave3d.py +0 -0
  85. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -0
  86. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/INDEX.ipynb +0 -0
  87. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -0
  88. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/_config.yml +0 -0
  89. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/_toc.yml +0 -0
  90. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/conf.py +0 -0
  91. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
  92. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/dag.png +0 -0
  93. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/map.png +0 -0
  94. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
  95. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/index.rst +0 -0
  96. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/intro.md +0 -0
  97. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/readme.rst +0 -0
  98. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/requirements.txt +0 -0
  99. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/__init__.py +0 -0
  100. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/conslaw/__init__.py +0 -0
  101. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/__init__.py +0 -0
  102. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/_drawtents.py +0 -0
  103. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -0
  104. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/pyproject.toml +0 -0
  105. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/CMakeLists.txt +0 -0
  106. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/advection.cpp +0 -0
  107. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/burgers.cpp +0 -0
  108. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/concurrentqueue.h +0 -0
  109. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/conservationlaw.hpp +0 -0
  110. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/euler.cpp +0 -0
  111. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/maxwell.cpp +0 -0
  112. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -0
  113. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/paralleldepend.hpp +0 -0
  114. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/python_conslaw.cpp +0 -0
  115. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/python_tents.cpp +0 -0
  116. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/symbolic.cpp +0 -0
  117. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -0
  118. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tents.cpp +0 -0
  119. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tents.hpp +0 -0
  120. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tentsolver.hpp +0 -0
  121. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -0
  122. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/vis3d.cpp +0 -0
  123. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/vis3d.hpp +0 -0
  124. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/wave.cpp +0 -0
  125. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -0
  126. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_causal_tents.py +0 -0
  127. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_conslaw.py +0 -0
  128. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -0
  129. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_tentlayers.py +0 -0
  130. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/airy.cpp +0 -0
  131. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/condensedg.cpp +0 -0
  132. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/condensedg.hpp +0 -0
  133. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/diffopmapped.hpp +0 -0
  134. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/mesh1dtents.cpp +0 -0
  135. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/mesh1dtents.hpp +0 -0
  136. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/monomialfespace.cpp +0 -0
  137. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/monomialfespace.hpp +0 -0
  138. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/ngsttd.hpp +0 -0
  139. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/planewavefe.hpp +0 -0
  140. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufe.cpp +0 -0
  141. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufe.hpp +0 -0
  142. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufespace.cpp +0 -0
  143. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufespace.hpp +0 -0
  144. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/python_trefftz.cpp +0 -0
  145. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/scalarmappedfe.cpp +0 -0
  146. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/scalarmappedfe.hpp +0 -0
  147. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialcoefficientfunction.cpp +0 -0
  148. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialcoefficientfunction.hpp +0 -0
  149. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialintegrator.cpp +0 -0
  150. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialintegrator.hpp +0 -0
  151. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/trefftzfespace.hpp +0 -0
  152. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/twavetents.cpp +0 -0
  153. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/twavetents.hpp +0 -0
  154. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/tents.py +0 -0
  155. {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/trefftz.py +0 -0
@@ -73,8 +73,8 @@ jobs:
73
73
  - name: install ngsolve
74
74
  run: |
75
75
  cd NGSTrefftz
76
- pip install numpy scipy mkl-devel==2024.* mkl==2024.*
77
- pip install --pre ngsolve
76
+ pip install numpy scipy mkl-devel==2025.* mkl==2025.*
77
+ pip install ngsolve
78
78
  - name: build ngstrefftz gtest
79
79
  run: |
80
80
  mkdir $GITHUB_WORKSPACE/NGSTrefftz/make
@@ -117,9 +117,12 @@ jobs:
117
117
  fetch-depth: 0
118
118
  - name: Build wheels
119
119
  if: ${{ matrix.doit }}
120
- uses: pypa/cibuildwheel@v2.22.0
120
+ uses: pypa/cibuildwheel@v2.23.2
121
121
  env:
122
122
  CIBW_BUILD_VERBOSITY: 1
123
+ - name: Setup tmate session
124
+ if: ${{ failure() }}
125
+ uses: mxschmitt/action-tmate@v3
123
126
  - uses: actions/upload-artifact@v4
124
127
  if: ${{ matrix.doit }}
125
128
  with:
@@ -179,16 +182,16 @@ jobs:
179
182
  uses: actions/checkout@v4
180
183
  - name: Docker meta
181
184
  id: meta
182
- uses: docker/metadata-action@v3
185
+ uses: docker/metadata-action@v5
183
186
  with:
184
187
  # list of Docker images to use as base name for tags
185
188
  images: paulstdocker/ngstrefftz
186
189
  # generate Docker tags based on the following events/attributes
187
- tags: type=semver,pattern={{version}}
188
- - name: Set up QEMU
189
- uses: docker/setup-qemu-action@v3
190
- - name: Set up Docker Buildx
191
- uses: docker/setup-buildx-action@v3
190
+ tags: |
191
+ type=ref,event=branch
192
+ type=ref,event=pr
193
+ type=semver,pattern={{version}}
194
+ type=semver,pattern={{major}}.{{minor}}
192
195
  - name: Login to DockerHub
193
196
  uses: docker/login-action@v3
194
197
  if: github.event_name == 'release' && github.event.action == 'created'
@@ -196,7 +199,7 @@ jobs:
196
199
  username: ${{ secrets.DOCKERHUB_USERNAME }}
197
200
  password: ${{ secrets.DOCKERHUB_TOKEN }}
198
201
  - name: Build and push
199
- uses: docker/build-push-action@v5
202
+ uses: docker/build-push-action@v6
200
203
  with:
201
204
  context: .
202
205
  file: "Dockerfile"
@@ -265,7 +268,6 @@ jobs:
265
268
  uses: sphinx-notes/pages@v2
266
269
  with:
267
270
  repository_path: "NGSTrefftz"
268
- publish: false
269
271
  #requirements_path: ./docs/requirements.txt
270
272
  - name: Download pyodide stuff
271
273
  if: false
@@ -10,9 +10,9 @@ if(NOT WIN32)
10
10
  set(BoldWhite "${Esc}[1;37m")
11
11
  endif()
12
12
 
13
- set(ngsolve_addon_commit_hash 379d1efbd3a95001da7ca0d7005ae2c9eb892653)
13
+ set(ngsolve_addon_commit_hash refs/heads/main)
14
14
  file(DOWNLOAD https://raw.githubusercontent.com/NGSolve/ngsolve-addon-template/${ngsolve_addon_commit_hash}/ngsolve_addon.cmake ${CMAKE_BINARY_DIR}/cmake_modules/ngsolve_addon.cmake)
15
- set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_BINARY_DIR}/cmake_modules")
15
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/cmake_modules)
16
16
 
17
17
  ### ngstrefftz
18
18
 
@@ -70,7 +70,7 @@ set(NGSTREFFTZ_USE_LAPACK ${NGSOLVE_USE_LAPACK} CACHE BOOL "Try to use lapack fr
70
70
  if (NGSTREFFTZ_USE_MKL)
71
71
  file(DOWNLOAD
72
72
  https://raw.githubusercontent.com/NGSolve/ngsolve/master/cmake/cmake_modules/FindMKL.cmake
73
- "${CMAKE_BINARY_DIR}/cmake_modules/FindMKL.cmake")
73
+ ${CMAKE_BINARY_DIR}/cmake_modules/FindMKL.cmake)
74
74
 
75
75
  #file(COPY ${CMAKE_SOURCE_DIR}/FindMKL.cmake DESTINATION
76
76
  #"${CMAKE_BINARY_DIR}/cmake_modules/FindMKL.cmake")
@@ -111,18 +111,14 @@ if (NGSTREFFTZ_USE_MKL)
111
111
  endif()
112
112
  endif()
113
113
 
114
- file(WRITE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/findmklconf.py
115
- "from contextlib import suppress;import importlib.metadata; \
116
- [print( f.locate().parent.resolve().absolute().as_posix()) \
117
- if f.match('MKLConfig.cmake') else 0 for f in importlib.metadata.files('mkl-devel')]")
118
- execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/findmklconf.py
119
- ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MKL_CONF_FROM_PY)
114
+ file(WRITE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/findmklconf.py "from contextlib import suppress;import importlib.metadata; [print( f.locate().parent.resolve().absolute().as_posix()) if f.match('MKLConfig.cmake') else 0 for f in importlib.metadata.files('mkl-devel')]")
115
+ execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/findmklconf.py ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MKL_CONF_FROM_PY)
120
116
  if(MKL_CONF_FROM_PY)
121
117
  message(STATUS "MKL_CONF_FROM_PY=${MKL_CONF_FROM_PY}")
122
118
  message(STATUS "pylibdir=${python3_library_dir}")
123
- set(MKL_ROOT "${MKL_CONF_FROM_PY}/../../.." CACHE PATH "MKL root directory" )
124
- set(MKL_LIBRARY "${MKL_ROOT}/lib/libmkl_rt.so.2" CACHE PATH "MKL library" )
125
- set(MKL_INCLUDE_DIR "${MKL_ROOT}/include" CACHE PATH "MKL include directory" )
119
+ set(MKL_ROOT ${MKL_CONF_FROM_PY}/../../.. CACHE PATH "MKL root directory" )
120
+ set(MKL_LIBRARY ${MKL_ROOT}/lib/libmkl_rt.so.2 CACHE PATH "MKL library" )
121
+ set(MKL_INCLUDE_DIR ${MKL_ROOT}/include CACHE PATH "MKL include directory" )
126
122
  endif()
127
123
  #set(MKL_VERSION_H "${MKL_ROOT}/include/mkl_version.h")
128
124
 
@@ -175,7 +171,7 @@ if (NGSTREFFTZ_BUILD_DOC)
175
171
  endif (NGSTREFFTZ_BUILD_DOC)
176
172
 
177
173
  ### install
178
- set_target_properties(ngstrefftz PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/ngstrefftz")
174
+ set_target_properties(ngstrefftz PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/ngstrefftz)
179
175
  file(COPY ${CMAKE_SOURCE_DIR}/src/__init__.py DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/ngstrefftz)
180
176
  set(install_dir ${ADDON_INSTALL_DIR_PYTHON}/ngstrefftz)
181
177
  install(TARGETS ngstrefftz DESTINATION ${install_dir})
@@ -218,7 +214,7 @@ add_test(NAME tents COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
218
214
  add_test(NAME box COMMAND python3 -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/boxint.py)
219
215
  #WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR }
220
216
  set_tests_properties(embtrefftz trefftz tents
221
- PROPERTIES ENVIRONMENT "PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${NGSOLVE_INSTALL_DIR}/${NGSOLVE_INSTALL_DIR_PYTHON}:$ENV{PYTHONPATH}")
217
+ PROPERTIES ENVIRONMENT PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${NGSOLVE_INSTALL_DIR}/${NGSOLVE_INSTALL_DIR_PYTHON}:$ENV{PYTHONPATH})
222
218
 
223
219
  if(NGSTREFFTZ_USE_GTEST)
224
220
  #target_compile_options(_trefftz PRIVATE -Wall)# -Wextra -Wpedantic)
@@ -7,7 +7,7 @@ WORKDIR /home/app
7
7
  #RUN cd /home/app/ngstrefftz/docs && pip install -r requirements.txt
8
8
  #RUN cd /home/app/ngstrefftz/docs && sphinx-build -M html . _build -vvv
9
9
 
10
- RUN pip install ngstrefftz
10
+ RUN pip install ngstrefftz --pre
11
11
  ENV PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.10/site-packages/
12
12
  ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
13
13
 
@@ -1,13 +1,13 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: ngstrefftz
3
- Version: 0.3.2406.dev41
3
+ Version: 0.3.2406.dev89
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.8
10
- Requires-Dist: ngsolve>=6.2.2406.post134.dev1
10
+ Requires-Dist: ngsolve==6.2.2501
11
11
  Description-Content-Type: text/markdown
12
12
 
13
13
  # NGSTrefftz
@@ -62,6 +62,10 @@ pip install ngsolve --pre
62
62
  * [ngsolve](https://www.ngsolve.org) >= 6.2 (to access the newest features the nightly version of NGSolve works best)
63
63
 
64
64
  ## News
65
+ ⚠️ Apr, 2025: `TrefftzEmbedding` has a new interface, please check the documentation for details.
66
+
67
+ 🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm)
68
+
65
69
  ⚠️ Oct, 2022: With v0.2.0 the git history has undergone a major cleanup, please make sure to clone the repo anew.
66
70
 
67
71
  🚀 Oct, 2022: New and improved implementation of the embedded Trefftz method via `EmbeddedTrefftzFES`!
@@ -76,7 +80,7 @@ pip install ngsolve --pre
76
80
 
77
81
  🚀 Nov, 2021: NGSTrefftz now comes in a docker and with binder notebooks!
78
82
 
79
- ## Papers using the code
83
+ ## Publications using the code
80
84
  * *A unified framework for Trefftz-like discretization methods*
81
85
  Philip L. Lederer, Christoph Lehrenfeld, Paul Stocker, Igor Voulis
82
86
  [![arXiv](https://img.shields.io/badge/arXiv-2412.00806-b31b1b.svg)](https://arxiv.org/abs/2412.00806)
@@ -101,6 +105,11 @@ Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
101
105
  * *Tent pitching and Trefftz-DG method for the acoustic wave equation*
102
106
  Ilaria Perugia, Joachim Schöberl, Paul Stocker, Christoph Wintersteiger
103
107
  [![arXiv](https://img.shields.io/badge/arXiv-1907.02367-b31b1b.svg)](https://arxiv.org/abs/1907.02367)
108
+ * *Space-time Trefftz DG methods for parabolic PDEs*
109
+ Constanze Heil, [Master's thesis](https://doi.org/10.25625/ZSA8UU/2L4C1E)
110
+ * *Embedded Trefftz Trace DG Methods for PDEs on unfitted Surfaces*
111
+ Erik Schlesinger, [Master's thesis](https://doi.org/10.25625/QTOPWD/93ZYRQ)
112
+
104
113
 
105
114
  If you are using `ngstrefftz` in your academic work, please consider citing
106
115
  ```
@@ -50,6 +50,10 @@ pip install ngsolve --pre
50
50
  * [ngsolve](https://www.ngsolve.org) >= 6.2 (to access the newest features the nightly version of NGSolve works best)
51
51
 
52
52
  ## News
53
+ ⚠️ Apr, 2025: `TrefftzEmbedding` has a new interface, please check the documentation for details.
54
+
55
+ 🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm)
56
+
53
57
  ⚠️ Oct, 2022: With v0.2.0 the git history has undergone a major cleanup, please make sure to clone the repo anew.
54
58
 
55
59
  🚀 Oct, 2022: New and improved implementation of the embedded Trefftz method via `EmbeddedTrefftzFES`!
@@ -64,7 +68,7 @@ pip install ngsolve --pre
64
68
 
65
69
  🚀 Nov, 2021: NGSTrefftz now comes in a docker and with binder notebooks!
66
70
 
67
- ## Papers using the code
71
+ ## Publications using the code
68
72
  * *A unified framework for Trefftz-like discretization methods*
69
73
  Philip L. Lederer, Christoph Lehrenfeld, Paul Stocker, Igor Voulis
70
74
  [![arXiv](https://img.shields.io/badge/arXiv-2412.00806-b31b1b.svg)](https://arxiv.org/abs/2412.00806)
@@ -89,6 +93,11 @@ Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
89
93
  * *Tent pitching and Trefftz-DG method for the acoustic wave equation*
90
94
  Ilaria Perugia, Joachim Schöberl, Paul Stocker, Christoph Wintersteiger
91
95
  [![arXiv](https://img.shields.io/badge/arXiv-1907.02367-b31b1b.svg)](https://arxiv.org/abs/1907.02367)
96
+ * *Space-time Trefftz DG methods for parabolic PDEs*
97
+ Constanze Heil, [Master's thesis](https://doi.org/10.25625/ZSA8UU/2L4C1E)
98
+ * *Embedded Trefftz Trace DG Methods for PDEs on unfitted Surfaces*
99
+ Erik Schlesinger, [Master's thesis](https://doi.org/10.25625/QTOPWD/93ZYRQ)
100
+
92
101
 
93
102
  If you are using `ngstrefftz` in your academic work, please consider citing
94
103
  ```
@@ -0,0 +1,21 @@
1
+ # file generated by setuptools-scm
2
+ # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
6
+ TYPE_CHECKING = False
7
+ if TYPE_CHECKING:
8
+ from typing import Tuple
9
+ from typing import Union
10
+
11
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
12
+ else:
13
+ VERSION_TUPLE = object
14
+
15
+ version: str
16
+ __version__: str
17
+ __version_tuple__: VERSION_TUPLE
18
+ version_tuple: VERSION_TUPLE
19
+
20
+ __version__ = version = '0.3.2406.dev89'
21
+ __version_tuple__ = version_tuple = (0, 3, 2406, 'dev89')
@@ -114,6 +114,7 @@ templates_path = ['_static']
114
114
  # This pattern also affects html_static_path and html_extra_path.
115
115
  exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'paper', 'env', 'jupyter_execute']
116
116
 
117
+ autoclass_content = 'both'
117
118
 
118
119
  # -- Options for HTML output -------------------------------------------------
119
120
 
@@ -41,7 +41,11 @@ Then we can solve the reduced problem: Find :math:`\bu_\IT` so that
41
41
 
42
42
  The solution in the full polynomial space is then given by :math:`\bu=\bT\bu_\IT`
43
43
 
44
- .. autofunction:: ngstrefftz.TrefftzEmbedding
44
+ .. autoclass:: ngstrefftz.TrefftzEmbedding
45
+
46
+ .. automethod:: Embed
47
+ .. automethod:: GetEmbedding
48
+ .. automethod:: GetParticularSolution
45
49
 
46
50
  .. autofunction:: ngstrefftz.EmbeddedTrefftzFES
47
51
 
@@ -119,7 +119,9 @@
119
119
  "lop = rhs*grad(v)[0]*dx\n",
120
120
  "\n",
121
121
  "with TaskManager():\n",
122
- " PP,uf = TrefftzEmbedding(op,fes,lop,eps)\n",
122
+ " emb = TrefftzEmbedding(op,lop,eps=eps)\n",
123
+ "PP = emb.GetEmbedding()\n",
124
+ "uf = emb.GetParticularSolution()\n",
123
125
  "PPT = PP.CreateTranspose()\n",
124
126
  "with TaskManager():\n",
125
127
  " TA = PPT@a.mat@PP\n",
@@ -127,7 +129,7 @@
127
129
  " gfu = GridFunction(fes)\n",
128
130
  " gfu.vec.data = PP*Tgfu + uf\n",
129
131
  "error = sqrt(Integrate((gfu-exact)**2, mesh))\n",
130
- "print(\"svdt error : {:13.8e}\".format(error))"
132
+ "print(\"error =\", error)"
131
133
  ]
132
134
  },
133
135
  {
@@ -158,7 +160,7 @@
158
160
  "name": "python",
159
161
  "nbconvert_exporter": "python",
160
162
  "pygments_lexer": "ipython3",
161
- "version": "3.11.3"
163
+ "version": "3.13.2"
162
164
  }
163
165
  },
164
166
  "nbformat": 4,
@@ -99,7 +99,7 @@
99
99
  " fes2 = L2(mesh, order=order-2, dgjumps=True,complex=True)\n",
100
100
  " v = fes2.TestFunction()\n",
101
101
  " op = -omega**2*u*v*dx - Lap(u)*v*dx\n",
102
- " PP = TrefftzEmbedding(op,fes,test_fes=fes2)\n",
102
+ " PP = TrefftzEmbedding(op).GetEmbedding()\n",
103
103
  " return PP"
104
104
  ]
105
105
  },
@@ -261,7 +261,7 @@
261
261
  " gfu = GridFunction(fes)\n",
262
262
  " gfu.vec.data = PP*TU\n",
263
263
  "error = sqrt(Integrate((gfu-exact)*Conj(gfu-exact), mesh).real)\n",
264
- "print(\"error \",error)"
264
+ "print(\"error =\",error)"
265
265
  ]
266
266
  },
267
267
  {
@@ -310,7 +310,7 @@
310
310
  "name": "python",
311
311
  "nbconvert_exporter": "python",
312
312
  "pygments_lexer": "ipython3",
313
- "version": "3.12.3"
313
+ "version": "3.13.2"
314
314
  }
315
315
  },
316
316
  "nbformat": 4,
@@ -99,16 +99,18 @@
99
99
  "mean_dvdn = 0.5 * (grad(v)+grad(v.Other()))\n",
100
100
  "\n",
101
101
  "a = BilinearForm(fes,symmetric=True)\n",
102
- "a += grad(u)*grad(v) * dx \\\n",
102
+ "aterms = grad(u)*grad(v) * dx \\\n",
103
103
  " +alpha*order**2/h*jump_u*jump_v * dx(skeleton=True) \\\n",
104
104
  " +(-mean_dudn*jump_v-mean_dvdn*jump_u) * dx(skeleton=True) \\\n",
105
105
  " +alpha*order**2/h*u*v * ds(skeleton=True) \\\n",
106
106
  " +(-n*grad(u)*v-n*grad(v)*u)* ds(skeleton=True)\n",
107
+ "a += aterms\n",
107
108
  "\n",
108
109
  "f = LinearForm(fes)\n",
109
- "f += rhs*v * dx \\\n",
110
+ "fterms = rhs*v * dx \\\n",
110
111
  " +alpha*order**2/h*bndc*v * ds(skeleton=True) \\\n",
111
112
  " +(-n*grad(v)*bndc)* ds(skeleton=True)\n",
113
+ "f += fterms\n",
112
114
  "with TaskManager():\n",
113
115
  " a.Assemble()\n",
114
116
  " f.Assemble()"
@@ -162,15 +164,17 @@
162
164
  "op = Lap(u)*Lap(v)*dx\n",
163
165
  "lop = -rhs*Lap(v)*dx\n",
164
166
  "with TaskManager():\n",
165
- " PP,uf = TrefftzEmbedding(op,fes,lop,eps)\n",
167
+ " emb = TrefftzEmbedding(op,lop,eps=eps)\n",
168
+ "PP = emb.GetEmbedding()\n",
166
169
  "PPT = PP.CreateTranspose()\n",
170
+ "uf = emb.GetParticularSolution()\n",
167
171
  "with TaskManager():\n",
168
172
  " TA = PPT@a.mat@PP\n",
169
173
  " Tgfu = TA.Inverse(inverse=\"sparsecholesky\")*(PPT*(f.vec-a.mat*uf))\n",
170
174
  " gfu = GridFunction(fes)\n",
171
175
  " gfu.vec.data = PP*Tgfu + uf\n",
172
176
  "error = sqrt(Integrate((gfu-exact)**2, mesh))\n",
173
- "print(\"svdt\",error)"
177
+ "print(\"error =\",error)"
174
178
  ]
175
179
  },
176
180
  {
@@ -183,6 +187,78 @@
183
187
  "from ngsolve.webgui import Draw\n",
184
188
  "Draw(BoundaryFromVolumeCF(gfu),mesh,'gfu')"
185
189
  ]
190
+ },
191
+ {
192
+ "cell_type": "markdown",
193
+ "id": "671d538f-ced6-4d2d-846a-4a2a814deb62",
194
+ "metadata": {},
195
+ "source": [
196
+ "### Using EmbeddedTrefftzFES\n",
197
+ "To use an $\\texttt{EmbeddedTrefftzFES}$ for a problem with a right-hand-side we first assemble the (Bi)linearForm over the Trefftz space, as in the homogeneous case. "
198
+ ]
199
+ },
200
+ {
201
+ "cell_type": "code",
202
+ "execution_count": null,
203
+ "id": "010f6931-1a61-4968-9d82-1cbd1a35814e",
204
+ "metadata": {},
205
+ "outputs": [],
206
+ "source": [
207
+ "etfes = EmbeddedTrefftzFES(emb)\n",
208
+ "a = BilinearForm(etfes)\n",
209
+ "a += aterms\n",
210
+ "f = LinearForm(etfes)\n",
211
+ "f += fterms\n",
212
+ "a.Assemble()\n",
213
+ "f.Assemble()"
214
+ ]
215
+ },
216
+ {
217
+ "cell_type": "markdown",
218
+ "id": "3040df22-2053-4da1-9d38-f90841d5669b",
219
+ "metadata": {},
220
+ "source": [
221
+ "#### Computing the residuum\n",
222
+ "Then we compute the residuum $\\bT^T \\bl-\\bT^T \\bA\\bu_f$. We compute $\\bT^T \\bA\\bu_f$ directly, using a mixed BilinearForm with trial functions in the base space and test functions from the embedded Trefftz space."
223
+ ]
224
+ },
225
+ {
226
+ "cell_type": "code",
227
+ "execution_count": null,
228
+ "id": "d8c58374-e1e5-4c44-a725-c43a47d5bf6f",
229
+ "metadata": {},
230
+ "outputs": [],
231
+ "source": [
232
+ "res = f.vec.CreateVector()\n",
233
+ "af = BilinearForm(fes,etfes)\n",
234
+ "af += aterms\n",
235
+ "af.Apply(uf,res)\n",
236
+ "f.vec.data -= res"
237
+ ]
238
+ },
239
+ {
240
+ "cell_type": "markdown",
241
+ "id": "ee0df904-d840-420c-a3c2-7e439432380d",
242
+ "metadata": {},
243
+ "source": [
244
+ "Now we are ready to solve and then compute the solution from $u_{\\IT} +u_{h,f}$."
245
+ ]
246
+ },
247
+ {
248
+ "cell_type": "code",
249
+ "execution_count": null,
250
+ "id": "940d3fd3-9cbd-4bbf-8b70-875c4ab5e034",
251
+ "metadata": {},
252
+ "outputs": [],
253
+ "source": [
254
+ "tgfu = GridFunction(etfes)\n",
255
+ "tgfu.vec.data = a.mat.Inverse() * f.vec\n",
256
+ "gfu.vec.data = emb.Embed(tgfu.vec)\n",
257
+ "gfu.vec.data += uf\n",
258
+ "\n",
259
+ "error = sqrt(Integrate((gfu-exact)**2, mesh))\n",
260
+ "print(\"error =\",error)"
261
+ ]
186
262
  }
187
263
  ],
188
264
  "metadata": {
@@ -201,7 +277,7 @@
201
277
  "name": "python",
202
278
  "nbconvert_exporter": "python",
203
279
  "pygments_lexer": "ipython3",
204
- "version": "3.11.7"
280
+ "version": "3.13.2"
205
281
  }
206
282
  },
207
283
  "nbformat": 4,
@@ -126,8 +126,8 @@
126
126
  " + InnerProduct(grad(p),wu) * dx + div(u)*wp*dx\n",
127
127
  "\n",
128
128
  " lop = rhs * wu * dx(bonus_intorder=5)\n",
129
- " PP, uf = TrefftzEmbedding(op,fes,lop,eps=10**-6,test_fes=test_fes)\n",
130
- " return PP, uf"
129
+ " emb = TrefftzEmbedding(op,lop,eps=10**-6)\n",
130
+ " return emb.GetEmbedding(), emb.GetParticularSolution()"
131
131
  ]
132
132
  },
133
133
  {
@@ -333,7 +333,7 @@
333
333
  "source": [
334
334
  "uh = gfu.components[0]\n",
335
335
  "Draw(uh,mesh,\"u\")\n",
336
- "print(sqrt(Integrate(InnerProduct(uh-uexact,uh-uexact),mesh)))"
336
+ "print(\"error =\",sqrt(Integrate(InnerProduct(uh-uexact,uh-uexact),mesh)))"
337
337
  ]
338
338
  }
339
339
  ],
@@ -353,7 +353,7 @@
353
353
  "name": "python",
354
354
  "nbconvert_exporter": "python",
355
355
  "pygments_lexer": "ipython3",
356
- "version": "3.11.3"
356
+ "version": "3.13.2"
357
357
  }
358
358
  },
359
359
  "nbformat": 4,
@@ -263,7 +263,7 @@
263
263
  "\n",
264
264
  "eps=10**-12\n",
265
265
  "with TaskManager():\n",
266
- " PP = TrefftzEmbedding(op,fes,eps)\n",
266
+ " PP = TrefftzEmbedding(op,eps=eps).GetEmbedding()\n",
267
267
  "PPT = PP.CreateTranspose()\n",
268
268
  "with TaskManager():\n",
269
269
  " TA = PPT@a.mat@PP\n",
@@ -282,7 +282,7 @@
282
282
  "outputs": [],
283
283
  "source": [
284
284
  "error = Integrate((CF(tgfu.components)-CoefficientFunction((sig_ex,v_ex)))**2,mesh)\n",
285
- "print(error)"
285
+ "print(\"error =\",error)"
286
286
  ]
287
287
  }
288
288
  ],
@@ -302,7 +302,7 @@
302
302
  "name": "python",
303
303
  "nbconvert_exporter": "python",
304
304
  "pygments_lexer": "ipython3",
305
- "version": "3.12.3"
305
+ "version": "3.13.2"
306
306
  }
307
307
  },
308
308
  "nbformat": 4,
@@ -171,20 +171,14 @@
171
171
  " f.Assemble()"
172
172
  ]
173
173
  },
174
- {
175
- "cell_type": "markdown",
176
- "id": "4f1de24c",
177
- "metadata": {},
178
- "source": [
179
- "### Trefftz embedding"
180
- ]
181
- },
182
174
  {
183
175
  "cell_type": "markdown",
184
176
  "id": "19d5d04a",
185
177
  "metadata": {},
186
178
  "source": [
187
- "We use the function $\\texttt{TrefftzEmbedding}$ and pass the operator \n",
179
+ "### Trefftz embedding\n",
180
+ "\n",
181
+ "We use the class $\\texttt{TrefftzEmbedding}$ and pass the operator \n",
188
182
  "$$\n",
189
183
  "\\newcommand{\\Vhp}{V^p(\\Th)}\n",
190
184
  "\\newcommand{\\bT}{\\mathbf{T}}\n",
@@ -223,7 +217,29 @@
223
217
  "u,v = fes.TnT()\n",
224
218
  "op = Lap(u)*Lap(v)*dx\n",
225
219
  "with TaskManager():\n",
226
- " PP = TrefftzEmbedding(op,fes,eps)\n",
220
+ " emb = TrefftzEmbedding(op,eps=eps)\n"
221
+ ]
222
+ },
223
+ {
224
+ "cell_type": "markdown",
225
+ "id": "3a51e93c-f31c-43ac-9865-e6227d126660",
226
+ "metadata": {},
227
+ "source": [
228
+ "From the $\\texttt{TrefftzEmbedding}$ we can get the matrix $\\bT$ to compute\n",
229
+ "\n",
230
+ "$$\n",
231
+ " \\bT^T\\bA\\bT ~ \\bu_\\IT = \\bT^T \\bl.\n",
232
+ "$$"
233
+ ]
234
+ },
235
+ {
236
+ "cell_type": "code",
237
+ "execution_count": null,
238
+ "id": "26b4df44-dbae-4a12-925d-0604e0d01546",
239
+ "metadata": {},
240
+ "outputs": [],
241
+ "source": [
242
+ "PP = emb.GetEmbedding()\n",
227
243
  "PPT = PP.CreateTranspose()\n",
228
244
  "with TaskManager():\n",
229
245
  " TA = PPT@a.mat@PP\n",
@@ -240,15 +256,7 @@
240
256
  "outputs": [],
241
257
  "source": [
242
258
  "error = sqrt(Integrate((tgfu-exact)**2, mesh))\n",
243
- "print(\"embedded Trefftz error \",error)"
244
- ]
245
- },
246
- {
247
- "cell_type": "markdown",
248
- "id": "8f34efc5",
249
- "metadata": {},
250
- "source": [
251
- "### Trefftz embedding type 2"
259
+ "print(\"error =\",error)"
252
260
  ]
253
261
  },
254
262
  {
@@ -256,6 +264,8 @@
256
264
  "id": "c02fb15b",
257
265
  "metadata": {},
258
266
  "source": [
267
+ "### Trefftz embedding type 2\n",
268
+ "\n",
259
269
  "We can also construct the embedding by finding the kernel of\n",
260
270
  "\n",
261
271
  "$$\n",
@@ -279,7 +289,8 @@
279
289
  "v = fes2.TestFunction()\n",
280
290
  "op = Lap(u)*v*dx\n",
281
291
  "with TaskManager():\n",
282
- " PP = TrefftzEmbedding(op,fes,test_fes=fes2)\n",
292
+ " emb = TrefftzEmbedding(op)\n",
293
+ "PP = emb.GetEmbedding()\n",
283
294
  "PPT = PP.CreateTranspose()\n",
284
295
  "with TaskManager():\n",
285
296
  " TA = PPT@a.mat@PP\n",
@@ -296,7 +307,7 @@
296
307
  "outputs": [],
297
308
  "source": [
298
309
  "error = sqrt(Integrate((tgfu-exact)**2, mesh))\n",
299
- "print(\"embedded Trefftz error \",error)"
310
+ "print(\"error =\",error)"
300
311
  ]
301
312
  },
302
313
  {
@@ -304,10 +315,11 @@
304
315
  "id": "0e852921",
305
316
  "metadata": {},
306
317
  "source": [
307
- "## Trefftz embedding via FESpace\n",
318
+ "### Trefftz embedding via FESpace\n",
308
319
  "The following improves the runtime of the embedded Trefftz method by avoiding the full assembly of the larger system matrix. Instead we directly assemble the matrix $\\bT^T\\bA\\bT$ using the local embedding matrices.\n",
309
320
  "\n",
310
- "We use `EmbeddedTrefftzFES` to construct an embedded space from an underlying `L2` space."
321
+ "We use `EmbeddedTrefftzFES` to construct an embedded space from the $\\texttt{TrefftzEmbedding}$. \n",
322
+ "This avoids the assembly of the full DG system and of the embedding matrix."
311
323
  ]
312
324
  },
313
325
  {
@@ -318,12 +330,7 @@
318
330
  "outputs": [],
319
331
  "source": [
320
332
  "with TaskManager():\n",
321
- " fes = L2(mesh, order=order, dgjumps=True)\n",
322
- " u,v = fes.TnT()\n",
323
- " op = Lap(u)*Lap(v)*dx\n",
324
- " \n",
325
- " etfes = EmbeddedTrefftzFES(fes)\n",
326
- " etfes.SetOp(op,eps=eps)\n",
333
+ " etfes = EmbeddedTrefftzFES(emb)\n",
327
334
  "\n",
328
335
  " a,f = lapdg(etfes,exact)\n",
329
336
  " a.Assemble()\n",
@@ -341,7 +348,7 @@
341
348
  "metadata": {},
342
349
  "outputs": [],
343
350
  "source": [
344
- "print(\"embedded Trefftz error \",sqrt(Integrate((gfu-exact)**2, mesh)))"
351
+ "print(\"error =\",sqrt(Integrate((gfu-exact)**2, mesh)))"
345
352
  ]
346
353
  }
347
354
  ],
@@ -361,7 +368,7 @@
361
368
  "name": "python",
362
369
  "nbconvert_exporter": "python",
363
370
  "pygments_lexer": "ipython3",
364
- "version": "3.11.7"
371
+ "version": "3.13.2"
365
372
  }
366
373
  },
367
374
  "nbformat": 4,
@@ -62,7 +62,7 @@
62
62
  "name": "python",
63
63
  "nbconvert_exporter": "python",
64
64
  "pygments_lexer": "ipython3",
65
- "version": "3.12.3"
65
+ "version": "3.13.2"
66
66
  }
67
67
  },
68
68
  "nbformat": 4,
@@ -245,7 +245,7 @@
245
245
  "name": "python",
246
246
  "nbconvert_exporter": "python",
247
247
  "pygments_lexer": "ipython3",
248
- "version": "3.11.7"
248
+ "version": "3.13.2"
249
249
  }
250
250
  },
251
251
  "nbformat": 4,