Esempio n. 1
0
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)
Esempio n. 2
0
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)