mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 05:50:32 +05:00
116 lines
2.6 KiB
Python
116 lines
2.6 KiB
Python
from netgen.geom2d import *
|
|
import pytest
|
|
import math
|
|
from pytest import approx
|
|
from pytest_check import check
|
|
|
|
|
|
def check_area(geo, area):
|
|
if isinstance(geo, Solid2d):
|
|
g = CSG2d()
|
|
g.Add(geo)
|
|
geo = g
|
|
|
|
m = geo.GenerateMesh(maxh=0.2)
|
|
ngs = pytest.importorskip("ngsolve")
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(5)
|
|
with check: assert ngs.Integrate(1.0, mesh) == approx(area)
|
|
|
|
def test_two_circles():
|
|
c1 = Circle(center=(0,0), radius=1)
|
|
c2 = c1.Rotate(45)
|
|
s = c1*c2
|
|
geo = CSG2d()
|
|
geo.Add(s)
|
|
m = geo.GenerateMesh()
|
|
assert len(m.Elements2D()) > 0
|
|
|
|
ngs = pytest.importorskip("ngsolve")
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(5)
|
|
assert ngs.Integrate(1.0, mesh) == approx(math.pi)
|
|
ngs.Draw(mesh)
|
|
|
|
def test_two_edge():
|
|
s = Solid2d( [(-1,0), cp(0,1), (1,0), cp(0,2)] )
|
|
geo = CSG2d()
|
|
geo.Add(s)
|
|
m = geo.GenerateMesh()
|
|
assert len(m.Elements2D()) > 0
|
|
|
|
ngs = pytest.importorskip("ngsolve")
|
|
g = geo.GenerateSplineGeometry()
|
|
ngs.Draw(g)
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(5)
|
|
ngs.Draw(mesh)
|
|
|
|
def test_trig_and_circle():
|
|
g = CSG2d()
|
|
|
|
trig = Solid2d( [(0,0), (1,1), (-1,1) ] ).BC("diamond")
|
|
circle = Circle( center=(0,0.101), radius=0.1).BC("circle") # TODO: Failing with center=(0,0.1)
|
|
|
|
d = trig-circle
|
|
g.Add(d)
|
|
g.Add(circle)
|
|
|
|
m = g.GenerateMesh(maxh=0.1)
|
|
assert len(m.Elements2D()) > 0
|
|
|
|
ngs = pytest.importorskip("ngsolve")
|
|
geo = g.GenerateSplineGeometry()
|
|
ngs.Draw(geo)
|
|
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(3)
|
|
ngs.Draw(mesh)
|
|
|
|
|
|
def test_circle_plus_rect():
|
|
circle = Circle( center=(0,0), radius=1 )
|
|
rect = Rectangle( pmin=(-0.5,0.0), pmax=(0.5,0.5) )
|
|
|
|
geo = CSG2d()
|
|
geo.Add(circle+rect)
|
|
m = geo.GenerateMesh(maxh=0.2)
|
|
|
|
|
|
ngs = pytest.importorskip("ngsolve")
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(5)
|
|
assert ngs.Integrate(1.0, mesh) == approx(math.pi)
|
|
|
|
def test_circle_plus_rect1():
|
|
circle = Circle( center=(0,0), radius=1 )
|
|
rect = Rectangle( pmin=(-0.5,-0.5), pmax=(0.5,0.5) )
|
|
|
|
geo = CSG2d()
|
|
geo.Add(circle+rect)
|
|
m = geo.GenerateMesh(maxh=0.2)
|
|
|
|
|
|
ngs = pytest.importorskip("ngsolve")
|
|
mesh = ngs.Mesh(m)
|
|
mesh.Curve(5)
|
|
assert ngs.Integrate(1.0, mesh) == approx(math.pi)
|
|
|
|
def test_circle_and_rect():
|
|
c = Circle(center=(0,0),radius=1)
|
|
r = Rectangle((0,0),(1,1))
|
|
|
|
pi = math.pi
|
|
check_area(c-r, 3/4*pi)
|
|
check_area(c*r, 1/4*pi)
|
|
check_area(c+r, 3/4*pi+1)
|
|
check_area(r*c, 1/4*pi)
|
|
check_area(r+c, 3/4*pi+1)
|
|
check_area(r-c, 1-1/4*pi)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_two_circles()
|
|
test_two_edge()
|
|
test_trig_and_circle()
|