mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 05:50:32 +05:00
76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
|
|
import os, pytest
|
|
from netgen.meshing import meshsize
|
|
import netgen.gui
|
|
import netgen.csg as csg
|
|
import netgen.stl as stl
|
|
import netgen.csg as csg
|
|
from results import *
|
|
|
|
def getFiles(fileEnding):
|
|
r, d, files = next(os.walk(os.path.join("..","..","tutorials")))
|
|
return (f for f in files if f.endswith(fileEnding))
|
|
|
|
|
|
def getCheckFunc(filename):
|
|
def func(mesh,i):
|
|
if filename in number_elements:
|
|
# number of elements should be in 2% range of expected value
|
|
assert mesh.ne == pytest.approx(number_elements[filename][i], rel=0.02)
|
|
return func
|
|
|
|
def getResultFunc(filename):
|
|
def resultFunc(mesh):
|
|
results = {}
|
|
results["number_elements"] = mesh.ne
|
|
return results
|
|
return resultFunc
|
|
|
|
def getMeshingparameters(filename):
|
|
standard = (meshsize.very_coarse, meshsize.coarse, meshsize.moderate, meshsize.fine, meshsize.very_fine)
|
|
if filename == "shell.geo":
|
|
return [] # do not test this example cause it needs so long...
|
|
if filename == "extrusion.geo":
|
|
return [] # this segfaults right now
|
|
if filename == "manyholes2.geo" or filename == "manyholes.geo":
|
|
return standard[:2] # this gets too big for finer meshsizes
|
|
return standard
|
|
|
|
# don't test step files as they do not respect all meshing parameters correctly yet.
|
|
_geofiles = [f for f in getFiles(".geo")] + [f for f in getFiles(".stl")] # + [f for f in getFiles(".step")]
|
|
|
|
def generateMesh(filename, mp):
|
|
if filename.endswith(".geo"):
|
|
geo = csg.CSGeometry(os.path.join("..","..","tutorials", filename))
|
|
elif filename.endswith(".stl"):
|
|
geo = stl.STLGeometry(os.path.join("..","..","tutorials", filename))
|
|
elif filename.endswith(".step"):
|
|
geo = occ.OCCGeometry(os.path.join("..","..","tutorials", filename))
|
|
return geo.GenerateMesh(mp)
|
|
|
|
@pytest.mark.parametrize("filename, checkFunc", [(f, getCheckFunc(f)) for f in _geofiles])
|
|
def test_geoFiles(filename, checkFunc):
|
|
for i, mp in enumerate(getMeshingparameters(filename)):
|
|
print("load geo", filename)
|
|
mesh = generateMesh(filename, mp)
|
|
if checkFunc is not None:
|
|
checkFunc(mesh,i)
|
|
|
|
import time
|
|
def generateResultFile():
|
|
with open("results.py", "w") as f:
|
|
print("number_elements = {}", file=f)
|
|
for _file, _func in ((gf, getResultFunc(gf)) for gf in _geofiles):
|
|
start = time.time()
|
|
print("write", _file)
|
|
mps = getMeshingparameters(_file)
|
|
if not mps:
|
|
continue
|
|
results = [_func(generateMesh(_file, mp)) for mp in mps]
|
|
print("number_elements['{}'] = {}".format(_file, "(" + ",".join((str(r["number_elements"]) for r in results)) + ")"), file=f)
|
|
print("needed", time.time() - start, "seconds")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
generateResultFile()
|