xfem 2.1.2607.dev10__tar.gz → 2.1.2607.dev14__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.
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/INSTALLATION.md +14 -0
- xfem-2.1.2607.dev14/NGSolveAddonConfig.cmake.in +10 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/PKG-INFO +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/lsetintdomain.cpp +0 -128
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/lsetintdomain.hpp +0 -2
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/python_cutint.cpp +131 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/ngsolve_addon.cmake +62 -11
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/CMakeLists.txt +14 -4
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/__init__.py +5 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/_version.py +3 -3
- xfem-2.1.2607.dev14/python/config.py +13 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/ngsxstd.cpp +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/ngsxstd.hpp +11 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/python_utils.cpp +0 -2
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/restrictedfespace.cpp +2 -2
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/CMakeLists.txt +1 -1
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.ci/build_pip.sh +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.ci/build_pip_mac.sh +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.ci/ci_ctests.sh +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.ci/fix_auditwheel_policy.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.github/workflows/extras-workflow.yml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.github/workflows/paper-workflow.yml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.github/workflows/pypi.yml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.gitignore +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.gitlab-ci.yml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/.gitmodules +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/Dockerfile +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/LICENSE +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/MANIFEST.in +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/README.md +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/_ngsolve_deps_provider.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cmake_modules/check_submodules.cmake +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cmake_modules/cmake_uninstall.cmake.in +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/config.h.cmake +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/cutintegral.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/cutintegral.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/fieldeval.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/fieldeval.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/mlsetintegration.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/mlsetintegration.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/spacetimecutrule.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/spacetimecutrule.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/straightcutrule.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/straightcutrule.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/xdecompose.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/xdecompose.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/xintegration.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/cutint/xintegration.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/CMakeLists.txt +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/README.md +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/aggregates/aggfem_shapetester.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/aggregates/fictdom_aggfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/aggregates/fictdom_dg_aggfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/fictdom.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/fictdom_dg.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/fictdom_mlset.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/compp1prolong-playground.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/cutint/area_of_a_circle_quads.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/cutint/integrate_one_big_quad2D.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/cutint/integrate_one_big_quad3D.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/fictdom_dg3d.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/lsetcurving/integrate.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/make_uniform3D_grid.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mg_cut_poisson_p1.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mg_cut_poisson_p1p2_skinny.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mg_cut_poisson_p2.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mg_cut_poisson_p2_skinny.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mg_p1_working.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/cube.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/cube2.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/cube_codim2_test.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/even_simpler.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/multiple_triangles.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/simple.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/simple_mlcutinfo.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/simple_with_convinience.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/square.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/tensor_functions.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/test_GetOuterBoundary.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/test_draw.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/triangle.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/zalesak_disk.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/mlset/zalesak_sphere.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/p1prolong-playground.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/p2prolong-playground.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/graveyard/stokesxfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/linelasticity.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/lsetcurv_boundary.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/lsetgeoms.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/moving_domain.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/mpi/mpi_nxfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/IF_circle.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/IF_marking.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/IF_periodic.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_hypersphere_ST.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_hypersphere_ST_conv.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_hypersphere_ST_conv_higher_order.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_sphere_ST.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_sphere_ST_conv.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/area_of_a_sphere_ST_conv_higher_order.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/fictdomain_Neumann_quad_testing.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/kite3D_in_sympy.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/kite_in_sympy.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP1_timeDGP1_3D.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP1_timeDGP1_3D_static.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP1_timeDGP1_kite.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP1_timeDGP1_kite3D.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP2_timeDGP1.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spaceP2_timeDGP1_new.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/graveyard/spacePX_timeDGP1_kite.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spaceDGtimeDG_unfitted.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spaceDGtimeDG_unfitted_3D.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetimeCG_unfitted.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetimeDG_fitted.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetimeDG_fitted_Nitsche.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetimeDG_unfitted.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetime_geom_error.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spacetime/spacetime_vtk.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/spdes/surfstokestracefem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/stokescutfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/tracefem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/demos/unf_interf_prob.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/feature-details.md +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/bubble-coarse.pdf +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/cuttet-quadrature.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/cut_quadrature.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/cut_quadrature_mlset.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/cuttet.jpg +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/intpoints.jpg +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/spacetime1.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/spacetime2.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/graveyard/zdisc-cut-elements.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/lsetcurv.jpg +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/mlset.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/patches.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/spacetime.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/twophase.pdf +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/unfittedmesh.jpg +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/xfem.jpg +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/graphics/xfes.png +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/latex.template +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/lit-ngsxfem.bib +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/literature.md +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/literature.yaml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/make_literature.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/_static/custom.css +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/_static/literature.css +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/bullets.css +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/conf.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/contents.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/index.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/jupyter/index.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/requirements.txt +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/xfem_misc/demos.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/xfem_misc/feature-details.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/xfem_misc/installation.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/xfem_misc/literature.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/doc/sphinx/xfem_misc/literature_entries.rst +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/calcpointshift.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/calcpointshift.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/lsetrefine.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/lsetrefine.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/projshift.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/projshift.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/python_lsetcurving.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/shiftedevaluate.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/shiftedevaluate.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/shiftintegrators.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/lsetcurving/shiftintegrators.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/pyproject.toml +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/cutmg.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/lset_smoothblend.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/lset_spacetime.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/lsetcurv.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/mlset.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/ngs_check.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/python_ngsxfem.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/python/utils.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/SpaceTimeFE.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/SpaceTimeFE.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/SpaceTimeFESpace.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/SpaceTimeFESpace.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/diffopDt.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/diffopDt.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/diffopFixt.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/diffopFixt.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/python_spacetime.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/spacetime_vtk.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/spacetime_vtk.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/timecf.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/spacetime/timecf.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/CMakeLists.txt +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/ngsxfem_report.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_aggregates.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_backuprule.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_bndcut.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_calc_linearized.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_differential_symbol.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_elementlayers.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_intcurved.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_local_solve.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_localgeom.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_lsetcurv_boundary.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_memory_usage.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_mlset_integration.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_mlset_module_functionality.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_mlset_poisson.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_navier_stokes_2d1.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_ngsolve_version.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_nonlin.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_num_nxfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_nxfem.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_quadchallenges.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_shifteval.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_shifteval_simd.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_simd_cutint.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_simd_lf_blf.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_spacetime_lsetcurv.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_spacetime_set.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_spacetime_vecH1.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_spacetime_vtk.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_spacetimecutrule.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_straightcutrule.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_utils.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/tests/pytests/test_xfes_ndof.py +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/bitarraycf.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/bitarraycf.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/p1interpol.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/p1interpol.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/restrictedblf.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/restrictedblf.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/restrictedfespace.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/spacetimechecks.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/xprolongation.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/utils/xprolongation.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/aggregates.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/aggregates.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/cutinfo.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/cutinfo.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/ghostpenalty.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/ghostpenalty.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/python_xfem.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/sFESpace.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/sFESpace.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/symboliccutbfi.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/symboliccutbfi.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/symboliccutlfi.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/symboliccutlfi.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xFESpace.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xFESpace.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xfemdiffops.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xfemdiffops.hpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xfiniteelement.cpp +0 -0
- {xfem-2.1.2607.dev10 → xfem-2.1.2607.dev14}/xfem/xfiniteelement.hpp +0 -0
|
@@ -29,7 +29,7 @@ else()
|
|
|
29
29
|
endif()
|
|
30
30
|
|
|
31
31
|
set(XFEM_INSTALL_DIR_PYTHON ${ADDON_INSTALL_DIR_PYTHON})
|
|
32
|
-
set(XFEM_INSTALL_DIR_INCLUDE ${
|
|
32
|
+
set(XFEM_INSTALL_DIR_INCLUDE ${XFEM_INSTALL_DIR_PYTHON}/xfem/include)
|
|
33
33
|
set(XFEM_INSTALL_DIR_RES ${ADDON_INSTALL_DIR_RES})
|
|
34
34
|
|
|
35
35
|
add_definitions(-DNGSXFEM_VERSION="${NGSXFEM_VERSION}")
|
|
@@ -64,3 +64,17 @@ and open a browser on your host machine (not in the docker) and paste in the URL
|
|
|
64
64
|
```
|
|
65
65
|
docker run -p 8888:8888 -v ${PWD}:/home/jovyan ngsxfem/ngsxfem-jupyter
|
|
66
66
|
```
|
|
67
|
+
|
|
68
|
+
## Using the C++ core
|
|
69
|
+
|
|
70
|
+
The installation includes the shared C++ library, headers, and CMake package.
|
|
71
|
+
In your CMake project, you can use
|
|
72
|
+
```cmake
|
|
73
|
+
execute_process(COMMAND ${Python3_EXECUTABLE} -m xfem.config OUTPUT_VARIABLE xfem_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
|
74
|
+
```
|
|
75
|
+
to locate the `xfem` package or use `-Dxfem_DIR=<that directory>`. Then link the exported target
|
|
76
|
+
```cmake
|
|
77
|
+
find_package(xfem CONFIG REQUIRED)
|
|
78
|
+
target_link_libraries(my_target PRIVATE xfem::core)
|
|
79
|
+
```
|
|
80
|
+
Headers keep the source directory layout, e.g. `#include <xfem/aggregates.hpp>` and `#include <cutint/lsetintdomain.hpp>`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
@PACKAGE_INIT@
|
|
2
|
+
|
|
3
|
+
include(CMakeFindDependencyMacro)
|
|
4
|
+
find_dependency(Python3 COMPONENTS Interpreter Development.Module)
|
|
5
|
+
|
|
6
|
+
if(NOT NGSolve_DIR)
|
|
7
|
+
execute_process(COMMAND "${Python3_EXECUTABLE}" -m ngsolve.config OUTPUT_VARIABLE NGSolve_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
8
|
+
endif()
|
|
9
|
+
find_dependency(NGSolve CONFIG)
|
|
10
|
+
include("${CMAKE_CURRENT_LIST_DIR}/@NGSOLVE_ADDON_PACKAGE@Targets.cmake")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: xfem
|
|
3
|
-
Version: 2.1.2607.
|
|
3
|
+
Version: 2.1.2607.dev14
|
|
4
4
|
Summary: (ngs)xfem is an Add-on library to Netgen/NGSolve for unfitted/cut FEM.
|
|
5
5
|
Author-Email: Christoph Lehrenfeld <lehrenfeld@math.uni-goettingen.de>
|
|
6
6
|
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
|
|
@@ -172,132 +172,4 @@ namespace xintegration
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
|
|
175
|
-
typedef CoefficientFunction CF;
|
|
176
|
-
typedef GridFunction GF;
|
|
177
|
-
|
|
178
|
-
shared_ptr<LevelsetIntegrationDomain> PyDict2LevelsetIntegrationDomain(py::dict dictionary)
|
|
179
|
-
{
|
|
180
|
-
if (!dictionary.contains("levelset"))
|
|
181
|
-
throw Exception("You need to provide (a) levelset(s).");
|
|
182
|
-
|
|
183
|
-
if (!dictionary.contains("domain_type"))
|
|
184
|
-
throw Exception("You need to provide (a) domain type(s).");
|
|
185
|
-
|
|
186
|
-
optional<double> tref = nullopt;
|
|
187
|
-
|
|
188
|
-
if (dictionary.contains("tref"))
|
|
189
|
-
tref = py::cast<double>(dictionary["tref"]);
|
|
190
|
-
|
|
191
|
-
py::object lset = dictionary["levelset"];
|
|
192
|
-
py::object dt_in = dictionary["domain_type"];
|
|
193
|
-
|
|
194
|
-
int subdivlvl = 0;
|
|
195
|
-
if (dictionary.contains("subdivlvl"))
|
|
196
|
-
{
|
|
197
|
-
auto subdivlvl_ = py::extract<int>(dictionary["subdivlvl"]);
|
|
198
|
-
if (!subdivlvl_.check())
|
|
199
|
-
throw Exception("data type for subdivlvl not admissible.");
|
|
200
|
-
subdivlvl = subdivlvl_();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
int order = -1;
|
|
204
|
-
if (dictionary.contains("order"))
|
|
205
|
-
{
|
|
206
|
-
auto order_ = py::extract<int>(dictionary["order"]);
|
|
207
|
-
if (!order_.check())
|
|
208
|
-
throw Exception("data type for order not admissible.");
|
|
209
|
-
order = order_();
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
int time_order = -1;
|
|
213
|
-
if (dictionary.contains("time_order"))
|
|
214
|
-
{
|
|
215
|
-
auto time_order_ = py::extract<int>(dictionary["time_order"]);
|
|
216
|
-
if (!time_order_.check())
|
|
217
|
-
throw Exception("data type for time_order not admissible.");
|
|
218
|
-
time_order= time_order_();
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
SWAP_DIMENSIONS_POLICY quad_dir_policy = FIND_OPTIMAL;
|
|
222
|
-
if (dictionary.contains("quad_dir_policy"))
|
|
223
|
-
{
|
|
224
|
-
auto quad_dir_policy_ = py::extract<SWAP_DIMENSIONS_POLICY>(dictionary["quad_dir_policy"]);
|
|
225
|
-
if (!quad_dir_policy_.check())
|
|
226
|
-
throw Exception("data type for quad_dir_policy not admissible.");
|
|
227
|
-
quad_dir_policy = quad_dir_policy_();
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (py::extract<DOMAIN_TYPE> (dt_in).check())
|
|
231
|
-
{
|
|
232
|
-
py::extract<shared_ptr<CF>> pycf(lset);
|
|
233
|
-
py::extract<int> dt(dt_in);
|
|
234
|
-
if (!dt.check())
|
|
235
|
-
throw Exception("dt is not a domain type");
|
|
236
|
-
shared_ptr<GridFunction> gf_lset = nullptr;
|
|
237
|
-
shared_ptr<CoefficientFunction> cf_lset = nullptr;
|
|
238
|
-
tie(cf_lset,gf_lset) = CF2GFForStraightCutRule(pycf(),subdivlvl);
|
|
239
|
-
return make_shared<LevelsetIntegrationDomain>(cf_lset,gf_lset,DOMAIN_TYPE(dt()),order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
240
|
-
}
|
|
241
|
-
else
|
|
242
|
-
{
|
|
243
|
-
if (subdivlvl > 0)
|
|
244
|
-
throw Exception("multi level sets don't work with subdivlvl > 0");
|
|
245
|
-
if (time_order > -1)
|
|
246
|
-
throw Exception("multi level sets don't work with time_order > 0");
|
|
247
|
-
|
|
248
|
-
py::extract<py::tuple> lset_tuple_(lset);
|
|
249
|
-
if (!lset_tuple_.check())
|
|
250
|
-
throw Exception("lset is neither a level set nor a tuple ... need new candidates..");
|
|
251
|
-
py::tuple lset_tuple(lset_tuple_());
|
|
252
|
-
for (int i = 0; i < py::len(lset_tuple); i++)
|
|
253
|
-
if (!(py::extract<shared_ptr<GridFunction>>(lset_tuple[i]).check()))
|
|
254
|
-
throw Exception("lsets need to be GridFunctions!");
|
|
255
|
-
|
|
256
|
-
Array<shared_ptr<GridFunction>> gf_lsets;
|
|
257
|
-
gf_lsets = makeCArray<shared_ptr<GridFunction>> (lset_tuple);
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if (py::isinstance<py::tuple>(dt_in))
|
|
261
|
-
{
|
|
262
|
-
Array<DOMAIN_TYPE> dts_ = makeCArray<DOMAIN_TYPE> (py::extract<py::tuple>(dt_in)());
|
|
263
|
-
Array<Array<DOMAIN_TYPE>> dts(1);
|
|
264
|
-
dts[0] = dts_;
|
|
265
|
-
return make_shared<LevelsetIntegrationDomain>(gf_lsets,dts,order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
py::list dts_list;
|
|
269
|
-
if (py::hasattr(dt_in, "as_list") && py::isinstance<py::list>(dt_in.attr("as_list")))
|
|
270
|
-
dts_list = dt_in.attr("as_list");
|
|
271
|
-
else if (py::isinstance<py::list>(dt_in))
|
|
272
|
-
dts_list = dt_in;
|
|
273
|
-
else
|
|
274
|
-
throw Exception("domain_type is neither a tuple nor a list nor a DomainTypeArray.");
|
|
275
|
-
|
|
276
|
-
Array<Array<DOMAIN_TYPE>> dtas(py::len(dts_list));
|
|
277
|
-
int common_length = -1; //not a list
|
|
278
|
-
for (int i = 0; i < py::len(dts_list); i++)
|
|
279
|
-
{
|
|
280
|
-
auto dta(dts_list[i]);
|
|
281
|
-
|
|
282
|
-
// Check for valid input
|
|
283
|
-
if (!py::isinstance<py::tuple>(dta))
|
|
284
|
-
{
|
|
285
|
-
throw Exception("domain_type arrays are incompatible. Maybe you used a list instead of a tuple?");
|
|
286
|
-
}
|
|
287
|
-
else
|
|
288
|
-
{
|
|
289
|
-
if ((i>0) && (common_length != py::len(dta)))
|
|
290
|
-
throw Exception("domain_type arrays have different length");
|
|
291
|
-
else
|
|
292
|
-
common_length = py::len(dta);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Input valid. Pass input on
|
|
296
|
-
dtas[i] = makeCArray<DOMAIN_TYPE> (dta);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
return make_shared<LevelsetIntegrationDomain>(gf_lsets,dtas,order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
175
|
} // end of namespace
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
#include "../utils/ngsxstd.hpp"
|
|
3
|
-
#include <python_ngstd.hpp>
|
|
4
3
|
|
|
5
4
|
using namespace ngfem;
|
|
6
5
|
using namespace ngcomp;
|
|
@@ -169,7 +168,6 @@ namespace xintegration
|
|
|
169
168
|
|
|
170
169
|
std::tuple<shared_ptr<CoefficientFunction>,shared_ptr<GridFunction>> CF2GFForStraightCutRule(shared_ptr<CoefficientFunction> cflset, int subdivlvl = 0);
|
|
171
170
|
|
|
172
|
-
shared_ptr<LevelsetIntegrationDomain> PyDict2LevelsetIntegrationDomain(py::dict dictionary);
|
|
173
171
|
|
|
174
172
|
|
|
175
173
|
}
|
|
@@ -14,7 +14,137 @@ using namespace xintegration;
|
|
|
14
14
|
|
|
15
15
|
typedef CoefficientFunction CF;
|
|
16
16
|
typedef GridFunction GF;
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
namespace xintegration
|
|
19
|
+
{
|
|
20
|
+
typedef CoefficientFunction CF;
|
|
21
|
+
typedef GridFunction GF;
|
|
22
|
+
|
|
23
|
+
shared_ptr<LevelsetIntegrationDomain> PyDict2LevelsetIntegrationDomain(py::dict dictionary)
|
|
24
|
+
{
|
|
25
|
+
if (!dictionary.contains("levelset"))
|
|
26
|
+
throw Exception("You need to provide (a) levelset(s).");
|
|
27
|
+
|
|
28
|
+
if (!dictionary.contains("domain_type"))
|
|
29
|
+
throw Exception("You need to provide (a) domain type(s).");
|
|
30
|
+
|
|
31
|
+
optional<double> tref = nullopt;
|
|
32
|
+
|
|
33
|
+
if (dictionary.contains("tref"))
|
|
34
|
+
tref = py::cast<double>(dictionary["tref"]);
|
|
35
|
+
|
|
36
|
+
py::object lset = dictionary["levelset"];
|
|
37
|
+
py::object dt_in = dictionary["domain_type"];
|
|
38
|
+
|
|
39
|
+
int subdivlvl = 0;
|
|
40
|
+
if (dictionary.contains("subdivlvl"))
|
|
41
|
+
{
|
|
42
|
+
auto subdivlvl_ = py::extract<int>(dictionary["subdivlvl"]);
|
|
43
|
+
if (!subdivlvl_.check())
|
|
44
|
+
throw Exception("data type for subdivlvl not admissible.");
|
|
45
|
+
subdivlvl = subdivlvl_();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
int order = -1;
|
|
49
|
+
if (dictionary.contains("order"))
|
|
50
|
+
{
|
|
51
|
+
auto order_ = py::extract<int>(dictionary["order"]);
|
|
52
|
+
if (!order_.check())
|
|
53
|
+
throw Exception("data type for order not admissible.");
|
|
54
|
+
order = order_();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
int time_order = -1;
|
|
58
|
+
if (dictionary.contains("time_order"))
|
|
59
|
+
{
|
|
60
|
+
auto time_order_ = py::extract<int>(dictionary["time_order"]);
|
|
61
|
+
if (!time_order_.check())
|
|
62
|
+
throw Exception("data type for time_order not admissible.");
|
|
63
|
+
time_order= time_order_();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
SWAP_DIMENSIONS_POLICY quad_dir_policy = FIND_OPTIMAL;
|
|
67
|
+
if (dictionary.contains("quad_dir_policy"))
|
|
68
|
+
{
|
|
69
|
+
auto quad_dir_policy_ = py::extract<SWAP_DIMENSIONS_POLICY>(dictionary["quad_dir_policy"]);
|
|
70
|
+
if (!quad_dir_policy_.check())
|
|
71
|
+
throw Exception("data type for quad_dir_policy not admissible.");
|
|
72
|
+
quad_dir_policy = quad_dir_policy_();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (py::extract<DOMAIN_TYPE> (dt_in).check())
|
|
76
|
+
{
|
|
77
|
+
py::extract<shared_ptr<CF>> pycf(lset);
|
|
78
|
+
py::extract<int> dt(dt_in);
|
|
79
|
+
if (!dt.check())
|
|
80
|
+
throw Exception("dt is not a domain type");
|
|
81
|
+
shared_ptr<GridFunction> gf_lset = nullptr;
|
|
82
|
+
shared_ptr<CoefficientFunction> cf_lset = nullptr;
|
|
83
|
+
tie(cf_lset,gf_lset) = CF2GFForStraightCutRule(pycf(),subdivlvl);
|
|
84
|
+
return make_shared<LevelsetIntegrationDomain>(cf_lset,gf_lset,DOMAIN_TYPE(dt()),order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
{
|
|
88
|
+
if (subdivlvl > 0)
|
|
89
|
+
throw Exception("multi level sets don't work with subdivlvl > 0");
|
|
90
|
+
if (time_order > -1)
|
|
91
|
+
throw Exception("multi level sets don't work with time_order > 0");
|
|
92
|
+
|
|
93
|
+
py::extract<py::tuple> lset_tuple_(lset);
|
|
94
|
+
if (!lset_tuple_.check())
|
|
95
|
+
throw Exception("lset is neither a level set nor a tuple ... need new candidates..");
|
|
96
|
+
py::tuple lset_tuple(lset_tuple_());
|
|
97
|
+
for (int i = 0; i < py::len(lset_tuple); i++)
|
|
98
|
+
if (!(py::extract<shared_ptr<GridFunction>>(lset_tuple[i]).check()))
|
|
99
|
+
throw Exception("lsets need to be GridFunctions!");
|
|
100
|
+
|
|
101
|
+
Array<shared_ptr<GridFunction>> gf_lsets;
|
|
102
|
+
gf_lsets = makeCArray<shared_ptr<GridFunction>> (lset_tuple);
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
if (py::isinstance<py::tuple>(dt_in))
|
|
106
|
+
{
|
|
107
|
+
Array<DOMAIN_TYPE> dts_ = makeCArray<DOMAIN_TYPE> (py::extract<py::tuple>(dt_in)());
|
|
108
|
+
Array<Array<DOMAIN_TYPE>> dts(1);
|
|
109
|
+
dts[0] = dts_;
|
|
110
|
+
return make_shared<LevelsetIntegrationDomain>(gf_lsets,dts,order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
py::list dts_list;
|
|
114
|
+
if (py::hasattr(dt_in, "as_list") && py::isinstance<py::list>(dt_in.attr("as_list")))
|
|
115
|
+
dts_list = dt_in.attr("as_list");
|
|
116
|
+
else if (py::isinstance<py::list>(dt_in))
|
|
117
|
+
dts_list = dt_in;
|
|
118
|
+
else
|
|
119
|
+
throw Exception("domain_type is neither a tuple nor a list nor a DomainTypeArray.");
|
|
120
|
+
|
|
121
|
+
Array<Array<DOMAIN_TYPE>> dtas(py::len(dts_list));
|
|
122
|
+
int common_length = -1; //not a list
|
|
123
|
+
for (int i = 0; i < py::len(dts_list); i++)
|
|
124
|
+
{
|
|
125
|
+
auto dta(dts_list[i]);
|
|
126
|
+
|
|
127
|
+
// Check for valid input
|
|
128
|
+
if (!py::isinstance<py::tuple>(dta))
|
|
129
|
+
{
|
|
130
|
+
throw Exception("domain_type arrays are incompatible. Maybe you used a list instead of a tuple?");
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
{
|
|
134
|
+
if ((i>0) && (common_length != py::len(dta)))
|
|
135
|
+
throw Exception("domain_type arrays have different length");
|
|
136
|
+
else
|
|
137
|
+
common_length = py::len(dta);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Input valid. Pass input on
|
|
141
|
+
dtas[i] = makeCArray<DOMAIN_TYPE> (dta);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return make_shared<LevelsetIntegrationDomain>(gf_lsets,dtas,order,time_order,subdivlvl,quad_dir_policy,tref);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
} // end of namespace
|
|
18
148
|
|
|
19
149
|
void ExportNgsx_cutint(py::module &m)
|
|
20
150
|
{
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# Don't change anything here (unless you know what you are doing!)
|
|
5
5
|
###############################################################################
|
|
6
6
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
7
|
+
set(_NGSOLVE_ADDON_HELPER_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
|
7
8
|
|
|
8
9
|
# Set default build type to RelWithDebInfo
|
|
9
10
|
if(NOT CMAKE_BUILD_TYPE)
|
|
@@ -31,7 +32,7 @@ macro(add_ngsolve_addon module_name)
|
|
|
31
32
|
add_library(${module_name} SHARED ${ARGN})
|
|
32
33
|
target_include_directories(${module_name} BEFORE PRIVATE $<TARGET_PROPERTY:ngsolve,INTERFACE_INCLUDE_DIRECTORIES>)
|
|
33
34
|
target_link_libraries(${module_name} PUBLIC ngsolve Python3::Module)
|
|
34
|
-
set_target_properties(${module_name} PROPERTIES PREFIX "" CXX_STANDARD
|
|
35
|
+
set_target_properties(${module_name} PROPERTIES PREFIX "" CXX_STANDARD 17)
|
|
35
36
|
|
|
36
37
|
# Python does not recognize .dll (Windows) and .dylib (MacOS) file endings as modules
|
|
37
38
|
if(WIN32)
|
|
@@ -92,17 +93,67 @@ else()
|
|
|
92
93
|
set(ADDON_INSTALL_DIR_CMAKE ${NETGEN_INSTALL_DIR_CMAKE})
|
|
93
94
|
endif()
|
|
94
95
|
|
|
96
|
+
function(ngsolve_addon_set_relative_rpath target)
|
|
97
|
+
if(APPLE)
|
|
98
|
+
set(_origin "@loader_path")
|
|
99
|
+
elseif(UNIX)
|
|
100
|
+
set(_origin "\$ORIGIN")
|
|
101
|
+
endif()
|
|
102
|
+
if(_origin)
|
|
103
|
+
foreach(_path ${ARGN})
|
|
104
|
+
list(APPEND _rpaths "${_origin}/${_path}")
|
|
105
|
+
endforeach()
|
|
106
|
+
set_target_properties(${target} PROPERTIES INSTALL_RPATH "${_rpaths}" BUILD_RPATH_USE_ORIGIN TRUE)
|
|
107
|
+
endif()
|
|
108
|
+
endfunction()
|
|
109
|
+
|
|
110
|
+
function(add_ngsolve_addon_library target)
|
|
111
|
+
include(CMakePackageConfigHelpers)
|
|
112
|
+
cmake_parse_arguments(ARG "" "PACKAGE;EXPORT_NAME"
|
|
113
|
+
"SOURCES;PUBLIC_HEADERS" ${ARGN})
|
|
114
|
+
if(NOT ARG_EXPORT_NAME)
|
|
115
|
+
set(ARG_EXPORT_NAME "${target}")
|
|
116
|
+
endif()
|
|
117
|
+
if(SKBUILD)
|
|
118
|
+
set(_package_destination "${ARG_PACKAGE}")
|
|
119
|
+
else()
|
|
120
|
+
set(_package_destination "${ADDON_INSTALL_DIR_PYTHON}/${ARG_PACKAGE}")
|
|
121
|
+
endif()
|
|
122
|
+
set(_cmake_destination "${_package_destination}/cmake")
|
|
123
|
+
|
|
124
|
+
add_library(${target} SHARED ${ARG_SOURCES})
|
|
125
|
+
add_library(${ARG_PACKAGE}::${ARG_EXPORT_NAME} ALIAS ${target})
|
|
126
|
+
target_include_directories(${target} BEFORE PRIVATE $<TARGET_PROPERTY:ngsolve,INTERFACE_INCLUDE_DIRECTORIES>)
|
|
127
|
+
target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<INSTALL_INTERFACE:${_package_destination}/include>)
|
|
128
|
+
target_link_libraries(${target} PUBLIC ngsolve Python3::Module)
|
|
129
|
+
set_target_properties(${target} PROPERTIES CXX_STANDARD 17 EXPORT_NAME "${ARG_EXPORT_NAME}" MACOSX_RPATH TRUE)
|
|
130
|
+
if(SKBUILD AND NOT WIN32)
|
|
131
|
+
file(RELATIVE_PATH _ngsolve_lib "/${NGSOLVE_INSTALL_DIR_PYTHON}/${ARG_PACKAGE}" "/${NGSOLVE_INSTALL_DIR_LIB}")
|
|
132
|
+
ngsolve_addon_set_relative_rpath(${target} "${_ngsolve_lib}")
|
|
133
|
+
elseif(NOT WIN32)
|
|
134
|
+
set_target_properties(${target} PROPERTIES INSTALL_RPATH "${NGSOLVE_LIBRARY_DIR}")
|
|
135
|
+
endif()
|
|
136
|
+
|
|
137
|
+
install(TARGETS ${target} EXPORT ${ARG_PACKAGE}-targets RUNTIME DESTINATION "${_package_destination}" LIBRARY DESTINATION "${_package_destination}" ARCHIVE DESTINATION "${_package_destination}")
|
|
138
|
+
install(FILES ${ARG_PUBLIC_HEADERS} DESTINATION "${_package_destination}/include/${ARG_PACKAGE}")
|
|
139
|
+
install(EXPORT ${ARG_PACKAGE}-targets FILE "${ARG_PACKAGE}Targets.cmake" NAMESPACE "${ARG_PACKAGE}::" DESTINATION "${_cmake_destination}")
|
|
140
|
+
|
|
141
|
+
set(NGSOLVE_ADDON_PACKAGE "${ARG_PACKAGE}")
|
|
142
|
+
configure_package_config_file( "${_NGSOLVE_ADDON_HELPER_DIR}/NGSolveAddonConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${ARG_PACKAGE}Config.cmake" INSTALL_DESTINATION "${_cmake_destination}")
|
|
143
|
+
set(_version "${SKBUILD_PROJECT_VERSION_FULL}")
|
|
144
|
+
if(NOT _version)
|
|
145
|
+
set(_version "${PROJECT_VERSION}")
|
|
146
|
+
endif()
|
|
147
|
+
set(_config_files "${CMAKE_CURRENT_BINARY_DIR}/${ARG_PACKAGE}Config.cmake")
|
|
148
|
+
if(_version)
|
|
149
|
+
write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${ARG_PACKAGE}ConfigVersion.cmake" VERSION "${_version}" COMPATIBILITY SameMajorVersion)
|
|
150
|
+
list(APPEND _config_files "${CMAKE_CURRENT_BINARY_DIR}/${ARG_PACKAGE}ConfigVersion.cmake")
|
|
151
|
+
endif()
|
|
152
|
+
install(FILES ${_config_files} DESTINATION "${_cmake_destination}")
|
|
153
|
+
endfunction()
|
|
154
|
+
|
|
95
155
|
macro(ngsolve_generate_stub_files module_name)
|
|
96
|
-
|
|
97
|
-
# propagate LD_LIBRARY_PATH so its native .so can load ngsolve shared libs.
|
|
98
|
-
set(stubgen_generation_code "
|
|
99
|
-
set(ENV{PYTHONPATH} \"${stubgen_working_dir}\")
|
|
100
|
-
set(ENV{LD_LIBRARY_PATH} \"${NETGEN_DIR}/${NETGEN_INSTALL_DIR_LIB}:$ENV{LD_LIBRARY_PATH}\")
|
|
101
|
-
execute_process(
|
|
102
|
-
WORKING_DIRECTORY \"${stubgen_working_dir}\"
|
|
103
|
-
COMMAND \"${Python3_EXECUTABLE}\" -m pybind11_stubgen --ignore-all-errors
|
|
104
|
-
-o \"${CMAKE_CURRENT_BINARY_DIR}/stubs\" ${module_name}
|
|
105
|
-
)")
|
|
156
|
+
set(stubgen_generation_code "execute_process(WORKING_DIRECTORY ${stubgen_working_dir} COMMAND ${Python3_EXECUTABLE} -m pybind11_stubgen --ignore-all-errors -o ${CMAKE_CURRENT_BINARY_DIR}/stubs ${module_name})")
|
|
106
157
|
set(stubgen_directory "${CMAKE_CURRENT_BINARY_DIR}/stubs/${module_name}/")
|
|
107
158
|
set(stubgen_file "${CMAKE_CURRENT_BINARY_DIR}/stubs/${module_name}.pyi")
|
|
108
159
|
set(stubgen_install_destination ${ADDON_INSTALL_DIR_PYTHON}/${module_name}/)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
add_ngsolve_addon_library(xfem_core
|
|
2
|
+
PACKAGE xfem
|
|
3
|
+
EXPORT_NAME core
|
|
4
|
+
SOURCES
|
|
3
5
|
../cutint/lsetintdomain.cpp
|
|
4
6
|
../cutint/fieldeval.cpp
|
|
5
7
|
../cutint/spacetimecutrule.cpp
|
|
@@ -13,7 +15,6 @@ target_sources(xfem PRIVATE
|
|
|
13
15
|
../lsetcurving/projshift.cpp
|
|
14
16
|
../lsetcurving/shiftedevaluate.cpp
|
|
15
17
|
../lsetcurving/shiftintegrators.cpp
|
|
16
|
-
../python/python_ngsxfem.cpp
|
|
17
18
|
../spacetime/diffopDt.cpp
|
|
18
19
|
../spacetime/diffopFixt.cpp
|
|
19
20
|
../spacetime/SpaceTimeFE.cpp
|
|
@@ -36,8 +37,17 @@ target_sources(xfem PRIVATE
|
|
|
36
37
|
../xfem/xfiniteelement.cpp
|
|
37
38
|
../xfem/aggregates.cpp
|
|
38
39
|
)
|
|
40
|
+
target_include_directories(xfem_core PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
|
|
41
|
+
target_compile_definitions(xfem_core PRIVATE NGSXFEM_EXPORTS
|
|
42
|
+
PUBLIC $<$<BOOL:${SPACETIME_SANITY_CHECKS}>:SPACETIME_SANITY_CHECKS>)
|
|
43
|
+
set_target_properties(xfem_core PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
|
44
|
+
|
|
45
|
+
target_sources(xfem PRIVATE python_ngsxfem.cpp)
|
|
46
|
+
target_link_libraries(xfem PRIVATE xfem_core)
|
|
47
|
+
ngsolve_addon_set_relative_rpath(xfem ".")
|
|
48
|
+
|
|
39
49
|
install (FILES
|
|
40
|
-
__init__.py cutmg.py mlset.py lset_spacetime.py lset_smoothblend.py lsetcurv.py utils.py ngs_check.py _version.py
|
|
50
|
+
__init__.py config.py cutmg.py mlset.py lset_spacetime.py lset_smoothblend.py lsetcurv.py utils.py ngs_check.py _version.py
|
|
41
51
|
DESTINATION ${XFEM_INSTALL_DIR_PYTHON}/xfem
|
|
42
52
|
COMPONENT xfem
|
|
43
53
|
)
|
|
@@ -12,7 +12,12 @@ xfem.mlset ... multiple level sets
|
|
|
12
12
|
xfem.utils ... some example level set geometries
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
+
import os
|
|
16
|
+
import sys
|
|
15
17
|
|
|
18
|
+
if sys.platform.startswith("win"):
|
|
19
|
+
_dll_directory = os.add_dll_directory(os.path.dirname(__file__))
|
|
20
|
+
del os, sys
|
|
16
21
|
|
|
17
22
|
from ngsolve import (L2, VOL, BitArray, CoefficientFunction, FESpace,
|
|
18
23
|
GridFunction, H1, IfPos, LinearForm, Parameter, dx)
|
|
@@ -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 = '2.1.2607.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 1, 2607, '
|
|
21
|
+
__version__ = version = '2.1.2607.dev14'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 1, 2607, 'dev14')
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g0868c6fbd'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
def get_cmake_dir():
|
|
4
|
+
return str(Path(__file__).resolve().parent / "cmake")
|
|
5
|
+
|
|
6
|
+
def get_include_dir():
|
|
7
|
+
return str(Path(__file__).resolve().parent / "include")
|
|
8
|
+
|
|
9
|
+
def get_library_dir():
|
|
10
|
+
return str(Path(__file__).resolve().parent)
|
|
11
|
+
|
|
12
|
+
if __name__ == "__main__":
|
|
13
|
+
print(get_cmake_dir())
|
|
@@ -7,6 +7,16 @@
|
|
|
7
7
|
|
|
8
8
|
using namespace ngbla;
|
|
9
9
|
|
|
10
|
+
#ifdef _WIN32
|
|
11
|
+
#ifdef NGSXFEM_EXPORTS
|
|
12
|
+
#define NGSXFEM_API __declspec(dllexport)
|
|
13
|
+
#else
|
|
14
|
+
#define NGSXFEM_API __declspec(dllimport)
|
|
15
|
+
#endif
|
|
16
|
+
#else
|
|
17
|
+
#define NGSXFEM_API
|
|
18
|
+
#endif
|
|
19
|
+
|
|
10
20
|
enum SWAP_DIMENSIONS_POLICY {FIRST_ALLOWED, FIND_OPTIMAL, ALWAYS_NONE};
|
|
11
21
|
|
|
12
22
|
// /// domain types: two domains: POS/NEG and the diving interface IF
|
|
@@ -120,4 +130,4 @@ public:
|
|
|
120
130
|
void Output();
|
|
121
131
|
};
|
|
122
132
|
|
|
123
|
-
extern GlobalNgsxfemVariables globxvar;
|
|
133
|
+
extern NGSXFEM_API GlobalNgsxfemVariables globxvar;
|
|
@@ -198,7 +198,7 @@ namespace ngfem
|
|
|
198
198
|
// LocalHeap & lh) const
|
|
199
199
|
{
|
|
200
200
|
if (fel.GetNDof() == 0)
|
|
201
|
-
flux.AddSize(
|
|
201
|
+
flux.AddSize(diffop->Dim(), mir.Size()) = 0.0;
|
|
202
202
|
else
|
|
203
203
|
diffop->Apply(fel, mir, x, flux);
|
|
204
204
|
}
|
|
@@ -211,7 +211,7 @@ namespace ngfem
|
|
|
211
211
|
// LocalHeap & lh) const
|
|
212
212
|
{
|
|
213
213
|
if (fel.GetNDof() == 0)
|
|
214
|
-
flux.AddSize(
|
|
214
|
+
flux.AddSize(diffop->Dim(), mir.Size()) = 0.0;
|
|
215
215
|
else
|
|
216
216
|
diffop->Apply(fel, mir, x, flux);
|
|
217
217
|
}
|
|
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
|