Skip to content

Commit 0247b9c

Browse files
germa89akaszynski
andauthored
Empty mesh object instabilities (#972)
* Adding clean exit for the Xnum methods. * Fixing enum not returning empty array. * Adding unit test to geometry * Adding unit test to the mesh_grpc module * removing extra check (coverage) * Update src/ansys/mapdl/core/mesh_grpc.py * Removing added commented sections. Co-authored-by: Alex Kaszynski <[email protected]>
1 parent e0916e8 commit 0247b9c

File tree

4 files changed

+59
-2
lines changed

4 files changed

+59
-2
lines changed

src/ansys/mapdl/core/mapdl_geometry.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ def n_volu(self):
329329
330330
Examples
331331
--------
332-
>>> mapdl.n_area
332+
>>> mapdl.n_volu
333333
1
334334
"""
335335
return self._item_count("VOLU")
@@ -382,6 +382,9 @@ def knum(self):
382382
>>> mapdl.knum
383383
array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)
384384
"""
385+
if self._mapdl.geometry.n_keypoint == 0:
386+
return np.array([], dtype=np.int32)
387+
385388
return self._mapdl.get_array("KP", item1="KLIST").astype(np.int32)
386389

387390
@property
@@ -394,6 +397,10 @@ def lnum(self):
394397
>>> mapdl.lnum
395398
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], dtype=int32)
396399
"""
400+
# For clean exit when there is no lines.
401+
if self._mapdl.geometry.n_line == 0:
402+
return np.array([], dtype=np.int32)
403+
397404
# this (weirdly) sometimes fails
398405
for _ in range(5):
399406
lnum = self._mapdl.get_array("LINES", item1="LLIST")
@@ -411,6 +418,10 @@ def anum(self):
411418
>>> mapdl.anum
412419
array([1, 2, 3, 4, 5, 6], dtype=int32)
413420
"""
421+
# Clean exit
422+
if self._mapdl.geometry.n_area == 0:
423+
return np.array([], dtype=np.int32)
424+
414425
return self._mapdl.get_array("AREA", item1="ALIST").astype(np.int32)
415426

416427
@property
@@ -423,6 +434,9 @@ def vnum(self):
423434
>>> mapdl.vnum
424435
array([1], dtype=int32)
425436
"""
437+
if self._mapdl.geometry.n_volu == 0:
438+
return np.array([], dtype=np.int32)
439+
426440
return self._mapdl.get_array("VOLU", item1="VLIST").astype(np.int32)
427441

428442
@supress_logging

src/ansys/mapdl/core/mesh_grpc.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,12 @@ def enum(self) -> np.ndarray:
201201
array([ 1, 2, 3, ..., 9998, 9999, 10000])
202202
"""
203203
if self._enum is None:
204-
self._enum = self._mapdl.get_array("ELEM", item1="ELIST").astype(np.int32)
204+
if self._mapdl.mesh.n_elem == 0:
205+
return np.array([], dtype=np.int32)
206+
else:
207+
self._enum = self._mapdl.get_array("ELEM", item1="ELIST").astype(
208+
np.int32
209+
)
205210
return self._enum
206211

207212
@threaded

tests/test_geometry.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,3 +484,12 @@ def test_ndist(cleared, mapdl):
484484
assert node_xdist == node2[0] - node1[0]
485485
assert node_ydist == node2[1] - node1[1]
486486
assert node_zdist == node2[2] - node1[2]
487+
488+
489+
def test_empty_model(mapdl):
490+
mapdl.clear()
491+
492+
assert mapdl.geometry.knum.size == 0
493+
assert mapdl.geometry.lnum.size == 0
494+
assert mapdl.geometry.anum.size == 0
495+
assert mapdl.geometry.vnum.size == 0

tests/test_mesh_grpc.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Test mesh """
2+
import numpy as np
3+
4+
5+
def test_empty_model(mapdl):
6+
mapdl.clear()
7+
8+
assert mapdl.mesh.nnum.size == 0
9+
assert mapdl.mesh.enum.size == 0
10+
11+
assert mapdl.mesh.n_elem == 0
12+
assert mapdl.mesh.n_node == 0
13+
14+
15+
def test_mesh_attributes(mapdl, cube_solve):
16+
mapdl.allsel()
17+
assert mapdl.mesh.n_node == mapdl.get("__par__", "node", "0", "count")
18+
assert mapdl.mesh.n_elem == mapdl.get("__par__", "elem", "0", "count")
19+
20+
assert len(mapdl.mesh.nnum) == mapdl.get("__par__", "node", "0", "count")
21+
assert len(mapdl.mesh.enum) == mapdl.get("__par__", "elem", "0", "count")
22+
23+
mapdl.dim("par", "", len(mapdl.mesh.nnum))
24+
mapdl.starvget("par", "NODE", "0", "NLIST")
25+
assert np.allclose(mapdl.parameters["par"].flatten(), mapdl.mesh.nnum)
26+
27+
mapdl.dim("par", "", len(mapdl.mesh.enum))
28+
mapdl.starvget("par", "ELEM", "0", "ELIST")
29+
assert np.allclose(mapdl.parameters["par"].flatten(), mapdl.mesh.enum)

0 commit comments

Comments
 (0)