ngstrefftz 0.3.2604.dev7__tar.gz → 0.3.2604.dev8__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 (154) hide show
  1. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/PKG-INFO +1 -1
  2. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/_version.py +3 -3
  3. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/index.rst +1 -0
  4. ngstrefftz-0.3.2604.dev8/docs/notebooks/embTrefftz-ns.ipynb +443 -0
  5. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/index.ipynb +3 -2
  6. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.clang-format +0 -0
  7. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/build.yml +0 -0
  8. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/fix_auditwheel_policy.py +0 -0
  9. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/Dockerfile +0 -0
  10. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/build_in_docker.sh +0 -0
  11. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/merge.py +0 -0
  12. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/requirements.txt +0 -0
  13. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.gitignore +0 -0
  14. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/.gitmodules +0 -0
  15. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/CMakeLists.txt +0 -0
  16. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/CONTRIBUTING.md +0 -0
  17. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/Dockerfile +0 -0
  18. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/LICENSE +0 -0
  19. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/README.md +0 -0
  20. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/Doxyfile.in +0 -0
  21. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/_static/breadcrumbs.html +0 -0
  22. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/_static/css/mytheme.css +0 -0
  23. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/conf.py +0 -0
  24. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/contrib.rst +0 -0
  25. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/docu.rst +0 -0
  26. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/intro.rst +0 -0
  27. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
  28. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
  29. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
  30. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-stokes.ipynb +0 -0
  31. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
  32. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz.ipynb +0 -0
  33. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/helmholtz.ipynb +0 -0
  34. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/laplace.ipynb +0 -0
  35. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/qtelliptic.ipynb +0 -0
  36. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/qtwave.ipynb +0 -0
  37. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/tunfitted.ipynb +0 -0
  38. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/twave.ipynb +0 -0
  39. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/twavetents.ipynb +0 -0
  40. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/paper/codemeta.json +0 -0
  41. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/paper/paper.bib +0 -0
  42. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/paper/paper.md +0 -0
  43. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/readme.rst +0 -0
  44. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/docs/requirements.txt +0 -0
  45. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/.github/workflows/build.yml +0 -0
  46. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/.gitignore +0 -0
  47. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/README.md +0 -0
  48. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -0
  49. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/advection2d.py +0 -0
  50. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -0
  51. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -0
  52. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -0
  53. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -0
  54. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -0
  55. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/euler2d.py +0 -0
  56. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -0
  57. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -0
  58. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -0
  59. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -0
  60. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -0
  61. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -0
  62. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -0
  63. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -0
  64. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -0
  65. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -0
  66. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/horn.py +0 -0
  67. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave2d.py +0 -0
  68. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -0
  69. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave3d.py +0 -0
  70. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -0
  71. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -0
  72. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/_config.yml +0 -0
  73. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/_toc.yml +0 -0
  74. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/assets/css/style.scss +0 -0
  75. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/do +0 -0
  76. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
  77. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/dag.png +0 -0
  78. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/map.png +0 -0
  79. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/ngsTentsLogo.png +0 -0
  80. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
  81. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/index.ipynb +0 -0
  82. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/requirements.txt +0 -0
  83. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/__init__.py +0 -0
  84. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/conslaw/__init__.py +0 -0
  85. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/__init__.py +0 -0
  86. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/_drawtents.py +0 -0
  87. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -0
  88. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/pyproject.toml +0 -0
  89. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/CMakeLists.txt +0 -0
  90. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/advection.cpp +0 -0
  91. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/burgers.cpp +0 -0
  92. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/concurrentqueue.h +0 -0
  93. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/conservationlaw.hpp +0 -0
  94. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/euler.cpp +0 -0
  95. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/maxwell.cpp +0 -0
  96. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -0
  97. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/paralleldepend.hpp +0 -0
  98. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/python_conslaw.cpp +0 -0
  99. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/python_tents.cpp +0 -0
  100. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/symbolic.cpp +0 -0
  101. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -0
  102. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.cpp +0 -0
  103. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.hpp +0 -0
  104. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tentsolver.hpp +0 -0
  105. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -0
  106. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.cpp +0 -0
  107. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.hpp +0 -0
  108. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/wave.cpp +0 -0
  109. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -0
  110. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_causal_tents.py +0 -0
  111. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_conslaw.py +0 -0
  112. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -0
  113. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_tentlayers.py +0 -0
  114. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/pyproject.toml +0 -0
  115. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/__init__.py +0 -0
  116. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/airy.cpp +0 -0
  117. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/boxintegral.cpp +0 -0
  118. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/boxintegral.hpp +0 -0
  119. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/condensedg.cpp +0 -0
  120. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/condensedg.hpp +0 -0
  121. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/diffopmapped.hpp +0 -0
  122. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/embtrefftz.cpp +0 -0
  123. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/embtrefftz.hpp +0 -0
  124. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/mesh1dtents.cpp +0 -0
  125. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/mesh1dtents.hpp +0 -0
  126. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/monomialfespace.cpp +0 -0
  127. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/monomialfespace.hpp +0 -0
  128. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/ngsttd.hpp +0 -0
  129. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/planewavefe.cpp +0 -0
  130. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/planewavefe.hpp +0 -0
  131. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/pufe.cpp +0 -0
  132. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/pufe.hpp +0 -0
  133. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/pufespace.cpp +0 -0
  134. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/pufespace.hpp +0 -0
  135. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/python_trefftz.cpp +0 -0
  136. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/scalarmappedfe.cpp +0 -0
  137. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/scalarmappedfe.hpp +0 -0
  138. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/specialcoefficientfunction.cpp +0 -0
  139. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/specialcoefficientfunction.hpp +0 -0
  140. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/specialintegrator.cpp +0 -0
  141. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/specialintegrator.hpp +0 -0
  142. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/tp0fespace.cpp +0 -0
  143. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/tp0fespace.hpp +0 -0
  144. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/trefftzfespace.cpp +0 -0
  145. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/trefftzfespace.hpp +0 -0
  146. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/twavetents.cpp +0 -0
  147. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/src/twavetents.hpp +0 -0
  148. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/boxint.py +0 -0
  149. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/conforming_trefftz.py +0 -0
  150. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/dg.py +0 -0
  151. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/embt.py +0 -0
  152. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/embtrefftz_gtest.cpp +0 -0
  153. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/tents.py +0 -0
  154. {ngstrefftz-0.3.2604.dev7 → ngstrefftz-0.3.2604.dev8}/test/trefftz.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ngstrefftz
3
- Version: 0.3.2604.dev7
3
+ Version: 0.3.2604.dev8
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)
@@ -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.2604.dev7'
22
- __version_tuple__ = version_tuple = (0, 3, 2604, 'dev7')
21
+ __version__ = version = '0.3.2604.dev8'
22
+ __version_tuple__ = version_tuple = (0, 3, 2604, 'dev8')
23
23
 
24
- __commit_id__ = commit_id = 'gfc4637f79'
24
+ __commit_id__ = commit_id = 'gfe72334f0'
@@ -62,5 +62,6 @@ NGSTrefftz is an add-On to NGSolve for Trefftz methods.
62
62
  notebooks/embTrefftz-helm.ipynb
63
63
  notebooks/embTrefftz-adv.ipynb
64
64
  notebooks/embTrefftz-stokes.ipynb
65
+ notebooks/embTrefftz-ns.ipynb
65
66
  notebooks/tunfitted.ipynb
66
67
  notebooks/twavetents.ipynb
@@ -0,0 +1,443 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "00f2188c",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Embedded Trefftz-DG: Navier-Stokes\n",
9
+ "\n",
10
+ "For the stationary incompressible Navier-Stokes equations,\n",
11
+ "\n",
12
+ "$$\n",
13
+ "-\\nu\\Delta u + (u\\cdot\\nabla)u + \\nabla p = f,\n",
14
+ "\\qquad\n",
15
+ "\\nabla\\cdot u = 0,\n",
16
+ "$$\n",
17
+ "\n",
18
+ "the nonlinear part is the convective velocity in $(u\\cdot\\nabla)u$. The\n",
19
+ "embedded Trefftz construction enters after linearization: freeze one velocity\n",
20
+ "field and solve an Oseen problem in a Trefftz space adapted to that frozen\n",
21
+ "operator.\n",
22
+ "\n",
23
+ "We use the following DG formulation\n",
24
+ "\n",
25
+ "$$\n",
26
+ "\\newcommand{\\jump}[1]{\\left[\\!\\left[#1\\right]\\!\\right]}\n",
27
+ "\\newcommand{\\avg}[1]{\\left\\{\\!\\left\\{#1\\right\\}\\!\\right\\}}\n",
28
+ "\\begin{aligned}\n",
29
+ "a_h^w((u,p),(v,q))\n",
30
+ "&=\n",
31
+ "\\nu\\int_{\\Omega}\\nabla u:\\nabla v\\,\\mathrm{d}x\n",
32
+ "-\n",
33
+ "\\int_{\\Omega}\n",
34
+ "\\left(\n",
35
+ "q\\,\\nabla\\cdot u\n",
36
+ "+\n",
37
+ "p\\,\\nabla\\cdot v\n",
38
+ "\\right)\n",
39
+ "\\,\\mathrm{d}x\n",
40
+ "\\\\\n",
41
+ "&\\quad\n",
42
+ "+\n",
43
+ "\\int_{\\Omega}\n",
44
+ "\\left(\n",
45
+ "(w\\cdot \\nabla u)\\cdot v\n",
46
+ "+\n",
47
+ "\\frac12(\\nabla\\cdot w)\\,u\\cdot v\n",
48
+ "\\right)\n",
49
+ "\\,\\mathrm{d}x\n",
50
+ "\\\\\n",
51
+ "&\\quad\n",
52
+ "-\n",
53
+ "\\int_{\\mathcal F_h^{\\mathrm{int}}}\n",
54
+ "\\left(\n",
55
+ "\\nu\\avg{\\nabla u}n\\cdot\\jump{v}\n",
56
+ "+\n",
57
+ "\\nu\\avg{\\nabla v}n\\cdot\\jump{u}\n",
58
+ "-\n",
59
+ "\\nu\\frac{\\alpha k^2}{h}\n",
60
+ "\\jump{u}\\cdot\\jump{v}\n",
61
+ "\\right)\n",
62
+ "\\,\\mathrm{d}s\n",
63
+ "\\\\\n",
64
+ "&\\quad\n",
65
+ "-\n",
66
+ "\\int_{\\mathcal F_h^{\\mathrm{int}}}\n",
67
+ "\\left(\n",
68
+ "\\avg{p}\\,n\\cdot\\jump{v}\n",
69
+ "-\n",
70
+ "\\avg{q}\\,n\\cdot\\jump{u}\n",
71
+ "\\right)\n",
72
+ "\\,\\mathrm{d}s\n",
73
+ "\\\\\n",
74
+ "&\\quad\n",
75
+ "+\n",
76
+ "\\int_{\\mathcal F_h^{\\mathrm{int}}}\n",
77
+ "\\left(\n",
78
+ "(\\avg{w}\\cdot n)\n",
79
+ "\\jump{u}\\cdot\\avg{v}\n",
80
+ "+\n",
81
+ "\\frac12(\\jump{w}\\cdot n)\n",
82
+ "\\avg{u\\cdot v}\n",
83
+ "\\right)\n",
84
+ "\\,\\mathrm{d}s\n",
85
+ "\\\\\n",
86
+ "&\\quad\n",
87
+ "+\\text{ suitable boundary terms}.\n",
88
+ "\\end{aligned}\n",
89
+ "$$"
90
+ ]
91
+ },
92
+ {
93
+ "cell_type": "code",
94
+ "execution_count": null,
95
+ "id": "fa7ab7ae",
96
+ "metadata": {
97
+ "tags": [
98
+ "hide-input"
99
+ ]
100
+ },
101
+ "outputs": [],
102
+ "source": [
103
+ "from ngsolve import *\n",
104
+ "from netgen.occ import *\n",
105
+ "from ngstrefftz import *\n",
106
+ "from ngsolve.webgui import Draw\n",
107
+ "\n",
108
+ "def VLap(u, dim):\n",
109
+ " hesse = u.Operator(\"hesse\")\n",
110
+ " return CF(tuple(sum(hesse[i, j * (dim + 1)] for j in range(dim))for i in range(dim)))\n",
111
+ "\n",
112
+ "def SolveOseen(mesh,k,nu,rhs=None,wn=None,trefftz=True,ubnd=None,bndname=\".*\",inletname=None,alpha=50):\n",
113
+ " if hasattr(wn, \"Operators\") and \"div\" in wn.Operators():\n",
114
+ " divwn = div(wn)\n",
115
+ " elif wn is not None:\n",
116
+ " if mesh.dim == 2:\n",
117
+ " divwn = wn[0].Diff(x) + wn[1].Diff(y)\n",
118
+ " elif mesh.dim == 3:\n",
119
+ " divwn = wn[0].Diff(x) + wn[1].Diff(y) + wn[2].Diff(z)\n",
120
+ "\n",
121
+ " bint = 16\n",
122
+ " if inletname is None:\n",
123
+ " inletname = bndname\n",
124
+ " solver = \"pardiso\"\n",
125
+ " stab = 1e-7\n",
126
+ "\n",
127
+ " V = VectorL2(mesh, order=k, dgjumps=True)\n",
128
+ " Q = L2(mesh, order=k - 1, dgjumps=True)\n",
129
+ " basefes = V * Q\n",
130
+ "\n",
131
+ " n = specialcf.normal(mesh.dim)\n",
132
+ " h = specialcf.mesh_size\n",
133
+ "\n",
134
+ " if trefftz:\n",
135
+ " Vs = VectorL2(mesh, order=k - 2)\n",
136
+ " Qs = L2(mesh, order=k - 1)\n",
137
+ " test_fes = Vs * Qs\n",
138
+ " u, p = basefes.TrialFunction()[0:2]\n",
139
+ " wu, wp = test_fes.TestFunction()[0:2]\n",
140
+ " oseen_residual = -nu * VLap(u, mesh.dim) + grad(p)\n",
141
+ " if wn is not None:\n",
142
+ " oseen_residual += grad(u) * wn\n",
143
+ " op = oseen_residual * wu * dx(bonus_intorder=bint)\n",
144
+ " op += div(u) * wp * dx(bonus_intorder=bint)\n",
145
+ "\n",
146
+ " emb = TrefftzEmbedding(op)\n",
147
+ " fes = EmbeddedTrefftzFES(emb)\n",
148
+ " if rhs is not None:\n",
149
+ " upf = GridFunction(basefes)\n",
150
+ " lop = rhs * wu * dx(bonus_intorder=bint)\n",
151
+ " upf.vec.data = emb.GetParticularSolution(lop)\n",
152
+ " else:\n",
153
+ " fes = basefes\n",
154
+ "\n",
155
+ " u, v = fes.TrialFunction()[0], fes.TestFunction()[0]\n",
156
+ " p, q = fes.TrialFunction()[1], fes.TestFunction()[1]\n",
157
+ "\n",
158
+ " def jump(v):\n",
159
+ " return v - v.Other()\n",
160
+ "\n",
161
+ " def mean(v):\n",
162
+ " return 0.5 * (v + v.Other())\n",
163
+ "\n",
164
+ " def mean2(u, v):\n",
165
+ " return 0.5 * (u * v + u.Other() * v.Other())\n",
166
+ "\n",
167
+ " a = BilinearForm(fes)\n",
168
+ " def dgterms(u,p,v,q):\n",
169
+ " a = nu * InnerProduct(grad(u), grad(v)) * dx\n",
170
+ " a += nu * alpha * k**2 / h * jump(u) * jump(v) * dx(skeleton=True)\n",
171
+ " a += nu * (-mean(grad(u)) * n * jump(v) - mean(grad(v)) * n * jump(u)) * dx(skeleton=True)\n",
172
+ " a += nu * alpha * k**2 / h * u * v * ds(skeleton=True, definedon=mesh.Boundaries(bndname))\n",
173
+ " a += nu * (-grad(u) * n * v - grad(v) * n * u) * ds(skeleton=True, definedon=mesh.Boundaries(bndname))\n",
174
+ " a += (mean(p) * n * jump(v) + mean(q) * n * jump(u)) * dx(skeleton=True)\n",
175
+ " a += (p * v * n + q * u * n) * ds(skeleton=True, definedon=mesh.Boundaries(bndname))\n",
176
+ " a += (-div(u) * q - div(v) * p) * dx\n",
177
+ " a += -stab * p * q * dx\n",
178
+ " if wn is not None:\n",
179
+ " a += (grad(u) * wn) * v * dx(bonus_intorder=bint)\n",
180
+ " a += -mean(wn) * n * jump(u) * mean(v) * dx(skeleton=True, bonus_intorder=bint)\n",
181
+ " a += 0.5 * divwn * u * v * dx(bonus_intorder=bint)\n",
182
+ " a += -0.5 * jump(wn) * n * mean2(u, v) * dx(skeleton=True, bonus_intorder=bint)\n",
183
+ " a += -0.5 * wn * n * u * v * ds(skeleton=True,bonus_intorder=bint,definedon=mesh.Boundaries(bndname),)\n",
184
+ " return a\n",
185
+ " a += dgterms(u,p,v,q)\n",
186
+ "\n",
187
+ " f = LinearForm(fes)\n",
188
+ " if rhs is not None:\n",
189
+ " f += rhs * v * dx(bonus_intorder=bint)\n",
190
+ " if ubnd is not None:\n",
191
+ " f += nu * alpha * k**2 / h * ubnd * v * ds(skeleton=True,definedon=mesh.Boundaries(inletname),bonus_intorder=bint,)\n",
192
+ " f += nu * (-grad(v) * n * ubnd) * ds(skeleton=True,definedon=mesh.Boundaries(inletname),bonus_intorder=bint,)\n",
193
+ " f += q * ubnd * n * ds(skeleton=True,definedon=mesh.Boundaries(inletname),bonus_intorder=bint,)\n",
194
+ " if wn is not None:\n",
195
+ " f += -0.5 * wn * n * ubnd * v * ds(skeleton=True,definedon=mesh.Boundaries(inletname),bonus_intorder=bint,)\n",
196
+ " if trefftz and rhs is not None:\n",
197
+ " mupf = GridFunction(basefes)\n",
198
+ " mupf.vec.data = -1*upf.vec\n",
199
+ " muf = mupf.components[0]\n",
200
+ " mpf = mupf.components[1]\n",
201
+ " f += dgterms(muf, mpf, v, q)\n",
202
+ "\n",
203
+ "\n",
204
+ " a.Assemble()\n",
205
+ " f.Assemble()\n",
206
+ "\n",
207
+ " gfu = GridFunction(fes)\n",
208
+ " gfu.vec.data = a.mat.Inverse(inverse=solver) * f.vec\n",
209
+ "\n",
210
+ " if trefftz:\n",
211
+ " polygfu = GridFunction(basefes)\n",
212
+ " polygfu.vec.data = emb.Embed(gfu.vec)\n",
213
+ " gfu = GridFunction(basefes)\n",
214
+ " if rhs is not None:\n",
215
+ " gfu.vec.data = polygfu.vec + upf.vec\n",
216
+ " else:\n",
217
+ " gfu = polygfu\n",
218
+ "\n",
219
+ " uh, ph = gfu.components[0:2]\n",
220
+ "\n",
221
+ " return uh, ph, fes.ndof"
222
+ ]
223
+ },
224
+ {
225
+ "cell_type": "markdown",
226
+ "id": "14316319",
227
+ "metadata": {},
228
+ "source": [
229
+ "## Picard Linearization\n",
230
+ "\n",
231
+ "Given a velocity $w$, the Oseen operator is\n",
232
+ "\n",
233
+ "$$\n",
234
+ "\\mathcal O_w(u,p)\n",
235
+ "=\n",
236
+ "-\\nu\\Delta u\n",
237
+ "+ (w\\cdot\\nabla)u\n",
238
+ "+ \\nabla p,\n",
239
+ "\\qquad\n",
240
+ "\\nabla\\cdot u=0.\n",
241
+ "$$\n",
242
+ "\n",
243
+ "The Trefftz embedding uses as local operator.\n",
244
+ "\n",
245
+ "Picard iteration freezes the convection field at the previous velocity:\n",
246
+ "\n",
247
+ "$$\n",
248
+ "\\begin{aligned}\n",
249
+ "\\mathcal O_{u^{m}}(u^{m+1},p^{m+1}) &= f,\\\\\n",
250
+ "\\nabla\\cdot u^{m+1} &= 0.\n",
251
+ "\\end{aligned}\n",
252
+ "$$\n",
253
+ "\n",
254
+ "In each loop we solve the discrete problem with\n",
255
+ "\n",
256
+ "$$\n",
257
+ "(u\\cdot\\nabla)u\n",
258
+ "\\quad\\leadsto\\quad\n",
259
+ "(u^m\\cdot\\nabla)u^{m+1}.\n",
260
+ "$$\n",
261
+ "\n",
262
+ "The embedded Trefftz space is updated in each iteration step.\n",
263
+ "\n",
264
+ "```python\n",
265
+ "wn = None\n",
266
+ "for step in range(maxiter):\n",
267
+ " uh, ph = solve_oseen(mesh, nu, wn=wn, trefftz=True)\n",
268
+ " if wn is not None and norm(uh - wn) < tol:\n",
269
+ " break\n",
270
+ " wn = uh\n",
271
+ "```\n",
272
+ "\n",
273
+ "The next Oseen solve, and therefore the next embedded Trefftz space, is rebuilt for this new convection field.\n",
274
+ "\n",
275
+ "## Oseen Trefftz Space\n",
276
+ "\n",
277
+ "On one element $K$, start with the discontinuous polynomial trial space\n",
278
+ "\n",
279
+ "$$\n",
280
+ "V_h^k(K)\n",
281
+ "=\n",
282
+ "[\\mathbb P^k(K)]^d \\times \\mathbb P^{k-1}(K)\n",
283
+ "$$\n",
284
+ "\n",
285
+ "for velocity and pressure. The residual is tested in\n",
286
+ "\n",
287
+ "$$\n",
288
+ "Q_h^k(K)\n",
289
+ "=\n",
290
+ "[\\mathbb P^{k-2}(K)]^d \\times \\mathbb P^{k-1}(K).\n",
291
+ "$$\n",
292
+ "\n",
293
+ "For fixed convection $w$, the embedded Oseen Trefftz space is\n",
294
+ "\n",
295
+ "$$\n",
296
+ "\\mathbb T_{w,h}^k(K)\n",
297
+ "=\n",
298
+ "\\left\\{\n",
299
+ "(u_h,p_h)\\in V_h^k(K):\n",
300
+ "\\begin{array}{l}\n",
301
+ "\\left(-\\nu\\Delta u + (w\\cdot\\nabla)u + \\nabla p, v\\right)_K=0\\\\\n",
302
+ "(\\nabla\\cdot u,q)_K =0\n",
303
+ "\\end{array}\n",
304
+ "\\quad\\forall (v_h,q_h)\\in Q_h^k(K)\n",
305
+ "\\right\\},\n",
306
+ "$$"
307
+ ]
308
+ },
309
+ {
310
+ "cell_type": "code",
311
+ "execution_count": null,
312
+ "id": "eb7294b7",
313
+ "metadata": {},
314
+ "outputs": [],
315
+ "source": [
316
+ "mesh = Mesh(unit_square.GenerateMesh(maxh=0.45))\n",
317
+ "k = 3\n",
318
+ "nu = 1.0\n",
319
+ "wn = CF((1, 0))\n",
320
+ "\n",
321
+ "V = VectorL2(mesh, order=k, dgjumps=True)\n",
322
+ "Q = L2(mesh, order=k - 1, dgjumps=True)\n",
323
+ "base = V * Q\n",
324
+ "\n",
325
+ "R = VectorL2(mesh, order=k - 2) * L2(mesh, order=k - 1)\n",
326
+ "u, p = base.TrialFunction()[0:2]\n",
327
+ "v, q = R.TestFunction()[0:2]\n",
328
+ "\n",
329
+ "op = (-nu * VLap(u, mesh.dim) + grad(p) + grad(u) * wn) * v * dx(bonus_intorder=16)\n",
330
+ "op += div(u) * q * dx(bonus_intorder=16)\n",
331
+ "\n",
332
+ "emb = TrefftzEmbedding(op)\n",
333
+ "tfes = EmbeddedTrefftzFES(emb)\n",
334
+ "\n",
335
+ "print(f\"full Oseen polynomial dofs: {base.ndof}\")\n",
336
+ "print(f\"embedded Oseen Trefftz dofs: {tfes.ndof}\")"
337
+ ]
338
+ },
339
+ {
340
+ "cell_type": "markdown",
341
+ "id": "2fa0be92",
342
+ "metadata": {},
343
+ "source": [
344
+ "## Schäfer-Turek Benchmark\n",
345
+ "\n",
346
+ "We now run the DFG 2D-1 Schäfer-Turek flow in the channel with a circular obstacle,\n",
347
+ "\n",
348
+ "$$\n",
349
+ "\\Omega=(0,2.2)\\times(0,0.41)\\setminus B_{0.05}(0.2,0.2).\n",
350
+ "$$\n",
351
+ "\n",
352
+ "The inflow profile is parabolic,\n",
353
+ "\n",
354
+ "$$\n",
355
+ "u_{\\mathrm{in}}(y)\n",
356
+ "=\n",
357
+ "\\left(\n",
358
+ "\\frac{4U_{\\max}y(0.41-y)}{0.41^2},\n",
359
+ "0\n",
360
+ "\\right),\n",
361
+ "\\qquad\n",
362
+ "U_{\\max}=0.3,\n",
363
+ "\\qquad\n",
364
+ "\\nu=10^{-3}.\n",
365
+ "$$"
366
+ ]
367
+ },
368
+ {
369
+ "cell_type": "code",
370
+ "execution_count": null,
371
+ "id": "de562684",
372
+ "metadata": {
373
+ "tags": [
374
+ "hide-input"
375
+ ]
376
+ },
377
+ "outputs": [],
378
+ "source": [
379
+ "def solve_ns(mesh,k=4,nu=0.001,ubnd=None,bndname=\"inlet|wall|cyl\",inletname=\"inlet\",maxiter=100,tol=1e-8,alpha=50,trefftz=True):\n",
380
+ " wn = CF((0,0))\n",
381
+ " uh_old = wn\n",
382
+ "\n",
383
+ " for step in range(1, maxiter + 1):\n",
384
+ " uh, ph, ndof = SolveOseen(mesh,k=k,nu=nu,wn=wn,trefftz=trefftz,ubnd=ubnd,bndname=bndname,inletname=inletname,alpha=alpha,)\n",
385
+ " update = sqrt(Integrate(InnerProduct(uh - uh_old, uh - uh_old), mesh))\n",
386
+ " print(f\"Step: {step}, residual: {update}\")\n",
387
+ " if update < tol:\n",
388
+ " return uh, ph, ndof, step\n",
389
+ "\n",
390
+ " uh_old = uh\n",
391
+ " wn = uh\n",
392
+ "\n",
393
+ " return uh, ph, ndof, maxiter\n",
394
+ "\n",
395
+ "ubnd = CF((4 * .3 * y * (0.41 - y) / (0.41 * 0.41), 0))\n",
396
+ "shape = Rectangle(2.2, 0.41).Circle(0.2, 0.2, 0.05).Reverse().Face()\n",
397
+ "shape.edges.name = \"cyl\"\n",
398
+ "shape.edges.Min(X).name = \"inlet\"\n",
399
+ "shape.edges.Max(X).name = \"outlet\"\n",
400
+ "shape.edges.Min(Y).name = shape.edges.Max(Y).name = \"wall\"\n",
401
+ "mesh = Mesh(OCCGeometry(shape, dim=2).GenerateMesh(maxh=0.05)).Curve(4)\n",
402
+ "\n",
403
+ "with TaskManager():\n",
404
+ " uh, ph, ndof, steps = solve_ns(mesh,k=4,ubnd=ubnd,trefftz=True)"
405
+ ]
406
+ },
407
+ {
408
+ "cell_type": "code",
409
+ "execution_count": null,
410
+ "id": "fdbb7397",
411
+ "metadata": {},
412
+ "outputs": [],
413
+ "source": [
414
+ "Draw(Norm(uh), mesh, \"speed\");\n",
415
+ "Draw(ph - Integrate(ph, mesh) / Integrate(1, mesh), mesh, \"pressure\");"
416
+ ]
417
+ }
418
+ ],
419
+ "metadata": {
420
+ "jupytext": {
421
+ "default_lexer": "ipython3"
422
+ },
423
+ "kernelspec": {
424
+ "display_name": "Python 3 (ipykernel)",
425
+ "language": "python",
426
+ "name": "python3"
427
+ },
428
+ "language_info": {
429
+ "codemirror_mode": {
430
+ "name": "ipython",
431
+ "version": 3
432
+ },
433
+ "file_extension": ".py",
434
+ "mimetype": "text/x-python",
435
+ "name": "python",
436
+ "nbconvert_exporter": "python",
437
+ "pygments_lexer": "ipython3",
438
+ "version": "3.14.6"
439
+ }
440
+ },
441
+ "nbformat": 4,
442
+ "nbformat_minor": 5
443
+ }
@@ -39,10 +39,11 @@
39
39
  "9. [Notebook](embTrefftz-wave.ipynb) for the acoustic wave equation\n",
40
40
  "10. [Notebook](embTrefftz-adv.ipynb) for advection\n",
41
41
  "11. [Notebook](embTrefftz-stokes.ipynb) for the Stokes problem\n",
42
+ "12. [Notebook](embTrefftz-ns.ipynb) for the Navier-Stokes problem\n",
42
43
  "\n",
43
44
  "### Trefftz methods and ...\n",
44
- "12. [Notebook](tunfitted.ipynb) presents the Trefftz method on unfitted geometries using *ngsxfem*.\n",
45
- "13. [Notebook](twavetents.ipynb) shows how to use the Trefftz and quasi-Trefftz methods with tent-pitched meshes using *ngstents*."
45
+ "13. [Notebook](tunfitted.ipynb) presents the Trefftz method on unfitted geometries using *ngsxfem*.\n",
46
+ "14. [Notebook](twavetents.ipynb) shows how to use the Trefftz and quasi-Trefftz methods with tent-pitched meshes using *ngstents*."
46
47
  ]
47
48
  }
48
49
  ],