def MakeHexagonalMesh2D(maxh=0.1): geo = SplineGeometry() pnums = [ geo.AddPoint(math.cos(phi), math.sin(phi)) for phi in [xx * math.pi / 3 for xx in range(6)] ] l1 = geo.Append(["line", 0, 1], leftdomain=1, rightdomain=0, bc="upperRight") geo.Append(["line", 4, 3], leftdomain=0, rightdomain=1, bc="lowerLeft", copy=l1) l2 = geo.Append(["line", 1, 2], leftdomain=1, rightdomain=0, bc="upperCenter") geo.Append(["line", 5, 4], leftdomain=0, rightdomain=1, bc="lowerCenter", copy=l2) l3 = geo.Append(["line", 2, 3], leftdomain=1, rightdomain=0, bc="upperLeft") geo.Append(["line", 0, 5], leftdomain=0, rightdomain=1, bc="lowerRight", copy=l3) return geo.GenerateMesh(maxh=maxh)
from ngsolve import * from netgen.geom2d import SplineGeometry from math import sqrt geo = SplineGeometry() s = 0.3 Points = [(-s/2,-sqrt(3)/6*s),(s/2,-sqrt(3)/6*s),(0,sqrt(3)/3*s), (-s/2*4,-sqrt(3)/6*s*4),(s/2*4,-sqrt(3)/6*s*4),(0,sqrt(3)/3*s*4), (-s/2*6,-sqrt(3)/6*s*6),(s/2*6,-sqrt(3)/6*s*6),(0,sqrt(3)/3*s*6)] for pnt in Points: geo.AddPoint(*pnt) for pids in [[0,1],[1,2],[2,0]]: geo.Append(["line"]+pids,leftdomain=0,rightdomain=1,bc="scatterer") for pids in [[3,4],[4,5],[5,3]]: geo.Append(["line"]+pids,leftdomain=1,rightdomain=2) for pids in [[6,7],[7,8],[8,6]]: geo.Append(["line"]+pids,leftdomain=2,rightdomain=0) ngmesh = geo.GenerateMesh(maxh=0.04) # ngmesh.Save("scattering.vol") mesh = Mesh(ngmesh) # mesh = Mesh ("scattering.vol") p=pml.HalfSpace(point=(0,4/3*sqrt(3)*s),normal=(sqrt(3),1),alpha=0.5j)+pml.HalfSpace(point=(0,4/3*sqrt(3)*s),normal=(-sqrt(3),1),alpha=0.5j)+pml.HalfSpace(point=(0,-sqrt(3)*s*2/3),normal=(0,-1),alpha=0.5j) print(p) mesh.SetPML(p,definedon=2)