Computes the strain from a displacement field.
Only SOLID185 (B-Bar, Simplified Enhanced Strain, Enhanced Strain formulations), SOLID186 (Full Integration) & SOLID187 elements are supported.
Layered elements are not supported.
Thermal strains are not supported.
diff --git a/src/ansys/dpf/core/operators/result/__init__.py b/src/ansys/dpf/core/operators/result/__init__.py
index f7e38698912..90cd25dd985 100644
--- a/src/ansys/dpf/core/operators/result/__init__.py
+++ b/src/ansys/dpf/core/operators/result/__init__.py
@@ -234,6 +234,10 @@
from .nodal_rotational_velocity_Y import nodal_rotational_velocity_Y
from .nodal_rotational_velocity_Z import nodal_rotational_velocity_Z
from .nodal_to_global import nodal_to_global
+from .node_orientations import node_orientations
+from .node_orientations_X import node_orientations_X
+from .node_orientations_Y import node_orientations_Y
+from .node_orientations_Z import node_orientations_Z
from .normal_contact_force import normal_contact_force
from .normal_contact_moment import normal_contact_moment
from .num_surface_status_changes import num_surface_status_changes
diff --git a/src/ansys/dpf/core/operators/result/node_orientations.py b/src/ansys/dpf/core/operators/result/node_orientations.py
new file mode 100644
index 00000000000..35f5c1bf810
--- /dev/null
+++ b/src/ansys/dpf/core/operators/result/node_orientations.py
@@ -0,0 +1,453 @@
+"""
+node_orientations
+
+Autogenerated DPF operator classes.
+"""
+
+from __future__ import annotations
+
+from warnings import warn
+from ansys.dpf.core.dpf_operator import Operator
+from ansys.dpf.core.inputs import Input, _Inputs
+from ansys.dpf.core.outputs import Output, _Outputs
+from ansys.dpf.core.operators.specification import PinSpecification, Specification
+from ansys.dpf.core.config import Config
+from ansys.dpf.core.server_types import AnyServerType
+
+
+class node_orientations(Operator):
+ r"""Read/compute node euler angles by calling the readers defined by the
+ datasources.
+
+
+ Parameters
+ ----------
+ time_scoping: Scoping or int or float or Field, optional
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+ mesh_scoping: ScopingsContainer or Scoping, optional
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+ fields_container: FieldsContainer, optional
+ Fields container already allocated modified inplace
+ streams_container: StreamsContainer, optional
+ result file container allowed to be kept open to cache data
+ data_sources: DataSources
+ result file path container, used if no streams are set
+ bool_rotate_to_global: bool, optional
+ if true the field is rotated to global coordinate system (default true). Please check your results carefully if 'false' is used for Elemental or ElementalNodal results averaged to the Nodes when adjacent elements do not share the same coordinate system, as results may be incorrect.
+ mesh: MeshedRegion or MeshesContainer, optional
+ prevents from reading the mesh in the result files
+
+ Returns
+ -------
+ fields_container: FieldsContainer
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+
+ >>> # Instantiate operator
+ >>> op = dpf.operators.result.node_orientations()
+
+ >>> # Make input connections
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+
+ >>> # Instantiate operator and connect inputs in one line
+ >>> op = dpf.operators.result.node_orientations(
+ ... time_scoping=my_time_scoping,
+ ... mesh_scoping=my_mesh_scoping,
+ ... fields_container=my_fields_container,
+ ... streams_container=my_streams_container,
+ ... data_sources=my_data_sources,
+ ... bool_rotate_to_global=my_bool_rotate_to_global,
+ ... mesh=my_mesh,
+ ... )
+
+ >>> # Get output data
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(
+ self,
+ time_scoping=None,
+ mesh_scoping=None,
+ fields_container=None,
+ streams_container=None,
+ data_sources=None,
+ bool_rotate_to_global=None,
+ mesh=None,
+ config=None,
+ server=None,
+ ):
+ super().__init__(name="EUL_NOD", config=config, server=server)
+ self._inputs = InputsNodeOrientations(self)
+ self._outputs = OutputsNodeOrientations(self)
+ if time_scoping is not None:
+ self.inputs.time_scoping.connect(time_scoping)
+ if mesh_scoping is not None:
+ self.inputs.mesh_scoping.connect(mesh_scoping)
+ if fields_container is not None:
+ self.inputs.fields_container.connect(fields_container)
+ if streams_container is not None:
+ self.inputs.streams_container.connect(streams_container)
+ if data_sources is not None:
+ self.inputs.data_sources.connect(data_sources)
+ if bool_rotate_to_global is not None:
+ self.inputs.bool_rotate_to_global.connect(bool_rotate_to_global)
+ if mesh is not None:
+ self.inputs.mesh.connect(mesh)
+
+ @staticmethod
+ def _spec() -> Specification:
+ description = r"""Read/compute node euler angles by calling the readers defined by the
+datasources.
+"""
+ spec = Specification(
+ description=description,
+ map_input_pin_spec={
+ 0: PinSpecification(
+ name="time_scoping",
+ type_names=[
+ "scoping",
+ "int32",
+ "vector",
+ "double",
+ "field",
+ "vector",
+ ],
+ optional=True,
+ document=r"""time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.""",
+ ),
+ 1: PinSpecification(
+ name="mesh_scoping",
+ type_names=["scopings_container", "scoping"],
+ optional=True,
+ document=r"""nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains""",
+ ),
+ 2: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=True,
+ document=r"""Fields container already allocated modified inplace""",
+ ),
+ 3: PinSpecification(
+ name="streams_container",
+ type_names=["streams_container"],
+ optional=True,
+ document=r"""result file container allowed to be kept open to cache data""",
+ ),
+ 4: PinSpecification(
+ name="data_sources",
+ type_names=["data_sources"],
+ optional=False,
+ document=r"""result file path container, used if no streams are set""",
+ ),
+ 5: PinSpecification(
+ name="bool_rotate_to_global",
+ type_names=["bool"],
+ optional=True,
+ document=r"""if true the field is rotated to global coordinate system (default true). Please check your results carefully if 'false' is used for Elemental or ElementalNodal results averaged to the Nodes when adjacent elements do not share the same coordinate system, as results may be incorrect.""",
+ ),
+ 7: PinSpecification(
+ name="mesh",
+ type_names=["abstract_meshed_region", "meshes_container"],
+ optional=True,
+ document=r"""prevents from reading the mesh in the result files""",
+ ),
+ },
+ map_output_pin_spec={
+ 0: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=False,
+ document=r"""""",
+ ),
+ },
+ )
+ return spec
+
+ @staticmethod
+ def default_config(server: AnyServerType = None) -> Config:
+ """Returns the default config of the operator.
+
+ This config can then be changed to the user needs and be used to
+ instantiate the operator. The Configuration allows to customize
+ how the operation will be processed by the operator.
+
+ Parameters
+ ----------
+ server:
+ Server with channel connected to the remote or local instance. When
+ ``None``, attempts to use the global server.
+
+ Returns
+ -------
+ config:
+ A new Config instance equivalent to the default config for this operator.
+ """
+ return Operator.default_config(name="EUL_NOD", server=server)
+
+ @property
+ def inputs(self) -> InputsNodeOrientations:
+ """Enables to connect inputs to the operator
+
+ Returns
+ --------
+ inputs:
+ An instance of InputsNodeOrientations.
+ """
+ return super().inputs
+
+ @property
+ def outputs(self) -> OutputsNodeOrientations:
+ """Enables to get outputs of the operator by evaluating it
+
+ Returns
+ --------
+ outputs:
+ An instance of OutputsNodeOrientations.
+ """
+ return super().outputs
+
+
+class InputsNodeOrientations(_Inputs):
+ """Intermediate class used to connect user inputs to
+ node_orientations operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations._spec().inputs, op)
+ self._time_scoping = Input(node_orientations._spec().input_pin(0), 0, op, -1)
+ self._inputs.append(self._time_scoping)
+ self._mesh_scoping = Input(node_orientations._spec().input_pin(1), 1, op, -1)
+ self._inputs.append(self._mesh_scoping)
+ self._fields_container = Input(
+ node_orientations._spec().input_pin(2), 2, op, -1
+ )
+ self._inputs.append(self._fields_container)
+ self._streams_container = Input(
+ node_orientations._spec().input_pin(3), 3, op, -1
+ )
+ self._inputs.append(self._streams_container)
+ self._data_sources = Input(node_orientations._spec().input_pin(4), 4, op, -1)
+ self._inputs.append(self._data_sources)
+ self._bool_rotate_to_global = Input(
+ node_orientations._spec().input_pin(5), 5, op, -1
+ )
+ self._inputs.append(self._bool_rotate_to_global)
+ self._mesh = Input(node_orientations._spec().input_pin(7), 7, op, -1)
+ self._inputs.append(self._mesh)
+
+ @property
+ def time_scoping(self) -> Input:
+ r"""Allows to connect time_scoping input to the operator.
+
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> # or
+ >>> op.inputs.time_scoping(my_time_scoping)
+ """
+ return self._time_scoping
+
+ @property
+ def mesh_scoping(self) -> Input:
+ r"""Allows to connect mesh_scoping input to the operator.
+
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> # or
+ >>> op.inputs.mesh_scoping(my_mesh_scoping)
+ """
+ return self._mesh_scoping
+
+ @property
+ def fields_container(self) -> Input:
+ r"""Allows to connect fields_container input to the operator.
+
+ Fields container already allocated modified inplace
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> # or
+ >>> op.inputs.fields_container(my_fields_container)
+ """
+ return self._fields_container
+
+ @property
+ def streams_container(self) -> Input:
+ r"""Allows to connect streams_container input to the operator.
+
+ result file container allowed to be kept open to cache data
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> # or
+ >>> op.inputs.streams_container(my_streams_container)
+ """
+ return self._streams_container
+
+ @property
+ def data_sources(self) -> Input:
+ r"""Allows to connect data_sources input to the operator.
+
+ result file path container, used if no streams are set
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> # or
+ >>> op.inputs.data_sources(my_data_sources)
+ """
+ return self._data_sources
+
+ @property
+ def bool_rotate_to_global(self) -> Input:
+ r"""Allows to connect bool_rotate_to_global input to the operator.
+
+ if true the field is rotated to global coordinate system (default true). Please check your results carefully if 'false' is used for Elemental or ElementalNodal results averaged to the Nodes when adjacent elements do not share the same coordinate system, as results may be incorrect.
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> # or
+ >>> op.inputs.bool_rotate_to_global(my_bool_rotate_to_global)
+ """
+ return self._bool_rotate_to_global
+
+ @property
+ def mesh(self) -> Input:
+ r"""Allows to connect mesh input to the operator.
+
+ prevents from reading the mesh in the result files
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> # or
+ >>> op.inputs.mesh(my_mesh)
+ """
+ return self._mesh
+
+
+class OutputsNodeOrientations(_Outputs):
+ """Intermediate class used to get outputs from
+ node_orientations operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> # Connect inputs : op.inputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations._spec().outputs, op)
+ self._fields_container = Output(node_orientations._spec().output_pin(0), 0, op)
+ self._outputs.append(self._fields_container)
+
+ @property
+ def fields_container(self) -> Output:
+ r"""Allows to get fields_container output of the operator
+
+ Returns
+ -------
+ output:
+ An Output instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations()
+ >>> # Get the output from op.outputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+ return self._fields_container
diff --git a/src/ansys/dpf/core/operators/result/node_orientations_X.py b/src/ansys/dpf/core/operators/result/node_orientations_X.py
new file mode 100644
index 00000000000..adf62119bd4
--- /dev/null
+++ b/src/ansys/dpf/core/operators/result/node_orientations_X.py
@@ -0,0 +1,494 @@
+"""
+node_orientations_X
+
+Autogenerated DPF operator classes.
+"""
+
+from __future__ import annotations
+
+from warnings import warn
+from ansys.dpf.core.dpf_operator import Operator
+from ansys.dpf.core.inputs import Input, _Inputs
+from ansys.dpf.core.outputs import Output, _Outputs
+from ansys.dpf.core.operators.specification import PinSpecification, Specification
+from ansys.dpf.core.config import Config
+from ansys.dpf.core.server_types import AnyServerType
+
+
+class node_orientations_X(Operator):
+ r"""Read/compute node euler angles X component of the vector (1st component)
+ by calling the readers defined by the datasources.
+
+
+ Parameters
+ ----------
+ time_scoping: Scoping or int or float or Field, optional
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+ mesh_scoping: ScopingsContainer or Scoping, optional
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+ fields_container: FieldsContainer, optional
+ FieldsContainer already allocated modified inplace
+ streams_container: StreamsContainer, optional
+ result file container allowed to be kept open to cache data
+ data_sources: DataSources
+ result file path container, used if no streams are set
+ bool_rotate_to_global: bool, optional
+ if true the field is rotated to global coordinate system (default true)
+ mesh: MeshedRegion or MeshesContainer, optional
+ prevents from reading the mesh in the result files
+ read_cyclic: int, optional
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ fields_container: FieldsContainer
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+
+ >>> # Instantiate operator
+ >>> op = dpf.operators.result.node_orientations_X()
+
+ >>> # Make input connections
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+
+ >>> # Instantiate operator and connect inputs in one line
+ >>> op = dpf.operators.result.node_orientations_X(
+ ... time_scoping=my_time_scoping,
+ ... mesh_scoping=my_mesh_scoping,
+ ... fields_container=my_fields_container,
+ ... streams_container=my_streams_container,
+ ... data_sources=my_data_sources,
+ ... bool_rotate_to_global=my_bool_rotate_to_global,
+ ... mesh=my_mesh,
+ ... read_cyclic=my_read_cyclic,
+ ... )
+
+ >>> # Get output data
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(
+ self,
+ time_scoping=None,
+ mesh_scoping=None,
+ fields_container=None,
+ streams_container=None,
+ data_sources=None,
+ bool_rotate_to_global=None,
+ mesh=None,
+ read_cyclic=None,
+ config=None,
+ server=None,
+ ):
+ super().__init__(name="EUL_NODX", config=config, server=server)
+ self._inputs = InputsNodeOrientationsX(self)
+ self._outputs = OutputsNodeOrientationsX(self)
+ if time_scoping is not None:
+ self.inputs.time_scoping.connect(time_scoping)
+ if mesh_scoping is not None:
+ self.inputs.mesh_scoping.connect(mesh_scoping)
+ if fields_container is not None:
+ self.inputs.fields_container.connect(fields_container)
+ if streams_container is not None:
+ self.inputs.streams_container.connect(streams_container)
+ if data_sources is not None:
+ self.inputs.data_sources.connect(data_sources)
+ if bool_rotate_to_global is not None:
+ self.inputs.bool_rotate_to_global.connect(bool_rotate_to_global)
+ if mesh is not None:
+ self.inputs.mesh.connect(mesh)
+ if read_cyclic is not None:
+ self.inputs.read_cyclic.connect(read_cyclic)
+
+ @staticmethod
+ def _spec() -> Specification:
+ description = r"""Read/compute node euler angles X component of the vector (1st component)
+by calling the readers defined by the datasources.
+"""
+ spec = Specification(
+ description=description,
+ map_input_pin_spec={
+ 0: PinSpecification(
+ name="time_scoping",
+ type_names=[
+ "scoping",
+ "int32",
+ "vector",
+ "double",
+ "field",
+ "vector",
+ ],
+ optional=True,
+ document=r"""time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.""",
+ ),
+ 1: PinSpecification(
+ name="mesh_scoping",
+ type_names=["scopings_container", "scoping"],
+ optional=True,
+ document=r"""nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains""",
+ ),
+ 2: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=True,
+ document=r"""FieldsContainer already allocated modified inplace""",
+ ),
+ 3: PinSpecification(
+ name="streams_container",
+ type_names=["streams_container"],
+ optional=True,
+ document=r"""result file container allowed to be kept open to cache data""",
+ ),
+ 4: PinSpecification(
+ name="data_sources",
+ type_names=["data_sources"],
+ optional=False,
+ document=r"""result file path container, used if no streams are set""",
+ ),
+ 5: PinSpecification(
+ name="bool_rotate_to_global",
+ type_names=["bool"],
+ optional=True,
+ document=r"""if true the field is rotated to global coordinate system (default true)""",
+ ),
+ 7: PinSpecification(
+ name="mesh",
+ type_names=["abstract_meshed_region", "meshes_container"],
+ optional=True,
+ document=r"""prevents from reading the mesh in the result files""",
+ ),
+ 14: PinSpecification(
+ name="read_cyclic",
+ type_names=["enum dataProcessing::ECyclicReading", "int32"],
+ optional=True,
+ document=r"""if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)""",
+ ),
+ },
+ map_output_pin_spec={
+ 0: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=False,
+ document=r"""""",
+ ),
+ },
+ )
+ return spec
+
+ @staticmethod
+ def default_config(server: AnyServerType = None) -> Config:
+ """Returns the default config of the operator.
+
+ This config can then be changed to the user needs and be used to
+ instantiate the operator. The Configuration allows to customize
+ how the operation will be processed by the operator.
+
+ Parameters
+ ----------
+ server:
+ Server with channel connected to the remote or local instance. When
+ ``None``, attempts to use the global server.
+
+ Returns
+ -------
+ config:
+ A new Config instance equivalent to the default config for this operator.
+ """
+ return Operator.default_config(name="EUL_NODX", server=server)
+
+ @property
+ def inputs(self) -> InputsNodeOrientationsX:
+ """Enables to connect inputs to the operator
+
+ Returns
+ --------
+ inputs:
+ An instance of InputsNodeOrientationsX.
+ """
+ return super().inputs
+
+ @property
+ def outputs(self) -> OutputsNodeOrientationsX:
+ """Enables to get outputs of the operator by evaluating it
+
+ Returns
+ --------
+ outputs:
+ An instance of OutputsNodeOrientationsX.
+ """
+ return super().outputs
+
+
+class InputsNodeOrientationsX(_Inputs):
+ """Intermediate class used to connect user inputs to
+ node_orientations_X operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_X._spec().inputs, op)
+ self._time_scoping = Input(node_orientations_X._spec().input_pin(0), 0, op, -1)
+ self._inputs.append(self._time_scoping)
+ self._mesh_scoping = Input(node_orientations_X._spec().input_pin(1), 1, op, -1)
+ self._inputs.append(self._mesh_scoping)
+ self._fields_container = Input(
+ node_orientations_X._spec().input_pin(2), 2, op, -1
+ )
+ self._inputs.append(self._fields_container)
+ self._streams_container = Input(
+ node_orientations_X._spec().input_pin(3), 3, op, -1
+ )
+ self._inputs.append(self._streams_container)
+ self._data_sources = Input(node_orientations_X._spec().input_pin(4), 4, op, -1)
+ self._inputs.append(self._data_sources)
+ self._bool_rotate_to_global = Input(
+ node_orientations_X._spec().input_pin(5), 5, op, -1
+ )
+ self._inputs.append(self._bool_rotate_to_global)
+ self._mesh = Input(node_orientations_X._spec().input_pin(7), 7, op, -1)
+ self._inputs.append(self._mesh)
+ self._read_cyclic = Input(node_orientations_X._spec().input_pin(14), 14, op, -1)
+ self._inputs.append(self._read_cyclic)
+
+ @property
+ def time_scoping(self) -> Input:
+ r"""Allows to connect time_scoping input to the operator.
+
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> # or
+ >>> op.inputs.time_scoping(my_time_scoping)
+ """
+ return self._time_scoping
+
+ @property
+ def mesh_scoping(self) -> Input:
+ r"""Allows to connect mesh_scoping input to the operator.
+
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> # or
+ >>> op.inputs.mesh_scoping(my_mesh_scoping)
+ """
+ return self._mesh_scoping
+
+ @property
+ def fields_container(self) -> Input:
+ r"""Allows to connect fields_container input to the operator.
+
+ FieldsContainer already allocated modified inplace
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> # or
+ >>> op.inputs.fields_container(my_fields_container)
+ """
+ return self._fields_container
+
+ @property
+ def streams_container(self) -> Input:
+ r"""Allows to connect streams_container input to the operator.
+
+ result file container allowed to be kept open to cache data
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> # or
+ >>> op.inputs.streams_container(my_streams_container)
+ """
+ return self._streams_container
+
+ @property
+ def data_sources(self) -> Input:
+ r"""Allows to connect data_sources input to the operator.
+
+ result file path container, used if no streams are set
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> # or
+ >>> op.inputs.data_sources(my_data_sources)
+ """
+ return self._data_sources
+
+ @property
+ def bool_rotate_to_global(self) -> Input:
+ r"""Allows to connect bool_rotate_to_global input to the operator.
+
+ if true the field is rotated to global coordinate system (default true)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> # or
+ >>> op.inputs.bool_rotate_to_global(my_bool_rotate_to_global)
+ """
+ return self._bool_rotate_to_global
+
+ @property
+ def mesh(self) -> Input:
+ r"""Allows to connect mesh input to the operator.
+
+ prevents from reading the mesh in the result files
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> # or
+ >>> op.inputs.mesh(my_mesh)
+ """
+ return self._mesh
+
+ @property
+ def read_cyclic(self) -> Input:
+ r"""Allows to connect read_cyclic input to the operator.
+
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ >>> # or
+ >>> op.inputs.read_cyclic(my_read_cyclic)
+ """
+ return self._read_cyclic
+
+
+class OutputsNodeOrientationsX(_Outputs):
+ """Intermediate class used to get outputs from
+ node_orientations_X operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> # Connect inputs : op.inputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_X._spec().outputs, op)
+ self._fields_container = Output(
+ node_orientations_X._spec().output_pin(0), 0, op
+ )
+ self._outputs.append(self._fields_container)
+
+ @property
+ def fields_container(self) -> Output:
+ r"""Allows to get fields_container output of the operator
+
+ Returns
+ -------
+ output:
+ An Output instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_X()
+ >>> # Get the output from op.outputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+ return self._fields_container
diff --git a/src/ansys/dpf/core/operators/result/node_orientations_Y.py b/src/ansys/dpf/core/operators/result/node_orientations_Y.py
new file mode 100644
index 00000000000..f2485d07199
--- /dev/null
+++ b/src/ansys/dpf/core/operators/result/node_orientations_Y.py
@@ -0,0 +1,494 @@
+"""
+node_orientations_Y
+
+Autogenerated DPF operator classes.
+"""
+
+from __future__ import annotations
+
+from warnings import warn
+from ansys.dpf.core.dpf_operator import Operator
+from ansys.dpf.core.inputs import Input, _Inputs
+from ansys.dpf.core.outputs import Output, _Outputs
+from ansys.dpf.core.operators.specification import PinSpecification, Specification
+from ansys.dpf.core.config import Config
+from ansys.dpf.core.server_types import AnyServerType
+
+
+class node_orientations_Y(Operator):
+ r"""Read/compute node euler angles Y component of the vector (2nd component)
+ by calling the readers defined by the datasources.
+
+
+ Parameters
+ ----------
+ time_scoping: Scoping or int or float or Field, optional
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+ mesh_scoping: ScopingsContainer or Scoping, optional
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+ fields_container: FieldsContainer, optional
+ FieldsContainer already allocated modified inplace
+ streams_container: StreamsContainer, optional
+ result file container allowed to be kept open to cache data
+ data_sources: DataSources
+ result file path container, used if no streams are set
+ bool_rotate_to_global: bool, optional
+ if true the field is rotated to global coordinate system (default true)
+ mesh: MeshedRegion or MeshesContainer, optional
+ prevents from reading the mesh in the result files
+ read_cyclic: int, optional
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ fields_container: FieldsContainer
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+
+ >>> # Instantiate operator
+ >>> op = dpf.operators.result.node_orientations_Y()
+
+ >>> # Make input connections
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+
+ >>> # Instantiate operator and connect inputs in one line
+ >>> op = dpf.operators.result.node_orientations_Y(
+ ... time_scoping=my_time_scoping,
+ ... mesh_scoping=my_mesh_scoping,
+ ... fields_container=my_fields_container,
+ ... streams_container=my_streams_container,
+ ... data_sources=my_data_sources,
+ ... bool_rotate_to_global=my_bool_rotate_to_global,
+ ... mesh=my_mesh,
+ ... read_cyclic=my_read_cyclic,
+ ... )
+
+ >>> # Get output data
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(
+ self,
+ time_scoping=None,
+ mesh_scoping=None,
+ fields_container=None,
+ streams_container=None,
+ data_sources=None,
+ bool_rotate_to_global=None,
+ mesh=None,
+ read_cyclic=None,
+ config=None,
+ server=None,
+ ):
+ super().__init__(name="EUL_NODY", config=config, server=server)
+ self._inputs = InputsNodeOrientationsY(self)
+ self._outputs = OutputsNodeOrientationsY(self)
+ if time_scoping is not None:
+ self.inputs.time_scoping.connect(time_scoping)
+ if mesh_scoping is not None:
+ self.inputs.mesh_scoping.connect(mesh_scoping)
+ if fields_container is not None:
+ self.inputs.fields_container.connect(fields_container)
+ if streams_container is not None:
+ self.inputs.streams_container.connect(streams_container)
+ if data_sources is not None:
+ self.inputs.data_sources.connect(data_sources)
+ if bool_rotate_to_global is not None:
+ self.inputs.bool_rotate_to_global.connect(bool_rotate_to_global)
+ if mesh is not None:
+ self.inputs.mesh.connect(mesh)
+ if read_cyclic is not None:
+ self.inputs.read_cyclic.connect(read_cyclic)
+
+ @staticmethod
+ def _spec() -> Specification:
+ description = r"""Read/compute node euler angles Y component of the vector (2nd component)
+by calling the readers defined by the datasources.
+"""
+ spec = Specification(
+ description=description,
+ map_input_pin_spec={
+ 0: PinSpecification(
+ name="time_scoping",
+ type_names=[
+ "scoping",
+ "int32",
+ "vector",
+ "double",
+ "field",
+ "vector",
+ ],
+ optional=True,
+ document=r"""time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.""",
+ ),
+ 1: PinSpecification(
+ name="mesh_scoping",
+ type_names=["scopings_container", "scoping"],
+ optional=True,
+ document=r"""nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains""",
+ ),
+ 2: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=True,
+ document=r"""FieldsContainer already allocated modified inplace""",
+ ),
+ 3: PinSpecification(
+ name="streams_container",
+ type_names=["streams_container"],
+ optional=True,
+ document=r"""result file container allowed to be kept open to cache data""",
+ ),
+ 4: PinSpecification(
+ name="data_sources",
+ type_names=["data_sources"],
+ optional=False,
+ document=r"""result file path container, used if no streams are set""",
+ ),
+ 5: PinSpecification(
+ name="bool_rotate_to_global",
+ type_names=["bool"],
+ optional=True,
+ document=r"""if true the field is rotated to global coordinate system (default true)""",
+ ),
+ 7: PinSpecification(
+ name="mesh",
+ type_names=["abstract_meshed_region", "meshes_container"],
+ optional=True,
+ document=r"""prevents from reading the mesh in the result files""",
+ ),
+ 14: PinSpecification(
+ name="read_cyclic",
+ type_names=["enum dataProcessing::ECyclicReading", "int32"],
+ optional=True,
+ document=r"""if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)""",
+ ),
+ },
+ map_output_pin_spec={
+ 0: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=False,
+ document=r"""""",
+ ),
+ },
+ )
+ return spec
+
+ @staticmethod
+ def default_config(server: AnyServerType = None) -> Config:
+ """Returns the default config of the operator.
+
+ This config can then be changed to the user needs and be used to
+ instantiate the operator. The Configuration allows to customize
+ how the operation will be processed by the operator.
+
+ Parameters
+ ----------
+ server:
+ Server with channel connected to the remote or local instance. When
+ ``None``, attempts to use the global server.
+
+ Returns
+ -------
+ config:
+ A new Config instance equivalent to the default config for this operator.
+ """
+ return Operator.default_config(name="EUL_NODY", server=server)
+
+ @property
+ def inputs(self) -> InputsNodeOrientationsY:
+ """Enables to connect inputs to the operator
+
+ Returns
+ --------
+ inputs:
+ An instance of InputsNodeOrientationsY.
+ """
+ return super().inputs
+
+ @property
+ def outputs(self) -> OutputsNodeOrientationsY:
+ """Enables to get outputs of the operator by evaluating it
+
+ Returns
+ --------
+ outputs:
+ An instance of OutputsNodeOrientationsY.
+ """
+ return super().outputs
+
+
+class InputsNodeOrientationsY(_Inputs):
+ """Intermediate class used to connect user inputs to
+ node_orientations_Y operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_Y._spec().inputs, op)
+ self._time_scoping = Input(node_orientations_Y._spec().input_pin(0), 0, op, -1)
+ self._inputs.append(self._time_scoping)
+ self._mesh_scoping = Input(node_orientations_Y._spec().input_pin(1), 1, op, -1)
+ self._inputs.append(self._mesh_scoping)
+ self._fields_container = Input(
+ node_orientations_Y._spec().input_pin(2), 2, op, -1
+ )
+ self._inputs.append(self._fields_container)
+ self._streams_container = Input(
+ node_orientations_Y._spec().input_pin(3), 3, op, -1
+ )
+ self._inputs.append(self._streams_container)
+ self._data_sources = Input(node_orientations_Y._spec().input_pin(4), 4, op, -1)
+ self._inputs.append(self._data_sources)
+ self._bool_rotate_to_global = Input(
+ node_orientations_Y._spec().input_pin(5), 5, op, -1
+ )
+ self._inputs.append(self._bool_rotate_to_global)
+ self._mesh = Input(node_orientations_Y._spec().input_pin(7), 7, op, -1)
+ self._inputs.append(self._mesh)
+ self._read_cyclic = Input(node_orientations_Y._spec().input_pin(14), 14, op, -1)
+ self._inputs.append(self._read_cyclic)
+
+ @property
+ def time_scoping(self) -> Input:
+ r"""Allows to connect time_scoping input to the operator.
+
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> # or
+ >>> op.inputs.time_scoping(my_time_scoping)
+ """
+ return self._time_scoping
+
+ @property
+ def mesh_scoping(self) -> Input:
+ r"""Allows to connect mesh_scoping input to the operator.
+
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> # or
+ >>> op.inputs.mesh_scoping(my_mesh_scoping)
+ """
+ return self._mesh_scoping
+
+ @property
+ def fields_container(self) -> Input:
+ r"""Allows to connect fields_container input to the operator.
+
+ FieldsContainer already allocated modified inplace
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> # or
+ >>> op.inputs.fields_container(my_fields_container)
+ """
+ return self._fields_container
+
+ @property
+ def streams_container(self) -> Input:
+ r"""Allows to connect streams_container input to the operator.
+
+ result file container allowed to be kept open to cache data
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> # or
+ >>> op.inputs.streams_container(my_streams_container)
+ """
+ return self._streams_container
+
+ @property
+ def data_sources(self) -> Input:
+ r"""Allows to connect data_sources input to the operator.
+
+ result file path container, used if no streams are set
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> # or
+ >>> op.inputs.data_sources(my_data_sources)
+ """
+ return self._data_sources
+
+ @property
+ def bool_rotate_to_global(self) -> Input:
+ r"""Allows to connect bool_rotate_to_global input to the operator.
+
+ if true the field is rotated to global coordinate system (default true)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> # or
+ >>> op.inputs.bool_rotate_to_global(my_bool_rotate_to_global)
+ """
+ return self._bool_rotate_to_global
+
+ @property
+ def mesh(self) -> Input:
+ r"""Allows to connect mesh input to the operator.
+
+ prevents from reading the mesh in the result files
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> # or
+ >>> op.inputs.mesh(my_mesh)
+ """
+ return self._mesh
+
+ @property
+ def read_cyclic(self) -> Input:
+ r"""Allows to connect read_cyclic input to the operator.
+
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ >>> # or
+ >>> op.inputs.read_cyclic(my_read_cyclic)
+ """
+ return self._read_cyclic
+
+
+class OutputsNodeOrientationsY(_Outputs):
+ """Intermediate class used to get outputs from
+ node_orientations_Y operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> # Connect inputs : op.inputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_Y._spec().outputs, op)
+ self._fields_container = Output(
+ node_orientations_Y._spec().output_pin(0), 0, op
+ )
+ self._outputs.append(self._fields_container)
+
+ @property
+ def fields_container(self) -> Output:
+ r"""Allows to get fields_container output of the operator
+
+ Returns
+ -------
+ output:
+ An Output instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Y()
+ >>> # Get the output from op.outputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+ return self._fields_container
diff --git a/src/ansys/dpf/core/operators/result/node_orientations_Z.py b/src/ansys/dpf/core/operators/result/node_orientations_Z.py
new file mode 100644
index 00000000000..e345523bfc3
--- /dev/null
+++ b/src/ansys/dpf/core/operators/result/node_orientations_Z.py
@@ -0,0 +1,494 @@
+"""
+node_orientations_Z
+
+Autogenerated DPF operator classes.
+"""
+
+from __future__ import annotations
+
+from warnings import warn
+from ansys.dpf.core.dpf_operator import Operator
+from ansys.dpf.core.inputs import Input, _Inputs
+from ansys.dpf.core.outputs import Output, _Outputs
+from ansys.dpf.core.operators.specification import PinSpecification, Specification
+from ansys.dpf.core.config import Config
+from ansys.dpf.core.server_types import AnyServerType
+
+
+class node_orientations_Z(Operator):
+ r"""Read/compute node euler angles Z component of the vector (3rd component)
+ by calling the readers defined by the datasources.
+
+
+ Parameters
+ ----------
+ time_scoping: Scoping or int or float or Field, optional
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+ mesh_scoping: ScopingsContainer or Scoping, optional
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+ fields_container: FieldsContainer, optional
+ FieldsContainer already allocated modified inplace
+ streams_container: StreamsContainer, optional
+ result file container allowed to be kept open to cache data
+ data_sources: DataSources
+ result file path container, used if no streams are set
+ bool_rotate_to_global: bool, optional
+ if true the field is rotated to global coordinate system (default true)
+ mesh: MeshedRegion or MeshesContainer, optional
+ prevents from reading the mesh in the result files
+ read_cyclic: int, optional
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ fields_container: FieldsContainer
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+
+ >>> # Instantiate operator
+ >>> op = dpf.operators.result.node_orientations_Z()
+
+ >>> # Make input connections
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+
+ >>> # Instantiate operator and connect inputs in one line
+ >>> op = dpf.operators.result.node_orientations_Z(
+ ... time_scoping=my_time_scoping,
+ ... mesh_scoping=my_mesh_scoping,
+ ... fields_container=my_fields_container,
+ ... streams_container=my_streams_container,
+ ... data_sources=my_data_sources,
+ ... bool_rotate_to_global=my_bool_rotate_to_global,
+ ... mesh=my_mesh,
+ ... read_cyclic=my_read_cyclic,
+ ... )
+
+ >>> # Get output data
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(
+ self,
+ time_scoping=None,
+ mesh_scoping=None,
+ fields_container=None,
+ streams_container=None,
+ data_sources=None,
+ bool_rotate_to_global=None,
+ mesh=None,
+ read_cyclic=None,
+ config=None,
+ server=None,
+ ):
+ super().__init__(name="EUL_NODZ", config=config, server=server)
+ self._inputs = InputsNodeOrientationsZ(self)
+ self._outputs = OutputsNodeOrientationsZ(self)
+ if time_scoping is not None:
+ self.inputs.time_scoping.connect(time_scoping)
+ if mesh_scoping is not None:
+ self.inputs.mesh_scoping.connect(mesh_scoping)
+ if fields_container is not None:
+ self.inputs.fields_container.connect(fields_container)
+ if streams_container is not None:
+ self.inputs.streams_container.connect(streams_container)
+ if data_sources is not None:
+ self.inputs.data_sources.connect(data_sources)
+ if bool_rotate_to_global is not None:
+ self.inputs.bool_rotate_to_global.connect(bool_rotate_to_global)
+ if mesh is not None:
+ self.inputs.mesh.connect(mesh)
+ if read_cyclic is not None:
+ self.inputs.read_cyclic.connect(read_cyclic)
+
+ @staticmethod
+ def _spec() -> Specification:
+ description = r"""Read/compute node euler angles Z component of the vector (3rd component)
+by calling the readers defined by the datasources.
+"""
+ spec = Specification(
+ description=description,
+ map_input_pin_spec={
+ 0: PinSpecification(
+ name="time_scoping",
+ type_names=[
+ "scoping",
+ "int32",
+ "vector",
+ "double",
+ "field",
+ "vector",
+ ],
+ optional=True,
+ document=r"""time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.""",
+ ),
+ 1: PinSpecification(
+ name="mesh_scoping",
+ type_names=["scopings_container", "scoping"],
+ optional=True,
+ document=r"""nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains""",
+ ),
+ 2: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=True,
+ document=r"""FieldsContainer already allocated modified inplace""",
+ ),
+ 3: PinSpecification(
+ name="streams_container",
+ type_names=["streams_container"],
+ optional=True,
+ document=r"""result file container allowed to be kept open to cache data""",
+ ),
+ 4: PinSpecification(
+ name="data_sources",
+ type_names=["data_sources"],
+ optional=False,
+ document=r"""result file path container, used if no streams are set""",
+ ),
+ 5: PinSpecification(
+ name="bool_rotate_to_global",
+ type_names=["bool"],
+ optional=True,
+ document=r"""if true the field is rotated to global coordinate system (default true)""",
+ ),
+ 7: PinSpecification(
+ name="mesh",
+ type_names=["abstract_meshed_region", "meshes_container"],
+ optional=True,
+ document=r"""prevents from reading the mesh in the result files""",
+ ),
+ 14: PinSpecification(
+ name="read_cyclic",
+ type_names=["enum dataProcessing::ECyclicReading", "int32"],
+ optional=True,
+ document=r"""if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)""",
+ ),
+ },
+ map_output_pin_spec={
+ 0: PinSpecification(
+ name="fields_container",
+ type_names=["fields_container"],
+ optional=False,
+ document=r"""""",
+ ),
+ },
+ )
+ return spec
+
+ @staticmethod
+ def default_config(server: AnyServerType = None) -> Config:
+ """Returns the default config of the operator.
+
+ This config can then be changed to the user needs and be used to
+ instantiate the operator. The Configuration allows to customize
+ how the operation will be processed by the operator.
+
+ Parameters
+ ----------
+ server:
+ Server with channel connected to the remote or local instance. When
+ ``None``, attempts to use the global server.
+
+ Returns
+ -------
+ config:
+ A new Config instance equivalent to the default config for this operator.
+ """
+ return Operator.default_config(name="EUL_NODZ", server=server)
+
+ @property
+ def inputs(self) -> InputsNodeOrientationsZ:
+ """Enables to connect inputs to the operator
+
+ Returns
+ --------
+ inputs:
+ An instance of InputsNodeOrientationsZ.
+ """
+ return super().inputs
+
+ @property
+ def outputs(self) -> OutputsNodeOrientationsZ:
+ """Enables to get outputs of the operator by evaluating it
+
+ Returns
+ --------
+ outputs:
+ An instance of OutputsNodeOrientationsZ.
+ """
+ return super().outputs
+
+
+class InputsNodeOrientationsZ(_Inputs):
+ """Intermediate class used to connect user inputs to
+ node_orientations_Z operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> my_time_scoping = dpf.Scoping()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> my_mesh_scoping = dpf.ScopingsContainer()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> my_fields_container = dpf.FieldsContainer()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> my_streams_container = dpf.StreamsContainer()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> my_data_sources = dpf.DataSources()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> my_bool_rotate_to_global = bool()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> my_mesh = dpf.MeshedRegion()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> my_read_cyclic = int()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_Z._spec().inputs, op)
+ self._time_scoping = Input(node_orientations_Z._spec().input_pin(0), 0, op, -1)
+ self._inputs.append(self._time_scoping)
+ self._mesh_scoping = Input(node_orientations_Z._spec().input_pin(1), 1, op, -1)
+ self._inputs.append(self._mesh_scoping)
+ self._fields_container = Input(
+ node_orientations_Z._spec().input_pin(2), 2, op, -1
+ )
+ self._inputs.append(self._fields_container)
+ self._streams_container = Input(
+ node_orientations_Z._spec().input_pin(3), 3, op, -1
+ )
+ self._inputs.append(self._streams_container)
+ self._data_sources = Input(node_orientations_Z._spec().input_pin(4), 4, op, -1)
+ self._inputs.append(self._data_sources)
+ self._bool_rotate_to_global = Input(
+ node_orientations_Z._spec().input_pin(5), 5, op, -1
+ )
+ self._inputs.append(self._bool_rotate_to_global)
+ self._mesh = Input(node_orientations_Z._spec().input_pin(7), 7, op, -1)
+ self._inputs.append(self._mesh)
+ self._read_cyclic = Input(node_orientations_Z._spec().input_pin(14), 14, op, -1)
+ self._inputs.append(self._read_cyclic)
+
+ @property
+ def time_scoping(self) -> Input:
+ r"""Allows to connect time_scoping input to the operator.
+
+ time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.time_scoping.connect(my_time_scoping)
+ >>> # or
+ >>> op.inputs.time_scoping(my_time_scoping)
+ """
+ return self._time_scoping
+
+ @property
+ def mesh_scoping(self) -> Input:
+ r"""Allows to connect mesh_scoping input to the operator.
+
+ nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.mesh_scoping.connect(my_mesh_scoping)
+ >>> # or
+ >>> op.inputs.mesh_scoping(my_mesh_scoping)
+ """
+ return self._mesh_scoping
+
+ @property
+ def fields_container(self) -> Input:
+ r"""Allows to connect fields_container input to the operator.
+
+ FieldsContainer already allocated modified inplace
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.fields_container.connect(my_fields_container)
+ >>> # or
+ >>> op.inputs.fields_container(my_fields_container)
+ """
+ return self._fields_container
+
+ @property
+ def streams_container(self) -> Input:
+ r"""Allows to connect streams_container input to the operator.
+
+ result file container allowed to be kept open to cache data
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.streams_container.connect(my_streams_container)
+ >>> # or
+ >>> op.inputs.streams_container(my_streams_container)
+ """
+ return self._streams_container
+
+ @property
+ def data_sources(self) -> Input:
+ r"""Allows to connect data_sources input to the operator.
+
+ result file path container, used if no streams are set
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.data_sources.connect(my_data_sources)
+ >>> # or
+ >>> op.inputs.data_sources(my_data_sources)
+ """
+ return self._data_sources
+
+ @property
+ def bool_rotate_to_global(self) -> Input:
+ r"""Allows to connect bool_rotate_to_global input to the operator.
+
+ if true the field is rotated to global coordinate system (default true)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.bool_rotate_to_global.connect(my_bool_rotate_to_global)
+ >>> # or
+ >>> op.inputs.bool_rotate_to_global(my_bool_rotate_to_global)
+ """
+ return self._bool_rotate_to_global
+
+ @property
+ def mesh(self) -> Input:
+ r"""Allows to connect mesh input to the operator.
+
+ prevents from reading the mesh in the result files
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.mesh.connect(my_mesh)
+ >>> # or
+ >>> op.inputs.mesh(my_mesh)
+ """
+ return self._mesh
+
+ @property
+ def read_cyclic(self) -> Input:
+ r"""Allows to connect read_cyclic input to the operator.
+
+ if 0 cyclic symmetry is ignored, if 1 cyclic sector is read, if 2 cyclic expansion is done, if 3 cyclic expansion is done and stages are merged (default is 1)
+
+ Returns
+ -------
+ input:
+ An Input instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> op.inputs.read_cyclic.connect(my_read_cyclic)
+ >>> # or
+ >>> op.inputs.read_cyclic(my_read_cyclic)
+ """
+ return self._read_cyclic
+
+
+class OutputsNodeOrientationsZ(_Outputs):
+ """Intermediate class used to get outputs from
+ node_orientations_Z operator.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> # Connect inputs : op.inputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+
+ def __init__(self, op: Operator):
+ super().__init__(node_orientations_Z._spec().outputs, op)
+ self._fields_container = Output(
+ node_orientations_Z._spec().output_pin(0), 0, op
+ )
+ self._outputs.append(self._fields_container)
+
+ @property
+ def fields_container(self) -> Output:
+ r"""Allows to get fields_container output of the operator
+
+ Returns
+ -------
+ output:
+ An Output instance for this pin.
+
+ Examples
+ --------
+ >>> from ansys.dpf import core as dpf
+ >>> op = dpf.operators.result.node_orientations_Z()
+ >>> # Get the output from op.outputs. ...
+ >>> result_fields_container = op.outputs.fields_container()
+ """
+ return self._fields_container
diff --git a/src/ansys/dpf/gatebin/Ans.Dpf.GrpcClient.dll b/src/ansys/dpf/gatebin/Ans.Dpf.GrpcClient.dll
index 0d4a92e04a10f6f3c46dcc259e4ac29bcb22c7e1..57677223fd73a8e0de88347fcedbc2eca9cf3e78 100644
GIT binary patch
delta 3981188
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