Example #1
0
def test_domainwise_cf():
    geo = SplineGeometry()
    geo.AddCircle((0, 0), r=1, leftdomain=1, rightdomain=2)
    geo.AddCircle((0, 0), r=1.4, leftdomain=2, rightdomain=0)
    mesh = Mesh(geo.GenerateMesh(maxh=0.1))
    c_vec = CoefficientFunction([(x, y), (1, 3)])
    c = c_vec[0] * c_vec[1]

    c_false = c.Compile(False)
    error_false = Integrate((c - c_false) * (c - c_false), mesh)
    assert abs(error_false) < 1e-14

    c_true = c.Compile(True, wait=True)
    error_true = Integrate((c - c_true) * (c - c_true), mesh)
    assert abs(error_true) < 1e-14
Example #2
0
def create_mesh(mesh_size):
    geo = SplineGeometry()
    geo.AddRectangle((0, 0), (2, 0.41), bcs=(
        "wall", "outlet", "wall", "inlet"))
    geo.AddCircle((0.2, 0.2), r=0.05, leftdomain=0, rightdomain=1, bc="cyl")
    mesh = Mesh(geo.GenerateMesh(maxh=mesh_size))
    mesh.Curve(3)
    return mesh
Example #3
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
Example #4
0
from ngsolve import *
from netgen.geom2d import SplineGeometry

geo = SplineGeometry()
geo.AddRectangle((-0.1, -0.25), (0.1, 0.25),
                 leftdomain=0,
                 rightdomain=1,
                 bc="scatterer")
geo.AddCircle((0, 0), r=1, leftdomain=1, rightdomain=2)
geo.AddCircle((0, 0), r=1.4, leftdomain=2, rightdomain=0)

ngmesh = geo.GenerateMesh(maxh=0.04)
# ngmesh.Save("scattering.vol")
mesh = Mesh(ngmesh)
# mesh = Mesh ("scattering.vol")

mesh.SetPML(pml.Radial(origin=(0, 0), rad=1, alpha=0.1j), definedon=2)

kx = 50
ky = 20
k = sqrt(kx * kx + ky * ky)

uin = exp(1J * kx * x + 1J * ky * y)

fes = H1(mesh, complex=True, order=5, dirichlet="scatterer")
u = fes.TrialFunction()
v = fes.TestFunction()

uscat = GridFunction(fes)
uscat.Set(uin, definedon=mesh.Boundaries("scatterer"))
Example #5
0
from ngsolve import *

# viscosity
nu = 0.001

# timestepping parameters
tau = 0.001
tend = 10

# mesh = Mesh("cylinder.vol")
from netgen.geom2d import SplineGeometry
geo = SplineGeometry()
geo.AddRectangle((0, 0), (2, 0.41), bcs=("wall", "outlet", "wall", "inlet"))
geo.AddCircle((0.2, 0.2), r=0.05, leftdomain=0, rightdomain=1, bc="cyl")
mesh = Mesh(geo.GenerateMesh(maxh=0.08))

mesh.Curve(3)

V = H1(mesh, order=3, dirichlet="wall|cyl|inlet")
Q = H1(mesh, order=2)

X = FESpace([V, V, Q])

ux, uy, p = X.TrialFunction()
vx, vy, q = X.TestFunction()

div_u = grad(ux)[0] + grad(uy)[1]
div_v = grad(vx)[0] + grad(vy)[1]

stokes = nu * grad(ux) * grad(vx) + nu * grad(uy) * grad(
    vy) + div_u * q + div_v * p - 1e-10 * p * q
# # Problem 4
#

# In[ ]:

#-(nabla(u))+b.grad(u)=1 in omega,b=(-6y,6x) ,u=0 in T_D and grad(u).n=0 in T_N  using residual estimator and
# dorfler marking
from ngsolve import *
import netgen.gui
from netgen.geom2d import SplineGeometry
from math import *
import numpy as np
get_ipython().run_line_magic('matplotlib', 'inline')

geo = SplineGeometry()
geo.AddCircle((0, 0), r=1, bc="circle")

mesh = Mesh(geo.GenerateMesh(maxh=0.2))
n = specialcf.normal(2)
h = specialcf.mesh_size

fes = H1(mesh, order=3, dirichlet="circle", autoupdate=True)
u = fes.TrialFunction()
v = fes.TestFunction()
b_t = CoefficientFunction((-6 * y, 6 * x))

a = BilinearForm(fes, symmetric=True)
a += grad(u) * grad(v) * dx + np.dot(b_t, grad(u)) * v * dx

c = MultiGridPreconditioner(a, inverse="sparsecholesky")
gfu = GridFunction(fes, autoupdate=True)
Example #7
0
import numpy as np
from netgen.geom2d import SplineGeometry

import regpy.stoprules as rules
from regpy.operators.ngsolve import ReactionBoundary
from regpy.solvers import HilbertSpaceSetting
from regpy.solvers.landweber import Landweber
from regpy.hilbert import L2, SobolevBoundary
from regpy.discrs.ngsolve import NgsSpace

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(name)-40s :: %(message)s')

geo = SplineGeometry()
geo.AddCircle((0, 0), r=1, bc="cyc", maxh=0.2)
mesh = ngs.Mesh(geo.GenerateMesh())

fes_domain = ngs.H1(mesh, order=2)
domain = NgsSpace(fes_domain)

fes_codomain = ngs.H1(mesh, order=2)
codomain = NgsSpace(fes_codomain)

g = ngs.x**2 * ngs.y
op = ReactionBoundary(domain, g, codomain=codomain)

exact_solution_coeff = ngs.sin(ngs.y) + 2
gfu_exact_solution = ngs.GridFunction(op.fes_domain)
gfu_exact_solution.Set(exact_solution_coeff)
exact_solution = gfu_exact_solution.vec.FV().NumPy()
Example #8
0
# In[1]:

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 \\
Example #9
0
# 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")