ngsolve 6.2.2502__cp39-cp39-macosx_10_15_universal2.whl → 6.2.2504__cp39-cp39-macosx_10_15_universal2.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.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

Files changed (62) hide show
  1. netgen/include/fespace.hpp +3 -2
  2. netgen/include/integrator.hpp +4 -16
  3. netgen/include/intrules_SauterSchwab.hpp +25 -0
  4. netgen/include/mp_coefficient.hpp +140 -0
  5. netgen/include/mptools.hpp +106 -161
  6. netgen/include/potentialtools.hpp +20 -0
  7. netgen/include/prolongation.hpp +126 -3
  8. netgen/include/sparsematrix_impl.hpp +71 -5
  9. netgen/include/symbolicintegrator.hpp +1 -0
  10. netgen/include/tangentialfacetfespace.hpp +7 -22
  11. netgen/libngbla.dylib +0 -0
  12. netgen/libngcomp.dylib +0 -0
  13. netgen/libngfem.dylib +0 -0
  14. netgen/libngla.dylib +0 -0
  15. netgen/libngsbem.dylib +0 -0
  16. netgen/libngsolve.dylib +0 -0
  17. netgen/libngstd.dylib +0 -0
  18. ngsolve/__init__.py +1 -0
  19. ngsolve/cmake/NGSolveConfig.cmake +5 -5
  20. ngsolve/cmake/ngsolve-targets-release.cmake +10 -0
  21. ngsolve/cmake/ngsolve-targets.cmake +9 -2
  22. ngsolve/config/config.py +5 -5
  23. ngsolve/ngslib.so +0 -0
  24. ngsolve/solve_implementation.py +146 -0
  25. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2504.dist-info}/METADATA +2 -2
  26. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2504.dist-info}/RECORD +62 -57
  27. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/Netgen.icns +0 -0
  28. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/bin/ngscxx +0 -0
  29. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/bin/ngsld +0 -0
  30. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/bin/ngsolve.tcl +0 -0
  31. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/bin/ngspy +0 -0
  32. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/beam.geo +0 -0
  33. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/beam.vol +0 -0
  34. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/chip.in2d +0 -0
  35. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/chip.vol +0 -0
  36. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coil.geo +0 -0
  37. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coil.vol +0 -0
  38. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coilshield.geo +0 -0
  39. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/coilshield.vol +0 -0
  40. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/cube.geo +0 -0
  41. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/cube.vol +0 -0
  42. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  43. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  44. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d1_square.pde +0 -0
  45. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d2_chip.pde +0 -0
  46. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  47. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d4_cube.pde +0 -0
  48. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d5_beam.pde +0 -0
  49. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  50. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d7_coil.pde +0 -0
  51. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  52. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  53. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  54. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  55. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  56. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/shaft.geo +0 -0
  57. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/shaft.vol +0 -0
  58. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/square.in2d +0 -0
  59. {ngsolve-6.2.2502.data → ngsolve-6.2.2504.data}/data/share/ngsolve/square.vol +0 -0
  60. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2504.dist-info}/LICENSE +0 -0
  61. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2504.dist-info}/WHEEL +0 -0
  62. {ngsolve-6.2.2502.dist-info → ngsolve-6.2.2504.dist-info}/top_level.txt +0 -0
@@ -51,28 +51,94 @@ namespace ngla
51
51
  FlatArray<TM> val, size_t h, size_t w)
52
52
  {
53
53
  static Timer t("SparseMatrix::CreateFromCOO"); RegionTimer r(t);
54
- Array<int> cnt(h);
54
+ static Timer t1("SparseMatrix::CreateFromCOO 1");
55
+ static Timer t2("SparseMatrix::CreateFromCOO 2");
56
+ static Timer t3("SparseMatrix::CreateFromCOO 3");
55
57
 
56
58
  /*
57
- cnt = 0;
58
- for (auto i : indi) cnt[i]++;
59
- */
59
+ {
60
+ Array<int> cnt(h);
60
61
 
62
+ t1.Start();
61
63
  DynamicTable<int> tab(h);
62
64
  for (size_t i = 0; i < indi.Size(); i++)
63
65
  tab.AddUnique(indi[i], indj[i]);
66
+ t1.Stop();
64
67
  for (size_t i = 0; i < h; i++)
65
68
  cnt[i] = tab.EntrySize(i);
66
69
 
67
70
  auto matrix = make_shared<SparseMatrix<TM>> (cnt, w);
71
+ t2.Start();
68
72
  for (auto k : ngstd::Range(indi))
69
73
  matrix->CreatePosition(indi[k], indj[k]);
74
+ t2.Stop();
70
75
  matrix->SetZero();
71
76
 
77
+ t3.Start();
72
78
  for (auto k : ngstd::Range(indi))
73
79
  (*matrix)(indi[k], indj[k]) += val[k];
80
+ t3.Stop();
81
+ // return matrix;
82
+ }
83
+ */
84
+
85
+ Array<int> cnt(h);
86
+ cnt = 0;
87
+ for (auto i : indi)
88
+ cnt[i]++;
89
+
90
+ Table<int> tab(cnt);
91
+ cnt = 0;
92
+
93
+ for (auto [i,j] : Zip(indi, indj))
94
+ tab[i][cnt[i]++] = j;
95
+
96
+ cnt = 0;
97
+ // for (int i = 0; i < tab.Size(); i++)
98
+ ParallelFor (tab.Size(), [&] (size_t i)
99
+ {
100
+ QuickSort (tab[i]);
101
+
102
+ int prev = -1;
103
+ for (auto j : tab[i])
104
+ {
105
+ if (j != prev) cnt[i]++;
106
+ prev = j;
107
+ }
108
+ });
109
+
110
+ auto matrix = make_shared<SparseMatrix<TM>> (cnt, w);
111
+ t2.Start();
112
+ // for (auto k : ngstd::Range(indi))
113
+ // matrix->CreatePosition(indi[k], indj[k]);
74
114
 
75
- return matrix;
115
+ cnt = 0;
116
+ for (int i = 0; i < tab.Size(); i++)
117
+ {
118
+ int prev = -1;
119
+ for (auto j : tab[i])
120
+ {
121
+ auto cols = matrix->GetRowIndices(i);
122
+ if (j != prev)
123
+ cols[cnt[i]++] = j;
124
+ prev = j;
125
+ }
126
+ }
127
+
128
+ t2.Stop();
129
+ matrix->SetZero();
130
+
131
+ t3.Start();
132
+ /*
133
+ for (auto k : ngstd::Range(indi))
134
+ (*matrix)(indi[k], indj[k]) += val[k];
135
+ */
136
+ ParallelFor (indi.Size(), [&](size_t k)
137
+ {
138
+ AtomicAdd ( (*matrix)(indi[k], indj[k]), val[k]);
139
+ });
140
+ t3.Stop();
141
+ return matrix;
76
142
  }
77
143
 
78
144
 
@@ -604,6 +604,7 @@ public:
604
604
 
605
605
  class SymbolicFacetLinearFormIntegrator : public FacetLinearFormIntegrator
606
606
  {
607
+ protected:
607
608
  shared_ptr<CoefficientFunction> cf;
608
609
  Array<ProxyFunction*> proxies;
609
610
  Array<CoefficientFunction*> cache_cfs;
@@ -16,34 +16,22 @@ namespace ngcomp
16
16
  class NGS_DLL_HEADER TangentialFacetFESpace : public FESpace
17
17
  {
18
18
  protected:
19
- /// Level
20
- // int level;
21
- /// Number of Facets
22
- // int nfacets;
23
- ///
24
- // int ncfacets;
25
- ///
26
- // int nel;
27
-
28
19
  Array<int> first_facet_dof;
29
20
  Array<int> first_inner_dof; // for highest_order_dc
30
- // int ndof_lo;
31
21
 
32
22
  int rel_order;
33
23
 
34
24
  Array<IVec<2> > order_facet;
35
25
  Array<bool> fine_facet;
36
26
 
37
- // int ndof;
38
- // Array<int> ndlevel;
39
27
  bool var_order;
40
28
  bool print;
41
29
 
42
30
  bool highest_order_dc;
43
31
  bool hide_highest_order_dc;
32
+ bool all_dofs_together;
44
33
 
45
34
  public:
46
- ///
47
35
  TangentialFacetFESpace (shared_ptr<MeshAccess> ama, const Flags & flags,
48
36
  bool parseflags = false );
49
37
 
@@ -61,20 +49,11 @@ namespace ngcomp
61
49
  virtual void SetOrder (NodeId ni, int order) override;
62
50
  virtual int GetOrder (NodeId ni) const override;
63
51
 
64
-
65
- // virtual size_t GetNDof() const throw() override { return ndof; }
66
- // virtual size_t GetNDofLevel ( int i ) const override { return ndlevel[i]; }
67
-
68
52
  virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
69
53
 
70
- // virtual int GetNDofLowOrder () const
71
- // { return ndof_lo; }
72
54
 
73
55
  virtual FiniteElement & GetFE(ElementId ei, Allocator & lh) const override;
74
56
 
75
- // virtual const FiniteElement & GetFE ( int elnr, LocalHeap & lh ) const;
76
- // virtual const FiniteElement & GetSFE ( int selnr, LocalHeap & lh ) const;
77
-
78
57
  virtual void GetFacetDofNrs (int felnr, Array<DofId> & dnums) const;
79
58
 
80
59
  virtual int GetNFacetDofs (int felnr) const;
@@ -90,6 +69,12 @@ namespace ngcomp
90
69
  virtual IVec<2> GetFacetOrder(int fnr) const;
91
70
 
92
71
  virtual int GetFirstFacetDof(int fanr) const;
72
+ const auto & GetFirstFacetDof() const { return first_facet_dof; }
73
+
74
+ IntRange GetFacetDofs (int nr) const
75
+ {
76
+ return IntRange (first_facet_dof[nr], first_facet_dof[nr+1]);
77
+ }
93
78
 
94
79
  virtual bool UsesHighestOrderDiscontinuous() const {return highest_order_dc;};
95
80
 
netgen/libngbla.dylib CHANGED
Binary file
netgen/libngcomp.dylib CHANGED
Binary file
netgen/libngfem.dylib CHANGED
Binary file
netgen/libngla.dylib CHANGED
Binary file
netgen/libngsbem.dylib ADDED
Binary file
netgen/libngsolve.dylib CHANGED
Binary file
netgen/libngstd.dylib CHANGED
Binary file
ngsolve/__init__.py CHANGED
@@ -75,6 +75,7 @@ from .utils import x, y, z, dx, ds, grad, Grad, curl, div, Deviator, PyId, PyTra
75
75
  from . import solvers
76
76
  from . import preconditioners
77
77
  from . import timestepping
78
+ from .solve_implementation import Solve
78
79
 
79
80
  try:
80
81
  from netgen.occ import unit_square, unit_cube
@@ -1,4 +1,4 @@
1
- set(PACKAGE_VERSION "6.2.2502")
1
+ set(PACKAGE_VERSION "6.2.2504")
2
2
  find_package(Netgen CONFIG REQUIRED HINTS
3
3
  ${CMAKE_CURRENT_LIST_DIR}
4
4
  ${CMAKE_CURRENT_LIST_DIR}/..
@@ -23,15 +23,15 @@ set(NGSOLVE_PYBIND_INCLUDE_DIR "")
23
23
  set(NGSOLVE_PYTHON_INCLUDE_DIRS "/Library/Frameworks/Python.framework/Versions/3.9/include/python3.9")
24
24
  set(NGSOLVE_PYTHON_LIBRARIES "/Library/Frameworks/Python.framework/Versions/3.9/lib/libpython3.9.dylib")
25
25
  set(NGSOLVE_PYTHON_PACKAGES_INSTALL_DIR "")
26
- set(NGSOLVE_TCL_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/src/project_tcl/generic")
26
+ set(NGSOLVE_TCL_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/src/project_tcl/generic")
27
27
  set(NGSOLVE_TCL_LIBRARY "/Library/Frameworks/Python.framework/Versions/3.9/lib/libtclstub8.6.a")
28
28
  set(NGSOLVE_TK_DND_LIBRARY "")
29
- set(NGSOLVE_TK_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/src/project_tk/generic")
29
+ set(NGSOLVE_TK_INCLUDE_PATH "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/src/project_tk/generic")
30
30
  set(NGSOLVE_TK_LIBRARY "/Library/Frameworks/Python.framework/Versions/3.9/lib/libtkstub8.6.a")
31
31
  set(NGSOLVE_X11_X11_LIB "")
32
32
  set(NGSOLVE_X11_Xmu_LIB "")
33
- set(NGSOLVE_ZLIB_INCLUDE_DIRS "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/zlib/include")
34
- set(NGSOLVE_ZLIB_LIBRARIES "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/ngsolve/external_dependencies/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/zlib/lib/libz.a")
33
+ set(NGSOLVE_ZLIB_INCLUDE_DIRS "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/zlib/include")
34
+ set(NGSOLVE_ZLIB_LIBRARIES "/Users/gitlab-runner/builds/builds/rL7WHzyj/0/ngsolve/netgen/_skbuild/macosx-10.15-universal2-3.9/cmake-build/dependencies/zlib/lib/libz.a")
35
35
 
36
36
  set(NGSOLVE_INTEL_MIC OFF)
37
37
  set(NGSOLVE_USE_CCACHE ON)
@@ -45,6 +45,16 @@ set_target_properties(ngfem PROPERTIES
45
45
  list(APPEND _cmake_import_check_targets ngfem )
46
46
  list(APPEND _cmake_import_check_files_for_ngfem "${_IMPORT_PREFIX}/netgen/libngfem.dylib" )
47
47
 
48
+ # Import target "ngsbem" for configuration "Release"
49
+ set_property(TARGET ngsbem APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
50
+ set_target_properties(ngsbem PROPERTIES
51
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/netgen/libngsbem.dylib"
52
+ IMPORTED_SONAME_RELEASE "@rpath/libngsbem.dylib"
53
+ )
54
+
55
+ list(APPEND _cmake_import_check_targets ngsbem )
56
+ list(APPEND _cmake_import_check_files_for_ngsbem "${_IMPORT_PREFIX}/netgen/libngsbem.dylib" )
57
+
48
58
  # Import target "ngcomp" for configuration "Release"
49
59
  set_property(TARGET ngcomp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
50
60
  set_target_properties(ngcomp PROPERTIES
@@ -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_libs ngs_lapack netgen_python 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}")
@@ -105,6 +105,13 @@ set_target_properties(ngfem PROPERTIES
105
105
  INTERFACE_LINK_LIBRARIES "ngbla;ngstd"
106
106
  )
107
107
 
108
+ # Create imported target ngsbem
109
+ add_library(ngsbem SHARED IMPORTED)
110
+
111
+ set_target_properties(ngsbem PROPERTIES
112
+ INTERFACE_LINK_LIBRARIES "ngcomp;ngfem;ngla;ngbla;ngstd"
113
+ )
114
+
108
115
  # Create imported target ngcomp
109
116
  add_library(ngcomp SHARED IMPORTED)
110
117
 
@@ -116,7 +123,7 @@ set_target_properties(ngcomp PROPERTIES
116
123
  add_library(ngsolve SHARED IMPORTED)
117
124
 
118
125
  set_target_properties(ngsolve PROPERTIES
119
- INTERFACE_LINK_LIBRARIES "netgen_libs;ngsolve;ngcomp;ngfem;ngbla;ngla;ngstd"
126
+ INTERFACE_LINK_LIBRARIES "netgen_libs;ngsolve;ngcomp;ngfem;ngsbem;ngbla;ngla;ngstd"
120
127
  )
121
128
 
122
129
  if(CMAKE_VERSION VERSION_LESS 3.0.0)
ngsolve/config/config.py CHANGED
@@ -29,15 +29,15 @@ 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.2504"
33
+ NGSOLVE_VERSION_GIT = "v6.2.2504-0-g7dd7ba8dd"
34
+ NGSOLVE_VERSION_PYTHON = "6.2.2504"
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 = "2504"
40
+ NGSOLVE_VERSION_HASH = "g7dd7ba8dd"
41
41
 
42
42
  CMAKE_CXX_COMPILER = "/Library/Developer/CommandLineTools/usr/bin/c++"
43
43
  CMAKE_CUDA_COMPILER = ""
ngsolve/ngslib.so CHANGED
Binary file
@@ -0,0 +1,146 @@
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
+ solver = NewtonSolver(self.a, self.gf, **solver_args)
55
+ if dirichlet is not None:
56
+ dirichlet_gf = GridFunction(self.gf.space)
57
+ if isinstance(dirichlet, Dirichlet):
58
+ dirichlet_gf.Set(dirichlet.cf, definedon=dirichlet.region)
59
+ else:
60
+ dirichlet_gf.Set(dirichlet, BND)
61
+ solver.SetDirichlet(dirichlet_gf.vec)
62
+ solver.Solve(**kwargs)
63
+
64
+
65
+ class LinearApplication(Application):
66
+ def Assemble(self):
67
+ if not hasattr(self, "vec"):
68
+ self.vec = self.gf.vec.CreateVector()
69
+ self.a.Apply(self.gf.vec, self.vec)
70
+
71
+ def Solve(
72
+ self,
73
+ rhs,
74
+ *args,
75
+ dirichlet = None,
76
+ pre = None,
77
+ lin_solver=None,
78
+ lin_solver_args = None,
79
+ printrates: bool = False,
80
+ ):
81
+ self.a.Assemble()
82
+ for arg in args:
83
+ if isinstance(arg, Dirichlet) or isinstance(arg, CoefficientFunction):
84
+ assert dirichlet is None, "Only one dirichlet condition can be set"
85
+ dirichlet = arg
86
+ if isinstance(arg, Preconditioner):
87
+ assert pre is None, "Only one preconditioner can be set"
88
+ pre = arg
89
+ if isinstance(arg, type) and issubclass(arg, LinearSolver):
90
+ assert lin_solver is None, "Only one linear solver can be set"
91
+ lin_solver = arg
92
+ rhs.Assemble()
93
+ if dirichlet is not None:
94
+ if isinstance(dirichlet, Dirichlet):
95
+ self.gf.Set(dirichlet.cf, definedon=dirichlet.region)
96
+ else:
97
+ self.gf.Set(dirichlet, BND)
98
+ rhs.vec.data += -self.a.mat * self.gf.vec
99
+ else:
100
+ self.gf.vec[:] = 0.0
101
+ if self.a.condense:
102
+ rhs.vec.data += self.a.harmonic_extension_trans * rhs.vec
103
+ if pre is None and lin_solver is None:
104
+ ainv = self.a.mat.Inverse(self.a.space.FreeDofs(self.a.condense))
105
+ else:
106
+ if lin_solver is None:
107
+ lin_solver = GMResSolver
108
+ if lin_solver_args is None:
109
+ lin_solver_args = {}
110
+ if pre is None:
111
+ freedofs = self.a.space.FreeDofs(self.a.condense)
112
+ else:
113
+ freedofs = None
114
+ if "printrates" not in lin_solver_args:
115
+ lin_solver_args["printrates"] = printrates
116
+ ainv = lin_solver(
117
+ mat=self.a.mat, pre=pre, freedofs=freedofs, **lin_solver_args
118
+ )
119
+ self.gf.vec.data += ainv * rhs.vec
120
+ if self.a.condense:
121
+ self.gf.vec.data += self.a.harmonic_extension * self.gf.vec
122
+ self.gf.vec.data += self.a.inner_solve * rhs.vec
123
+
124
+
125
+ class Equation:
126
+ def __init__(self, lhs, rhs):
127
+ self.lhs = lhs
128
+ self.rhs = rhs
129
+
130
+ @functools.wraps(Application.Solve)
131
+ def Solve(self, *args, **kwargs):
132
+ self.lhs.Solve(self.rhs, *args, **kwargs)
133
+
134
+
135
+ def _create_lin_appl(self, gfu: GridFunction) -> LinearApplication:
136
+ if not isinstance(gfu, GridFunction):
137
+ raise TypeError("gfu must be a GridFunction")
138
+ return LinearApplication(self, gfu)
139
+
140
+
141
+ BilinearForm.__mul__ = _create_lin_appl
142
+
143
+
144
+ @functools.wraps(Application.Solve)
145
+ def Solve(eq: Equation, *args, **kwargs):
146
+ eq.Solve(*args, **kwargs)
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ngsolve
3
- Version: 6.2.2502
3
+ Version: 6.2.2504
4
4
  Summary: NGSolve
5
5
  Home-page: UNKNOWN
6
6
  Author: The NGSolve team
7
7
  License: LGPL2.1
8
8
  Platform: UNKNOWN
9
9
  License-File: LICENSE
10
- Requires-Dist: netgen-mesher (==6.2.2501.post54.dev0)
10
+ Requires-Dist: netgen-mesher (==6.2.2504)
11
11
 
12
12
  UNKNOWN
13
13