ngstrefftz 0.3.2607.dev11__tar.gz → 0.3.2607.dev25__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.2607.dev25/.github/workflows/build.yml +261 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/CMakeLists.txt +63 -19
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/PKG-INFO +4 -2
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/_version.py +3 -3
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/requirements.txt +0 -2
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/pyproject.toml +7 -3
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/__init__.py +22 -6
- ngstrefftz-0.3.2607.dev25/src/aggregatedl2space.cpp +160 -0
- ngstrefftz-0.3.2607.dev25/src/aggregatedl2space.hpp +45 -0
- ngstrefftz-0.3.2607.dev25/src/dofpatches.hpp +24 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.cpp +877 -696
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.hpp +43 -12
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.cpp +15 -13
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.hpp +1 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufe.hpp +10 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufespace.cpp +56 -6
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufespace.hpp +3 -1
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/python_trefftz.cpp +26 -3
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.cpp +1 -1
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/twavetents.cpp +1 -1
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/twavetents.hpp +1 -1
- ngstrefftz-0.3.2607.dev25/test/aggregate_embtrefftz.py +61 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/conforming_trefftz.py +2 -2
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/embt.py +54 -0
- ngstrefftz-0.3.2607.dev11/.github/workflows/build.yml +0 -393
- ngstrefftz-0.3.2607.dev11/.gitmodules +0 -3
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/.github/workflows/build.yml +0 -76
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/.gitignore +0 -1
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/README.md +0 -129
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/Advection_Periodic_Clipping.ipynb +0 -393
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/advection2d.py +0 -75
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/advection/advection2d_periodic.py +0 -69
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/Burgers_Clipping.ipynb +0 -262
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/burgers1d.py +0 -54
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/burgers/burgers2d.py +0 -61
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/Euler_Clipping.ipynb +0 -279
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/euler2d.py +0 -53
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/euler/mach3_windtunnel.py +0 -76
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/maxwell/maxwell3d.py +0 -68
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_advection2d.py +0 -108
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_burgers.py +0 -141
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_euler.py +0 -183
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_wave.py +0 -126
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/symbolic_wave1d_interface.py +0 -143
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/symbolic/wave_penetrable_cylinder.py +0 -186
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/tents/draw3dtent.py +0 -32
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/tents/draw3dvertex.py +0 -32
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/horn.py +0 -88
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave2d.py +0 -68
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave2d_timedepbc.py +0 -83
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/demo/wave/wave3d.py +0 -75
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/BurgersMTP.ipynb +0 -785
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/StartPitching.ipynb +0 -690
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/_config.yml +0 -37
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/_toc.yml +0 -12
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/assets/css/style.scss +0 -2
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/do +0 -2
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/CausalityCond.png +0 -0
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/dag.png +0 -0
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/map.png +0 -0
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/ngsTentsLogo.png +0 -0
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/figs/subtents.png +0 -0
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/index.ipynb +0 -49
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/docs/requirements.txt +0 -107
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/__init__.py +0 -13
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/conslaw/__init__.py +0 -73
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/__init__.py +0 -4
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/_drawtents.py +0 -44
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/py/utils/_drawtents2d.py +0 -98
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/pyproject.toml +0 -55
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/CMakeLists.txt +0 -45
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/advection.cpp +0 -89
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/burgers.cpp +0 -168
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/concurrentqueue.h +0 -3398
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/conservationlaw.hpp +0 -501
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/euler.cpp +0 -492
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/maxwell.cpp +0 -145
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/ngsolve_addon.cmake +0 -97
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/paralleldepend.hpp +0 -134
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/python_conslaw.cpp +0 -299
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/python_tents.cpp +0 -139
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/symbolic.cpp +0 -231
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tconservationlaw_tp_impl.hpp +0 -877
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tents.cpp +0 -1295
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tents.hpp +0 -369
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tentsolver.hpp +0 -140
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/tentsolver_impl.hpp +0 -194
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/vis3d.cpp +0 -223
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/vis3d.hpp +0 -35
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/src/wave.cpp +0 -178
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_burgers_2D.py +0 -39
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_causal_tents.py +0 -132
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_conslaw.py +0 -73
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_tent_height_2D.py +0 -44
- ngstrefftz-0.3.2607.dev11/external_dependencies/ngstents/tests/test_tentlayers.py +0 -18
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.clang-format +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.git-blame-ignore-revs +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/fix_auditwheel_policy.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/Dockerfile +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/build_in_docker.sh +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/merge.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/requirements.txt +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/.gitignore +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/CONTRIBUTING.md +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/Dockerfile +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/LICENSE +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/README.md +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/Doxyfile.in +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/_static/breadcrumbs.html +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/_static/css/mytheme.css +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/conf.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/contrib.rst +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/docu.rst +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/index.rst +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/intro.rst +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-ns.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-stokes.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/helmholtz.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/index.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/laplace.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtelliptic.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtwave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/tunfitted.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twavetents.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/codemeta.json +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.bib +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.md +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/airy.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/condensedg.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/condensedg.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/diffopmapped.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/ngsttd.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/pufe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.hpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/boxint.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/dg.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/embtrefftz_gtest.cpp +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/tents.py +0 -0
- {ngstrefftz-0.3.2607.dev11 → ngstrefftz-0.3.2607.dev25}/test/trefftz.py +0 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
name: build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
ngsolve_version:
|
|
7
|
+
description: NGSolve version (empty builds the current checkout)
|
|
8
|
+
type: string
|
|
9
|
+
dry_run:
|
|
10
|
+
description: Build and test without uploading to PyPI
|
|
11
|
+
type: boolean
|
|
12
|
+
default: true
|
|
13
|
+
level:
|
|
14
|
+
description: 'build level'
|
|
15
|
+
required: true
|
|
16
|
+
default: 'full'
|
|
17
|
+
type: choice
|
|
18
|
+
options:
|
|
19
|
+
- quick
|
|
20
|
+
- full
|
|
21
|
+
push:
|
|
22
|
+
branches: [main, main-dev]
|
|
23
|
+
release:
|
|
24
|
+
types: [published]
|
|
25
|
+
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
|
|
29
|
+
concurrency:
|
|
30
|
+
group: ${{ github.workflow }}
|
|
31
|
+
cancel-in-progress: false
|
|
32
|
+
|
|
33
|
+
jobs:
|
|
34
|
+
prepare:
|
|
35
|
+
name: Prepare release
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
outputs:
|
|
38
|
+
version: ${{ steps.release.outputs.version }}
|
|
39
|
+
published: ${{ steps.release.outputs.published }}
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v6
|
|
42
|
+
if: inputs.ngsolve_version != ''
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
- uses: PaulSt/ngsolve-release-watcher@main
|
|
46
|
+
id: release
|
|
47
|
+
with:
|
|
48
|
+
ngsolve_version: ${{ inputs.ngsolve_version }}
|
|
49
|
+
dry_run: ${{ inputs.dry_run }}
|
|
50
|
+
- uses: actions/upload-artifact@v7
|
|
51
|
+
if: inputs.ngsolve_version != ''
|
|
52
|
+
with:
|
|
53
|
+
name: release-pyproject
|
|
54
|
+
path: pyproject.toml
|
|
55
|
+
|
|
56
|
+
check_formatting:
|
|
57
|
+
name: Check Formatting with Clang Format
|
|
58
|
+
runs-on: ubuntu-24.04
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v6
|
|
61
|
+
with:
|
|
62
|
+
path: "NGSTrefftz"
|
|
63
|
+
fetch-depth: 0
|
|
64
|
+
- uses: RafikFarhad/clang-format-github-action@v4
|
|
65
|
+
with:
|
|
66
|
+
sources: "src/**/*.hpp,src/**/*.cpp,test/**/*.cpp"
|
|
67
|
+
style: file
|
|
68
|
+
|
|
69
|
+
test_linux:
|
|
70
|
+
name: Test on Linux
|
|
71
|
+
needs: prepare
|
|
72
|
+
runs-on: ubuntu-24.04
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@v6
|
|
75
|
+
with:
|
|
76
|
+
fetch-depth: 0
|
|
77
|
+
- uses: actions/setup-python@v6
|
|
78
|
+
with:
|
|
79
|
+
python-version: "3.14"
|
|
80
|
+
- uses: actions/download-artifact@v7
|
|
81
|
+
if: inputs.ngsolve_version != ''
|
|
82
|
+
with:
|
|
83
|
+
name: release-pyproject
|
|
84
|
+
- name: Build and test
|
|
85
|
+
run: |
|
|
86
|
+
sudo apt-get update
|
|
87
|
+
sudo apt-get install -y libgtest-dev libopenblas0-pthread
|
|
88
|
+
python -m pip install . numpy scipy matplotlib
|
|
89
|
+
cmake -S . -B build -DNGSTREFFTZ_USE_GTEST=ON -DCMAKE_BUILD_TYPE=Release
|
|
90
|
+
cmake --build build --parallel 2
|
|
91
|
+
ctest --test-dir build --output-on-failure
|
|
92
|
+
|
|
93
|
+
build_wheels:
|
|
94
|
+
name: Build wheels on ${{ matrix.os }}
|
|
95
|
+
needs: [prepare, test_linux]
|
|
96
|
+
runs-on: ${{ matrix.os }}
|
|
97
|
+
strategy:
|
|
98
|
+
matrix:
|
|
99
|
+
os: [macos-15-intel, ubuntu-latest, windows-2022]
|
|
100
|
+
env:
|
|
101
|
+
CIBW_BUILD: ${{ inputs.level == 'quick' && 'cp314-*' || 'cp310-* cp311-* cp312-* cp313-* cp314-*' }}
|
|
102
|
+
CIBW_ARCHS_WINDOWS: AMD64
|
|
103
|
+
CIBW_ENVIRONMENT_WINDOWS: >
|
|
104
|
+
CMAKE_GENERATOR='Visual Studio 17 2022'
|
|
105
|
+
CMAKE_GENERATOR_PLATFORM=x64
|
|
106
|
+
steps:
|
|
107
|
+
- uses: actions/checkout@v6
|
|
108
|
+
with:
|
|
109
|
+
fetch-tags: true
|
|
110
|
+
fetch-depth: 0
|
|
111
|
+
- uses: actions/download-artifact@v7
|
|
112
|
+
if: inputs.ngsolve_version != ''
|
|
113
|
+
with:
|
|
114
|
+
name: release-pyproject
|
|
115
|
+
- name: Free disk space for Linux wheel build
|
|
116
|
+
if: matrix.os == 'ubuntu-latest'
|
|
117
|
+
run: |
|
|
118
|
+
df -h
|
|
119
|
+
sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc
|
|
120
|
+
sudo apt-get clean
|
|
121
|
+
sudo rm -rf /var/lib/apt/lists/*
|
|
122
|
+
df -h
|
|
123
|
+
- uses: pypa/cibuildwheel@v3.2.1
|
|
124
|
+
env:
|
|
125
|
+
SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ: ${{ needs.prepare.outputs.version }}
|
|
126
|
+
CIBW_ENVIRONMENT_PASS_LINUX: SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ
|
|
127
|
+
CIBW_BUILD_VERBOSITY: 1
|
|
128
|
+
- uses: actions/upload-artifact@v7
|
|
129
|
+
with:
|
|
130
|
+
name: cibw-wheels-${{ matrix.os }}
|
|
131
|
+
path: ./wheelhouse/*.whl
|
|
132
|
+
|
|
133
|
+
build_sdist:
|
|
134
|
+
name: Build source distribution
|
|
135
|
+
if: ${{ inputs.level != 'quick' }}
|
|
136
|
+
needs: [prepare, test_linux]
|
|
137
|
+
runs-on: ubuntu-latest
|
|
138
|
+
container: quay.io/pypa/manylinux_2_28_x86_64
|
|
139
|
+
steps:
|
|
140
|
+
- uses: actions/checkout@v6
|
|
141
|
+
with:
|
|
142
|
+
fetch-tags: true
|
|
143
|
+
fetch-depth: 0
|
|
144
|
+
- uses: actions/download-artifact@v7
|
|
145
|
+
if: inputs.ngsolve_version != ''
|
|
146
|
+
with:
|
|
147
|
+
name: release-pyproject
|
|
148
|
+
- name: Build sdist
|
|
149
|
+
env:
|
|
150
|
+
SETUPTOOLS_SCM_PRETEND_VERSION_FOR_NGSTREFFTZ: ${{ needs.prepare.outputs.version }}
|
|
151
|
+
run: uv tool run --python 3.14 --from build pyproject-build --sdist
|
|
152
|
+
- uses: actions/upload-artifact@v7
|
|
153
|
+
with:
|
|
154
|
+
name: cibw-sdist
|
|
155
|
+
path: dist/*.tar.gz
|
|
156
|
+
|
|
157
|
+
upload_pypi:
|
|
158
|
+
if: ${{ !inputs.dry_run && needs.prepare.outputs.published != 'true' }}
|
|
159
|
+
needs: [prepare, build_wheels, build_sdist]
|
|
160
|
+
runs-on: ubuntu-latest
|
|
161
|
+
environment: pypi
|
|
162
|
+
permissions:
|
|
163
|
+
id-token: write
|
|
164
|
+
steps:
|
|
165
|
+
- uses: actions/download-artifact@v7
|
|
166
|
+
with:
|
|
167
|
+
pattern: cibw-*
|
|
168
|
+
path: dist
|
|
169
|
+
merge-multiple: true
|
|
170
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
171
|
+
if: github.ref == 'refs/heads/main' || github.event_name == 'release' || inputs.ngsolve_version != ''
|
|
172
|
+
with:
|
|
173
|
+
skip-existing: true
|
|
174
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
175
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
176
|
+
if: github.ref == 'refs/heads/main-dev' && inputs.ngsolve_version == ''
|
|
177
|
+
with:
|
|
178
|
+
skip-existing: true
|
|
179
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
180
|
+
repository-url: https://test.pypi.org/legacy/
|
|
181
|
+
|
|
182
|
+
docker:
|
|
183
|
+
if: inputs.ngsolve_version == ''
|
|
184
|
+
needs: [upload_pypi]
|
|
185
|
+
runs-on: ubuntu-latest
|
|
186
|
+
steps:
|
|
187
|
+
- uses: actions/checkout@v6
|
|
188
|
+
- id: meta
|
|
189
|
+
uses: docker/metadata-action@v6
|
|
190
|
+
with:
|
|
191
|
+
# list of Docker images to use as base name for tags
|
|
192
|
+
images: paulstdocker/ngstrefftz
|
|
193
|
+
# generate Docker tags based on the following events/attributes
|
|
194
|
+
tags: |
|
|
195
|
+
type=ref,event=branch
|
|
196
|
+
type=ref,event=pr
|
|
197
|
+
type=semver,pattern={{version}}
|
|
198
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
199
|
+
- if: github.event_name == 'release' && github.event.action == 'published'
|
|
200
|
+
uses: docker/login-action@v4
|
|
201
|
+
with:
|
|
202
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
203
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
204
|
+
- uses: docker/build-push-action@v7
|
|
205
|
+
with:
|
|
206
|
+
context: .
|
|
207
|
+
file: Dockerfile
|
|
208
|
+
push: ${{ github.event_name == 'release' && github.event.action == 'published' }}
|
|
209
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
210
|
+
|
|
211
|
+
docs:
|
|
212
|
+
needs: [build_wheels]
|
|
213
|
+
runs-on: ubuntu-latest
|
|
214
|
+
container: python:3.14
|
|
215
|
+
steps:
|
|
216
|
+
- uses: actions/checkout@v6
|
|
217
|
+
with:
|
|
218
|
+
fetch-depth: 0
|
|
219
|
+
path: "NGSTrefftz"
|
|
220
|
+
- uses: actions/download-artifact@v7
|
|
221
|
+
with:
|
|
222
|
+
name: cibw-wheels-ubuntu-latest
|
|
223
|
+
path: wheels
|
|
224
|
+
- name: Install wheel and documentation dependencies
|
|
225
|
+
run: |
|
|
226
|
+
apt update -y && DEBIAN_FRONTEND="noninteractive" apt install -y build-essential git pandoc
|
|
227
|
+
python -m pip install "$GITHUB_WORKSPACE"/wheels/*-cp314-cp314-*.whl -r "$GITHUB_WORKSPACE/NGSTrefftz/docs/requirements.txt"
|
|
228
|
+
- name: Build Sphinx HTML
|
|
229
|
+
run: sphinx-build -b html $GITHUB_WORKSPACE/NGSTrefftz/docs $GITHUB_WORKSPACE/NGSTrefftz/docs/_build/html
|
|
230
|
+
- uses: actions/upload-pages-artifact@v5
|
|
231
|
+
with:
|
|
232
|
+
path: ${{ github.workspace }}/NGSTrefftz/docs/_build/html
|
|
233
|
+
|
|
234
|
+
deploy-docs:
|
|
235
|
+
needs: docs
|
|
236
|
+
permissions:
|
|
237
|
+
pages: write # to deploy to Pages
|
|
238
|
+
id-token: write # to verify the deployment originates from an appropriate source
|
|
239
|
+
environment:
|
|
240
|
+
name: github-pages
|
|
241
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
242
|
+
runs-on: ubuntu-latest
|
|
243
|
+
if: github.ref == 'refs/heads/main' && !inputs.dry_run
|
|
244
|
+
steps:
|
|
245
|
+
- id: deployment
|
|
246
|
+
uses: actions/deploy-pages@v5
|
|
247
|
+
|
|
248
|
+
paper:
|
|
249
|
+
runs-on: ubuntu-latest
|
|
250
|
+
if: ${{ inputs.level != 'quick' }}
|
|
251
|
+
name: Paper Draft
|
|
252
|
+
steps:
|
|
253
|
+
- uses: actions/checkout@v6
|
|
254
|
+
- uses: openjournals/openjournals-draft-action@master
|
|
255
|
+
with:
|
|
256
|
+
journal: joss
|
|
257
|
+
paper-path: docs/paper/paper.md
|
|
258
|
+
- uses: actions/upload-artifact@v7
|
|
259
|
+
with:
|
|
260
|
+
name: joss_paper
|
|
261
|
+
path: docs/paper/paper.pdf
|
|
@@ -36,10 +36,43 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/cmake_modules)
|
|
|
36
36
|
|
|
37
37
|
set(addon_name ngstrefftz)
|
|
38
38
|
project(ngstrefftz)
|
|
39
|
-
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src) # SYSTEM to suppress warnings from headers
|
|
40
39
|
include(${CMAKE_BINARY_DIR}/cmake_modules/ngsolve_addon.cmake)
|
|
40
|
+
set(NGSTREFFTZ_USE_XFEM AUTO CACHE STRING "Build with xfem support")
|
|
41
|
+
set_property(CACHE NGSTREFFTZ_USE_XFEM PROPERTY STRINGS AUTO ON OFF)
|
|
42
|
+
if(NOT NGSTREFFTZ_USE_XFEM STREQUAL "OFF")
|
|
43
|
+
if(NOT xfem_DIR)
|
|
44
|
+
execute_process(COMMAND ${Python3_EXECUTABLE} -c
|
|
45
|
+
"import importlib.util; from pathlib import Path; print(Path(importlib.util.find_spec('xfem').origin).parent / 'cmake')"
|
|
46
|
+
OUTPUT_VARIABLE xfem_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
|
47
|
+
endif()
|
|
48
|
+
find_package(xfem CONFIG QUIET)
|
|
49
|
+
if(xfem_FOUND)
|
|
50
|
+
set(NGSTREFFTZ_USE_XFEM ON)
|
|
51
|
+
elseif(NGSTREFFTZ_USE_XFEM STREQUAL "ON")
|
|
52
|
+
message(FATAL_ERROR "NGSTREFFTZ_USE_XFEM=ON but xfem was not found")
|
|
53
|
+
else()
|
|
54
|
+
set(NGSTREFFTZ_USE_XFEM OFF)
|
|
55
|
+
message(WARNING "xfem not found, building without aggregation support")
|
|
56
|
+
endif()
|
|
57
|
+
endif()
|
|
58
|
+
set(NGSTREFFTZ_USE_NGSTENTS AUTO CACHE STRING "Build with ngstents support")
|
|
59
|
+
set_property(CACHE NGSTREFFTZ_USE_NGSTENTS PROPERTY STRINGS AUTO ON OFF)
|
|
60
|
+
if(NOT NGSTREFFTZ_USE_NGSTENTS STREQUAL "OFF")
|
|
61
|
+
if(NOT ngstents_DIR)
|
|
62
|
+
execute_process(COMMAND ${Python3_EXECUTABLE} -m ngstents.config
|
|
63
|
+
OUTPUT_VARIABLE ngstents_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
|
64
|
+
endif()
|
|
65
|
+
find_package(ngstents CONFIG QUIET)
|
|
66
|
+
if(ngstents_FOUND)
|
|
67
|
+
set(NGSTREFFTZ_USE_NGSTENTS ON)
|
|
68
|
+
elseif(NGSTREFFTZ_USE_NGSTENTS STREQUAL "ON")
|
|
69
|
+
message(FATAL_ERROR "NGSTREFFTZ_USE_NGSTENTS=ON but ngstents was not found")
|
|
70
|
+
else()
|
|
71
|
+
set(NGSTREFFTZ_USE_NGSTENTS OFF)
|
|
72
|
+
message(WARNING "ngstents not found, building without tent-pitching support")
|
|
73
|
+
endif()
|
|
74
|
+
endif()
|
|
41
75
|
add_ngsolve_addon(ngstrefftz
|
|
42
|
-
${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
|
|
43
76
|
src/python_trefftz.cpp
|
|
44
77
|
src/diffopmapped.hpp
|
|
45
78
|
src/scalarmappedfe.cpp
|
|
@@ -47,11 +80,9 @@ add_ngsolve_addon(ngstrefftz
|
|
|
47
80
|
src/trefftzfespace.cpp
|
|
48
81
|
src/specialcoefficientfunction.cpp
|
|
49
82
|
src/specialintegrator.cpp
|
|
50
|
-
src/twavetents.cpp
|
|
51
83
|
src/embtrefftz.cpp
|
|
52
84
|
src/lapack_loader.cpp
|
|
53
85
|
src/monomialfespace.cpp
|
|
54
|
-
src/mesh1dtents.cpp
|
|
55
86
|
src/condensedg.cpp
|
|
56
87
|
src/pufe.cpp
|
|
57
88
|
src/pufespace.cpp
|
|
@@ -60,7 +91,17 @@ add_ngsolve_addon(ngstrefftz
|
|
|
60
91
|
#src/airy.cpp #for testing, requires boost
|
|
61
92
|
)
|
|
62
93
|
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_EXPORTS)
|
|
63
|
-
|
|
94
|
+
if(NGSTREFFTZ_USE_XFEM)
|
|
95
|
+
target_sources(ngstrefftz PRIVATE src/aggregatedl2space.cpp)
|
|
96
|
+
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_XFEM)
|
|
97
|
+
target_link_libraries(ngstrefftz PRIVATE xfem::core)
|
|
98
|
+
endif()
|
|
99
|
+
if(NGSTREFFTZ_USE_NGSTENTS)
|
|
100
|
+
target_sources(ngstrefftz PRIVATE src/twavetents.cpp src/mesh1dtents.cpp)
|
|
101
|
+
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_NGSTENTS)
|
|
102
|
+
target_link_libraries(ngstrefftz PRIVATE ngstents::core)
|
|
103
|
+
endif()
|
|
104
|
+
ngsolve_addon_set_relative_rpath(ngstrefftz "../ngstents" "../xfem")
|
|
64
105
|
# add dynamic loader library to link libraries (on linux)
|
|
65
106
|
if(CMAKE_DL_LIBS)
|
|
66
107
|
target_link_libraries(ngstrefftz PRIVATE ${CMAKE_DL_LIBS})
|
|
@@ -74,10 +115,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
|
74
115
|
-Wpedantic
|
|
75
116
|
-Wno-vla # ngsolve uses VLAs anyway
|
|
76
117
|
)
|
|
77
|
-
set_source_files_properties(
|
|
78
|
-
${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
|
|
79
|
-
PROPERTIES COMPILE_FLAGS "-w" #suppress all warnings
|
|
80
|
-
)
|
|
81
118
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
82
119
|
target_compile_options(ngstrefftz PRIVATE
|
|
83
120
|
-Wall
|
|
@@ -86,10 +123,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
|
86
123
|
-Wtype-limits
|
|
87
124
|
-Wuninitialized
|
|
88
125
|
)
|
|
89
|
-
set_source_files_properties(
|
|
90
|
-
${CMAKE_SOURCE_DIR}/external_dependencies/ngstents/src/tents.cpp
|
|
91
|
-
PROPERTIES COMPILE_FLAGS "-w" #suppress all warnings
|
|
92
|
-
)
|
|
93
126
|
endif()
|
|
94
127
|
|
|
95
128
|
### user options
|
|
@@ -127,6 +160,8 @@ message("${BoldCyan}
|
|
|
127
160
|
Enabled functionality:
|
|
128
161
|
Doxygen: ........... ${NGSTREFFTZ_BUILD_DOC}
|
|
129
162
|
GTest: ............. ${NGSTREFFTZ_USE_GTEST}
|
|
163
|
+
ngstents: .......... ${NGSTREFFTZ_USE_NGSTENTS}
|
|
164
|
+
xfem: .............. ${NGSTREFFTZ_USE_XFEM}
|
|
130
165
|
|
|
131
166
|
With 'make install' the package will be installed to: ${CMAKE_INSTALL_PREFIX}
|
|
132
167
|
Make sure to add it to the python path:
|
|
@@ -144,14 +179,23 @@ file(COPY
|
|
|
144
179
|
${CMAKE_SOURCE_DIR}/test/tents.py
|
|
145
180
|
${CMAKE_SOURCE_DIR}/test/conforming_trefftz.py
|
|
146
181
|
${CMAKE_SOURCE_DIR}/test/boxint.py
|
|
182
|
+
${CMAKE_SOURCE_DIR}/test/aggregate_embtrefftz.py
|
|
147
183
|
DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing)
|
|
148
|
-
add_test(NAME embtrefftz COMMAND
|
|
149
|
-
add_test(NAME conforming_trefftz COMMAND
|
|
150
|
-
add_test(NAME trefftz COMMAND
|
|
151
|
-
|
|
152
|
-
|
|
184
|
+
add_test(NAME embtrefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/embt.py)
|
|
185
|
+
add_test(NAME conforming_trefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/conforming_trefftz.py)
|
|
186
|
+
add_test(NAME trefftz COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/trefftz.py)
|
|
187
|
+
set(tests_with_pythonpath embtrefftz conforming_trefftz trefftz box)
|
|
188
|
+
if(NGSTREFFTZ_USE_NGSTENTS)
|
|
189
|
+
add_test(NAME tents COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/tents.py)
|
|
190
|
+
list(APPEND tests_with_pythonpath tents)
|
|
191
|
+
endif()
|
|
192
|
+
add_test(NAME box COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/boxint.py)
|
|
193
|
+
if(NGSTREFFTZ_USE_XFEM)
|
|
194
|
+
add_test(NAME aggregate_embtrefftz COMMAND ${Python3_EXECUTABLE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/aggregate_embtrefftz.py)
|
|
195
|
+
list(APPEND tests_with_pythonpath aggregate_embtrefftz)
|
|
196
|
+
endif()
|
|
153
197
|
#WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR }
|
|
154
|
-
set_tests_properties(
|
|
198
|
+
set_tests_properties(${tests_with_pythonpath}
|
|
155
199
|
PROPERTIES ENVIRONMENT PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${NGSOLVE_INSTALL_DIR}/${NGSOLVE_INSTALL_DIR_PYTHON}:$ENV{PYTHONPATH})
|
|
156
200
|
|
|
157
201
|
if(NGSTREFFTZ_USE_GTEST)
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: ngstrefftz
|
|
3
|
-
Version: 0.3.2607.
|
|
3
|
+
Version: 0.3.2607.dev25
|
|
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: ngsolve==6.2.
|
|
10
|
+
Requires-Dist: ngsolve==6.2.2608
|
|
11
|
+
Requires-Dist: ngstents==0.1.2608rc1
|
|
12
|
+
Requires-Dist: xfem==2.1.2608
|
|
11
13
|
Description-Content-Type: text/markdown
|
|
12
14
|
|
|
13
15
|
# NGSTrefftz
|
|
@@ -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.2607.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 3, 2607, '
|
|
21
|
+
__version__ = version = '0.3.2607.dev25'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 3, 2607, 'dev25')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g2526e1fdf'
|
|
@@ -9,7 +9,9 @@ classifiers = [
|
|
|
9
9
|
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
10
10
|
]
|
|
11
11
|
dependencies = [
|
|
12
|
-
"ngsolve==6.2.
|
|
12
|
+
"ngsolve==6.2.2608",
|
|
13
|
+
"ngstents==0.1.2608rc1",
|
|
14
|
+
"xfem==2.1.2608",
|
|
13
15
|
]
|
|
14
16
|
|
|
15
17
|
[project.urls]
|
|
@@ -18,7 +20,9 @@ Repository = "https://github.com/PaulSt/ngstrefftz"
|
|
|
18
20
|
|
|
19
21
|
[build-system]
|
|
20
22
|
requires = [
|
|
21
|
-
"ngsolve==6.2.
|
|
23
|
+
"ngsolve==6.2.2608",
|
|
24
|
+
"ngstents==0.1.2608rc1",
|
|
25
|
+
"xfem==2.1.2608",
|
|
22
26
|
"scikit-build-core>=0.9.0",
|
|
23
27
|
"pybind11_stubgen",
|
|
24
28
|
"setuptools>=45",
|
|
@@ -43,8 +47,8 @@ local_scheme = "no-local-version"
|
|
|
43
47
|
[tool.cibuildwheel]
|
|
44
48
|
#build-verbosity = 1
|
|
45
49
|
manylinux-x86_64-image = "cerbsim/manylinux_2_28_x86_64_cuda_12.9"
|
|
50
|
+
test-command = "python -c \"import ngstents; import ngstrefftz\""
|
|
46
51
|
skip = """
|
|
47
|
-
pp*
|
|
48
52
|
*_i686
|
|
49
53
|
*musllinux*
|
|
50
54
|
*win32
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import ngsolve
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
# xfem registers its DLL directory before loading our extension on Windows.
|
|
5
|
+
if sys.platform == "win32":
|
|
6
|
+
try:
|
|
7
|
+
import xfem as _xfem
|
|
8
|
+
except ModuleNotFoundError as _error:
|
|
9
|
+
if _error.name != "xfem":
|
|
10
|
+
raise
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import ngstents as _ngstents
|
|
14
|
+
except ModuleNotFoundError as _error:
|
|
15
|
+
if _error.name != "ngstents":
|
|
16
|
+
raise
|
|
17
|
+
|
|
2
18
|
from ngsolve.fem import ET,IntegrationRule
|
|
3
19
|
from ngsolve.comp import L2,BilinearForm,LinearForm,SymbolicBFI,SymbolicLFI,FESpace
|
|
4
20
|
from ngsolve.fem import CoordCF
|
|
@@ -25,7 +41,6 @@ def GetWave(self,U):
|
|
|
25
41
|
f += SymbolicLFI(ipfct*v).SetIntegrationRule(eltyp,intrule)
|
|
26
42
|
f.Assemble()
|
|
27
43
|
U.vec.data = a.mat.Inverse(inverse='sparsecholesky') * f.vec
|
|
28
|
-
# return gfu
|
|
29
44
|
else:
|
|
30
45
|
fes = L2(initmesh, order=order-1)**(D+1)
|
|
31
46
|
u,v = fes.TnT()
|
|
@@ -46,8 +61,9 @@ def GetWave(self,U):
|
|
|
46
61
|
dbox = BoxDifferentialSymbol()
|
|
47
62
|
dball = dbox(boxtype=BOXTYPE.BALL)
|
|
48
63
|
|
|
49
|
-
|
|
50
|
-
setattr(
|
|
51
|
-
setattr(
|
|
52
|
-
setattr(
|
|
53
|
-
setattr(
|
|
64
|
+
if "TWaveTents1" in globals():
|
|
65
|
+
setattr(TWaveTents1, 'GetWave', GetWave)
|
|
66
|
+
setattr(TWaveTents2, 'GetWave', GetWave)
|
|
67
|
+
setattr(TWaveTents3, 'GetWave', GetWave)
|
|
68
|
+
setattr(QTWaveTents1, 'GetWave', GetWave)
|
|
69
|
+
setattr(QTWaveTents2, 'GetWave', GetWave)
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#include "aggregatedl2space.hpp"
|
|
2
|
+
|
|
3
|
+
#include <python_comp.hpp>
|
|
4
|
+
|
|
5
|
+
namespace ngcomp
|
|
6
|
+
{
|
|
7
|
+
AggregatedL2Space::AggregatedL2Space (
|
|
8
|
+
shared_ptr<MeshAccess> ama, const Flags &flags,
|
|
9
|
+
shared_ptr<ElementAggregation> aaggregation)
|
|
10
|
+
: MonomialFESpace (ama, Flags (flags).SetFlag (
|
|
11
|
+
"order", flags.GetNumFlag ("order", 0))),
|
|
12
|
+
aggregation (aaggregation)
|
|
13
|
+
{
|
|
14
|
+
type = "aggregatedl2";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
void AggregatedL2Space::Update ()
|
|
18
|
+
{
|
|
19
|
+
FESpace::Update ();
|
|
20
|
+
|
|
21
|
+
const size_t ne = ma->GetNE (VOL);
|
|
22
|
+
const size_t npatches = aggregation->GetNPatches (true);
|
|
23
|
+
element_to_patch.SetSize (ne);
|
|
24
|
+
element_to_patch = -1;
|
|
25
|
+
centers2.SetSize (npatches);
|
|
26
|
+
centers3.SetSize (npatches);
|
|
27
|
+
scales.SetSize (npatches);
|
|
28
|
+
|
|
29
|
+
Array<size_t> els;
|
|
30
|
+
for (size_t patch = 0; patch < npatches; patch++)
|
|
31
|
+
{
|
|
32
|
+
aggregation->GetPatch (patch, els);
|
|
33
|
+
for (size_t el : els)
|
|
34
|
+
element_to_patch[el] = patch;
|
|
35
|
+
if (D == 2)
|
|
36
|
+
UpdateGeometry<2> (patch, els);
|
|
37
|
+
else
|
|
38
|
+
UpdateGeometry<3> (patch, els);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
SetNDof (npatches * local_ndof);
|
|
42
|
+
UpdateCouplingDofArray ();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void AggregatedL2Space::UpdateCouplingDofArray ()
|
|
46
|
+
{
|
|
47
|
+
ctofdof.SetSize (GetNDof ());
|
|
48
|
+
ctofdof = UNUSED_DOF;
|
|
49
|
+
for (size_t el : Range (ma->GetNE (VOL)))
|
|
50
|
+
if (element_to_patch[el] >= 0 && DefinedOn (ElementId (VOL, el)))
|
|
51
|
+
for (size_t j : Range (local_ndof))
|
|
52
|
+
ctofdof[element_to_patch[el] * local_ndof + j]
|
|
53
|
+
= aggregation->GetElsInNontrivialPatch ()->Test (el)
|
|
54
|
+
? WIREBASKET_DOF
|
|
55
|
+
: LOCAL_DOF;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void AggregatedL2Space::GetDofNrs (ElementId ei, Array<DofId> &dnums) const
|
|
59
|
+
{
|
|
60
|
+
dnums.SetSize0 ();
|
|
61
|
+
if (ei.VB () != VOL || !DefinedOn (ei) || element_to_patch[ei.Nr ()] < 0)
|
|
62
|
+
return;
|
|
63
|
+
const int first = element_to_patch[ei.Nr ()] * local_ndof;
|
|
64
|
+
for (size_t j : Range (local_ndof))
|
|
65
|
+
dnums.Append (first + j);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
DofPatches AggregatedL2Space::GetDofPatches () const
|
|
69
|
+
{
|
|
70
|
+
size_t npatches = aggregation->GetNPatches (true);
|
|
71
|
+
TableCreator<size_t> elements (npatches);
|
|
72
|
+
Array<size_t> els;
|
|
73
|
+
for (; !elements.Done (); elements++)
|
|
74
|
+
for (size_t p : Range (npatches))
|
|
75
|
+
{
|
|
76
|
+
aggregation->GetPatch (p, els);
|
|
77
|
+
for (size_t el : els)
|
|
78
|
+
elements.Add (p, el);
|
|
79
|
+
}
|
|
80
|
+
DofPatches patches{ elements.MoveTable (),
|
|
81
|
+
Table<DofId> (npatches, local_ndof) };
|
|
82
|
+
auto dofs = patches.dofs.AsArray ();
|
|
83
|
+
for (size_t d : Range (dofs))
|
|
84
|
+
dofs[d] = d;
|
|
85
|
+
return patches;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
FiniteElement &
|
|
89
|
+
AggregatedL2Space::GetFE (ElementId ei, Allocator &alloc) const
|
|
90
|
+
{
|
|
91
|
+
if (ei.VB () != VOL)
|
|
92
|
+
return MonomialFESpace::GetFE (ei, alloc);
|
|
93
|
+
const int patch = element_to_patch[ei.Nr ()];
|
|
94
|
+
const ELEMENT_TYPE et = ma->GetElType (ei);
|
|
95
|
+
if (patch < 0 || !DefinedOn (ei))
|
|
96
|
+
return SwitchET<ET_TRIG, ET_QUAD, ET_TET, ET_HEX, ET_PRISM, ET_PYRAMID> (
|
|
97
|
+
et, [&alloc] (auto type) -> FiniteElement & {
|
|
98
|
+
return *new (alloc) DummyFE<type.ElementType ()>;
|
|
99
|
+
});
|
|
100
|
+
if (D == 2)
|
|
101
|
+
return *(new (alloc) ScalarMappedElement<2> (local_ndof, order, basismat,
|
|
102
|
+
et, centers2[patch],
|
|
103
|
+
Vec<2> (scales[patch])));
|
|
104
|
+
return *(new (alloc) ScalarMappedElement<3> (local_ndof, order, basismat,
|
|
105
|
+
et, centers3[patch],
|
|
106
|
+
Vec<3> (scales[patch])));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
template <int DIM>
|
|
110
|
+
void AggregatedL2Space::UpdateGeometry (size_t patch, FlatArray<size_t> els)
|
|
111
|
+
{
|
|
112
|
+
Vec<DIM> center = 0.0;
|
|
113
|
+
size_t npoints = 0;
|
|
114
|
+
for (size_t el : els)
|
|
115
|
+
for (int vertex : ma->GetElVertices (ElementId (VOL, el)))
|
|
116
|
+
{
|
|
117
|
+
center += ma->GetPoint<DIM> (vertex);
|
|
118
|
+
npoints++;
|
|
119
|
+
}
|
|
120
|
+
center *= 1.0 / npoints;
|
|
121
|
+
|
|
122
|
+
double diameter = 0.0;
|
|
123
|
+
for (size_t el : els)
|
|
124
|
+
for (int vertex : ma->GetElVertices (ElementId (VOL, el)))
|
|
125
|
+
diameter
|
|
126
|
+
= max (diameter, L2Norm (ma->GetPoint<DIM> (vertex) - center));
|
|
127
|
+
|
|
128
|
+
if constexpr (DIM == 2)
|
|
129
|
+
centers2[patch] = center;
|
|
130
|
+
else
|
|
131
|
+
centers3[patch] = center;
|
|
132
|
+
scales[patch] = 1.0 / diameter;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
template void
|
|
136
|
+
AggregatedL2Space::UpdateGeometry<2> (size_t, FlatArray<size_t>);
|
|
137
|
+
template void
|
|
138
|
+
AggregatedL2Space::UpdateGeometry<3> (size_t, FlatArray<size_t>);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#ifdef NGS_PYTHON
|
|
142
|
+
void ExportAggregatedL2Space (py::module m)
|
|
143
|
+
{
|
|
144
|
+
using namespace ngcomp;
|
|
145
|
+
py::class_<AggregatedL2Space, shared_ptr<AggregatedL2Space>, FESpace> (
|
|
146
|
+
m, "AggregatedL2Space")
|
|
147
|
+
.def (py::init ([] (shared_ptr<MeshAccess> ma,
|
|
148
|
+
shared_ptr<ElementAggregation> aggregation,
|
|
149
|
+
py::kwargs kwargs) {
|
|
150
|
+
Flags flags = ngcore::CreateFlagsFromKwArgs (kwargs);
|
|
151
|
+
auto fes
|
|
152
|
+
= make_shared<AggregatedL2Space> (ma, flags, aggregation);
|
|
153
|
+
fes->Update ();
|
|
154
|
+
fes->FinalizeUpdate ();
|
|
155
|
+
fes->ConnectAutoUpdate ();
|
|
156
|
+
return fes;
|
|
157
|
+
}),
|
|
158
|
+
py::arg ("mesh"), py::arg ("aggregation"));
|
|
159
|
+
}
|
|
160
|
+
#endif
|