Exemple #1
0
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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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 ###
Exemple #5
0
# 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)
Exemple #6
0
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}$$
#
Exemple #7
0
# -*- 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")