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
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
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 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"))
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)
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()
# 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 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")