Skip to content
Draft
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/ansys/dpf/core/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down Expand Up @@ -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.

Expand Down
21 changes: 21 additions & 0 deletions tests/test_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Loading