ngstrefftz 0.3.2602.dev11__tar.gz → 0.3.2604.dev5__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.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/build.yml +25 -8
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/CMakeLists.txt +121 -95
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/PKG-INFO +72 -34
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/README.md +70 -30
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/_version.py +3 -3
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-stokes.ipynb +1 -1
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/requirements.txt +2 -2
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/pyproject.toml +10 -14
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/embtrefftz.cpp +2 -2
- ngstrefftz-0.3.2604.dev5/src/mesh1dtents.cpp +187 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/tents.py +17 -0
- ngstrefftz-0.3.2602.dev11/src/mesh1dtents.cpp +0 -176
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.clang-format +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/fix_auditwheel_policy.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/pyodide/Dockerfile +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/pyodide/build_in_docker.sh +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/pyodide/merge.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.github/workflows/pyodide/requirements.txt +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.gitignore +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/.gitmodules +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/CONTRIBUTING.md +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/Dockerfile +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/LICENSE +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/Doxyfile.in +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/_static/breadcrumbs.html +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/_static/css/mytheme.css +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/conf.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/contrib.rst +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/docu.rst +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/index.rst +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/intro.rst +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/helmholtz.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/index.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/laplace.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/qtelliptic.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/qtwave.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/tunfitted.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/twave.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/twavetents.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/paper/codemeta.json +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/paper/paper.bib +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/paper/paper.md +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/.github/workflows/build.yml +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/.gitignore +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/README.md +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/advection/advection2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/euler/euler2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/wave/horn.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/wave/wave2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/demo/wave/wave3d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/_config.yml +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/_toc.yml +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/assets/css/style.scss +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/do +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/figs/dag.png +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/figs/map.png +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/figs/ngsTentsLogo.png +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/index.ipynb +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/docs/requirements.txt +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/py/__init__.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/py/conslaw/__init__.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/py/utils/__init__.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/py/utils/_drawtents.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/pyproject.toml +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/CMakeLists.txt +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/advection.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/burgers.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/concurrentqueue.h +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/conservationlaw.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/euler.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/maxwell.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/paralleldepend.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/python_conslaw.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/python_tents.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/symbolic.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/tents.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/tents.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/tentsolver.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/vis3d.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/vis3d.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/src/wave.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/tests/test_causal_tents.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/tests/test_conslaw.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/external_dependencies/ngstents/tests/test_tentlayers.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/__init__.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/airy.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/boxintegral.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/boxintegral.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/condensedg.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/condensedg.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/diffopmapped.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/embtrefftz.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/mesh1dtents.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/monomialfespace.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/monomialfespace.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/ngsttd.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/planewavefe.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/planewavefe.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/pufe.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/pufe.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/pufespace.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/pufespace.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/python_trefftz.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/scalarmappedfe.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/scalarmappedfe.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/specialcoefficientfunction.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/specialcoefficientfunction.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/specialintegrator.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/specialintegrator.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/tp0fespace.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/tp0fespace.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/trefftzfespace.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/trefftzfespace.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/twavetents.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/src/twavetents.hpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/boxint.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/conforming_trefftz.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/dg.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/embt.py +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/embtrefftz_gtest.cpp +0 -0
- {ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/test/trefftz.py +0 -0
|
@@ -83,14 +83,31 @@ jobs:
|
|
|
83
83
|
deps = tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]["dependencies"]
|
|
84
84
|
subprocess.check_call(["pip", "install", *deps])
|
|
85
85
|
PY
|
|
86
|
-
- name:
|
|
86
|
+
- name: Configure
|
|
87
87
|
run: |
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
cmake \
|
|
89
|
+
-S "$GITHUB_WORKSPACE/NGSTrefftz" \
|
|
90
|
+
-B "$GITHUB_WORKSPACE/NGSTrefftz/make" \
|
|
91
|
+
-DNGSTREFFTZ_USE_GTEST=ON \
|
|
92
|
+
-DCMAKE_BUILD_TYPE=Release
|
|
93
|
+
- name: Build
|
|
94
|
+
run: |
|
|
95
|
+
cmake --build "$GITHUB_WORKSPACE/NGSTrefftz/make"
|
|
96
|
+
- name: Run tests
|
|
97
|
+
run: |
|
|
98
|
+
NGSOLVE_BLAS_LIBS="$(python - <<'PY'
|
|
99
|
+
import ngsolve_openblas
|
|
100
|
+
print(":".join(str(p) for p in ngsolve_openblas.get_libraries()))
|
|
101
|
+
PY
|
|
102
|
+
)"
|
|
103
|
+
|
|
104
|
+
echo "Preloading NGSolve BLAS libraries:"
|
|
105
|
+
echo "${NGSOLVE_BLAS_LIBS}"
|
|
106
|
+
|
|
107
|
+
LD_PRELOAD="${NGSOLVE_BLAS_LIBS}${LD_PRELOAD:+:${LD_PRELOAD}}" \
|
|
108
|
+
ctest \
|
|
109
|
+
--test-dir "$GITHUB_WORKSPACE/NGSTrefftz/make" \
|
|
110
|
+
--output-on-failure
|
|
94
111
|
|
|
95
112
|
build_wheels:
|
|
96
113
|
if: ${{ inputs.level != 'test_only' }}
|
|
@@ -321,7 +338,7 @@ jobs:
|
|
|
321
338
|
journal: joss
|
|
322
339
|
paper-path: docs/paper/paper.md
|
|
323
340
|
- name: Upload
|
|
324
|
-
uses: actions/upload-artifact@
|
|
341
|
+
uses: actions/upload-artifact@v6
|
|
325
342
|
with:
|
|
326
343
|
name: joss_paper
|
|
327
344
|
path: docs/paper/paper.pdf
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
cmake_minimum_required(VERSION 3.
|
|
1
|
+
cmake_minimum_required(VERSION 3.18)
|
|
2
2
|
########################################################
|
|
3
3
|
project(ngstrefftz)
|
|
4
4
|
########################################################
|
|
@@ -32,12 +32,111 @@ download_if_possible (
|
|
|
32
32
|
"${CMAKE_BINARY_DIR}/cmake_modules/ngsolve_addon.cmake")
|
|
33
33
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/cmake_modules)
|
|
34
34
|
|
|
35
|
+
# -----------------------------------------------------------------------------
|
|
36
|
+
# ngsolve-targets.cmake may reference MKL::MKL before NGSolveConfig.cmake has imported it
|
|
37
|
+
if(NOT TARGET MKL::MKL)
|
|
38
|
+
set(MKL_INTERFACE "lp64" CACHE STRING "MKL integer interface" FORCE)
|
|
39
|
+
set(MKL_LINK "sdl" CACHE STRING "MKL linking model" FORCE)
|
|
40
|
+
set(_NGSTREFFTZ_MKL_HINTS)
|
|
41
|
+
if(MKL_ROOT)
|
|
42
|
+
list(APPEND _NGSTREFFTZ_MKL_HINTS "${MKL_ROOT}/lib/cmake/mkl")
|
|
43
|
+
endif()
|
|
44
|
+
if(DEFINED ENV{MKLROOT} AND NOT "$ENV{MKLROOT}" STREQUAL "")
|
|
45
|
+
list(APPEND _NGSTREFFTZ_MKL_HINTS "$ENV{MKLROOT}/lib/cmake/mkl")
|
|
46
|
+
endif()
|
|
47
|
+
list(APPEND _NGSTREFFTZ_MKL_HINTS
|
|
48
|
+
"/opt/intel/oneapi/mkl/latest/lib/cmake/mkl"
|
|
49
|
+
"$ENV{HOME}/.local/lib/cmake/mkl"
|
|
50
|
+
)
|
|
51
|
+
find_package(MKL CONFIG QUIET HINTS ${_NGSTREFFTZ_MKL_HINTS})
|
|
52
|
+
endif()
|
|
53
|
+
|
|
54
|
+
# Older NGSolve wheels used the PyPI mkl-devel package.
|
|
55
|
+
if(NOT TARGET MKL::MKL)
|
|
56
|
+
find_package(Python3 QUIET COMPONENTS Interpreter)
|
|
57
|
+
if(Python3_Interpreter_FOUND)
|
|
58
|
+
execute_process(
|
|
59
|
+
COMMAND "${Python3_EXECUTABLE}" -c
|
|
60
|
+
"from importlib.metadata import files; fs=files('mkl-devel') or []; print(next((str(p.locate().parent.resolve()) for p in fs if p.name == 'MKLConfig.cmake'), ''))"
|
|
61
|
+
RESULT_VARIABLE _NGSTREFFTZ_MKL_QUERY_RESULT
|
|
62
|
+
OUTPUT_VARIABLE _NGSTREFFTZ_MKL_CONFIG_DIR
|
|
63
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
64
|
+
ERROR_QUIET
|
|
65
|
+
)
|
|
66
|
+
if(_NGSTREFFTZ_MKL_QUERY_RESULT EQUAL 0
|
|
67
|
+
AND _NGSTREFFTZ_MKL_CONFIG_DIR
|
|
68
|
+
AND EXISTS "${_NGSTREFFTZ_MKL_CONFIG_DIR}/MKLConfig.cmake")
|
|
69
|
+
find_package(MKL CONFIG QUIET
|
|
70
|
+
HINTS "${_NGSTREFFTZ_MKL_CONFIG_DIR}"
|
|
71
|
+
NO_DEFAULT_PATH
|
|
72
|
+
)
|
|
73
|
+
endif()
|
|
74
|
+
endif()
|
|
75
|
+
endif()
|
|
76
|
+
|
|
77
|
+
if(TARGET MKL::MKL)
|
|
78
|
+
message(STATUS "Preloaded MKL::MKL for the NGSolve CMake package")
|
|
79
|
+
endif()
|
|
80
|
+
|
|
81
|
+
unset(_NGSTREFFTZ_MKL_HINTS)
|
|
82
|
+
unset(_NGSTREFFTZ_MKL_QUERY_RESULT)
|
|
83
|
+
unset(_NGSTREFFTZ_MKL_CONFIG_DIR)
|
|
84
|
+
|
|
85
|
+
function(ngstrefftz_relocate_ngsolve_openblas)
|
|
86
|
+
if(NOT TARGET ngs_lapack OR APPLE)
|
|
87
|
+
return()
|
|
88
|
+
endif()
|
|
89
|
+
|
|
90
|
+
get_target_property(_ngs_lapack_libs ngs_lapack INTERFACE_LINK_LIBRARIES)
|
|
91
|
+
if(NOT _ngs_lapack_libs)
|
|
92
|
+
return()
|
|
93
|
+
endif()
|
|
94
|
+
|
|
95
|
+
set(_ngs_openblas_paths_are_stale FALSE)
|
|
96
|
+
foreach(_lib IN LISTS _ngs_lapack_libs)
|
|
97
|
+
if(IS_ABSOLUTE "${_lib}"
|
|
98
|
+
AND "${_lib}" MATCHES "ngsolve_openblas"
|
|
99
|
+
AND NOT EXISTS "${_lib}")
|
|
100
|
+
set(_ngs_openblas_paths_are_stale TRUE)
|
|
101
|
+
endif()
|
|
102
|
+
endforeach()
|
|
103
|
+
|
|
104
|
+
if(NOT _ngs_openblas_paths_are_stale)
|
|
105
|
+
return()
|
|
106
|
+
endif()
|
|
107
|
+
|
|
108
|
+
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
109
|
+
|
|
110
|
+
execute_process(
|
|
111
|
+
COMMAND "${Python3_EXECUTABLE}" -c
|
|
112
|
+
"import importlib.util, pathlib, sys; s=importlib.util.find_spec('ngsolve_openblas'); p=pathlib.Path(next(iter(s.submodule_search_locations))) if s and s.submodule_search_locations else None; libs=([*p.glob('libopenblas*.so*'), *p.glob('libgfortran*.so*')] if p and sys.platform.startswith('linux') else ([p/'openblas.lib'] if p and sys.platform.startswith('win') else [])); print(';'.join(str(x.resolve()) for x in libs if x.exists()))"
|
|
113
|
+
RESULT_VARIABLE _ngs_openblas_query_result
|
|
114
|
+
OUTPUT_VARIABLE _ngs_openblas_libraries
|
|
115
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
116
|
+
ERROR_VARIABLE _ngs_openblas_query_error
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
if(NOT _ngs_openblas_query_result EQUAL 0 OR NOT _ngs_openblas_libraries)
|
|
120
|
+
message(FATAL_ERROR
|
|
121
|
+
"NGSolve's ngs_lapack target contains stale ngsolve_openblas paths, "
|
|
122
|
+
"but the active Python environment does not provide usable OpenBLAS "
|
|
123
|
+
"libraries. Python error: ${_ngs_openblas_query_error}")
|
|
124
|
+
endif()
|
|
125
|
+
|
|
126
|
+
message(STATUS
|
|
127
|
+
"Relocating NGSolve OpenBLAS link interface to: ${_ngs_openblas_libraries}")
|
|
128
|
+
set_property(TARGET ngs_lapack PROPERTY
|
|
129
|
+
INTERFACE_LINK_LIBRARIES "${_ngs_openblas_libraries}")
|
|
130
|
+
endfunction()
|
|
131
|
+
# -----------------------------------------------------------------------------
|
|
132
|
+
|
|
35
133
|
### ngstrefftz
|
|
36
134
|
|
|
37
135
|
set(addon_name ngstrefftz)
|
|
38
136
|
project(ngstrefftz)
|
|
39
137
|
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src) # SYSTEM to suppress warnings from headers
|
|
40
138
|
include(${CMAKE_BINARY_DIR}/cmake_modules/ngsolve_addon.cmake)
|
|
139
|
+
ngstrefftz_relocate_ngsolve_openblas()
|
|
41
140
|
add_ngsolve_addon(ngstrefftz
|
|
42
141
|
${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
|
|
43
142
|
src/python_trefftz.cpp
|
|
@@ -90,98 +189,23 @@ endif()
|
|
|
90
189
|
### user options
|
|
91
190
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} CACHE PATH "build dir")
|
|
92
191
|
set(NGSTREFFTZ_USE_GTEST OFF CACHE BOOL "Try to use gtest")
|
|
93
|
-
set(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
### link LAPACK or MKL if possible
|
|
97
|
-
if (NGSTREFFTZ_USE_MKL)
|
|
98
|
-
download_if_possible(
|
|
99
|
-
"https://raw.githubusercontent.com/NGSolve/ngsolve/master/cmake/cmake_modules/FindMKL.cmake"
|
|
100
|
-
"${CMAKE_BINARY_DIR}/cmake_modules/FindMKL.cmake")
|
|
101
|
-
|
|
102
|
-
#file(COPY ${CMAKE_SOURCE_DIR}/FindMKL.cmake DESTINATION
|
|
103
|
-
#"${CMAKE_BINARY_DIR}/cmake_modules/FindMKL.cmake")
|
|
104
|
-
|
|
105
|
-
#message(STATUS "MKL_ROOT=${MKL_ROOT}")
|
|
106
|
-
#message(STATUS "NGSOLVED=${NGSolve_DIR}")
|
|
107
|
-
|
|
108
|
-
#set(PIP_MKL_ROOT FALSE CACHE BOOL "Set to true if MKL_ROOT is set by pip")
|
|
109
|
-
#message(STATUS "PIP_MKL_ROOT=${PIP_MKL_ROOT}")
|
|
110
|
-
#if(PIP_MKL_ROOT AND LINUX)
|
|
111
|
-
#set(MKL_ROOT "${NGSolve_DIR}/../../.." CACHE PATH "MKL root directory" )
|
|
112
|
-
#set(MKL_LIBRARY "${MKL_ROOT}/lib/libmkl_rt.so.2" CACHE PATH "MKL library" )
|
|
113
|
-
#set(MKL_INCLUDE_DIR "${MKL_ROOT}/include" CACHE PATH "MKL include directory" )
|
|
114
|
-
#message(STATUS "set MKL_LIBRARY=${MKL_LIBRARY}")
|
|
115
|
-
#elseif(PIP_MKL_ROOT AND WIN32)
|
|
116
|
-
#set(MKL_ROOT "${NGSolve_DIR}/../../../.." CACHE PATH "MKL root directory" )
|
|
117
|
-
#set(MKL_LIBRARY "${MKL_ROOT}/Library/lib/mkl_rt.lib" CACHE PATH "MKL library" )
|
|
118
|
-
#set(MKL_INCLUDE_DIR "${MKL_ROOT}/Library/include" CACHE PATH "MKL include directory" )
|
|
119
|
-
#endif()
|
|
120
|
-
|
|
121
|
-
set(MKL_ARCH "intel64")
|
|
122
|
-
if(NOT MKL_INTERFACE)
|
|
123
|
-
set(MKL_INTERFACE "lp64")
|
|
124
|
-
endif(NOT MKL_INTERFACE)
|
|
125
|
-
set(MKL_MULTI_THREADED ON CACHE BOOL "Use threaded MKL libs")
|
|
126
|
-
if(NOT MKL_MULTI_THREADED)
|
|
127
|
-
set(MKL_THREADING sequential)
|
|
128
|
-
endif()
|
|
129
|
-
set(MKL_STATIC OFF CACHE BOOL "Link static MKL")
|
|
130
|
-
set(MKL_SDL ON CACHE BOOL "Link single dynamic MKL lib")
|
|
131
|
-
if(NOT MKL_LINK)
|
|
132
|
-
if(MKL_STATIC)
|
|
133
|
-
set(MKL_LINK static)
|
|
134
|
-
elseif(MKL_SDL)
|
|
135
|
-
set(MKL_LINK sdl)
|
|
136
|
-
else()
|
|
137
|
-
set(MKL_LINK dynamic)
|
|
138
|
-
endif()
|
|
139
|
-
endif()
|
|
192
|
+
set(NGSTREFFTZ_USE_LAPACK ${NGSOLVE_USE_LAPACK} CACHE BOOL
|
|
193
|
+
"Use the BLAS/LAPACK backend exported by NGSolve")
|
|
194
|
+
set(NGSTREFFTZ_USE_MKL ${NGSOLVE_USE_MKL})
|
|
140
195
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if(
|
|
144
|
-
message(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
set(MKL_LIBRARY ${MKL_ROOT}/lib/libmkl_rt.so.2 CACHE PATH "MKL library" )
|
|
148
|
-
set(MKL_INCLUDE_DIR ${MKL_ROOT}/include CACHE PATH "MKL include directory" )
|
|
196
|
+
### use the LAPACK backend exported by NGSolve hopefully...
|
|
197
|
+
if(NGSTREFFTZ_USE_LAPACK)
|
|
198
|
+
if(NOT NGSOLVE_USE_LAPACK)
|
|
199
|
+
message(FATAL_ERROR "NGSTREFFTZ_USE_LAPACK=ON, but NGSolve was built without LAPACK")
|
|
200
|
+
elseif(NOT TARGET ngs_lapack)
|
|
201
|
+
message(FATAL_ERROR "NGSolve reports LAPACK support, but did not export the ngs_lapack target")
|
|
149
202
|
endif()
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
#set(d lib/cmake/mkl)
|
|
153
|
-
#find_package(MKL CONFIG REQUIRED HINTS ${MKL_CONF} ${MKL_ROOT}/${d} PATHS /opt/intel/oneapi/mkl/latest/${d} ~/.local/${d})
|
|
154
|
-
|
|
155
|
-
unset(USE_MPI CACHE)
|
|
156
|
-
find_package(MKL)
|
|
157
|
-
|
|
158
|
-
#if(USE_MUMPS)
|
|
159
|
-
## include scalapack
|
|
160
|
-
#set( LAPACK_LIBRARIES "${MKL_LIBRARIES}")
|
|
161
|
-
#set( ENABLE_SCALAPACK ON)
|
|
162
|
-
#else(USE_MUMPS)
|
|
163
|
-
#set( LAPACK_LIBRARIES "${MKL_MINIMAL_LIBRARIES}")
|
|
164
|
-
#endif(USE_MUMPS)
|
|
165
|
-
|
|
166
|
-
if(MKL_FOUND)
|
|
167
|
-
message(STATUS "Found MKL_MINIMAL_LIBRARIES=${MKL_MINIMAL_LIBRARIES}")
|
|
168
|
-
set( LAPACK_LIBRARIES "${MKL_MINIMAL_LIBRARIES}")
|
|
169
|
-
else()
|
|
170
|
-
message("${Red}MKL not found!${ColourReset}")
|
|
171
|
-
endif()
|
|
172
|
-
endif (NGSTREFFTZ_USE_MKL)
|
|
173
|
-
if(NGSTREFFTZ_USE_LAPACK AND NOT LAPACK_LIBRARIES)
|
|
174
|
-
message(STATUS "Looking for LAPACK")
|
|
175
|
-
find_package(LAPACK)
|
|
176
|
-
endif(NGSTREFFTZ_USE_LAPACK AND NOT LAPACK_LIBRARIES)
|
|
177
|
-
if(LAPACK_LIBRARIES)
|
|
178
|
-
#target_link_libraries(ngstrefftz PRIVATE $<BUILD_INTERFACE:ngs_lapack>)
|
|
179
|
-
message(STATUS "Linking with LAPACK_LIBRARIES=${LAPACK_LIBRARIES}")
|
|
180
|
-
target_link_libraries(ngstrefftz PRIVATE ${LAPACK_LIBRARIES})
|
|
203
|
+
message(STATUS "Linking NGSTrefftz against the NGSolve ngs_lapack target")
|
|
204
|
+
target_link_libraries(ngstrefftz PRIVATE ngs_lapack)
|
|
181
205
|
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_LAPACK)
|
|
182
|
-
else(
|
|
183
|
-
message("
|
|
184
|
-
endif(
|
|
206
|
+
else()
|
|
207
|
+
message(WARNING "LAPACK disabled for NGSTrefftz, restricted usage!")
|
|
208
|
+
endif()
|
|
185
209
|
|
|
186
210
|
### doc
|
|
187
211
|
option(NGSTREFFTZ_BUILD_DOC "Build documentation" OFF)
|
|
@@ -247,11 +271,10 @@ if(NGSTREFFTZ_USE_GTEST)
|
|
|
247
271
|
find_package(GTest REQUIRED)
|
|
248
272
|
include(GoogleTest)
|
|
249
273
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18")
|
|
250
|
-
find_package(Python3 REQUIRED COMPONENTS Development.Embed)
|
|
274
|
+
find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Embed)
|
|
251
275
|
endif()
|
|
252
|
-
add_executable(trefftz_gtest
|
|
253
|
-
|
|
254
|
-
)
|
|
276
|
+
add_executable(trefftz_gtest ${CMAKE_SOURCE_DIR}/test/embtrefftz_gtest.cpp)
|
|
277
|
+
|
|
255
278
|
target_include_directories(trefftz_gtest BEFORE PRIVATE
|
|
256
279
|
$<TARGET_PROPERTY:ngsolve,INTERFACE_INCLUDE_DIRECTORIES>
|
|
257
280
|
${CMAKE_SOURCE_DIR}/src
|
|
@@ -262,9 +285,12 @@ if(NGSTREFFTZ_USE_GTEST)
|
|
|
262
285
|
ngsolve
|
|
263
286
|
ngstrefftz
|
|
264
287
|
)
|
|
288
|
+
if(TARGET ngs_lapack)
|
|
289
|
+
target_link_libraries(trefftz_gtest PRIVATE ngs_lapack)
|
|
290
|
+
endif()
|
|
265
291
|
set_target_properties(trefftz_gtest PROPERTIES
|
|
266
292
|
PREFIX ""
|
|
267
|
-
CXX_STANDARD
|
|
293
|
+
CXX_STANDARD 20
|
|
268
294
|
CXX_STANDARD_REQUIRED ON
|
|
269
295
|
)
|
|
270
296
|
gtest_add_tests(TARGET trefftz_gtest)
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: ngstrefftz
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2604.dev5
|
|
4
4
|
Summary: NGSTrefftz is an add-on to NGSolve for Trefftz methods.
|
|
5
5
|
Author-Email: Paul Stocker <paul.stocker@univie.ac.at>
|
|
6
6
|
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
|
|
7
7
|
Project-URL: Documentation, https://paulst.github.io/NGSTrefftz
|
|
8
8
|
Project-URL: Repository, https://github.com/PaulSt/ngstrefftz
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
|
-
Requires-Dist:
|
|
11
|
-
Requires-Dist: mkl-devel<2026.0,>=2024; platform_system != "Darwin"
|
|
12
|
-
Requires-Dist: ngsolve==6.2.2603
|
|
10
|
+
Requires-Dist: ngsolve==6.2.2605
|
|
13
11
|
Description-Content-Type: text/markdown
|
|
14
12
|
|
|
15
13
|
# NGSTrefftz
|
|
@@ -25,10 +23,15 @@ Description-Content-Type: text/markdown
|
|
|
25
23
|
NGSTrefftz provides a framework to implement Trefftz finite element spaces for [NGSolve](https://www.ngsolve.org), with several Trefftz spaces already implemented. Additionally, Trefftz-DG on tent-pitched meshes for the acoustic wave equation is implemented using meshes provided by [ngstents](https://github.com/jayggg/ngstents). Furthermore, the package includes an implementation of the embedded Trefftz method.
|
|
26
24
|
|
|
27
25
|
## Try it out!
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
The documentation is available here:
|
|
27
|
+
|
|
28
|
+
[](https://paulst.github.io/NGSTrefftz/)
|
|
29
|
+
|
|
30
|
+
You can also try the example notebooks directly in Binder:
|
|
31
|
+
|
|
32
|
+
[](https://mybinder.org/v2/gh/PaulSt/NGSTrefftz/HEAD?filepath=docs%2Fnotebooks%2Findex.ipynb)
|
|
33
|
+
|
|
34
|
+
or run them locally using Docker:
|
|
32
35
|
|
|
33
36
|
```bash
|
|
34
37
|
git clone https://github.com/PaulSt/NGSTrefftz
|
|
@@ -36,43 +39,40 @@ cd NGSTrefftz && docker build -t ngstrefftz_jupyter .
|
|
|
36
39
|
docker run -p 8888:8888 ngstrefftz_jupyter
|
|
37
40
|
```
|
|
38
41
|
|
|
39
|
-
##
|
|
40
|
-
|
|
41
|
-
* install using pip
|
|
42
|
-
|
|
42
|
+
## Installation
|
|
43
|
+
The recommended installation is via pip:
|
|
43
44
|
```bash
|
|
44
45
|
pip install ngstrefftz
|
|
45
46
|
```
|
|
46
|
-
|
|
47
|
-
* or build from source
|
|
48
|
-
|
|
47
|
+
Alternatively, to build NGSTrefftz from source:
|
|
49
48
|
```bash
|
|
50
49
|
git clone --recursive https://github.com/PaulSt/NGSTrefftz
|
|
51
50
|
mkdir ./NGSTrefftz/make && cd ./NGSTrefftz/make
|
|
52
51
|
cmake ../ && make install
|
|
53
52
|
```
|
|
53
|
+
When building from source, the following dependencies are required:
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
* [cmake](https://cmake.org/) >= 3.1
|
|
62
|
-
* [gcc](https://gcc.gnu.org/) >= 9 or [clang](https://clang.llvm.org/) >= 10
|
|
63
|
-
* [lapack](http://www.netlib.org/lapack/) >= 3.9 (required to access the newest features)
|
|
64
|
-
* [ngsolve](https://www.ngsolve.org) >= 6.2 (to access the newest features the nightly version of NGSolve works best)
|
|
55
|
+
* [cmake](https://cmake.org/) >= 3.1
|
|
56
|
+
* [gcc](https://gcc.gnu.org/) >= 9 or [clang](https://clang.llvm.org/) >= 10
|
|
57
|
+
* [lapack](http://www.netlib.org/lapack/) >= 3.9
|
|
58
|
+
* [ngsolve](https://www.ngsolve.org) >= 6.2
|
|
59
|
+
|
|
60
|
+
For access to the newest features, the nightly version of NGSolve usually works best.
|
|
65
61
|
|
|
66
62
|
## News
|
|
63
|
+
🚀 Jan, 2026: [Trefftz Workshop](https://trefftz2026.univie.ac.at/) will be held on 7-9 September 2026 in Vienna, Austria
|
|
64
|
+
|
|
67
65
|
⚠️ Apr, 2025: `TrefftzEmbedding` has a new interface, please check the documentation for details.
|
|
68
66
|
|
|
69
|
-
🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm)
|
|
67
|
+
🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm) with examples in [ngstSpaceKit](https://codeberg.org/johann-cm/ngstspacekit)
|
|
68
|
+
<details>
|
|
69
|
+
<summary>Older news</summary>
|
|
70
70
|
|
|
71
71
|
⚠️ Oct, 2022: With v0.2.0 the git history has undergone a major cleanup, please make sure to clone the repo anew.
|
|
72
72
|
|
|
73
73
|
🚀 Oct, 2022: New and improved implementation of the embedded Trefftz method via `EmbeddedTrefftzFES`!
|
|
74
74
|
|
|
75
|
-
🚀 Aug, 2022:
|
|
75
|
+
🚀 Aug, 2022: [pip](https://pypi.org/search/?q=ngstrefftz)-installer available, now using wheels!
|
|
76
76
|
|
|
77
77
|
🚀 Mar, 2022: NGSTrefftz now has a [website](https://paulst.github.io/NGSTrefftz/)!
|
|
78
78
|
|
|
@@ -81,8 +81,49 @@ pip install ngsolve --pre
|
|
|
81
81
|
🚀 Jan, 2022: NGSTrefftz is now available via pip!
|
|
82
82
|
|
|
83
83
|
🚀 Nov, 2021: NGSTrefftz now comes in a docker and with binder notebooks!
|
|
84
|
+
</details>
|
|
85
|
+
|
|
86
|
+
## Publications and citation
|
|
87
|
+
|
|
88
|
+
If you are using `ngstrefftz` in your academic work, please consider citing the JOSS paper:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
@article{Stocker2022NGSTrefftz,
|
|
92
|
+
author = {Stocker, Paul},
|
|
93
|
+
title = {{NGSTrefftz}: Add-on to {NGSolve} for {Trefftz} methods},
|
|
94
|
+
journal = {Journal of Open Source Software},
|
|
95
|
+
year = {2022},
|
|
96
|
+
volume = {7},
|
|
97
|
+
number = {71},
|
|
98
|
+
pages = {4135},
|
|
99
|
+
doi = {10.21105/joss.04135}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
84
102
|
|
|
85
|
-
|
|
103
|
+
<details>
|
|
104
|
+
<summary><h3>Publications using NGSTrefftz</h3></summary>
|
|
105
|
+
|
|
106
|
+
* *Embedded Trefftz DG method for steady Navier-Stokes flow. Part II: Nonlinear problem*
|
|
107
|
+
Paul Stocker, Igor Voulis, Christoph Lehrenfeld, Philip L. Lederer
|
|
108
|
+
[](https://arxiv.org/abs/2606.13219)
|
|
109
|
+
* *Embedded Trefftz DG method for steady Navier-Stokes flow. Part I: Oseen linearization*
|
|
110
|
+
Paul Stocker, Igor Voulis, Christoph Lehrenfeld, Philip L. Lederer
|
|
111
|
+
[](https://arxiv.org/abs/2606.13229)
|
|
112
|
+
* *Embedded Trefftz DG method for reaction-diffusion problems on anisotropic meshes*
|
|
113
|
+
Sergio Gómez, Chiara Perinati, Paul Stocker, Igor Voulis
|
|
114
|
+
[](https://arxiv.org/abs/2606.03845)
|
|
115
|
+
* *Discontinuous Galerkin Trefftz Methods for Model Reduction of Wave Phenomena*
|
|
116
|
+
Tobias Born, Karsten Urban
|
|
117
|
+
[PAMM article](https://doi.org/10.1002/pamm.70155)
|
|
118
|
+
* *Releasing the pressure: High-order surface flow discretizations via discrete Helmholtz–Hodge decompositions*
|
|
119
|
+
Tim Brüers, Christoph Lehrenfeld, Tim van Beeck, Max Wardetzky
|
|
120
|
+
[](https://arxiv.org/abs/2603.27714)
|
|
121
|
+
* *A discontinuous Galerkin method for elliptic-hyperbolic equations*
|
|
122
|
+
Chiara Perinati, Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
|
|
123
|
+
[](https://arxiv.org/abs/2604.06910)
|
|
124
|
+
* *Embedded Trefftz DG method for the Helmholtz equation*
|
|
125
|
+
Paul Stocker, Igor Voulis
|
|
126
|
+
[](https://arxiv.org/abs/2603.13034)
|
|
86
127
|
* *A unified framework for Trefftz-like discretization methods*
|
|
87
128
|
Philip L. Lederer, Christoph Lehrenfeld, Paul Stocker, Igor Voulis
|
|
88
129
|
[](https://arxiv.org/abs/2412.00806)
|
|
@@ -107,14 +148,11 @@ Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
|
|
|
107
148
|
* *Tent pitching and Trefftz-DG method for the acoustic wave equation*
|
|
108
149
|
Ilaria Perugia, Joachim Schöberl, Paul Stocker, Christoph Wintersteiger
|
|
109
150
|
[](https://arxiv.org/abs/1907.02367)
|
|
151
|
+
* *On the Conforming Trefftz Finite Element Method and Applications*
|
|
152
|
+
Johann Carl Meyer, [Master's thesis](https://doi.org/10.5281/zenodo.17307511)
|
|
110
153
|
* *Space-time Trefftz DG methods for parabolic PDEs*
|
|
111
154
|
Constanze Heil, [Master's thesis](https://doi.org/10.25625/ZSA8UU/2L4C1E)
|
|
112
155
|
* *Embedded Trefftz Trace DG Methods for PDEs on unfitted Surfaces*
|
|
113
156
|
Erik Schlesinger, [Master's thesis](https://doi.org/10.25625/QTOPWD/93ZYRQ)
|
|
114
157
|
|
|
115
|
-
|
|
116
|
-
If you are using `ngstrefftz` in your academic work, please consider citing
|
|
117
|
-
```
|
|
118
|
-
Stocker, P., (2022). NGSTrefftz: Add-on to NGSolve for Trefftz methods.
|
|
119
|
-
Journal of Open Source Software, 7(71), 4135, https://doi.org/10.21105/joss.04135
|
|
120
|
-
```
|
|
158
|
+
</details>
|
|
@@ -11,10 +11,15 @@
|
|
|
11
11
|
NGSTrefftz provides a framework to implement Trefftz finite element spaces for [NGSolve](https://www.ngsolve.org), with several Trefftz spaces already implemented. Additionally, Trefftz-DG on tent-pitched meshes for the acoustic wave equation is implemented using meshes provided by [ngstents](https://github.com/jayggg/ngstents). Furthermore, the package includes an implementation of the embedded Trefftz method.
|
|
12
12
|
|
|
13
13
|
## Try it out!
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
The documentation is available here:
|
|
15
|
+
|
|
16
|
+
[](https://paulst.github.io/NGSTrefftz/)
|
|
17
|
+
|
|
18
|
+
You can also try the example notebooks directly in Binder:
|
|
19
|
+
|
|
20
|
+
[](https://mybinder.org/v2/gh/PaulSt/NGSTrefftz/HEAD?filepath=docs%2Fnotebooks%2Findex.ipynb)
|
|
21
|
+
|
|
22
|
+
or run them locally using Docker:
|
|
18
23
|
|
|
19
24
|
```bash
|
|
20
25
|
git clone https://github.com/PaulSt/NGSTrefftz
|
|
@@ -22,43 +27,40 @@ cd NGSTrefftz && docker build -t ngstrefftz_jupyter .
|
|
|
22
27
|
docker run -p 8888:8888 ngstrefftz_jupyter
|
|
23
28
|
```
|
|
24
29
|
|
|
25
|
-
##
|
|
26
|
-
|
|
27
|
-
* install using pip
|
|
28
|
-
|
|
30
|
+
## Installation
|
|
31
|
+
The recommended installation is via pip:
|
|
29
32
|
```bash
|
|
30
33
|
pip install ngstrefftz
|
|
31
34
|
```
|
|
32
|
-
|
|
33
|
-
* or build from source
|
|
34
|
-
|
|
35
|
+
Alternatively, to build NGSTrefftz from source:
|
|
35
36
|
```bash
|
|
36
37
|
git clone --recursive https://github.com/PaulSt/NGSTrefftz
|
|
37
38
|
mkdir ./NGSTrefftz/make && cd ./NGSTrefftz/make
|
|
38
39
|
cmake ../ && make install
|
|
39
40
|
```
|
|
41
|
+
When building from source, the following dependencies are required:
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* [cmake](https://cmake.org/) >= 3.1
|
|
48
|
-
* [gcc](https://gcc.gnu.org/) >= 9 or [clang](https://clang.llvm.org/) >= 10
|
|
49
|
-
* [lapack](http://www.netlib.org/lapack/) >= 3.9 (required to access the newest features)
|
|
50
|
-
* [ngsolve](https://www.ngsolve.org) >= 6.2 (to access the newest features the nightly version of NGSolve works best)
|
|
43
|
+
* [cmake](https://cmake.org/) >= 3.1
|
|
44
|
+
* [gcc](https://gcc.gnu.org/) >= 9 or [clang](https://clang.llvm.org/) >= 10
|
|
45
|
+
* [lapack](http://www.netlib.org/lapack/) >= 3.9
|
|
46
|
+
* [ngsolve](https://www.ngsolve.org) >= 6.2
|
|
47
|
+
|
|
48
|
+
For access to the newest features, the nightly version of NGSolve usually works best.
|
|
51
49
|
|
|
52
50
|
## News
|
|
51
|
+
🚀 Jan, 2026: [Trefftz Workshop](https://trefftz2026.univie.ac.at/) will be held on 7-9 September 2026 in Vienna, Austria
|
|
52
|
+
|
|
53
53
|
⚠️ Apr, 2025: `TrefftzEmbedding` has a new interface, please check the documentation for details.
|
|
54
54
|
|
|
55
|
-
🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm)
|
|
55
|
+
🚀 Jul, 2024: Conforming Trefftz embedding implementation by [@johann-cm](https://github.com/johann-cm) with examples in [ngstSpaceKit](https://codeberg.org/johann-cm/ngstspacekit)
|
|
56
|
+
<details>
|
|
57
|
+
<summary>Older news</summary>
|
|
56
58
|
|
|
57
59
|
⚠️ Oct, 2022: With v0.2.0 the git history has undergone a major cleanup, please make sure to clone the repo anew.
|
|
58
60
|
|
|
59
61
|
🚀 Oct, 2022: New and improved implementation of the embedded Trefftz method via `EmbeddedTrefftzFES`!
|
|
60
62
|
|
|
61
|
-
🚀 Aug, 2022:
|
|
63
|
+
🚀 Aug, 2022: [pip](https://pypi.org/search/?q=ngstrefftz)-installer available, now using wheels!
|
|
62
64
|
|
|
63
65
|
🚀 Mar, 2022: NGSTrefftz now has a [website](https://paulst.github.io/NGSTrefftz/)!
|
|
64
66
|
|
|
@@ -67,8 +69,49 @@ pip install ngsolve --pre
|
|
|
67
69
|
🚀 Jan, 2022: NGSTrefftz is now available via pip!
|
|
68
70
|
|
|
69
71
|
🚀 Nov, 2021: NGSTrefftz now comes in a docker and with binder notebooks!
|
|
72
|
+
</details>
|
|
73
|
+
|
|
74
|
+
## Publications and citation
|
|
75
|
+
|
|
76
|
+
If you are using `ngstrefftz` in your academic work, please consider citing the JOSS paper:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
@article{Stocker2022NGSTrefftz,
|
|
80
|
+
author = {Stocker, Paul},
|
|
81
|
+
title = {{NGSTrefftz}: Add-on to {NGSolve} for {Trefftz} methods},
|
|
82
|
+
journal = {Journal of Open Source Software},
|
|
83
|
+
year = {2022},
|
|
84
|
+
volume = {7},
|
|
85
|
+
number = {71},
|
|
86
|
+
pages = {4135},
|
|
87
|
+
doi = {10.21105/joss.04135}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
70
90
|
|
|
71
|
-
|
|
91
|
+
<details>
|
|
92
|
+
<summary><h3>Publications using NGSTrefftz</h3></summary>
|
|
93
|
+
|
|
94
|
+
* *Embedded Trefftz DG method for steady Navier-Stokes flow. Part II: Nonlinear problem*
|
|
95
|
+
Paul Stocker, Igor Voulis, Christoph Lehrenfeld, Philip L. Lederer
|
|
96
|
+
[](https://arxiv.org/abs/2606.13219)
|
|
97
|
+
* *Embedded Trefftz DG method for steady Navier-Stokes flow. Part I: Oseen linearization*
|
|
98
|
+
Paul Stocker, Igor Voulis, Christoph Lehrenfeld, Philip L. Lederer
|
|
99
|
+
[](https://arxiv.org/abs/2606.13229)
|
|
100
|
+
* *Embedded Trefftz DG method for reaction-diffusion problems on anisotropic meshes*
|
|
101
|
+
Sergio Gómez, Chiara Perinati, Paul Stocker, Igor Voulis
|
|
102
|
+
[](https://arxiv.org/abs/2606.03845)
|
|
103
|
+
* *Discontinuous Galerkin Trefftz Methods for Model Reduction of Wave Phenomena*
|
|
104
|
+
Tobias Born, Karsten Urban
|
|
105
|
+
[PAMM article](https://doi.org/10.1002/pamm.70155)
|
|
106
|
+
* *Releasing the pressure: High-order surface flow discretizations via discrete Helmholtz–Hodge decompositions*
|
|
107
|
+
Tim Brüers, Christoph Lehrenfeld, Tim van Beeck, Max Wardetzky
|
|
108
|
+
[](https://arxiv.org/abs/2603.27714)
|
|
109
|
+
* *A discontinuous Galerkin method for elliptic-hyperbolic equations*
|
|
110
|
+
Chiara Perinati, Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
|
|
111
|
+
[](https://arxiv.org/abs/2604.06910)
|
|
112
|
+
* *Embedded Trefftz DG method for the Helmholtz equation*
|
|
113
|
+
Paul Stocker, Igor Voulis
|
|
114
|
+
[](https://arxiv.org/abs/2603.13034)
|
|
72
115
|
* *A unified framework for Trefftz-like discretization methods*
|
|
73
116
|
Philip L. Lederer, Christoph Lehrenfeld, Paul Stocker, Igor Voulis
|
|
74
117
|
[](https://arxiv.org/abs/2412.00806)
|
|
@@ -93,14 +136,11 @@ Lise-Marie Imbert-Gérard, Andrea Moiola, Paul Stocker
|
|
|
93
136
|
* *Tent pitching and Trefftz-DG method for the acoustic wave equation*
|
|
94
137
|
Ilaria Perugia, Joachim Schöberl, Paul Stocker, Christoph Wintersteiger
|
|
95
138
|
[](https://arxiv.org/abs/1907.02367)
|
|
139
|
+
* *On the Conforming Trefftz Finite Element Method and Applications*
|
|
140
|
+
Johann Carl Meyer, [Master's thesis](https://doi.org/10.5281/zenodo.17307511)
|
|
96
141
|
* *Space-time Trefftz DG methods for parabolic PDEs*
|
|
97
142
|
Constanze Heil, [Master's thesis](https://doi.org/10.25625/ZSA8UU/2L4C1E)
|
|
98
143
|
* *Embedded Trefftz Trace DG Methods for PDEs on unfitted Surfaces*
|
|
99
144
|
Erik Schlesinger, [Master's thesis](https://doi.org/10.25625/QTOPWD/93ZYRQ)
|
|
100
145
|
|
|
101
|
-
|
|
102
|
-
If you are using `ngstrefftz` in your academic work, please consider citing
|
|
103
|
-
```
|
|
104
|
-
Stocker, P., (2022). NGSTrefftz: Add-on to NGSolve for Trefftz methods.
|
|
105
|
-
Journal of Open Source Software, 7(71), 4135, https://doi.org/10.21105/joss.04135
|
|
106
|
-
```
|
|
146
|
+
</details>
|
|
@@ -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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 3,
|
|
21
|
+
__version__ = version = '0.3.2604.dev5'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 3, 2604, 'dev5')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g2374c3cb2'
|
{ngstrefftz-0.3.2602.dev11 → ngstrefftz-0.3.2604.dev5}/docs/notebooks/embTrefftz-stokes.ipynb
RENAMED
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
"PP, uf = TrefftzStokesEmb(fes, rhs)\n",
|
|
316
316
|
"PPT = PP.CreateTranspose()\n",
|
|
317
317
|
"TA = PPT @ a.mat @ PP\n",
|
|
318
|
-
"Tgfu = TA.Inverse(
|
|
318
|
+
"Tgfu = TA.Inverse() * (PPT * (f.vec - a.mat * uf))\n",
|
|
319
319
|
"gfu = GridFunction(fes)\n",
|
|
320
320
|
"gfu.vec.data = PP * Tgfu + uf"
|
|
321
321
|
]
|
|
@@ -11,6 +11,7 @@ nbconvert>=7.16.4
|
|
|
11
11
|
nbformat>=5.10.4
|
|
12
12
|
nbsphinx>=0.8.9
|
|
13
13
|
notebook>=7.2.0
|
|
14
|
+
anywidget>=0.6.0
|
|
14
15
|
|
|
15
16
|
Sphinx>=7.3.7
|
|
16
17
|
sphinx-rtd-theme>=2.0.0
|
|
@@ -22,5 +23,4 @@ numpy>=2.0.0
|
|
|
22
23
|
scipy>=1.13.1
|
|
23
24
|
webgui-jupyter-widgets>=0.2.35
|
|
24
25
|
|
|
25
|
-
#
|
|
26
|
-
xfem==2.1.2603
|
|
26
|
+
#xfem==2.1.2605
|