Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REFACTOR: Icepak Mesh class initialization performance #4877

Merged
merged 8 commits into from
Jul 10, 2024
56 changes: 29 additions & 27 deletions pyaedt/modules/MeshIcepak.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,11 +279,12 @@
::class::modeler.cad.object3d.Object3d
"""
if isinstance(self, Region):
return {
"CreateRegion": oo
for o, oo in self._app.modeler.objects_by_name.items()
if oo.history() and oo.history().command == "CreateRegion"
}.get("CreateRegion", None)
# use native apis instead of history() for performance reasons
for o, oo in self._app.modeler.objects_by_name.items():
child_names = self._app.oeditor.GetChildObject(o).GetChildNames()
if child_names and child_names[0].startswith("CreateRegion"):
return oo
return None
else:
return self._app.modeler.objects_by_name.get(self._name, None)

Expand Down Expand Up @@ -1089,30 +1090,31 @@
def _get_design_mesh_operations(self):
"""Retrieve design mesh operations."""
meshops = []
dp = self._app.design_properties
try:
if settings.aedt_version > "2023.2":
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]:
if isinstance(self._app.design_properties["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if self._app.design_properties["MeshRegion"]["MeshSetup"][ds]["DType"] == "OpT":
for ds in dp["MeshRegion"]["MeshSetup"]:
if isinstance(dp["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if dp["MeshRegion"]["MeshSetup"][ds]["DType"] == "OpT":
meshops.append(
MeshOperation(
self,
ds,
self._app.design_properties["MeshRegion"]["MeshSetup"][ds],
dp["MeshRegion"]["MeshSetup"][ds],
"Icepak",
)
)
else:
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"]:
else: # pragma : no cover
lorenzovecchietti marked this conversation as resolved.
Show resolved Hide resolved
for ds in dp["MeshRegion"]["MeshSetup"]["MeshOperations"]:

Check warning on line 1108 in pyaedt/modules/MeshIcepak.py

View check run for this annotation

Codecov / codecov/patch

pyaedt/modules/MeshIcepak.py#L1108

Added line #L1108 was not covered by tests
if isinstance(
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
dp["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
(OrderedDict, dict),
):
meshops.append(
MeshOperation(
self,
ds,
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
dp["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
"Icepak",
)
)
Expand All @@ -1130,12 +1132,13 @@
def _get_design_mesh_regions(self):
"""Retrieve design mesh regions."""
meshops = []
dp = self._app.design_properties
try:
if settings.aedt_version > "2023.2":
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]:
if isinstance(self._app.design_properties["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if self._app.design_properties["MeshRegion"]["MeshSetup"][ds]["DType"] == "RegionT":
dict_prop = self._app.design_properties["MeshRegion"]["MeshSetup"][ds]
for ds in dp["MeshRegion"]["MeshSetup"]:
if isinstance(dp["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if dp["MeshRegion"]["MeshSetup"][ds]["DType"] == "RegionT":
dict_prop = dp["MeshRegion"]["MeshSetup"][ds]
if ds == "Global":
meshop = GlobalMeshRegion(self._app)
else:
Expand All @@ -1144,12 +1147,10 @@
if el in meshop.__dict__:
meshop.__dict__[el] = dict_prop[el]
meshops.append(meshop)
else:
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"]:
if isinstance(
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"][ds], (OrderedDict, dict)
):
dict_prop = self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"][ds]
else: # pragma : no cover
lorenzovecchietti marked this conversation as resolved.
Show resolved Hide resolved
for ds in dp["MeshRegion"]["MeshSetup"]["MeshRegions"]:
if isinstance(dp["MeshRegion"]["MeshSetup"]["MeshRegions"][ds], (OrderedDict, dict)):
dict_prop = dp["MeshRegion"]["MeshSetup"]["MeshRegions"][ds]

Check warning on line 1153 in pyaedt/modules/MeshIcepak.py

View check run for this annotation

Codecov / codecov/patch

pyaedt/modules/MeshIcepak.py#L1151-L1153

Added lines #L1151 - L1153 were not covered by tests
if ds == "Global":
meshop = GlobalMeshRegion(self._app)
else:
Expand Down Expand Up @@ -1359,13 +1360,13 @@
if not assignment or not isinstance(assignment, list) or not isinstance(assignment[0], list):
raise AttributeError("``assignment`` input must be a list of lists.")
props = {"PriorityListParameters": []}
self._app.logger.info("Parsing input objects information for priority assignment. This operation can take time")
udc = self.modeler.user_defined_components
udc._parse_objs()
for level, objects in enumerate(assignment):
level += 1
if isinstance(objects[0], str):
objects = [
self.modeler.objects_by_name.get(o, self.modeler.user_defined_components.get(o, None))
for o in objects
]
objects = [self.modeler.objects_by_name.get(o, udc.get(o, None)) for o in objects]
obj_3d = [
o
for o in objects
Expand Down Expand Up @@ -1405,6 +1406,7 @@
raise AttributeError("Cannot assign components and parts on the same level.")
props["PriorityListParameters"].append(level_2d)
props = {"UpdatePriorityListData": props}
self._app.logger.info("Input objects information for priority assignment completed.")
args = []
_dict2arg(props, args)
self.modeler.oeditor.UpdatePriorityList(args[0])
Expand Down
Loading