Skip to content

Commit b3e5147

Browse files
Add beam element in skin extraction (#778)
* Add beam element in skin extraction
1 parent bf32461 commit b3e5147

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src/ansys/dpf/post/selection.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ def select_skin(
421421
on the expanded mesh.
422422
"""
423423
skin_operator = operators.mesh.skin(server=self._server)
424+
if self._server.meet_version("9.1"):
425+
# add_beam argument is not available in versions prior to 9.0
426+
skin_operator.inputs.add_beam(True)
424427
self._selection.add_operator(skin_operator)
425428

426429
initial_mesh_fwd_op = operators.utility.forward(server=self._server)

tests/conftest.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,13 @@ def average_per_body_complex_multi_body():
196196
)
197197

198198

199+
@pytest.fixture()
200+
def beam_example():
201+
return _download_file(
202+
"result_files/beams", "post_beam_result_01.rst", True, None, False
203+
)
204+
205+
199206
@dataclasses.dataclass
200207
class ReferenceCsvFilesNodal:
201208
# reference result with all bodies combined

tests/test_simulation.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import csv
22
import dataclasses
3+
from itertools import groupby
34
import os.path
45
import pathlib
56
from typing import Optional, Union
@@ -4618,3 +4619,33 @@ def test_build_selection(
46184619
assert len(scoping_from_selection.ids) == 36
46194620
else:
46204621
assert set(scoping_from_selection.ids) == set(scoping.ids)
4622+
4623+
4624+
def test_beam_results_on_skin(beam_example):
4625+
simulation: StaticMechanicalSimulation = post.load_simulation(
4626+
data_sources=beam_example,
4627+
simulation_type=AvailableSimulationTypes.static_mechanical,
4628+
)
4629+
if not SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_9_1:
4630+
# Add beams on skin not supported before 9.1
4631+
return
4632+
4633+
res = simulation.displacement(skin=True, norm=True)
4634+
4635+
element_type_array = res._fc[0].meshed_region.elements.element_types_field.data
4636+
element_count_dict = {
4637+
key: sum(1 for _ in value) for key, value in groupby(sorted(element_type_array))
4638+
}
4639+
4640+
unit_converter = dpf.operators.math.unit_convert(
4641+
unit_name=2, # NMM unit system
4642+
)
4643+
4644+
unit_converter.inputs.entity_to_convert(res._fc[0])
4645+
converted_field = unit_converter.eval()
4646+
4647+
assert element_types.Line2.value in element_count_dict.keys()
4648+
4649+
assert element_count_dict[element_types.Line2.value] == 40
4650+
4651+
assert converted_field.max().data[0] == pytest.approx(190, 1e-2)

0 commit comments

Comments
 (0)