ngsolve 6.2.2405.post37.dev1__cp310-cp310-macosx_10_15_universal2.whl → 6.2.2406__cp310-cp310-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 (81) hide show
  1. netgen/include/expr.hpp +11 -8
  2. netgen/include/sparsematrix.hpp +5 -2
  3. netgen/include/statushandler.hpp +7 -0
  4. netgen/include/umfpackinverse.hpp +57 -29
  5. netgen/libngbla.dylib +0 -0
  6. netgen/libngcomp.dylib +0 -0
  7. netgen/libngfem.dylib +0 -0
  8. netgen/libngla.dylib +0 -0
  9. netgen/libngstd.dylib +0 -0
  10. ngsolve/cmake/NGSolveConfig.cmake +5 -5
  11. ngsolve/config/config.py +6 -6
  12. ngsolve/config.py +6 -6
  13. ngsolve/demos/TensorProduct/__init__.py +0 -0
  14. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  15. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  16. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  17. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  18. ngsolve/demos/__init__.py +0 -0
  19. ngsolve/demos/howto/__init__.py +0 -0
  20. ngsolve/demos/howto/hhj.py +44 -0
  21. ngsolve/demos/howto/hybrid_dg.py +53 -0
  22. ngsolve/demos/howto/mixed.py +30 -0
  23. ngsolve/demos/howto/nonlin.py +29 -0
  24. ngsolve/demos/howto/pickling.py +26 -0
  25. ngsolve/demos/howto/pml.py +31 -0
  26. ngsolve/demos/howto/taskmanager.py +20 -0
  27. ngsolve/demos/howto/tdnns.py +47 -0
  28. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  29. ngsolve/demos/howto/timeDG.py +38 -0
  30. ngsolve/demos/howto/timeDGlap.py +42 -0
  31. ngsolve/demos/howto/timeDGwave.py +61 -0
  32. ngsolve/demos/intro/__init__.py +0 -0
  33. ngsolve/demos/intro/adaptive.py +123 -0
  34. ngsolve/demos/intro/cmagnet.py +62 -0
  35. ngsolve/demos/intro/elasticity.py +76 -0
  36. ngsolve/demos/intro/navierstokes.py +74 -0
  37. ngsolve/demos/intro/poisson.ipynb +170 -0
  38. ngsolve/demos/intro/poisson.py +41 -0
  39. ngsolve/demos/mpi/__init__.py +0 -0
  40. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  41. ngsolve/demos/mpi/mpi_navierstokes.py +115 -0
  42. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  43. ngsolve/demos/mpi/mpi_timeDG.py +79 -0
  44. {ngsolve-6.2.2405.post37.dev1.dist-info → ngsolve-6.2.2406.dist-info}/METADATA +2 -2
  45. {ngsolve-6.2.2405.post37.dev1.dist-info → ngsolve-6.2.2406.dist-info}/RECORD +81 -50
  46. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/Netgen.icns +0 -0
  47. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/bin/ngscxx +0 -0
  48. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/bin/ngsld +0 -0
  49. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/bin/ngsolve.tcl +0 -0
  50. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/bin/ngspy +0 -0
  51. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/beam.geo +0 -0
  52. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/beam.vol +0 -0
  53. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/chip.in2d +0 -0
  54. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/chip.vol +0 -0
  55. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/coil.geo +0 -0
  56. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/coil.vol +0 -0
  57. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/coilshield.geo +0 -0
  58. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/coilshield.vol +0 -0
  59. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/cube.geo +0 -0
  60. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/cube.vol +0 -0
  61. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -0
  62. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d11_chip_nitsche.pde +0 -0
  63. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d1_square.pde +0 -0
  64. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d2_chip.pde +0 -0
  65. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d3_helmholtz.pde +0 -0
  66. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d4_cube.pde +0 -0
  67. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d5_beam.pde +0 -0
  68. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d6_shaft.pde +0 -0
  69. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d7_coil.pde +0 -0
  70. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d8_coilshield.pde +0 -0
  71. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/d9_hybridDG.pde +0 -0
  72. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/doubleglazing.in2d +0 -0
  73. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/doubleglazing.vol +0 -0
  74. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  75. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/shaft.geo +0 -0
  76. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/shaft.vol +0 -0
  77. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/square.in2d +0 -0
  78. {ngsolve-6.2.2405.post37.dev1.data → ngsolve-6.2.2406.data}/data/share/ngsolve/square.vol +0 -0
  79. {ngsolve-6.2.2405.post37.dev1.dist-info → ngsolve-6.2.2406.dist-info}/LICENSE +0 -0
  80. {ngsolve-6.2.2405.post37.dev1.dist-info → ngsolve-6.2.2406.dist-info}/WHEEL +0 -0
  81. {ngsolve-6.2.2405.post37.dev1.dist-info → ngsolve-6.2.2406.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,53 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+
5
+ ngsglobals.msg_level = 1
6
+ mesh = Mesh(unit_square.GenerateMesh(maxh=0.4))
7
+ for k in range(5):
8
+ mesh.Refine()
9
+
10
+
11
+ order = 3
12
+ fes1 = L2(mesh, order=order)
13
+ fes2 = FacetFESpace(mesh, order=order, dirichlet="bottom|right|top")
14
+
15
+ print ("element dofs: ", fes1.ndof)
16
+ print ("facet dofs: ", fes2.ndof)
17
+
18
+ fes = fes1*fes2
19
+
20
+ u,uhat = fes.TrialFunction()
21
+ v,vhat = fes.TestFunction()
22
+
23
+ n = specialcf.normal(mesh.dim)
24
+ h = specialcf.mesh_size
25
+
26
+ a = BilinearForm(fes, symmetric=True, condense = True)
27
+ a += grad(u) * grad(v) * dx
28
+ a += (grad(u)*n*(vhat-v)+grad(v)*n*(uhat-u)+10*order*order/h*(u-uhat)*(v-vhat))*dx(element_boundary=True)
29
+
30
+ c = Preconditioner(type="direct", bf=a, inverse = "sparsecholesky")
31
+ # c = Preconditioner(type="bddc", bf=a)
32
+
33
+ with TaskManager():
34
+ a.Assemble()
35
+ ainv = CGSolver(a.mat, c.mat)
36
+
37
+ f = LinearForm(fes)
38
+ f += 1*v*dx
39
+ f.Assemble()
40
+
41
+ u = GridFunction(fes)
42
+
43
+
44
+ f.vec.data += a.harmonic_extension_trans * f.vec
45
+
46
+ u.vec.data = ainv * f.vec
47
+
48
+ u.vec.data += a.harmonic_extension * u.vec
49
+ u.vec.data += a.inner_solve * f.vec
50
+
51
+ Draw (u.components[0], mesh, "sol")
52
+
53
+
@@ -0,0 +1,30 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ ngsglobals.msg_level = 1
5
+
6
+ mesh = Mesh(unit_square.GenerateMesh(maxh=0.1))
7
+
8
+ order = 2
9
+ fes1 = HDiv(mesh, order=order)
10
+ fes2 = L2(mesh, order=order-1)
11
+
12
+ fes = fes1*fes2
13
+
14
+ sigma,u = fes.TrialFunction()
15
+ tau,v = fes.TestFunction()
16
+
17
+ a = BilinearForm(fes)
18
+ a += (sigma*tau + div(sigma)*v + div(tau)*u - 1e-10*u*v)*dx
19
+ # (regularization needed for direct solver)
20
+ a.Assemble()
21
+
22
+ f = LinearForm(fes)
23
+ f += -v*dx
24
+ f.Assemble()
25
+
26
+ u = GridFunction(fes)
27
+ u.vec.data = a.mat.Inverse(fes.FreeDofs()) * f.vec
28
+
29
+ Draw (u.components[0], mesh, "flux")
30
+ Draw (u.components[1], mesh, "sol")
@@ -0,0 +1,29 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ m = Mesh (unit_square.GenerateMesh(maxh=0.3))
5
+
6
+ V = H1(m, order=3, dirichlet="left|right|top|bottom")
7
+ u = V.TrialFunction()
8
+ v = V.TestFunction()
9
+
10
+ a = BilinearForm(V)
11
+ a += ( grad(u) * grad(v) + 5*u*u*v- 1 * v)*dx
12
+
13
+ u = GridFunction(V)
14
+ r = u.vec.CreateVector()
15
+ w = u.vec.CreateVector()
16
+
17
+ for it in range(5):
18
+ print ("Iteration",it)
19
+ a.Apply(u.vec, r)
20
+ a.AssembleLinearization(u.vec)
21
+
22
+ w.data = a.mat.Inverse(V.FreeDofs()) * r.data
23
+ print ("|w| =", w.Norm())
24
+ u.vec.data -= w
25
+
26
+ Draw(u)
27
+ input("<press a key>")
28
+
29
+
@@ -0,0 +1,26 @@
1
+ from ngsolve import *
2
+ import netgen.geom2d
3
+
4
+ mesh = Mesh (netgen.geom2d.unit_square.GenerateMesh(maxh=0.1))
5
+
6
+ v = FESpace ("h1ho", mesh, order=4, dirichlet=[1])
7
+ v2 = L2(mesh,order=2)
8
+ u = GridFunction (v)
9
+ u2 = GridFunction(v)
10
+ vec = u.vec
11
+ data = [v,v2,u,u2,u.vec]
12
+
13
+ import pickle
14
+ pickler = pickle.Pickler(open ("1.dat", "wb"))
15
+ pickler.dump (data)
16
+ del pickler
17
+
18
+ unpickler = pickle.Unpickler(open("1.dat","rb"))
19
+ fes,fes2,w,w2,z = unpickler.load()
20
+
21
+ assert fes.mesh is fes2.mesh
22
+ assert w.space is w2.space
23
+
24
+ assert len(z) == len(u.vec)
25
+ for i in range(len(u.vec)):
26
+ assert u.vec[i] == z[i]
@@ -0,0 +1,31 @@
1
+ from netgen.geom2d import SplineGeometry
2
+ from ngsolve import *
3
+
4
+ geo = SplineGeometry()
5
+ geo.AddCircle( (0,0), 1.4, leftdomain=2)
6
+ geo.AddCircle( (0,0), 1, leftdomain=1, rightdomain=2)
7
+ geo.SetMaterial(1, "inner")
8
+ geo.SetMaterial(2, "pml")
9
+ mesh = Mesh(geo.GenerateMesh (maxh=0.1))
10
+
11
+ mesh.SetPML(pml.Radial(rad=1,alpha=1j,origin=(0,0)), "pml")
12
+
13
+ fes = H1(mesh, order=4, complex=True)
14
+ u = fes.TrialFunction()
15
+ v = fes.TestFunction()
16
+
17
+ omega = 10
18
+
19
+ a = BilinearForm(fes)
20
+ a += (grad(u)*grad(v)-omega*omega*u*v)*dx
21
+
22
+ f = LinearForm(fes)
23
+ f += exp(-20**2*((x-0.3)*(x-0.3)+y*y))*v*dx
24
+
25
+ a.Assemble()
26
+ f.Assemble()
27
+
28
+ gfu = GridFunction(fes)
29
+ gfu.vec.data = a.mat.Inverse() * f.vec
30
+
31
+ Draw(gfu)
@@ -0,0 +1,20 @@
1
+ from netgen.csg import unit_cube
2
+ from ngsolve import *
3
+
4
+ mesh = Mesh (unit_cube.GenerateMesh(maxh=0.4))
5
+ for l in range(3):
6
+ mesh.Refine()
7
+
8
+ fes = H1(mesh, order=3)
9
+ u,v = fes.TnT()
10
+ a = BilinearForm(fes)
11
+ a += grad(u) * grad(v) * dx
12
+
13
+
14
+ print('sequential assembly...')
15
+ a.Assemble()
16
+
17
+ print('parallel assembly...')
18
+ with TaskManager():
19
+ a.Assemble()
20
+
@@ -0,0 +1,47 @@
1
+ #
2
+ # The tangential-displacement normal-normal-stress continuous method for elasticity
3
+ #
4
+ # A.S. Pechstein and J. Schoeberl:
5
+ # Tangential-displacement and normal-normal-stress continuous mixed finite elements for elasticity.
6
+ # Mathematical Models and Methods in Applied Sciences 21(8), 1761–1782, 2011.
7
+ #
8
+
9
+ from ngsolve import *
10
+ from netgen.geom2d import SplineGeometry
11
+
12
+ geo = SplineGeometry()
13
+ geo.AddRectangle( (0, 0), (10, 1), bcs = ("bottom", "right", "top", "left"))
14
+ mesh = Mesh( geo.GenerateMesh(maxh=0.5))
15
+
16
+ order = 3
17
+ V = HDivDiv(mesh, order=order-1, dirichlet="bottom|right|top", plus = True)
18
+ Q = HCurl(mesh, order=order, dirichlet="left", type1 = True)
19
+ X = V*Q
20
+
21
+ print ("ndof-V:", V.ndof, ", ndof-Q:", Q.ndof)
22
+
23
+ sigma, u = X.TrialFunction()
24
+ tau, v = X.TestFunction()
25
+
26
+ n = specialcf.normal(2)
27
+
28
+ def tang(u): return u-(u*n)*n
29
+
30
+ a = BilinearForm(X, symmetric=True)
31
+ a += (InnerProduct (sigma, tau) + div(sigma)*v + div(tau)*u - 1e-10 * u*v)*dx
32
+ a += (-(sigma*n) * tang(v) - (tau*n)*tang(u))*dx(element_boundary=True)
33
+ a.Assemble()
34
+
35
+ f = LinearForm(X)
36
+ f += 1 * v[1] * dx
37
+ f.Assemble()
38
+
39
+ u = GridFunction(X)
40
+ u.vec.data = a.mat.Inverse(X.FreeDofs(), inverse="sparsecholesky") * f.vec
41
+
42
+ Draw (u.components[0], mesh, name="sigma")
43
+ Draw (u.components[1], mesh, name="disp")
44
+
45
+ Draw (u.components[0][0], mesh, name="s11")
46
+
47
+
@@ -0,0 +1,45 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ mesh = Mesh (unit_square.GenerateMesh(maxh=0.1))
5
+
6
+ fes = L2(mesh, order=4)
7
+
8
+ u = fes.TrialFunction()
9
+ v = fes.TestFunction()
10
+
11
+ b = CoefficientFunction( (y-0.5,0.5-x) )
12
+ bn = b*specialcf.normal(2)
13
+
14
+ ubnd = CoefficientFunction(0)
15
+
16
+ a = BilinearForm(fes)
17
+ a += (-u * b*grad(v)) .Compile()*dx
18
+
19
+ # the skeleton-formulation, sum over edges:
20
+ a += bn*IfPos(bn, u, u.Other()) * (v-v.Other()) * dx(skeleton=True)
21
+ a += bn*IfPos(bn, u, ubnd) * v * ds(skeleton=True)
22
+
23
+ # or the element-boundary formulation
24
+ # note the bnd-value in the .Other operator
25
+ # a += bn*IfPos(bn, u, u.Other(bnd=ubnd)) * v * dx(element_boundary=True)
26
+
27
+ u = GridFunction(fes)
28
+ u.Set(exp (-40 * ( (x-0.7)*(x-0.7) + (y-0.7)*(y-0.7) )))
29
+
30
+ w = u.vec.CreateVector()
31
+
32
+ Draw (u, autoscale=False, sd=2)
33
+
34
+ t = 0
35
+ tau = 1e-3
36
+ tend = 10
37
+
38
+ with TaskManager():
39
+ while t < tend:
40
+ a.Apply (u.vec, w)
41
+ fes.SolveM (rho=CoefficientFunction(1), vec=w)
42
+ u.vec.data -= tau * w
43
+ t += tau
44
+ Redraw()
45
+
@@ -0,0 +1,38 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ mesh = Mesh (unit_square.GenerateMesh(maxh=0.1))
5
+
6
+ fes = L2(mesh, order=4)
7
+
8
+ u = fes.TrialFunction()
9
+ v = fes.TestFunction()
10
+
11
+ b = CoefficientFunction( (y-0.5,0.5-x) )
12
+ bn = b*specialcf.normal(2)
13
+
14
+ ubnd = CoefficientFunction(0)
15
+
16
+ a = BilinearForm(fes)
17
+ a += -u * b*grad(v) * dx
18
+ a += bn*IfPos(bn, u, u.Other(bnd=ubnd)) * v * dx(element_boundary=True)
19
+
20
+ u = GridFunction(fes)
21
+ u.Set(exp (-40 * ( (x-0.7)*(x-0.7) + (y-0.7)*(y-0.7) )))
22
+
23
+ w = u.vec.CreateVector()
24
+
25
+ Draw (u, autoscale=False, sd=2)
26
+
27
+ t = 0
28
+ tau = 1e-3
29
+ tend = 10
30
+
31
+ with TaskManager():
32
+ while t < tend:
33
+ a.Apply (u.vec, w)
34
+ fes.SolveM (rho=CoefficientFunction(1), vec=w)
35
+ u.vec.data -= tau * w
36
+ t += tau
37
+ Redraw()
38
+
@@ -0,0 +1,42 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ mesh = Mesh (unit_square.GenerateMesh(maxh=0.05))
5
+
6
+ order=2
7
+ fes = L2(mesh, order=order)
8
+
9
+ u = fes.TrialFunction()
10
+ v = fes.TestFunction()
11
+
12
+ u0 = exp (-40 * ( (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5) ))
13
+
14
+ n = specialcf.normal(2)
15
+ h = specialcf.mesh_size
16
+
17
+ a = BilinearForm(fes)
18
+ a += grad(u) * grad(v) * dx
19
+ cf1 = -0.5 * InnerProduct(grad(u), n)*(v-v.Other(bnd=0))
20
+ cf2 = -0.5 * InnerProduct(grad(v), n)*(u-u.Other(bnd=u0))
21
+ cf3 = 2*( (order+1)**2)/h * (u-u.Other(bnd=u0)) * v
22
+ a += (cf1+cf2+cf3)*dx(element_boundary=True)
23
+
24
+ u = GridFunction(fes)
25
+ u.Set(u0)
26
+
27
+ w = u.vec.CreateVector()
28
+
29
+ Draw (u, mesh, "u")
30
+
31
+ tau = 2e-6
32
+ tend = 0.5
33
+
34
+ t = 0
35
+ with TaskManager():
36
+ while t < tend:
37
+ a.Apply (u.vec, w)
38
+ fes.SolveM (rho=CoefficientFunction(1), vec=w)
39
+ u.vec.data -= tau * w
40
+ t += tau
41
+ Redraw()
42
+
@@ -0,0 +1,61 @@
1
+ from netgen.geom2d import unit_square
2
+ from ngsolve import *
3
+
4
+ mesh = Mesh (unit_square.GenerateMesh(maxh=0.05))
5
+
6
+ order=4
7
+ fes1 = L2(mesh, order=order)
8
+ fes = fes1*fes1*fes1
9
+
10
+ p,ux,uy = fes.TrialFunction()
11
+ q,vx,vy = fes.TestFunction()
12
+
13
+ u0 = exp (-400 * ( (x-0.5)*(x-0.5) + (y-0.5)*(y-0.5) ))
14
+
15
+ n = specialcf.normal(2)
16
+
17
+ v = CoefficientFunction( (vx, vy) )
18
+ u = CoefficientFunction( (ux, uy) )
19
+
20
+ a1 = BilinearForm(fes)
21
+ a1 += grad(p) * v * dx
22
+ a1 += -0.5 * (p - p.Other()) * (v*n) * dx(element_boundary = True)
23
+
24
+ a2 = BilinearForm(fes)
25
+ a2 += -grad(q) * u * dx
26
+ a2 += 0.5 * (q - q.Other()) * (u*n) * dx(element_boundary = True)
27
+
28
+
29
+ u = GridFunction(fes)
30
+ u.components[0].Set(u0)
31
+
32
+ res = u.vec.CreateVector()
33
+ w = u.vec.CreateVector()
34
+
35
+ Draw (u.components[1], mesh, "ux")
36
+ Draw (u.components[2], mesh, "uy")
37
+ Draw (u.components[0], mesh, "p")
38
+ SetVisualization(min=-0.1, max=0.1, deformation=True)
39
+
40
+ tau = 1e-3
41
+ tend = 3
42
+
43
+ t = 0
44
+ nd = fes1.ndof
45
+
46
+ input ("<press enter>")
47
+
48
+ with TaskManager():
49
+ while t < tend:
50
+ a1.Apply (u.vec, w)
51
+ fes1.SolveM (rho=CoefficientFunction(1), vec=w.Range(nd,2*nd))
52
+ fes1.SolveM (rho=CoefficientFunction(1), vec=w.Range(2*nd,3*nd))
53
+ u.vec.data -= tau * w
54
+
55
+ a2.Apply (u.vec, w)
56
+ fes1.SolveM (rho=CoefficientFunction(1), vec=w.Range(0,nd))
57
+ u.vec.data -= tau * w
58
+
59
+ t += tau
60
+ Redraw()
61
+
File without changes
@@ -0,0 +1,123 @@
1
+ from ngsolve import *
2
+ from netgen.geom2d import SplineGeometry
3
+
4
+
5
+ # point numbers 0, 1, ... 11
6
+ # sub-domain numbers (1), (2), (3)
7
+ #
8
+ #
9
+ # 7-------------6
10
+ # | |
11
+ # | (2) |
12
+ # | |
13
+ # 3------4-------------5------2
14
+ # | |
15
+ # | 11 |
16
+ # | / \ |
17
+ # | 10 (3) 9 |
18
+ # | \ / (1) |
19
+ # | 8 |
20
+ # | |
21
+ # 0---------------------------1
22
+ #
23
+
24
+ def MakeGeometry():
25
+ geometry = SplineGeometry()
26
+
27
+ # point coordinates ...
28
+ pnts = [ (0,0), (1,0), (1,0.6), (0,0.6), \
29
+ (0.2,0.6), (0.8,0.6), (0.8,0.8), (0.2,0.8), \
30
+ (0.5,0.15), (0.65,0.3), (0.5,0.45), (0.35,0.3) ]
31
+ pnums = [geometry.AppendPoint(*p) for p in pnts]
32
+
33
+ # start-point, end-point, boundary-condition, domain on left side, domain on right side:
34
+ lines = [ (0,1,1,1,0), (1,2,2,1,0), (2,5,2,1,0), (5,4,2,1,2), (4,3,2,1,0), (3,0,2,1,0), \
35
+ (5,6,2,2,0), (6,7,2,2,0), (7,4,2,2,0), \
36
+ (8,9,2,3,1), (9,10,2,3,1), (10,11,2,3,1), (11,8,2,3,1) ]
37
+
38
+ for p1,p2,bc,left,right in lines:
39
+ geometry.Append( ["line", pnums[p1], pnums[p2]], bc=bc, leftdomain=left, rightdomain=right)
40
+ return geometry
41
+
42
+
43
+
44
+ mesh = Mesh(MakeGeometry().GenerateMesh (maxh=0.2))
45
+
46
+
47
+ fes = H1(mesh, order=3, dirichlet=[1], autoupdate=True)
48
+ u = fes.TrialFunction()
49
+ v = fes.TestFunction()
50
+
51
+ # one heat conductivity coefficient per sub-domain
52
+ lam = CoefficientFunction([1, 1000, 10])
53
+ a = BilinearForm(fes, symmetric=False)
54
+ a += lam*grad(u)*grad(v)*dx
55
+
56
+
57
+ # heat-source in sub-domain 3
58
+ f = LinearForm(fes)
59
+ f += CoefficientFunction([0, 0, 1])*v*dx
60
+
61
+ c = MultiGridPreconditioner(a, inverse = "sparsecholesky")
62
+
63
+ gfu = GridFunction(fes, autoupdate=True)
64
+ Draw (gfu)
65
+
66
+ # finite element space and gridfunction to represent
67
+ # the heatflux:
68
+ space_flux = HDiv(mesh, order=2, autoupdate=True)
69
+ gf_flux = GridFunction(space_flux, "flux", autoupdate=True)
70
+
71
+ def SolveBVP():
72
+ a.Assemble()
73
+ f.Assemble()
74
+ inv = CGSolver(a.mat, c.mat)
75
+ gfu.vec.data = inv * f.vec
76
+ Redraw (blocking=True)
77
+
78
+
79
+
80
+ l = []
81
+
82
+ def CalcError():
83
+ flux = lam * grad(gfu)
84
+ # interpolate finite element flux into H(div) space:
85
+ gf_flux.Set (flux)
86
+
87
+ # Gradient-recovery error estimator
88
+ err = 1/lam*(flux-gf_flux)*(flux-gf_flux)
89
+ elerr = Integrate (err, mesh, VOL, element_wise=True)
90
+
91
+ maxerr = max(elerr)
92
+ l.append ( (fes.ndof, sqrt(sum(elerr)) ))
93
+ print ("maxerr = ", maxerr)
94
+
95
+ for el in mesh.Elements():
96
+ mesh.SetRefinementFlag(el, elerr[el.nr] > 0.25*maxerr)
97
+
98
+
99
+ with TaskManager():
100
+ while fes.ndof < 100000:
101
+ SolveBVP()
102
+ CalcError()
103
+ mesh.Refine()
104
+
105
+ SolveBVP()
106
+
107
+
108
+
109
+
110
+ ## import matplotlib.pyplot as plt
111
+
112
+ ## plt.yscale('log')
113
+ ## plt.xscale('log')
114
+ ## plt.xlabel("ndof")
115
+ ## plt.ylabel("H1 error-estimate")
116
+ ## ndof,err = zip(*l)
117
+ ## plt.plot(ndof,err, "-*")
118
+
119
+ ## plt.ion()
120
+ ## plt.show()
121
+
122
+ ## input("<press enter to quit>")
123
+
@@ -0,0 +1,62 @@
1
+ from netgen.csg import *
2
+ from ngsolve import *
3
+
4
+
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)
27
+
28
+ # curve elements for geometry approximation
29
+ mesh.Curve(5)
30
+
31
+ ngsglobals.msg_level = 5
32
+
33
+ fes = HCurl(mesh, order=4, dirichlet="outer", nograds = True)
34
+
35
+ # u and v refer to trial and test-functions in the definition of forms below
36
+ u = fes.TrialFunction()
37
+ v = fes.TestFunction()
38
+
39
+ mur = mesh.MaterialCF({ "core" : 1000 }, default=1)
40
+ mu0 = 1.257e-6
41
+ nu = 1/(mu0*mur)
42
+
43
+ a = BilinearForm(fes, symmetric=True)
44
+ a += nu*curl(u)*curl(v)*dx + 1e-6*nu*u*v*dx
45
+
46
+ c = Preconditioner(a, type="bddc")
47
+ # c = Preconditioner(a, type="multigrid", flags = { "smoother" : "block" } )
48
+
49
+ f = LinearForm(fes)
50
+ f += CoefficientFunction((y,0.05-x,0)) * v * dx("coil")
51
+
52
+ u = GridFunction(fes)
53
+
54
+
55
+ with TaskManager():
56
+ a.Assemble()
57
+ f.Assemble()
58
+ solver = CGSolver(mat=a.mat, pre=c.mat)
59
+ u.vec.data = solver * f.vec
60
+
61
+
62
+ Draw (u.Deriv(), mesh, "B-field", draw_surf=False)
@@ -0,0 +1,76 @@
1
+ #
2
+ # geometric non-linear elasticity with Neo-Hooke hyperelastic material
3
+ #
4
+ # featuring automatic differentiation in SymbolicEnergy
5
+ #
6
+
7
+ import netgen.geom2d as geom2d
8
+ from ngsolve import *
9
+
10
+ geo = geom2d.SplineGeometry()
11
+ pnums = [ geo.AddPoint (x,y,maxh=0.01) for x,y in [(0,0), (1,0), (1,0.1), (0,0.1)] ]
12
+ for p1,p2,bc in [(0,1,"bot"), (1,2,"right"), (2,3,"top"), (3,0,"left")]:
13
+ geo.Append(["line", pnums[p1], pnums[p2]], bc=bc)
14
+ mesh = Mesh(geo.GenerateMesh(maxh=0.05))
15
+
16
+
17
+ E, nu = 210, 0.2
18
+ mu = E / 2 / (1+nu)
19
+ lam = E * nu / ((1+nu)*(1-2*nu))
20
+
21
+ fes = H1(mesh, order=2, dirichlet="left", dim=mesh.dim)
22
+ # fes = VectorH1(mesh, order=2, dirichlet="left")
23
+
24
+ u = fes.TrialFunction()
25
+
26
+ force = CoefficientFunction( (0,1/2) )
27
+
28
+ I = Id(mesh.dim)
29
+ F = I + Grad(u)
30
+ C = F.trans * F
31
+ E = 0.5 * (C-I)
32
+
33
+ def Pow(a, b):
34
+ return a**b # exp (log(a)*b)
35
+
36
+ def NeoHooke (C):
37
+ return 0.5 * mu * (Trace(C-I) + 2*mu/lam * Pow(Det(C),-lam/2/mu) - 1)
38
+
39
+
40
+
41
+ factor = Parameter(1)
42
+
43
+ a = BilinearForm(fes, symmetric=False)
44
+ a += Variation (NeoHooke(C).Compile()*dx)
45
+ a += Variation ((-factor * InnerProduct(force,u) ).Compile()*dx)
46
+
47
+
48
+ u = GridFunction(fes)
49
+ u.vec[:] = 0
50
+
51
+ res = u.vec.CreateVector()
52
+ w = u.vec.CreateVector()
53
+
54
+
55
+ for loadstep in range(10):
56
+
57
+ print ("loadstep", loadstep)
58
+ factor.Set (loadstep+1)
59
+
60
+ for it in range(5):
61
+ print ("Newton iteration", it)
62
+ print ("energy = ", a.Energy(u.vec))
63
+ a.Apply(u.vec, res)
64
+ a.AssembleLinearization(u.vec)
65
+ inv = a.mat.Inverse(fes.FreeDofs() )
66
+ w.data = inv*res
67
+ print ("err^2 = ", InnerProduct (w,res))
68
+ u.vec.data -= w
69
+
70
+ Draw (u, mesh, "displacement")
71
+ SetVisualization (deformation=True)
72
+ input ("<press a key>")
73
+
74
+
75
+
76
+