ngstrefftz 0.3.2604.dev5__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.
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/PKG-INFO +1 -1
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/_version.py +3 -3
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/index.rst +1 -0
- ngstrefftz-0.3.2604.dev8/docs/notebooks/embTrefftz-ns.ipynb +443 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/index.ipynb +3 -2
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/requirements.txt +1 -1
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/embtrefftz.cpp +9 -5
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.clang-format +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/build.yml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/fix_auditwheel_policy.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/Dockerfile +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/build_in_docker.sh +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/merge.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/requirements.txt +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.gitignore +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.gitmodules +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/CMakeLists.txt +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/CONTRIBUTING.md +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/Dockerfile +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/LICENSE +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/README.md +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/Doxyfile.in +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/_static/breadcrumbs.html +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/_static/css/mytheme.css +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/conf.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/contrib.rst +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/docu.rst +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/intro.rst +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-stokes.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/helmholtz.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/laplace.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/qtelliptic.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/qtwave.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/tunfitted.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/twave.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/twavetents.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/paper/codemeta.json +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/paper/paper.bib +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/paper/paper.md +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/.github/workflows/build.yml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/.gitignore +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/README.md +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/advection2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/euler2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/horn.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/demo/wave/wave3d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/_config.yml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/_toc.yml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/assets/css/style.scss +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/do +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/dag.png +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/map.png +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/ngsTentsLogo.png +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/index.ipynb +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/requirements.txt +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/__init__.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/conslaw/__init__.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/__init__.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/_drawtents.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/pyproject.toml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/CMakeLists.txt +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/advection.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/burgers.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/concurrentqueue.h +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/conservationlaw.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/euler.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/maxwell.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/paralleldepend.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/python_conslaw.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/python_tents.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/symbolic.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tentsolver.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/wave.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_causal_tents.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_conslaw.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/tests/test_tentlayers.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/pyproject.toml +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/__init__.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/airy.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/boxintegral.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/boxintegral.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/condensedg.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/condensedg.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/diffopmapped.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/embtrefftz.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/mesh1dtents.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/mesh1dtents.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/monomialfespace.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/monomialfespace.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/ngsttd.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/planewavefe.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/planewavefe.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/pufe.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/pufe.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/pufespace.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/pufespace.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/python_trefftz.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/scalarmappedfe.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/scalarmappedfe.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/specialcoefficientfunction.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/specialcoefficientfunction.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/specialintegrator.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/specialintegrator.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/tp0fespace.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/tp0fespace.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/trefftzfespace.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/trefftzfespace.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/twavetents.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/src/twavetents.hpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/boxint.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/conforming_trefftz.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/dg.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/embt.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/embtrefftz_gtest.cpp +0 -0
- {ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/test/tents.py +0 -0
- {ngstrefftz-0.3.2604.dev5 → 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.
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 3, 2604, '
|
|
21
|
+
__version__ = version = '0.3.2604.dev8'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 3, 2604, 'dev8')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gfe72334f0'
|
|
@@ -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
|
-
"
|
|
45
|
-
"
|
|
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
|
],
|
|
@@ -493,9 +493,9 @@ bool bfIsDefinedOnElement (const SumOfIntegrals &bf,
|
|
|
493
493
|
if (icf->dx.vb != mesh_element.VB ())
|
|
494
494
|
continue;
|
|
495
495
|
|
|
496
|
-
if (
|
|
497
|
-
|
|
498
|
-
|
|
496
|
+
if (icf->dx.definedonelements
|
|
497
|
+
&& !icf->dx.definedonelements->Test (mesh_element.Nr ()))
|
|
498
|
+
continue;
|
|
499
499
|
|
|
500
500
|
if (icf->dx.definedon) // check region
|
|
501
501
|
{
|
|
@@ -506,10 +506,14 @@ bool bfIsDefinedOnElement (const SumOfIntegrals &bf,
|
|
|
506
506
|
const BitArray &definedon = reg.Mask ();
|
|
507
507
|
size_t mat = ma->GetElIndex (mesh_element);
|
|
508
508
|
if (mat >= definedon.Size ())
|
|
509
|
-
|
|
510
|
-
|
|
509
|
+
continue;
|
|
510
|
+
if (definedon.Test (mat))
|
|
511
|
+
return true;
|
|
512
|
+
continue;
|
|
511
513
|
}
|
|
512
514
|
}
|
|
515
|
+
|
|
516
|
+
return true;
|
|
513
517
|
}
|
|
514
518
|
return false;
|
|
515
519
|
}
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/fix_auditwheel_policy.py
RENAMED
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/build_in_docker.sh
RENAMED
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/.github/workflows/pyodide/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/docs/notebooks/embTrefftz-stokes.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/.gitignore
RENAMED
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/_toc.yml
RENAMED
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/docs/do
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/py/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/burgers.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/euler.cpp
RENAMED
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/maxwell.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.cpp
RENAMED
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/tents.hpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.cpp
RENAMED
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/vis3d.hpp
RENAMED
|
File without changes
|
{ngstrefftz-0.3.2604.dev5 → ngstrefftz-0.3.2604.dev8}/external_dependencies/ngstents/src/wave.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|