def mesh(): geo = SplineGeometry() geo.AddRectangle( (-10, 0.0), (10, 1), leftdomain=1, bcs=["bottom","right","slave","left"]) geo.AddCircle ( (-1, 5), r=1, leftdomain=2, bc="master") geo.SetMaterial(1, "brick") geo.SetMaterial(2, "ball") mesh = Mesh( geo.GenerateMesh(maxh=0.5)) mesh.Curve(5) Draw(mesh) return mesh
from netgen.geom2d import SplineGeometry from ngsolve import * geo = SplineGeometry() geo.AddCircle( (0,0), 1.4, leftdomain=2) geo.AddCircle( (0,0), 1, leftdomain=1, rightdomain=2) geo.SetMaterial(1, "inner") geo.SetMaterial(2, "pml") mesh = Mesh(geo.GenerateMesh (maxh=0.1)) mesh.SetPML(pml.Radial(rad=1,alpha=1j,origin=(0,0)), "pml") fes = H1(mesh, order=4, complex=True) u = fes.TrialFunction() v = fes.TestFunction() omega = 10 a = BilinearForm(fes) a += SymbolicBFI(grad(u)*grad(v)-omega*omega*u*v) f = LinearForm(fes) f += SymbolicLFI(exp(-20**2*((x-0.3)*(x-0.3)+y*y))*v) a.Assemble() f.Assemble() gfu = GridFunction(fes) gfu.vec.data = a.mat.Inverse() * f.vec Draw(gfu)
geo = SplineGeometry() p1, p2, p3, p4 = [ geo.AppendPoint(x, y) for x, y in [(0, 0), (1, 0), (1, 1), (0, 1)] ] p5, p6 = [geo.AppendPoint(x, y) for x, y in [(2, 0), (2, 1)]] geo.Append(["line", p1, p2], leftdomain=1, rightdomain=0, bc='outer') geo.Append(["line", p2, p3], leftdomain=1, rightdomain=2, bc='interface') geo.Append(["line", p3, p4], leftdomain=1, rightdomain=0, bc='outer') geo.Append(["line", p4, p1], leftdomain=1, rightdomain=0, bc='outer') geo.Append(["line", p2, p5], leftdomain=2, rightdomain=0, bc='outer') geo.Append(["line", p5, p6], leftdomain=2, rightdomain=0, bc='outer') geo.Append(["line", p6, p3], leftdomain=2, rightdomain=0, bc='outer') geo.SetMaterial(1, 'left') geo.SetMaterial(2, 'right') mesh = Mesh(geo.GenerateMesh(maxh=0.1)) Draw(mesh) order = 3 Vl = H1(mesh, order=order, definedon="left") Vr = H1(mesh, order=order, definedon="right") Q = SurfaceL2(mesh, order=order - 1) X = FESpace([Vl, Vr, Q]) a = BilinearForm(X) f = LinearForm(X)
from time import time_ns print("Welcome, Peter!") ### Definition of mesh ### h = 0.5 geo = SplineGeometry() geo.AddRectangle((0, 0), (1, 1), bcs=['b', 'r', 't', 'l'], leftdomain=1, rightdomain=0) geo.AddRectangle((0.3, 0.5), (0.5, 0.7), bcs=['b1', 'r1', 't1', 'l1'], leftdomain=2, rightdomain=1) geo.SetMaterial(1, "d2") geo.SetMaterial(2, "d1") mesh = Mesh(geo.GenerateMesh(maxh=h)) # standard mesh available print('#' * 40) print("Mesh generated:") print('#' * 40) print("Number of vertices: ", mesh.nv) print("Number of elements: ", mesh.ne) print("Dimension of mesh: ", mesh.dim) lams = {"d1": 1, "d2": 10} Lambda = CoefficientFunction([lams[mat] for mat in mesh.GetMaterials()]) cs = {"d1": 1, "d2": 0} C = CoefficientFunction([cs[mat] for mat in mesh.GetMaterials()]) Draw(mesh) ### Definition of FES ###
# pylint: disable=unused-wildcard-import import netgen.gui from ngsolve import * from netgen.geom2d import SplineGeometry print("Welcome, Peter!") ### Definition of mesh ### h = 0.1 geo = SplineGeometry() geo.AddRectangle((0, 0), (1, 1), bcs=['b', 'r', 't', 'l'], leftdomain=1, rightdomain=0) geo.SetMaterial(1, "D") mesh = Mesh(geo.GenerateMesh(maxh=h)) # standard mesh available print('#' * 40) print("Mesh generated:") print('#' * 40) print("Number of vertices: ", mesh.nv) print("Number of elements: ", mesh.ne) print("Dimension of mesh: ", mesh.dim) Draw(mesh) ### Definition of FES ### # define discrete conforming spaces of Sigma and V # any idea why we need a different order here? # try to use different combinations later as well # a)
get_ipython().run_line_magic('matplotlib', 'notebook') import netgen.gui from netgen.geom2d import SplineGeometry from ngsolve import * import matplotlib.pyplot as plt import numpy as np # We can model the problem as a set of concentric circles with the center most being our region of interest, $\Omega$. This is then sourrounded by a 'normal' region and then a PLM region. # In[2]: geo = SplineGeometry() geo.AddCircle((0, 0), 2.25, leftdomain=3, bc="outerbnd") geo.AddCircle((0, 0), 1.75, leftdomain=2, rightdomain=3, bc="midbnd") geo.AddCircle((0, 0), 1, leftdomain=1, rightdomain=2, bc="innerbnd") geo.SetMaterial(1, "inner") geo.SetMaterial(2, "mid") geo.SetMaterial(3, "pmlregion") mesh = Mesh(geo.GenerateMesh(maxh=0.1)) mesh.Curve(3) mesh.SetPML(pml.Radial(rad=1.75, alpha=1j, origin=(0, 0)), "pmlregion") #Alpha is the strenth of the PML. # We can set # # $$c(x) = \begin{cases} # 1 &\text{: } x\in\mathbb{R}^2/\Omega \\ # 100 &\text{: } x\in\Omega # \end{cases}$$ #
# -*- coding: utf-8 -*- # Example for generating a simple netgen mesh from ngsolve import * from netgen.geom2d import SplineGeometry geo = SplineGeometry() p1,p12a,p12b,p2,p3,p4 = [ geo.AppendPoint(x,y) for x,y in [(-5,5),(-5,2),(-5, -2),(-5,-5),(5,-5),(5,5)] ] geo.SetMaterial(1, "background") geo.SetMaterial(2, "circles") # In NetGen, regions are defined using 'left' and 'right', # For example, leftdomain=2, rightdomain=1 means when moving from a # from a point A to B, region 2 is always on the left side and # region 1 is on the right. geo.Append (["line", p1, p12a], leftdomain=1, bc="boundary1") geo.Append (["line", p12a, p12b], leftdomain=1, bc="lightsource") geo.Append (["line", p12b, p2], leftdomain=1, bc="boundary1") geo.Append (["line", p2, p3], leftdomain=1, bc="boundary1") geo.Append (["line", p3, p4], leftdomain=1, bc="boundary1") geo.Append (["line", p4, p1], leftdomain=1, bc="boundary1") geo.AddCircle(c=(1,1), r=1, leftdomain=2,rightdomain=1) geo.AddCircle(c=(-2,-2), r=2, leftdomain=2,rightdomain=1) mesh = geo.GenerateMesh(maxh=0.1) mesh.Save("square_with_two_circles.vol")