From 24a14f36a3df7d1473e85a402bf5d5936edf5f15 Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Thu, 22 May 2025 13:02:50 +0200 Subject: [PATCH 1/5] Fill the values in the Beam3 ElementDescriptor --- src/ansys/dpf/core/elements.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ansys/dpf/core/elements.py b/src/ansys/dpf/core/elements.py index 15515401f8f..70c9c478d62 100644 --- a/src/ansys/dpf/core/elements.py +++ b/src/ansys/dpf/core/elements.py @@ -1219,7 +1219,9 @@ def _descriptors(): ), element_types.Edge2: ElementDescriptor(element_types.Edge2, "Edge2", "edge2", "beam"), element_types.Edge3: ElementDescriptor(element_types.Edge3, "Edge3", "edge3", "beam"), - element_types.Beam3: ElementDescriptor(element_types.Beam3, "Beam3", "beam3", "beam"), + element_types.Beam3: ElementDescriptor( + element_types.Beam3, "Beam3", "beam3", "beam", 2, 0, 3, False, False, True, False + ), element_types.Beam4: ElementDescriptor(element_types.Beam4, "Beam4", "beam4", "beam"), element_types.GeneralPlaceholder: ElementDescriptor( element_types.GeneralPlaceholder, From 36a95ad1c01fe06a21d9d8ab1301bb4db0d5928f Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Thu, 22 May 2025 14:04:05 +0200 Subject: [PATCH 2/5] Revert "Fill the values in the Beam3 ElementDescriptor" This reverts commit 24a14f36a3df7d1473e85a402bf5d5936edf5f15. --- src/ansys/dpf/core/elements.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ansys/dpf/core/elements.py b/src/ansys/dpf/core/elements.py index 70c9c478d62..15515401f8f 100644 --- a/src/ansys/dpf/core/elements.py +++ b/src/ansys/dpf/core/elements.py @@ -1219,9 +1219,7 @@ def _descriptors(): ), element_types.Edge2: ElementDescriptor(element_types.Edge2, "Edge2", "edge2", "beam"), element_types.Edge3: ElementDescriptor(element_types.Edge3, "Edge3", "edge3", "beam"), - element_types.Beam3: ElementDescriptor( - element_types.Beam3, "Beam3", "beam3", "beam", 2, 0, 3, False, False, True, False - ), + element_types.Beam3: ElementDescriptor(element_types.Beam3, "Beam3", "beam3", "beam"), element_types.Beam4: ElementDescriptor(element_types.Beam4, "Beam4", "beam4", "beam"), element_types.GeneralPlaceholder: ElementDescriptor( element_types.GeneralPlaceholder, From 47d46db425803079e9c5cd8a2f8970b8e0d9a243 Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Fri, 6 Jun 2025 11:50:38 +0200 Subject: [PATCH 3/5] Header getter in Field --- src/ansys/dpf/core/field.py | 23 +++++++++++++++++++++++ tests/test_field.py | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/ansys/dpf/core/field.py b/src/ansys/dpf/core/field.py index e65d2af6e47..7f520095a56 100644 --- a/src/ansys/dpf/core/field.py +++ b/src/ansys/dpf/core/field.py @@ -31,6 +31,7 @@ from ansys import dpf from ansys.dpf.core import dimensionality, errors, meshed_region, scoping, time_freq_support from ansys.dpf.core.available_result import Homogeneity +from ansys.dpf.core.check_version import server_meet_version_and_raise from ansys.dpf.core.common import ( _get_size_of_list, locations, @@ -50,6 +51,7 @@ from ansys.dpf.gate.errors import DPFServerException if TYPE_CHECKING: # pragma: nocover + from ansys.dpf.core.data_tree import DataTree from ansys.dpf.core.dpf_operator import Operator from ansys.dpf.core.meshed_region import MeshedRegion from ansys.dpf.core.results import Result @@ -804,6 +806,27 @@ def meshed_region(self) -> MeshedRegion: def meshed_region(self, value: MeshedRegion): self._set_support(support=value, support_type="MESHED_REGION") + @property + def header(self) -> DataTree: + """Field Header, which stores metadata of the Field. + + Returns + ------- + :class:`ansys.dpf.core.data_tree.DataTree` + + """ + server_meet_version_and_raise( + required_version="11.0", + server=self._server, + msg="Getting a Field Header requires DPF 11.0 (2026 R1) or above.", + ) + from ansys.dpf.core import dpf_operator + + op = dpf_operator.Operator("field::get_attribute", server=self._server) + op.connect(0, self) + op.connect(1, "header") + return op.get_output(0, types.data_tree) + def __add__(self, field_b): """Add two fields. diff --git a/tests/test_field.py b/tests/test_field.py index 5ef760ee711..eb6ffc4350f 100644 --- a/tests/test_field.py +++ b/tests/test_field.py @@ -44,6 +44,13 @@ def stress_field(allkindofcomplexity, server_type): return stress.outputs.fields_container()[0] +@pytest.fixture() +def strain_field(allkindofcomplexity, server_type): + model = dpf.core.Model(allkindofcomplexity, server=server_type) + strain = model.results.elastic_strain() + return strain.outputs.fields_container()[0] + + def test_create_field(server_type): field = dpf.core.Field(server=server_type) assert field._internal_obj is not None @@ -1444,3 +1451,17 @@ def test_set_units(server_type): # use wrong type of arguments with pytest.raises(ValueError): field.unit = 1.0 + + +def test_field_header(strain_field): + if server_meet_version("11.0", server_type): + header = strain_field.header + assert header.has("version") + assert header.get_as("version", core.types.int) == 0 + assert header.has("effnu") + assert header.get_as("effnu", core.types.double) == pytest.approx(0.33) + assert header.has("strain") + assert header.get_as("strain", core.types.int) == 1 + else: + with pytest.raises(DpfVersionNotSupported): + header = strain_field.header From 4180e3566f0cff522e84ae7ce6791866afe6cbac Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Fri, 6 Jun 2025 16:12:48 +0200 Subject: [PATCH 4/5] Fix test --- tests/test_field.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_field.py b/tests/test_field.py index eb6ffc4350f..aa3718414cd 100644 --- a/tests/test_field.py +++ b/tests/test_field.py @@ -1454,7 +1454,7 @@ def test_set_units(server_type): def test_field_header(strain_field): - if server_meet_version("11.0", server_type): + if server_meet_version("11.0", strain_field._server): header = strain_field.header assert header.has("version") assert header.get_as("version", core.types.int) == 0 From e6a9aa75e715ebeb1d6d97a8762475801486d12a Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Wed, 11 Jun 2025 15:48:52 +0200 Subject: [PATCH 5/5] Use decorator --- src/ansys/dpf/core/field.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ansys/dpf/core/field.py b/src/ansys/dpf/core/field.py index 7f520095a56..bb521b52ac3 100644 --- a/src/ansys/dpf/core/field.py +++ b/src/ansys/dpf/core/field.py @@ -31,7 +31,7 @@ from ansys import dpf from ansys.dpf.core import dimensionality, errors, meshed_region, scoping, time_freq_support from ansys.dpf.core.available_result import Homogeneity -from ansys.dpf.core.check_version import server_meet_version_and_raise +from ansys.dpf.core.check_version import version_requires from ansys.dpf.core.common import ( _get_size_of_list, locations, @@ -807,6 +807,7 @@ def meshed_region(self, value: MeshedRegion): self._set_support(support=value, support_type="MESHED_REGION") @property + @version_requires("11.0") def header(self) -> DataTree: """Field Header, which stores metadata of the Field. @@ -815,11 +816,6 @@ def header(self) -> DataTree: :class:`ansys.dpf.core.data_tree.DataTree` """ - server_meet_version_and_raise( - required_version="11.0", - server=self._server, - msg="Getting a Field Header requires DPF 11.0 (2026 R1) or above.", - ) from ansys.dpf.core import dpf_operator op = dpf_operator.Operator("field::get_attribute", server=self._server)