Skip to content

Commit 47d46db

Browse files
committed
Header getter in Field
1 parent 8df5098 commit 47d46db

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/ansys/dpf/core/field.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from ansys import dpf
3232
from ansys.dpf.core import dimensionality, errors, meshed_region, scoping, time_freq_support
3333
from ansys.dpf.core.available_result import Homogeneity
34+
from ansys.dpf.core.check_version import server_meet_version_and_raise
3435
from ansys.dpf.core.common import (
3536
_get_size_of_list,
3637
locations,
@@ -50,6 +51,7 @@
5051
from ansys.dpf.gate.errors import DPFServerException
5152

5253
if TYPE_CHECKING: # pragma: nocover
54+
from ansys.dpf.core.data_tree import DataTree
5355
from ansys.dpf.core.dpf_operator import Operator
5456
from ansys.dpf.core.meshed_region import MeshedRegion
5557
from ansys.dpf.core.results import Result
@@ -804,6 +806,27 @@ def meshed_region(self) -> MeshedRegion:
804806
def meshed_region(self, value: MeshedRegion):
805807
self._set_support(support=value, support_type="MESHED_REGION")
806808

809+
@property
810+
def header(self) -> DataTree:
811+
"""Field Header, which stores metadata of the Field.
812+
813+
Returns
814+
-------
815+
:class:`ansys.dpf.core.data_tree.DataTree`
816+
817+
"""
818+
server_meet_version_and_raise(
819+
required_version="11.0",
820+
server=self._server,
821+
msg="Getting a Field Header requires DPF 11.0 (2026 R1) or above.",
822+
)
823+
from ansys.dpf.core import dpf_operator
824+
825+
op = dpf_operator.Operator("field::get_attribute", server=self._server)
826+
op.connect(0, self)
827+
op.connect(1, "header")
828+
return op.get_output(0, types.data_tree)
829+
807830
def __add__(self, field_b):
808831
"""Add two fields.
809832

tests/test_field.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ def stress_field(allkindofcomplexity, server_type):
4444
return stress.outputs.fields_container()[0]
4545

4646

47+
@pytest.fixture()
48+
def strain_field(allkindofcomplexity, server_type):
49+
model = dpf.core.Model(allkindofcomplexity, server=server_type)
50+
strain = model.results.elastic_strain()
51+
return strain.outputs.fields_container()[0]
52+
53+
4754
def test_create_field(server_type):
4855
field = dpf.core.Field(server=server_type)
4956
assert field._internal_obj is not None
@@ -1444,3 +1451,17 @@ def test_set_units(server_type):
14441451
# use wrong type of arguments
14451452
with pytest.raises(ValueError):
14461453
field.unit = 1.0
1454+
1455+
1456+
def test_field_header(strain_field):
1457+
if server_meet_version("11.0", server_type):
1458+
header = strain_field.header
1459+
assert header.has("version")
1460+
assert header.get_as("version", core.types.int) == 0
1461+
assert header.has("effnu")
1462+
assert header.get_as("effnu", core.types.double) == pytest.approx(0.33)
1463+
assert header.has("strain")
1464+
assert header.get_as("strain", core.types.int) == 1
1465+
else:
1466+
with pytest.raises(DpfVersionNotSupported):
1467+
header = strain_field.header

0 commit comments

Comments
 (0)