ngstrefftz 0.3.2607.dev15__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.dev15 → ngstrefftz-0.3.2607.dev25}/CMakeLists.txt +36 -7
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/PKG-INFO +4 -3
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/_version.py +3 -3
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/requirements.txt +0 -2
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/pyproject.toml +6 -4
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/__init__.py +9 -0
- 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.dev15 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.cpp +877 -696
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/embtrefftz.hpp +43 -12
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.cpp +14 -12
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.hpp +1 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/pufe.hpp +10 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/pufespace.cpp +56 -6
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/pufespace.hpp +3 -1
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/python_trefftz.cpp +20 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.cpp +1 -1
- ngstrefftz-0.3.2607.dev25/test/aggregate_embtrefftz.py +61 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/conforming_trefftz.py +2 -2
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/embt.py +54 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.clang-format +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.git-blame-ignore-revs +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/build.yml +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/fix_auditwheel_policy.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/Dockerfile +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/build_in_docker.sh +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/merge.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.github/workflows/pyodide/requirements.txt +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/.gitignore +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/CONTRIBUTING.md +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/Dockerfile +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/LICENSE +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/README.md +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/Doxyfile.in +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/_static/breadcrumbs.html +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/_static/css/mytheme.css +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/conf.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/contrib.rst +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/docu.rst +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/index.rst +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/intro.rst +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-adv.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-helm.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-ns.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-poi.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-stokes.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz-wave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/embTrefftz.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/helmholtz.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/index.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/laplace.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtelliptic.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/qtwave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/tunfitted.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twave.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/notebooks/twavetents.ipynb +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/paper/codemeta.json +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.bib +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/paper/paper.md +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/docs/readme.rst +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/airy.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/boxintegral.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/condensedg.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/condensedg.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/diffopmapped.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/lapack_loader.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/mesh1dtents.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/monomialfespace.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/ngsttd.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/planewavefe.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/pufe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/scalarmappedfe.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/specialcoefficientfunction.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/specialintegrator.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/tp0fespace.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/trefftzfespace.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/twavetents.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/src/twavetents.hpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/boxint.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/dg.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/embtrefftz_gtest.cpp +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/tents.py +0 -0
- {ngstrefftz-0.3.2607.dev15 → ngstrefftz-0.3.2607.dev25}/test/trefftz.py +0 -0
|
@@ -37,6 +37,24 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/cmake_modules)
|
|
|
37
37
|
set(addon_name ngstrefftz)
|
|
38
38
|
project(ngstrefftz)
|
|
39
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()
|
|
40
58
|
set(NGSTREFFTZ_USE_NGSTENTS AUTO CACHE STRING "Build with ngstents support")
|
|
41
59
|
set_property(CACHE NGSTREFFTZ_USE_NGSTENTS PROPERTY STRINGS AUTO ON OFF)
|
|
42
60
|
if(NOT NGSTREFFTZ_USE_NGSTENTS STREQUAL "OFF")
|
|
@@ -73,12 +91,17 @@ add_ngsolve_addon(ngstrefftz
|
|
|
73
91
|
#src/airy.cpp #for testing, requires boost
|
|
74
92
|
)
|
|
75
93
|
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_EXPORTS)
|
|
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()
|
|
76
99
|
if(NGSTREFFTZ_USE_NGSTENTS)
|
|
77
100
|
target_sources(ngstrefftz PRIVATE src/twavetents.cpp src/mesh1dtents.cpp)
|
|
78
101
|
target_compile_definitions(ngstrefftz PRIVATE NGSTREFFTZ_USE_NGSTENTS)
|
|
79
102
|
target_link_libraries(ngstrefftz PRIVATE ngstents::core)
|
|
80
|
-
ngsolve_addon_set_relative_rpath(ngstrefftz "../ngstents")
|
|
81
103
|
endif()
|
|
104
|
+
ngsolve_addon_set_relative_rpath(ngstrefftz "../ngstents" "../xfem")
|
|
82
105
|
# add dynamic loader library to link libraries (on linux)
|
|
83
106
|
if(CMAKE_DL_LIBS)
|
|
84
107
|
target_link_libraries(ngstrefftz PRIVATE ${CMAKE_DL_LIBS})
|
|
@@ -138,6 +161,7 @@ message("${BoldCyan}
|
|
|
138
161
|
Doxygen: ........... ${NGSTREFFTZ_BUILD_DOC}
|
|
139
162
|
GTest: ............. ${NGSTREFFTZ_USE_GTEST}
|
|
140
163
|
ngstents: .......... ${NGSTREFFTZ_USE_NGSTENTS}
|
|
164
|
+
xfem: .............. ${NGSTREFFTZ_USE_XFEM}
|
|
141
165
|
|
|
142
166
|
With 'make install' the package will be installed to: ${CMAKE_INSTALL_PREFIX}
|
|
143
167
|
Make sure to add it to the python path:
|
|
@@ -155,16 +179,21 @@ file(COPY
|
|
|
155
179
|
${CMAKE_SOURCE_DIR}/test/tents.py
|
|
156
180
|
${CMAKE_SOURCE_DIR}/test/conforming_trefftz.py
|
|
157
181
|
${CMAKE_SOURCE_DIR}/test/boxint.py
|
|
182
|
+
${CMAKE_SOURCE_DIR}/test/aggregate_embtrefftz.py
|
|
158
183
|
DESTINATION ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing)
|
|
159
|
-
add_test(NAME embtrefftz COMMAND
|
|
160
|
-
add_test(NAME conforming_trefftz COMMAND
|
|
161
|
-
add_test(NAME trefftz COMMAND
|
|
162
|
-
set(tests_with_pythonpath embtrefftz trefftz)
|
|
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)
|
|
163
188
|
if(NGSTREFFTZ_USE_NGSTENTS)
|
|
164
|
-
add_test(NAME tents COMMAND
|
|
189
|
+
add_test(NAME tents COMMAND ${Python3_EXECUTABLE} -m doctest ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Testing/tents.py)
|
|
165
190
|
list(APPEND tests_with_pythonpath tents)
|
|
166
191
|
endif()
|
|
167
|
-
add_test(NAME box COMMAND
|
|
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()
|
|
168
197
|
#WORKING_DIRECTORY ${ CMAKE_CURRENT_SOURCE_DIR }
|
|
169
198
|
set_tests_properties(${tests_with_pythonpath}
|
|
170
199
|
PROPERTIES ENVIRONMENT PYTHONPATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}:${NGSOLVE_INSTALL_DIR}/${NGSOLVE_INSTALL_DIR_PYTHON}:$ENV{PYTHONPATH})
|
|
@@ -1,14 +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.
|
|
11
|
-
Requires-Dist: ngstents==0.1.
|
|
10
|
+
Requires-Dist: ngsolve==6.2.2608
|
|
11
|
+
Requires-Dist: ngstents==0.1.2608rc1
|
|
12
|
+
Requires-Dist: xfem==2.1.2608
|
|
12
13
|
Description-Content-Type: text/markdown
|
|
13
14
|
|
|
14
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,8 +9,9 @@ classifiers = [
|
|
|
9
9
|
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
|
|
10
10
|
]
|
|
11
11
|
dependencies = [
|
|
12
|
-
"ngsolve==6.2.
|
|
13
|
-
"ngstents==0.1.
|
|
12
|
+
"ngsolve==6.2.2608",
|
|
13
|
+
"ngstents==0.1.2608rc1",
|
|
14
|
+
"xfem==2.1.2608",
|
|
14
15
|
]
|
|
15
16
|
|
|
16
17
|
[project.urls]
|
|
@@ -19,8 +20,9 @@ Repository = "https://github.com/PaulSt/ngstrefftz"
|
|
|
19
20
|
|
|
20
21
|
[build-system]
|
|
21
22
|
requires = [
|
|
22
|
-
"ngsolve==6.2.
|
|
23
|
-
"ngstents==0.1.
|
|
23
|
+
"ngsolve==6.2.2608",
|
|
24
|
+
"ngstents==0.1.2608rc1",
|
|
25
|
+
"xfem==2.1.2608",
|
|
24
26
|
"scikit-build-core>=0.9.0",
|
|
25
27
|
"pybind11_stubgen",
|
|
26
28
|
"setuptools>=45",
|
|
@@ -1,4 +1,13 @@
|
|
|
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
|
|
2
11
|
|
|
3
12
|
try:
|
|
4
13
|
import ngstents as _ngstents
|
|
@@ -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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#ifndef FILE_AGGREGATEDL2SPACE_HPP
|
|
2
|
+
#define FILE_AGGREGATEDL2SPACE_HPP
|
|
3
|
+
|
|
4
|
+
#include "monomialfespace.hpp"
|
|
5
|
+
#include "dofpatches.hpp"
|
|
6
|
+
#include <xfem/aggregates.hpp>
|
|
7
|
+
|
|
8
|
+
namespace ngcomp
|
|
9
|
+
{
|
|
10
|
+
class AggregatedL2Space : public MonomialFESpace, public DofPatchProvider
|
|
11
|
+
{
|
|
12
|
+
shared_ptr<ElementAggregation> aggregation;
|
|
13
|
+
Array<int> element_to_patch;
|
|
14
|
+
Array<Vec<2>> centers2;
|
|
15
|
+
Array<Vec<3>> centers3;
|
|
16
|
+
Array<double> scales;
|
|
17
|
+
|
|
18
|
+
public:
|
|
19
|
+
AggregatedL2Space (shared_ptr<MeshAccess> ama, const Flags &flags,
|
|
20
|
+
shared_ptr<ElementAggregation> aaggregation);
|
|
21
|
+
|
|
22
|
+
void Update () override;
|
|
23
|
+
void UpdateCouplingDofArray () override;
|
|
24
|
+
void GetDofNrs (ElementId ei, Array<DofId> &dnums) const override;
|
|
25
|
+
FiniteElement &GetFE (ElementId ei, Allocator &alloc) const override;
|
|
26
|
+
DofPatches GetDofPatches () const override;
|
|
27
|
+
|
|
28
|
+
string GetClassName () const override { return "AggregatedL2Space"; }
|
|
29
|
+
shared_ptr<ElementAggregation> GetAggregation () const
|
|
30
|
+
{
|
|
31
|
+
return aggregation;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
template <int DIM>
|
|
36
|
+
void UpdateGeometry (size_t patch, FlatArray<size_t> els);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#ifdef NGS_PYTHON
|
|
41
|
+
#include <python_ngstd.hpp>
|
|
42
|
+
void ExportAggregatedL2Space (py::module m);
|
|
43
|
+
#endif
|
|
44
|
+
|
|
45
|
+
#endif
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#ifndef FILE_DOFPATCHES_HPP
|
|
2
|
+
#define FILE_DOFPATCHES_HPP
|
|
3
|
+
|
|
4
|
+
#include <comp.hpp>
|
|
5
|
+
|
|
6
|
+
namespace ngcomp
|
|
7
|
+
{
|
|
8
|
+
/// Independent trial DOF groups; their element supports may overlap.
|
|
9
|
+
/// Matching trial/test providers must number corresponding groups alike.
|
|
10
|
+
struct DofPatches
|
|
11
|
+
{
|
|
12
|
+
Table<size_t> elements;
|
|
13
|
+
Table<DofId> dofs;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
class DofPatchProvider
|
|
17
|
+
{
|
|
18
|
+
public:
|
|
19
|
+
virtual ~DofPatchProvider () = default;
|
|
20
|
+
virtual DofPatches GetDofPatches () const = 0;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#endif
|