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.
- netgen/include/analytic_integrals.hpp +10 -0
- netgen/include/basematrix.hpp +6 -0
- netgen/include/bdbequations.hpp +55 -0
- netgen/include/bem_diffops.hpp +475 -0
- netgen/include/bilinearform.hpp +4 -1
- netgen/include/blockjacobi.hpp +17 -5
- netgen/include/bspline.hpp +2 -0
- netgen/include/cholesky.hpp +2 -2
- netgen/include/code_generation.hpp +2 -2
- netgen/include/complex_wrapper.hpp +30 -2
- netgen/include/contact.hpp +8 -0
- netgen/include/diagonalmatrix.hpp +6 -0
- netgen/include/diffop_impl.hpp +3 -1
- netgen/include/diffopwithfactor.hpp +123 -0
- netgen/include/elementbyelement.hpp +9 -3
- netgen/include/expr.hpp +45 -7
- netgen/include/fespace.hpp +12 -4
- netgen/include/gridfunction.hpp +3 -3
- netgen/include/h1amg.hpp +85 -2
- netgen/include/h1lumping.hpp +6 -0
- netgen/include/hcurl_equations.hpp +29 -0
- netgen/include/hcurlcurlfe.hpp +20 -0
- netgen/include/hdiv_equations.hpp +15 -0
- netgen/include/hdivfe_utils.hpp +1 -0
- netgen/include/hdivhofespace.hpp +2 -0
- netgen/include/integrator.hpp +4 -16
- netgen/include/intrule.hpp +2 -1
- netgen/include/intrules_SauterSchwab.hpp +25 -0
- netgen/include/jacobi.hpp +35 -18
- netgen/include/kernels.hpp +724 -0
- netgen/include/l2hofe.hpp +1 -0
- netgen/include/matrix.hpp +8 -3
- netgen/include/meshaccess.hpp +4 -3
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +1331 -368
- netgen/include/mycomplex.hpp +1 -1
- netgen/include/ngblas.hpp +116 -7
- netgen/include/potentialtools.hpp +22 -0
- netgen/include/preconditioner.hpp +23 -23
- netgen/include/prolongation.hpp +132 -6
- netgen/include/recursive_pol.hpp +63 -11
- netgen/include/simd_complex.hpp +45 -0
- netgen/include/sparsecholesky.hpp +6 -2
- netgen/include/sparsefactorization_interface.hpp +159 -0
- netgen/include/sparsematrix.hpp +21 -7
- netgen/include/sparsematrix_dyn.hpp +6 -7
- netgen/include/sparsematrix_impl.hpp +175 -40
- netgen/include/special_matrix.hpp +2 -0
- netgen/include/statushandler.hpp +8 -8
- netgen/include/symbolicintegrator.hpp +2 -1
- netgen/include/tangentialfacetfespace.hpp +7 -22
- netgen/include/thdivfe_impl.hpp +66 -0
- netgen/include/tscalarfe.hpp +1 -1
- netgen/include/vector.hpp +272 -47
- netgen/lib/libngsolve.lib +0 -0
- netgen/libngsolve.dll +0 -0
- netgen/ngscxx.bat +1 -1
- netgen/ngsld.bat +1 -1
- ngsolve/__init__.py +1 -0
- ngsolve/cmake/NGSolveConfig.cmake +8 -8
- ngsolve/cmake/ngsolve-targets.cmake +24 -18
- ngsolve/config/config.py +7 -7
- ngsolve/demos/intro/cmagnet.py +19 -22
- ngsolve/directsolvers.py +9 -21
- ngsolve/krylovspace.py +172 -3
- ngsolve/ngslib.lib +0 -0
- ngsolve/ngslib.pyd +0 -0
- ngsolve/nonlinearsolvers.py +2 -2
- ngsolve/preconditioners.py +1 -0
- ngsolve/solve_implementation.py +168 -0
- ngsolve/{solvers.py → solvers/__init__.py} +1 -1
- ngsolve/solvers/cudss.py +112 -0
- ngsolve/webgui.py +2 -0
- {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/METADATA +2 -2
- {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/RECORD +107 -97
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/Scripts/ngsolve.tcl +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.geo +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/beam.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.in2d +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/chip.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.geo +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coil.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.geo +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/coilshield.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.geo +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/cube.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d1_square.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d2_chip.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d4_cube.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d5_beam.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d6_shaft.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d7_coil.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/doubleglazing.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.geo +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/shaft.vol +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.in2d +0 -0
- {ngsolve-6.2.2502.data → ngsolve-6.2.2601.data}/data/share/ngsolve/square.vol +0 -0
- {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/LICENSE +0 -0
- {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2601.dist-info}/WHEEL +0 -0
- {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.
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
34
|
-
set(NGSOLVE_ZLIB_LIBRARIES "C:/gitlabci/tools/builds/
|
|
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/
|
|
54
|
-
set(NGSOLVE_INCLUDE_DIRS C:/gitlabci/tools/builds/
|
|
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
|
|
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
|
|
58
|
-
add_library(
|
|
57
|
+
# Create imported target netgen_lib
|
|
58
|
+
add_library(netgen_lib INTERFACE IMPORTED)
|
|
59
59
|
|
|
60
|
-
set_target_properties(
|
|
61
|
-
INTERFACE_LINK_LIBRARIES "nglib
|
|
60
|
+
set_target_properties(netgen_lib PROPERTIES
|
|
61
|
+
INTERFACE_LINK_LIBRARIES "nglib"
|
|
62
62
|
)
|
|
63
63
|
|
|
64
|
-
# Create imported target
|
|
65
|
-
add_library(
|
|
64
|
+
# Create imported target netgen_core_lib
|
|
65
|
+
add_library(netgen_core_lib INTERFACE IMPORTED)
|
|
66
66
|
|
|
67
|
-
set_target_properties(
|
|
68
|
-
|
|
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
|
|
73
|
-
add_library(
|
|
71
|
+
# Create imported target ngs_lapack
|
|
72
|
+
add_library(ngs_lapack INTERFACE IMPORTED)
|
|
74
73
|
|
|
75
|
-
set_target_properties(
|
|
76
|
-
INTERFACE_INCLUDE_DIRECTORIES "C:/
|
|
77
|
-
INTERFACE_LINK_LIBRARIES "C:/
|
|
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 "
|
|
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 "
|
|
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/
|
|
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.
|
|
33
|
-
NGSOLVE_VERSION_GIT = "v6.2.
|
|
34
|
-
NGSOLVE_VERSION_PYTHON = "6.2.
|
|
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 = "
|
|
40
|
-
NGSOLVE_VERSION_HASH = "
|
|
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/
|
|
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
|
ngsolve/demos/intro/cmagnet.py
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
from netgen.
|
|
1
|
+
from netgen.occ import *
|
|
2
2
|
from ngsolve import *
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
def MakeGeometry():
|
|
6
|
-
|
|
7
|
-
box =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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(
|
|
4
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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
|
ngsolve/nonlinearsolvers.py
CHANGED
|
@@ -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"
|
|
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,
|
ngsolve/preconditioners.py
CHANGED
|
@@ -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
|