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.
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/build.yml +13 -11
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/CMakeLists.txt +10 -14
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/Dockerfile +1 -1
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/PKG-INFO +13 -4
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/README.md +10 -1
- ngstrefftz-0.3.2406.dev89/_version.py +21 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/conf.py +1 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/docu.rst +5 -1
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-adv.ipynb +5 -3
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-helm.ipynb +3 -3
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-poi.ipynb +81 -5
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-stokes.ipynb +4 -4
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-wave.ipynb +3 -3
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz.ipynb +38 -31
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/index.ipynb +1 -1
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/laplace.ipynb +1 -1
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/pyproject.toml +4 -4
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/__init__.py +1 -1
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/boxintegral.cpp +87 -38
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/boxintegral.hpp +40 -17
- ngstrefftz-0.3.2406.dev89/src/embtrefftz.cpp +1424 -0
- ngstrefftz-0.3.2406.dev89/src/embtrefftz.hpp +182 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/planewavefe.cpp +30 -17
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/trefftzfespace.cpp +6 -10
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/boxint.py +12 -10
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/conforming_trefftz.py +139 -79
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/dg.py +80 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/embt.py +176 -141
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/embtrefftz_gtest.cpp +32 -4
- ngstrefftz-0.3.2406.dev41/_version.py +0 -16
- ngstrefftz-0.3.2406.dev41/src/embtrefftz.cpp +0 -1449
- ngstrefftz-0.3.2406.dev41/src/embtrefftz.hpp +0 -190
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.clang-format +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/fix_auditwheel_policy.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/Dockerfile +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/build_in_docker.sh +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/merge.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.github/workflows/pyodide/requirements.txt +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.gitignore +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/.gitmodules +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/CONTRIBUTING.md +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/LICENSE +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/Doxyfile.in +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/_static/breadcrumbs.html +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/_static/css/mytheme.css +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/contrib.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/index.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/intro.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/helmholtz.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/qtelliptic.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/qtwave.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/tunfitted.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/twave.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/twavetents.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/codemeta.json +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/paper.bib +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/paper/paper.md +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/requirements.txt +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/.github/workflows/build.yml +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/.gitignore +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/README.md +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/advection2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/euler2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/horn.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/demo/wave/wave3d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/INDEX.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/_config.yml +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/_toc.yml +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/conf.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/dag.png +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/map.png +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/index.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/intro.md +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/docs/requirements.txt +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/__init__.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/conslaw/__init__.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/__init__.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/_drawtents.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/pyproject.toml +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/CMakeLists.txt +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/advection.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/burgers.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/concurrentqueue.h +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/conservationlaw.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/euler.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/maxwell.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/paralleldepend.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/python_conslaw.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/python_tents.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/symbolic.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tents.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tents.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tentsolver.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/vis3d.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/vis3d.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/src/wave.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_causal_tents.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_conslaw.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/external_dependencies/ngstents/tests/test_tentlayers.py +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/airy.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/condensedg.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/condensedg.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/diffopmapped.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/mesh1dtents.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/mesh1dtents.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/monomialfespace.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/monomialfespace.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/ngsttd.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/planewavefe.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufe.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufe.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufespace.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/pufespace.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/python_trefftz.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/scalarmappedfe.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/scalarmappedfe.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialcoefficientfunction.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialcoefficientfunction.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialintegrator.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/specialintegrator.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/trefftzfespace.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/twavetents.cpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/src/twavetents.hpp +0 -0
- {ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/test/tents.py +0 -0
- {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
|
|
77
|
-
pip install
|
|
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.
|
|
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@
|
|
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:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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@
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
124
|
-
set(MKL_LIBRARY
|
|
125
|
-
set(MKL_INCLUDE_DIR
|
|
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
|
|
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
|
|
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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: ngstrefftz
|
|
3
|
-
Version: 0.3.2406.
|
|
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
|
|
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
|
-
##
|
|
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
|
[](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
|
[](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
|
-
##
|
|
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
|
[](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
|
[](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
|
-
..
|
|
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
|
-
"
|
|
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(\"
|
|
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.
|
|
163
|
+
"version": "3.13.2"
|
|
162
164
|
}
|
|
163
165
|
},
|
|
164
166
|
"nbformat": 4,
|
{ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-helm.ipynb
RENAMED
|
@@ -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
|
|
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
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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(\"
|
|
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.
|
|
280
|
+
"version": "3.13.2"
|
|
205
281
|
}
|
|
206
282
|
},
|
|
207
283
|
"nbformat": 4,
|
{ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-stokes.ipynb
RENAMED
|
@@ -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
|
-
"
|
|
130
|
-
" return
|
|
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.
|
|
356
|
+
"version": "3.13.2"
|
|
357
357
|
}
|
|
358
358
|
},
|
|
359
359
|
"nbformat": 4,
|
{ngstrefftz-0.3.2406.dev41 → ngstrefftz-0.3.2406.dev89}/docs/notebooks/embTrefftz-wave.ipynb
RENAMED
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
"\n",
|
|
264
264
|
"eps=10**-12\n",
|
|
265
265
|
"with TaskManager():\n",
|
|
266
|
-
" PP = TrefftzEmbedding(op,
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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(\"
|
|
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
|
-
"
|
|
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(\"
|
|
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
|
-
"
|
|
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
|
|
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
|
-
"
|
|
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(\"
|
|
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.
|
|
371
|
+
"version": "3.13.2"
|
|
365
372
|
}
|
|
366
373
|
},
|
|
367
374
|
"nbformat": 4,
|