diff --git a/src/ansys/dpf/core/field.py b/src/ansys/dpf/core/field.py index e65d2af6e4..bb521b52ac 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 version_requires 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,23 @@ def meshed_region(self) -> MeshedRegion: 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. + + Returns + ------- + :class:`ansys.dpf.core.data_tree.DataTree` + + """ + 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 5ef760ee71..aa3718414c 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", strain_field._server): + 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