ngsolve 6.2.2502__cp311-cp311-win_amd64.whl → 6.2.2601__cp311-cp311-win_amd64.whl

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.
Files changed (107) hide show
  1. netgen/include/analytic_integrals.hpp +10 -0
  2. netgen/include/basematrix.hpp +6 -0
  3. netgen/include/bdbequations.hpp +55 -0
  4. netgen/include/bem_diffops.hpp +475 -0
  5. netgen/include/bilinearform.hpp +4 -1
  6. netgen/include/blockjacobi.hpp +17 -5
  7. netgen/include/bspline.hpp +2 -0
  8. netgen/include/cholesky.hpp +2 -2
  9. netgen/include/code_generation.hpp +2 -2
  10. netgen/include/complex_wrapper.hpp +30 -2
  11. netgen/include/contact.hpp +8 -0
  12. netgen/include/diagonalmatrix.hpp +6 -0
  13. netgen/include/diffop_impl.hpp +3 -1
  14. netgen/include/diffopwithfactor.hpp +123 -0
  15. netgen/include/elementbyelement.hpp +9 -3
  16. netgen/include/expr.hpp +45 -7
  17. netgen/include/fespace.hpp +12 -4
  18. netgen/include/gridfunction.hpp +3 -3
  19. netgen/include/h1amg.hpp +85 -2
  20. netgen/include/h1lumping.hpp +6 -0
  21. netgen/include/hcurl_equations.hpp +29 -0
  22. netgen/include/hcurlcurlfe.hpp +20 -0
  23. netgen/include/hdiv_equations.hpp +15 -0
  24. netgen/include/hdivfe_utils.hpp +1 -0
  25. netgen/include/hdivhofespace.hpp +2 -0
  26. netgen/include/integrator.hpp +4 -16
  27. netgen/include/intrule.hpp +2 -1
  28. netgen/include/intrules_SauterSchwab.hpp +25 -0
  29. netgen/include/jacobi.hpp +35 -18
  30. netgen/include/kernels.hpp +724 -0
  31. netgen/include/l2hofe.hpp +1 -0
  32. netgen/include/matrix.hpp +8 -3
  33. netgen/include/meshaccess.hpp +4 -3
  34. netgen/include/mp_coefficient.hpp +145 -0
  35. netgen/include/mptools.hpp +1331 -368
  36. netgen/include/mycomplex.hpp +1 -1
  37. netgen/include/ngblas.hpp +116 -7
  38. netgen/include/potentialtools.hpp +22 -0
  39. netgen/include/preconditioner.hpp +23 -23
  40. netgen/include/prolongation.hpp +132 -6
  41. netgen/include/recursive_pol.hpp +63 -11
  42. netgen/include/simd_complex.hpp +45 -0
  43. netgen/include/sparsecholesky.hpp +6 -2
  44. netgen/include/sparsefactorization_interface.hpp +159 -0
  45. netgen/include/sparsematrix.hpp +21 -7
  46. netgen/include/sparsematrix_dyn.hpp +6 -7
  47. netgen/include/sparsematrix_impl.hpp +175 -40
  48. netgen/include/special_matrix.hpp +2 -0
  49. netgen/include/statushandler.hpp +8 -8
  50. netgen/include/symbolicintegrator.hpp +2 -1
  51. netgen/include/tangentialfacetfespace.hpp +7 -22
  52. netgen/include/thdivfe_impl.hpp +66 -0
  53. netgen/include/tscalarfe.hpp +1 -1
  54. netgen/include/vector.hpp +272 -47
  55. netgen/lib/libngsolve.lib +0 -0
  56. netgen/libngsolve.dll +0 -0
  57. netgen/ngscxx.bat +1 -1
  58. netgen/ngsld.bat +1 -1
  59. ngsolve/__init__.py +1 -0
  60. ngsolve/cmake/NGSolveConfig.cmake +8 -8
  61. ngsolve/cmake/ngsolve-targets.cmake +24 -18
  62. ngsolve/config/config.py +7 -7
  63. ngsolve/demos/intro/cmagnet.py +19 -22
  64. ngsolve/directsolvers.py +9 -21
  65. ngsolve/krylovspace.py +172 -3
  66. ngsolve/ngslib.lib +0 -0
  67. ngsolve/ngslib.pyd +0 -0
  68. ngsolve/nonlinearsolvers.py +2 -2
  69. ngsolve/preconditioners.py +1 -0
  70. ngsolve/solve_implementation.py +168 -0
  71. ngsolve/{solvers.py → solvers/__init__.py} +1 -1
  72. ngsolve/solvers/cudss.py +112 -0
  73. ngsolve/webgui.py +2 -0
  74. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/METADATA +2 -2
  75. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/RECORD +107 -97
  76. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/Scripts/ngsolve.tcl +0 -0
  77. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.geo +0 -0
  78. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.vol +0 -0
  79. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.in2d +0 -0
  80. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.vol +0 -0
  81. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.geo +0 -0
  82. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.vol +0 -0
  83. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.geo +0 -0
  84. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.vol +0 -0
  85. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.geo +0 -0
  86. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.vol +0 -0
  87. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  88. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  89. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d1_square.pde +0 -0
  90. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d2_chip.pde +0 -0
  91. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  92. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d4_cube.pde +0 -0
  93. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d5_beam.pde +0 -0
  94. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  95. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d7_coil.pde +0 -0
  96. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  97. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  98. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  99. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  100. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  101. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.geo +0 -0
  102. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.vol +0 -0
  103. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.in2d +0 -0
  104. {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.vol +0 -0
  105. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/LICENSE +0 -0
  106. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/WHEEL +0 -0
  107. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,4 @@
1
- set(PACKAGE_VERSION "6.2.2502")
1
+ set(PACKAGE_VERSION "6.2.2601")
2
2
  find_package(Netgen CONFIG REQUIRED HINTS
3
3
  ${CMAKE_CURRENT_LIST_DIR}
4
4
  ${CMAKE_CURRENT_LIST_DIR}/..
@@ -18,20 +18,20 @@ set(NGSOLVE_CXX_COMPILER "C:/Program Files/Microsoft Visual Studio/2022/Communit
18
18
  set(NGSOLVE_CMAKE_BUILD_TYPE "Release")
19
19
 
20
20
  set(NGSOLVE_CMAKE_THREAD_LIBS_INIT "")
21
- set(NGSOLVE_MKL_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib")
21
+ set(NGSOLVE_MKL_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib")
22
22
  set(NGSOLVE_PYBIND_INCLUDE_DIR "")
23
23
  set(NGSOLVE_PYTHON_INCLUDE_DIRS "C:/Python311/include")
24
24
  set(NGSOLVE_PYTHON_LIBRARIES "C:/Python311/libs/python311.lib")
25
25
  set(NGSOLVE_PYTHON_PACKAGES_INSTALL_DIR "")
26
- set(NGSOLVE_TCL_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tcl/generic")
26
+ set(NGSOLVE_TCL_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tcl/generic")
27
27
  set(NGSOLVE_TCL_LIBRARY "C:/Python311/tcl/tclstub86.lib")
28
28
  set(NGSOLVE_TK_DND_LIBRARY "")
29
- set(NGSOLVE_TK_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tk/generic")
29
+ set(NGSOLVE_TK_INCLUDE_PATH "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/src/project_tk/generic")
30
30
  set(NGSOLVE_TK_LIBRARY "C:/Python311/tcl/tkstub86.lib")
31
31
  set(NGSOLVE_X11_X11_LIB "")
32
32
  set(NGSOLVE_X11_Xmu_LIB "")
33
- set(NGSOLVE_ZLIB_INCLUDE_DIRS "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/include")
34
- set(NGSOLVE_ZLIB_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/lib/zlibstatic.lib")
33
+ set(NGSOLVE_ZLIB_INCLUDE_DIRS "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/include")
34
+ set(NGSOLVE_ZLIB_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/netgen/_skbuild/win-amd64-3.11/cmake-build/dependencies/zlib/lib/zlibstatic.lib")
35
35
 
36
36
  set(NGSOLVE_INTEL_MIC OFF)
37
37
  set(NGSOLVE_USE_CCACHE ON)
@@ -50,8 +50,8 @@ set(NGSOLVE_USE_VTUNE OFF)
50
50
  set(NGSOLVE_MAX_SYS_DIM 3)
51
51
 
52
52
  set(NGSOLVE_COMPILE_FLAGS " /DHAVE_NETGEN_SOURCES /DUSE_TIMEOFDAY /DTCL /DLAPACK /DUSE_PARDISO /DNGS_PYTHON /DNETGEN_PYTHON /DNG_PYTHON /DPYBIND11_SIMPLE_GIL_MANAGEMENT /D_WIN32_WINNT=0x1000 /DWNT /DWNT_WINDOW /DNOMINMAX /DMSVC_EXPRESS /D_CRT_SECURE_NO_WARNINGS /DHAVE_STRUCT_TIMESPEC /DWIN32 /DPARALLEL /DNG_MPI_WRAPPER" CACHE STRING "Preprocessor definitions of ngscxx")
53
- set(NGSOLVE_LINK_FLAGS " -LC:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:\"%NGSCXX_DIR%/lib\" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:\"%PYTHON_LIBDIR%\"" CACHE STRING "Link flags set in ngsld")
54
- set(NGSOLVE_INCLUDE_DIRS C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/include;C:/Python311/include CACHE STRING "Include dirs set in ngscxx")
53
+ set(NGSOLVE_LINK_FLAGS " -LC:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib -l_rt /LIBPATH:\"%NGSCXX_DIR%/lib\" nglib.lib ngcore.lib libngsolve.lib /LIBPATH:\"%PYTHON_LIBDIR%\"" CACHE STRING "Link flags set in ngsld")
54
+ set(NGSOLVE_INCLUDE_DIRS C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/include;C:/Python311/include CACHE STRING "Include dirs set in ngscxx")
55
55
 
56
56
  set(NGSOLVE_INSTALL_DIR_PYTHON .)
57
57
  set(NGSOLVE_INSTALL_DIR_BIN netgen)
@@ -19,7 +19,7 @@ set(CMAKE_IMPORT_FILE_VERSION 1)
19
19
  set(_cmake_targets_defined "")
20
20
  set(_cmake_targets_not_defined "")
21
21
  set(_cmake_expected_targets "")
22
- foreach(_cmake_expected_target IN ITEMS netgen_libs ngs_lapack netgen_python ngstd ngbla ngla ngfem ngcomp ngsolve)
22
+ foreach(_cmake_expected_target IN ITEMS netgen_lib netgen_core_lib ngs_lapack ngstd ngbla ngla ngfem ngsbem ngcomp ngsolve)
23
23
  list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
24
24
  if(TARGET "${_cmake_expected_target}")
25
25
  list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
@@ -54,27 +54,26 @@ if(_IMPORT_PREFIX STREQUAL "/")
54
54
  set(_IMPORT_PREFIX "")
55
55
  endif()
56
56
 
57
- # Create imported target netgen_libs
58
- add_library(netgen_libs INTERFACE IMPORTED)
57
+ # Create imported target netgen_lib
58
+ add_library(netgen_lib INTERFACE IMPORTED)
59
59
 
60
- set_target_properties(netgen_libs PROPERTIES
61
- INTERFACE_LINK_LIBRARIES "nglib;ngcore"
60
+ set_target_properties(netgen_lib PROPERTIES
61
+ INTERFACE_LINK_LIBRARIES "nglib"
62
62
  )
63
63
 
64
- # Create imported target ngs_lapack
65
- add_library(ngs_lapack INTERFACE IMPORTED)
64
+ # Create imported target netgen_core_lib
65
+ add_library(netgen_core_lib INTERFACE IMPORTED)
66
66
 
67
- set_target_properties(ngs_lapack PROPERTIES
68
- INTERFACE_INCLUDE_DIRECTORIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/include"
69
- INTERFACE_LINK_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib"
67
+ set_target_properties(netgen_core_lib PROPERTIES
68
+ INTERFACE_LINK_LIBRARIES "ngcore"
70
69
  )
71
70
 
72
- # Create imported target netgen_python
73
- add_library(netgen_python INTERFACE IMPORTED)
71
+ # Create imported target ngs_lapack
72
+ add_library(ngs_lapack INTERFACE IMPORTED)
74
73
 
75
- set_target_properties(netgen_python PROPERTIES
76
- INTERFACE_INCLUDE_DIRECTORIES "C:/Python311/include"
77
- INTERFACE_LINK_LIBRARIES "C:/Python311/libs/python311.lib"
74
+ set_target_properties(ngs_lapack PROPERTIES
75
+ INTERFACE_INCLUDE_DIRECTORIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/include"
76
+ INTERFACE_LINK_LIBRARIES "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Library/lib/mkl_rt.lib"
78
77
  )
79
78
 
80
79
  # Create imported target ngstd
@@ -83,7 +82,7 @@ add_library(ngstd INTERFACE IMPORTED)
83
82
  set_target_properties(ngstd PROPERTIES
84
83
  INTERFACE_COMPILE_DEFINITIONS "HAVE_NETGEN_SOURCES;USE_TIMEOFDAY;TCL;LAPACK;USE_PARDISO;NGS_PYTHON"
85
84
  INTERFACE_COMPILE_OPTIONS "/std:c++17;/bigobj;/wd4068;-DMAX_SYS_DIM=3"
86
- INTERFACE_LINK_LIBRARIES "netgen_libs;\$<LINK_ONLY:>"
85
+ INTERFACE_LINK_LIBRARIES "netgen_core_lib;\$<LINK_ONLY:>"
87
86
  )
88
87
 
89
88
  # Create imported target ngbla
@@ -107,18 +106,25 @@ set_target_properties(ngfem PROPERTIES
107
106
  INTERFACE_LINK_LIBRARIES "ngbla;ngstd;\$<LINK_ONLY:>"
108
107
  )
109
108
 
109
+ # Create imported target ngsbem
110
+ add_library(ngsbem INTERFACE IMPORTED)
111
+
112
+ set_target_properties(ngsbem PROPERTIES
113
+ INTERFACE_LINK_LIBRARIES "ngcomp;ngfem;ngla;ngbla;ngstd;\$<LINK_ONLY:>"
114
+ )
115
+
110
116
  # Create imported target ngcomp
111
117
  add_library(ngcomp INTERFACE IMPORTED)
112
118
 
113
119
  set_target_properties(ngcomp PROPERTIES
114
- INTERFACE_LINK_LIBRARIES "ngfem;ngla;ngbla;ngstd;\$<LINK_ONLY:>"
120
+ INTERFACE_LINK_LIBRARIES "ngfem;ngla;ngbla;ngstd;\$<LINK_ONLY:>;netgen_lib"
115
121
  )
116
122
 
117
123
  # Create imported target ngsolve
118
124
  add_library(ngsolve SHARED IMPORTED)
119
125
 
120
126
  set_target_properties(ngsolve PROPERTIES
121
- INTERFACE_LINK_LIBRARIES "netgen_libs;ngsolve;ngcomp;ngfem;ngbla;ngla;ngstd"
127
+ INTERFACE_LINK_LIBRARIES "netgen_lib;netgen_core_lib;ngsolve;ngcomp;ngfem;ngsbem;ngbla;ngla;ngstd"
122
128
  )
123
129
 
124
130
  if(CMAKE_VERSION VERSION_LESS 3.0.0)
ngsolve/config/config.py CHANGED
@@ -15,7 +15,7 @@ USE_MUMPS = _cmake_to_bool("OFF")
15
15
  USE_PARDISO = _cmake_to_bool("OFF")
16
16
  USE_UMFPACK = _cmake_to_bool("OFF")
17
17
 
18
- NETGEN_DIR = "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/venv_ngs/Lib/site-packages"
18
+ NETGEN_DIR = "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/venv_ngs/Lib/site-packages"
19
19
 
20
20
  NGSOLVE_COMPILE_DEFINITIONS = "HAVE_NETGEN_SOURCES;USE_TIMEOFDAY;TCL;LAPACK;USE_PARDISO;NGS_PYTHON"
21
21
  NGSOLVE_COMPILE_DEFINITIONS_PRIVATE = "USE_MKL"
@@ -29,21 +29,21 @@ NGSOLVE_INSTALL_DIR_INCLUDE = "netgen/include"
29
29
  NGSOLVE_INSTALL_DIR_CMAKE = "ngsolve/cmake"
30
30
  NGSOLVE_INSTALL_DIR_RES = "share"
31
31
 
32
- NGSOLVE_VERSION = "6.2.2502"
33
- NGSOLVE_VERSION_GIT = "v6.2.2502-0-g984bf8ae2"
34
- NGSOLVE_VERSION_PYTHON = "6.2.2502"
32
+ NGSOLVE_VERSION = "6.2.2601"
33
+ NGSOLVE_VERSION_GIT = "v6.2.2601-0-g3a3ce7f49"
34
+ NGSOLVE_VERSION_PYTHON = "6.2.2601"
35
35
 
36
36
  NGSOLVE_VERSION_MAJOR = "6"
37
37
  NGSOLVE_VERSION_MINOR = "2"
38
38
  NGSOLVE_VERSION_TWEAK = "0"
39
- NGSOLVE_VERSION_PATCH = "2502"
40
- NGSOLVE_VERSION_HASH = "g984bf8ae2"
39
+ NGSOLVE_VERSION_PATCH = "2601"
40
+ NGSOLVE_VERSION_HASH = "g3a3ce7f49"
41
41
 
42
42
  CMAKE_CXX_COMPILER = "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
43
43
  CMAKE_CUDA_COMPILER = ""
44
44
  CMAKE_C_COMPILER = "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
45
45
  CMAKE_LINKER = "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/link.exe"
46
- CMAKE_INSTALL_PREFIX = "C:/gitlabci/tools/builds/3zsqG5ns/0/ngsolve/ngsolve/_skbuild/win-amd64-3.11/cmake-install"
46
+ CMAKE_INSTALL_PREFIX = "C:/gitlabci/tools/builds/3zsqG5ns9/0/ngsolve/ngsolve/_skbuild/win-amd64-3.11/cmake-install"
47
47
  CMAKE_CXX_COMPILER_LAUNCHER = ""
48
48
 
49
49
  version = NGSOLVE_VERSION_GIT
@@ -1,29 +1,26 @@
1
- from netgen.csg import *
1
+ from netgen.occ import *
2
2
  from ngsolve import *
3
3
 
4
4
 
5
5
  def MakeGeometry():
6
- geometry = CSGeometry()
7
- box = OrthoBrick(Pnt(-1,-1,-1),Pnt(2,1,2)).bc("outer")
8
-
9
- core = OrthoBrick(Pnt(0,-0.05,0),Pnt(0.8,0.05,1))- \
10
- OrthoBrick(Pnt(0.1,-1,0.1),Pnt(0.7,1,0.9))- \
11
- OrthoBrick(Pnt(0.5,-1,0.4),Pnt(1,1,0.6)).maxh(0.2).mat("core")
12
-
13
- coil = (Cylinder(Pnt(0.05,0,0), Pnt(0.05,0,1), 0.3) - \
14
- Cylinder(Pnt(0.05,0,0), Pnt(0.05,0,1), 0.15)) * \
15
- OrthoBrick (Pnt(-1,-1,0.3),Pnt(1,1,0.7)).maxh(0.2).mat("coil")
16
-
17
- geometry.Add ((box-core-coil).mat("air"))
18
- geometry.Add (core)
19
- geometry.Add (coil)
20
- return geometry
21
-
22
-
23
-
24
- ngmesh = MakeGeometry().GenerateMesh(maxh=0.5)
25
- ngmesh.Save("coil.vol")
26
- mesh = Mesh(ngmesh)
6
+ box = Box((-1,-1,-1), (2,1,2))
7
+ box.faces.name = "outer"
8
+ core = Box((0,-0.05,0), (0.8,0.05,1)) - \
9
+ Box((0.1,-1,0.1), (0.7,1,0.9)) - \
10
+ Box((0.5,-1,0.4), (1,1,0.6))
11
+ core.solids.name = "core"
12
+ core.solids.maxh = 0.03
13
+
14
+ coil = Cylinder((0.05,0,0.3), (0,0,1), 0.3, 0.4) - \
15
+ Cylinder((0.05,0,0.3), (0,0,1), 0.15, 0.4)
16
+ coil.solids.name = "coil"
17
+ air = box - core - coil
18
+ air.solids.name = "air"
19
+ return Glue([core, coil, air])
20
+
21
+
22
+
23
+ mesh = MakeGeometry().GenerateMesh(maxh=0.5)
27
24
 
28
25
  # curve elements for geometry approximation
29
26
  mesh.Curve(5)
ngsolve/directsolvers.py CHANGED
@@ -1,26 +1,14 @@
1
1
  from ngsolve import BaseMatrix, BitArray, BilinearForm, BaseVector
2
+ import ngsolve
2
3
 
3
- class SuperLU(BaseMatrix):
4
- # def __init__(self, a: BaseMatrix | BilinearForm, freedofs: BitArray = None):
5
- def __init__(self, a, freedofs: BitArray = None):
6
- super().__init__()
7
- self.a = a
8
- self.freedofs = freedofs
9
-
10
- def Update(self):
4
+ class SuperLU(ngsolve.la.SparseFactorizationInterface):
5
+ def Factor(self):
11
6
  import scipy.sparse as sp
12
7
  import scipy.sparse.linalg as spla
13
- a = self.a if isinstance(self.a, BaseMatrix) else self.a.mat
14
- mat = sp.csr_matrix(a.CSR())
15
- if self.freedofs is not None:
16
- self.fd = list(self.freedofs)
17
- mat = mat[self.fd,:][:,self.fd]
18
- self.lu = spla.factorized(sp.csc_matrix(mat))
8
+ vals, rows, cols = self.GetInnerMatrix().CSR()
9
+ self.inv_mat = spla.factorized(sp.csr_matrix((vals, rows, cols)))
10
+
11
+ def Solve(self, rhs, sol):
12
+ sol.FV().NumPy()[:] = self.inv_mat(rhs.FV().NumPy())
19
13
 
20
- def Mult(self, x: BaseVector, y: BaseVector):
21
- if not hasattr(self, "lu"):
22
- self.Update()
23
- if self.freedofs is not None:
24
- y.FV().NumPy()[self.fd] = self.lu(x.FV().NumPy()[self.fd])
25
- else:
26
- y.FV().NumPy()[:] = self.lu(x.FV().NumPy())
14
+ ngsolve.la.RegisterInverseType("superlu", SuperLU)
ngsolve/krylovspace.py CHANGED
@@ -292,6 +292,10 @@ def CG(mat, rhs, pre=None, sol=None, tol=1e-12, maxsteps = 100, printrates = Tru
292
292
  solver.Solve(rhs=rhs, sol=sol, initialize=initialize)
293
293
  return solver.sol
294
294
 
295
+
296
+
297
+
298
+
295
299
  class QMRSolver(LinearSolver):
296
300
  """Quasi Minimal Residuum method
297
301
 
@@ -310,13 +314,15 @@ ep : double
310
314
  name = "QMR"
311
315
 
312
316
  def __init__(self, *args, pre2 : Preconditioner = None,
317
+ matT = None,
313
318
  ep : float = 1., **kwargs):
314
319
  super().__init__(*args, **kwargs)
315
320
  self.pre2 = pre2
316
321
  self.ep = ep
322
+ self.matT = matT if matT is not None else self.mat.T
317
323
 
318
324
  def _SolveImpl(self, rhs : BaseVector, sol : BaseVector):
319
- u, mat, ep, pre1, pre2 = sol, self.mat, self.ep, self.pre, self.pre2
325
+ u, mat, matT, ep, pre1, pre2 = sol, self.mat, self.matT, self.ep, self.pre, self.pre2
320
326
  r = rhs.CreateVector()
321
327
  v = rhs.CreateVector()
322
328
  v_tld = rhs.CreateVector()
@@ -399,7 +405,7 @@ ep : double
399
405
  rho = InnerProduct(y,y)
400
406
  rho = sqrt(rho)
401
407
 
402
- w_tld.data = mat.T * q
408
+ w_tld.data = matT * q
403
409
  w_tld.data -= beta * w
404
410
 
405
411
  z.data = pre2.T * w_tld if pre2 else w_tld
@@ -498,6 +504,169 @@ def QMR(mat, rhs, fdofs, pre1=None, pre2=None, sol=None, maxsteps = 100, printra
498
504
 
499
505
 
500
506
 
507
+
508
+
509
+
510
+ class TFQMRSolver(LinearSolver):
511
+ """Transpose-Free Quasi Minimal Residuum method
512
+
513
+ Parameters
514
+ ----------
515
+
516
+ """ + linear_solver_param_doc + """
517
+
518
+ """
519
+
520
+ name = "TFQMR"
521
+
522
+ def __init__(self, *args, pre2 : Preconditioner = None,
523
+ matT = None,
524
+ ep : float = 1., **kwargs):
525
+ super().__init__(*args, **kwargs)
526
+
527
+ def _SolveImpl(self, rhs : BaseVector, sol : BaseVector):
528
+ # following implementation from scipy
529
+ mat,pre,tol = self.mat, self.pre, self.tol
530
+
531
+ r = rhs.CreateVector()
532
+ u = rhs.CreateVector()
533
+ v = rhs.CreateVector()
534
+ w = rhs.CreateVector()
535
+ uhat = rhs.CreateVector()
536
+ uNext = rhs.CreateVector()
537
+ rstar = rhs.CreateVector()
538
+ d = rhs.CreateVector()
539
+ x = rhs.CreateVector()
540
+ z = rhs.CreateVector()
541
+ tmp = rhs.CreateVector()
542
+ d[:] = 0
543
+
544
+ if Norm(rhs)==0:
545
+ sol.data = 0
546
+ return
547
+
548
+ x.data = sol
549
+ r.data = rhs - mat*sol
550
+
551
+ u.data = r
552
+ w.data = r
553
+ rstar.data = r
554
+
555
+ v.data = pre@mat * r
556
+ uhat.data = v
557
+
558
+ theta = eta = 0
559
+
560
+ rho = InnerProduct(rstar, r)
561
+ rhoLast = rho
562
+ r0norm = sqrt(rho)
563
+
564
+ tau = r0norm
565
+ if r0norm == 0:
566
+ return
567
+
568
+ for iter in range(0,self.maxiter):
569
+ even = iter%2 == 0
570
+ if (even):
571
+ vtrstar = InnerProduct(rstar, v)
572
+ if vtrstar==0:
573
+ return
574
+
575
+ alpha = rho/vtrstar
576
+ uNext.data = u-alpha*v
577
+
578
+ w -= alpha*uhat
579
+ d *= theta**2/alpha*eta
580
+ d += u
581
+ theta = Norm(w)/tau
582
+ c = sqrt(1/(1+theta**2))
583
+ tau *= theta*c
584
+
585
+ eta = c**2 * alpha
586
+ z.data = pre*d
587
+ x += eta*z
588
+
589
+ # callback ...
590
+
591
+ if self.CheckResidual(tau):
592
+ sol.data = x
593
+ return
594
+ # if tau < tol:
595
+ # return
596
+
597
+ if not even:
598
+ rho = InnerProduct(rstar, w)
599
+ beta = rho/rhoLast
600
+ u *= beta
601
+ u += w
602
+ v *= beta**2
603
+ v += beta*uhat
604
+ # uhat.data = pre@mat * u
605
+ tmp.data = mat*u
606
+ uhat.data = pre*tmp
607
+ v += uhat
608
+ else:
609
+ # uhat.data = pre@mat * uNext
610
+ tmp.data = mat*uNext
611
+ uhat.data = pre*tmp
612
+ u.data = uNext
613
+ rhoLast = rho
614
+
615
+
616
+ def TFQMR(mat, rhs, pre=None, sol=None, maxsteps = 100, printrates = True, initialize = True, tol = 1e-7):
617
+ """Quasi Minimal Residuum method
618
+
619
+
620
+ Parameters
621
+ ----------
622
+
623
+ mat : Matrix
624
+ The left hand side of the equation to solve
625
+
626
+ rhs : Vector
627
+ The right hand side of the equation.
628
+
629
+ fdofs : BitArray
630
+ BitArray of free degrees of freedoms.
631
+
632
+ pre : Preconditioner
633
+ preconditioner if provided
634
+
635
+ sol : Vector
636
+ Start vector for QMR method, if initialize is set False. Gets overwritten by the solution vector. If sol = None then a new vector is created.
637
+
638
+ maxsteps : int
639
+ Number of maximal steps for QMR. If the maximal number is reached before the tolerance is reached QMR stops.
640
+
641
+ printrates : bool
642
+ If set to True then the error of the iterations is displayed.
643
+
644
+ initialize : bool
645
+ If set to True then the initial guess for the QMR method is set to zero. Otherwise the values of the vector sol, if provided, is used.
646
+
647
+ tol : double
648
+ Tolerance of the residuum. QMR stops if tolerance is reached.
649
+
650
+
651
+ Returns
652
+ -------
653
+ (vector)
654
+ Solution vector of the QMR method.
655
+
656
+ """
657
+ # backwards compatibility, but freedofs are not needed then.
658
+ return TFQMRSolver(mat=mat, pre=pre,
659
+ maxiter=maxsteps,
660
+ printrates=printrates,
661
+ tol=tol).Solve(rhs=rhs, sol=sol, initialize=initialize)
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
501
670
  #Source: Michael Kolmbauer https://www.numa.uni-linz.ac.at/Teaching/PhD/Finished/kolmbauer-diss.pdf
502
671
  class MinResSolver(LinearSolver):
503
672
  """Minimal Residuum method
@@ -803,7 +972,7 @@ restart : int = None
803
972
  h[:] = 0
804
973
  for i in range(k+1):
805
974
  h[i] = innerproduct(Q[i],q)
806
- q.data += (-1)* h[i] * Q[i]
975
+ q -= h[i] * Q[i]
807
976
  h[k+1] = norm(q)
808
977
  if abs(h[k+1]) < 1e-12:
809
978
  return h, None
ngsolve/ngslib.lib CHANGED
Binary file
ngsolve/ngslib.pyd CHANGED
Binary file
@@ -1,4 +1,4 @@
1
- from ngsolve.la import InnerProduct
1
+ from ngsolve.la import InnerProduct, SparseFactorizationInterface
2
2
  from math import sqrt
3
3
  from ngsolve import Projector, Norm
4
4
  from .utils import TimeFunction
@@ -97,7 +97,7 @@ class NewtonSolver:
97
97
  else:
98
98
  self.inv.Update()
99
99
  else:
100
- if self.inverse == "sparsecholesky" and self.inv is not None:
100
+ if self.inv is not None and (self.inverse == "sparsecholesky" or isinstance(self.inv, SparseFactorizationInterface)):
101
101
  self.inv.Update()
102
102
  else:
103
103
  self.inv = self.a.mat.Inverse(self.freedofs,
@@ -1,6 +1,7 @@
1
1
  from ngsolve.comp import MultiGridPreconditioner as MultiGrid
2
2
  from ngsolve.comp import LocalPreconditioner as Local
3
3
  from ngsolve.comp import HCurlAMG
4
+ from ngsolve.comp import H1AMG
4
5
  from ngsolve.comp import BDDCPreconditioner as BDDC
5
6
 
6
7
 
@@ -0,0 +1,168 @@
1
+ import functools
2
+
3
+ from ngsolve import (
4
+ BilinearForm,
5
+ GridFunction,
6
+ CoefficientFunction,
7
+ Region,
8
+ BND,
9
+ Preconditioner,
10
+ )
11
+ from .nonlinearsolvers import NewtonSolver
12
+ from .krylovspace import GMResSolver, LinearSolver
13
+
14
+
15
+ class Dirichlet:
16
+ def __init__(self, cf, region):
17
+ self.cf = cf
18
+ self.region = region
19
+
20
+
21
+ class Application:
22
+ def __init__(self, a: BilinearForm, gf: GridFunction):
23
+ self.a = a
24
+ self.gf = gf
25
+
26
+ def Solve(
27
+ self,
28
+ rhs,
29
+ *args,
30
+ dirichlet = None,
31
+ pre = None,
32
+ printrates: bool = False,
33
+ **kwargs,
34
+ ):
35
+ raise NotImplementedError("Solve method must be implemented in subclasses")
36
+
37
+ def __eq__(self, other):
38
+ return Equation(self, other)
39
+
40
+
41
+ class NonLinearApplication(Application):
42
+ def Solve(
43
+ self,
44
+ rhs=None,
45
+ dirichlet = None,
46
+ printing: bool = False,
47
+ **kwargs,
48
+ ):
49
+ solver_args = {}
50
+
51
+ if rhs is not None and rhs != 0:
52
+ rhs.Assemble()
53
+ solver_args["rhs"] = rhs
54
+ if "freedofs" in kwargs:
55
+ solver_args["freedofs"] = kwargs.pop("freedofs")
56
+ if "inverse" in kwargs:
57
+ solver_args["inverse"] = kwargs.pop("inverse")
58
+ solver = NewtonSolver(self.a, self.gf, **solver_args)
59
+ if dirichlet is not None:
60
+ dirichlet_gf = GridFunction(self.gf.space)
61
+ if isinstance(dirichlet, list):
62
+ for i in range(len(dirichlet)):
63
+ if dirichlet[i] is not None:
64
+ if isinstance(dirichlet[i], Dirichlet):
65
+ dirichlet_gf.components[i].Set(
66
+ dirichlet[i].cf, definedon=dirichlet[i].region
67
+ )
68
+ else:
69
+ dirichlet_gf.components[i].Set(dirichlet[i], BND)
70
+ elif isinstance(dirichlet, Dirichlet):
71
+ dirichlet_gf.Set(dirichlet.cf, definedon=dirichlet.region)
72
+ else:
73
+ dirichlet_gf.Set(dirichlet, BND)
74
+ solver.SetDirichlet(dirichlet_gf.vec)
75
+ solver.Solve(printing=printing, **kwargs)
76
+
77
+
78
+ class LinearApplication(Application):
79
+ def Assemble(self):
80
+ if not hasattr(self, "vec"):
81
+ self.vec = self.gf.vec.CreateVector()
82
+ self.a.Apply(self.gf.vec, self.vec)
83
+
84
+ def Solve(
85
+ self,
86
+ rhs,
87
+ *args,
88
+ dirichlet = None,
89
+ pre = None,
90
+ lin_solver=None,
91
+ lin_solver_args = None,
92
+ printrates: bool = False,
93
+ ):
94
+ self.a.Assemble()
95
+ for arg in args:
96
+ if isinstance(arg, Dirichlet) or isinstance(arg, CoefficientFunction):
97
+ assert dirichlet is None, "Only one dirichlet condition can be set"
98
+ dirichlet = arg
99
+ if isinstance(arg, Preconditioner):
100
+ assert pre is None, "Only one preconditioner can be set"
101
+ pre = arg
102
+ if isinstance(arg, type) and issubclass(arg, LinearSolver):
103
+ assert lin_solver is None, "Only one linear solver can be set"
104
+ lin_solver = arg
105
+ rhs.Assemble()
106
+ if dirichlet is not None:
107
+ if isinstance(dirichlet, list):
108
+ for i in range(len(dirichlet)):
109
+ if dirichlet[i] is not None:
110
+ if isinstance(dirichlet[i], Dirichlet):
111
+ self.gf.components[i].Set(
112
+ dirichlet[i].cf, definedon=dirichlet[i].region
113
+ )
114
+ else:
115
+ self.gf.components[i].Set(dirichlet[i], BND)
116
+ elif isinstance(dirichlet, Dirichlet):
117
+ self.gf.Set(dirichlet.cf, definedon=dirichlet.region)
118
+ else:
119
+ self.gf.Set(dirichlet, BND)
120
+ rhs.vec.data += -self.a.mat * self.gf.vec
121
+ else:
122
+ self.gf.vec[:] = 0.0
123
+ if self.a.condense:
124
+ rhs.vec.data += self.a.harmonic_extension_trans * rhs.vec
125
+ if pre is None and lin_solver is None:
126
+ ainv = self.a.mat.Inverse(self.a.space.FreeDofs(self.a.condense))
127
+ else:
128
+ if lin_solver is None:
129
+ lin_solver = GMResSolver
130
+ if lin_solver_args is None:
131
+ lin_solver_args = {}
132
+ if pre is None:
133
+ freedofs = self.a.space.FreeDofs(self.a.condense)
134
+ else:
135
+ freedofs = None
136
+ if "printrates" not in lin_solver_args:
137
+ lin_solver_args["printrates"] = printrates
138
+ ainv = lin_solver(
139
+ mat=self.a.mat, pre=pre, freedofs=freedofs, **lin_solver_args
140
+ )
141
+ self.gf.vec.data += ainv * rhs.vec
142
+ if self.a.condense:
143
+ self.gf.vec.data += self.a.harmonic_extension * self.gf.vec
144
+ self.gf.vec.data += self.a.inner_solve * rhs.vec
145
+
146
+
147
+ class Equation:
148
+ def __init__(self, lhs, rhs):
149
+ self.lhs = lhs
150
+ self.rhs = rhs
151
+
152
+ @functools.wraps(Application.Solve)
153
+ def Solve(self, *args, **kwargs):
154
+ self.lhs.Solve(self.rhs, *args, **kwargs)
155
+
156
+
157
+ def _create_lin_appl(self, gfu: GridFunction) -> LinearApplication:
158
+ if not isinstance(gfu, GridFunction):
159
+ raise TypeError("gfu must be a GridFunction")
160
+ return LinearApplication(self, gfu)
161
+
162
+
163
+ BilinearForm.__mul__ = _create_lin_appl
164
+
165
+
166
+ @functools.wraps(Application.Solve)
167
+ def Solve(eq: Equation, *args, **kwargs):
168
+ eq.Solve(*args, **kwargs)
@@ -1,5 +1,5 @@
1
1
  from ngsolve.eigenvalues import PINVIT, LOBPCG
2
- from ngsolve.krylovspace import CG, QMR, MinRes, PreconditionedRichardson, GMRes
2
+ from ngsolve.krylovspace import CG, QMR, TFQMR, MinRes, PreconditionedRichardson, GMRes
3
3
  from ngsolve.krylovspace import CGSolver
4
4
  from ngsolve.nonlinearsolvers import Newton, NewtonMinimization
5
5
  from ngsolve.bvp import BVP