Fem: Add second order linear option to Netgen mesh

This commit is contained in:
marioalexis
2024-10-10 09:51:39 -03:00
parent e99a65a50d
commit 3d325da28e
2 changed files with 29 additions and 11 deletions

View File

@@ -111,6 +111,7 @@ NetgenTools.run_netgen(**{params})
"heal": self.obj.HealShape,
"params": self.get_meshing_parameters(),
"second_order": self.obj.SecondOrder,
"second_order_linear": self.obj.SecondOrderLinear,
"result_file": self.result_file,
"mesh_region": self.get_mesh_region(),
}
@@ -122,10 +123,16 @@ NetgenTools.run_netgen(**{params})
return self.process
@staticmethod
def run_netgen(brep_file, threads, heal, params, second_order, result_file, mesh_region):
import pyngcore as ngcore
from netgen import meshing
def run_netgen(
brep_file,
threads,
heal,
params,
second_order,
second_order_linear,
result_file,
mesh_region,
):
geom = occ.OCCGeometry(brep_file)
ngcore.SetNumThreads(threads)
@@ -148,6 +155,8 @@ NetgenTools.run_netgen(**{params})
mesh = geom.GenerateMesh(mp=meshing.MeshingParameters(**params))
if second_order:
if second_order_linear:
mesh.SetGeometry(None)
mesh.SecondOrder()
coords = mesh.Coordinates()
@@ -323,20 +332,20 @@ NetgenTools.run_netgen(**{params})
return params
def get_mesh_region(self):
import Part
from Part import Shape as PartShape
d = []
result = []
for reg in self.obj.MeshRegionList:
for s, sub_list in reg.References:
if s.isDerivedFrom("App::GeoFeature") and isinstance(
s.getPropertyOfGeometry(), Part.Shape
s.getPropertyOfGeometry(), PartShape
):
geom = s.getPropertyOfGeometry()
sub_sh = [s.getSubObject(_) for _ in sub_list]
res = geom.findSubShape(sub_sh)
sub_obj = [s.getSubObject(_) for _ in sub_list]
sub_sh = geom.findSubShape(sub_obj)
l = reg.CharacteristicLength.getValueAs("mm").Value
d.append((res, l))
return d
result.append((sub_sh, l))
return result
@staticmethod
def version():

View File

@@ -413,6 +413,15 @@ class MeshNetgen(base_fempythonobject.BaseFemPythonObject):
value=True,
)
)
prop.append(
_PropHelper(
type="App::PropertyBool",
name="SecondOrderLinear",
group="Mesh Parameters",
doc="Second order nodes are created by linear interpolation",
value=False,
)
)
prop.append(
_PropHelper(
type="App::PropertyInteger",