netgen/tests/pytest/test_boundarylayer.py

60 lines
2.5 KiB
Python
Raw Normal View History

import pytest
from netgen.csg import *
2020-10-27 20:53:07 +05:00
def GetNSurfaceElements(mesh, boundaries, adjacent_domain=None):
2020-04-23 18:44:32 +05:00
nse_in_layer = 0
for el in mesh.Elements2D():
2020-07-15 00:30:26 +05:00
if mesh.GetBCName(el.index-1) in boundaries:
2020-10-27 20:53:07 +05:00
if adjacent_domain is None:
nse_in_layer += 1
else:
if (mesh.FaceDescriptor(el.index).domin > 0 and mesh.GetMaterial(mesh.FaceDescriptor(el.index).domin) == adjacent_domain) or (mesh.FaceDescriptor(el.index).domout > 0 and mesh.GetMaterial(mesh.FaceDescriptor(el.index).domout) == adjacent_domain):
nse_in_layer += 1
2020-04-23 18:44:32 +05:00
return nse_in_layer
@pytest.mark.parametrize("outside", [True, False])
2020-04-23 18:44:32 +05:00
def test_boundarylayer(outside, capfd):
mesh = unit_cube.GenerateMesh(maxh=0.3)
ne_before = mesh.ne
2020-07-15 00:30:26 +05:00
layer_surfacenames = ["right", "top", "left", "back", "bottom"]
mesh.BoundaryLayer("|".join(layer_surfacenames), [0.01, 0.02], "layer", outside=outside, grow_edges=True)
2020-07-15 00:30:26 +05:00
should_ne = ne_before + 2 * GetNSurfaceElements(mesh, layer_surfacenames)
2020-04-23 18:44:32 +05:00
assert mesh.ne == should_ne
capture = capfd.readouterr()
assert not "elements are not matching" in capture.out
for side in ["front"]:
2020-07-15 00:30:26 +05:00
mesh.BoundaryLayer(side, [0.001, 0.002], "layer", outside=outside, grow_edges=True)
should_ne += 2 * GetNSurfaceElements(mesh, [side])
2020-04-23 18:44:32 +05:00
assert mesh.ne == should_ne
capture = capfd.readouterr()
assert not "elements are not matching" in capture.out
2020-07-15 00:30:26 +05:00
@pytest.mark.parametrize("outside", [True, False])
2020-10-27 20:53:07 +05:00
@pytest.mark.parametrize("version", [1, 2]) # version 2 not working yet
2020-07-15 00:30:26 +05:00
def test_boundarylayer2(outside, version, capfd):
geo = CSGeometry()
top = Plane(Pnt(0,0,0.5), Vec(0,0,1))
bot = Plane(Pnt(0,0,0.1), Vec(0,0,-1))
bigpart = OrthoBrick(Pnt(-5,-5,0), Pnt(1,1,1))
part = bigpart* top * bot
outer = ((OrthoBrick(Pnt(-1,-1,-1), Pnt(2,2,3)).bc("outer") * Plane(Pnt(2,2,2), Vec(0,0,1)).bc("outertop")))
2020-07-15 00:30:26 +05:00
geo.Add((part * outer).mat("part"))
if version == 1:
geo.Add((outer-part).mat("rest"))
else:
geo.Add((outer-top).mat("rest"))
geo.Add((outer-bot).mat("rest"))
geo.Add((outer*top*bot-bigpart).mat("rest"))
geo.CloseSurfaces(top, bot, [])
mesh = geo.GenerateMesh()
2020-10-27 20:53:07 +05:00
should_ne = mesh.ne + 2 * GetNSurfaceElements(mesh, ["default"], "part")
2020-07-15 00:30:26 +05:00
layersize = 0.05
mesh.BoundaryLayer("default", [0.5 * layersize, layersize], "layer", domains="part", outside=outside, grow_edges=True)
assert mesh.ne == should_ne
assert not "elements are not matching" in capfd.readouterr().out