FieldsContainer#

Contains classes associated with the DPF FieldsContainer.

class ansys.dpf.core.fields_container.FieldsContainer(fields_container=None, server=None)#

Represents a fields container, which contains fields belonging to a common result.

A fields container is a set of fields ordered by labels and IDs. Each field of the fields container has an ID for each label defining the given fields container. These IDs allow splitting the fields on any criteria.

The most common fields container has the label "time" with IDs corresponding to time sets. The label "complex", which is used in a harmonic analysis for example, allows real parts (id=0) to be separated from imaginary parts (id=1).

Parameters
  • fields_container (ansys.grpc.dpf.collection_pb2.Collection or FieldsContainer, optional) – Fields container created from either a collection message or by copying an existing fields container. The default is “None``.

  • server (ansys.dpf.core.server, optional) – Server with the channel connected to the remote or local instance. The default is None, in which case an attempt is made to use the global server.

Examples

Extract a displacement fields container from a transient result file.

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> disp = model.results.displacement()
>>> disp.inputs.time_scoping.connect([1,5])
>>> fields_container = disp.outputs.fields_container()
>>> field_set_5 =fields_container.get_fields_by_time_complex_ids(5)
>>> #print(fields_container)

Create a fields container from scratch.

>>> from ansys.dpf import core as dpf
>>> fc= dpf.FieldsContainer()
>>> fc.labels =['time','complex']
>>> for i in range(0,20): #real fields
...     mscop = {"time":i+1,"complex":0}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
>>> for i in range(0,20): #imaginary fields
...     mscop = {"time":i+1,"complex":1}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
get_fields_by_time_complex_ids(timeid=None, complexid=None)#

Retrieve fields at a requested time ID or complex ID.

Parameters
  • timeid (int, optional) – Time ID or frequency ID, which is the one-based index of the result set.

  • complexid (int, optional) – Complex ID, where 1 is for imaginary and 0 is for real.

Returns

fields – Fields corresponding to the request.

Return type

list[Field]

Examples

Extract the fifth time set of a transient analysis.

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> len(model.metadata.time_freq_support.time_frequencies)
35
>>> disp = model.results.displacement()
>>> disp.inputs.time_scoping.connect([1,5])
>>> fields_container = disp.outputs.fields_container()
>>> field_set_5 =fields_container.get_fields_by_time_complex_ids(5)
get_field_by_time_complex_ids(timeid=None, complexid=None)#

Retrieve a field at a requested time ID or complex ID.

An exception is raised if the number of fields matching the request is greater than one.

Parameters
  • timeid (int, optional) – Time ID or frequency ID, which is the one-based index of the result set.

  • complexid (int, optional) – Complex ID, where 1 is for imaginary and 0 is for real.

Returns

fields – Field corresponding to the request

Return type

Field

Examples

Extract the fifth time set of a transient analysis.

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> len(model.metadata.time_freq_support.time_frequencies)
35
>>> disp = model.results.displacement()
>>> disp.inputs.time_scoping.connect([1,5])
>>> fields_container = disp.outputs.fields_container()
>>> field_set_5 =fields_container.get_fields_by_time_complex_ids(5)
get_fields(label_space)#

Retrieve the fields at a requested index or label space.

Parameters

label_space (dict[str,int]) – Scoping of the requested fields. For example, {"time": 1, "complex": 0}.

Returns

fields – Fields corresponding to the request.

Return type

list[Field]

Examples

>>> from ansys.dpf import core as dpf
>>> fc= dpf.FieldsContainer()
>>> fc.labels =['time','complex']
>>> #real fields
>>> for i in range(0,20):
...     mscop = {"time":i+1,"complex":0}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
>>> #imaginary fields
>>> for i in range(0,20):
...     mscop = {"time":i+1,"complex":1}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
>>> fields = fc.get_fields({"time":2})
>>> # imaginary and real fields of time 2
>>> len(fields)
2
get_field(label_space_or_index)#

Retrieves the field at a requested index or label space.

An exception is raised if the number of fields matching the request is greater than one.

Parameters

label_space_or_index (dict[str,int], int) – Scoping of the requested fields. For example, {"time": 1, "complex": 0} or the index of the field.

Returns

field – Field corresponding to the request.

Return type

Field

Examples

>>> from ansys.dpf import core as dpf
>>> fc = dpf.fields_container_factory.over_time_freq_fields_container(
...     [dpf.Field(nentities=10)]
... )
>>> field = fc.get_field({"time":1})
get_field_by_time_id(timeid=None)#

Retrieves the complex field at a requested time.

Parameters

timeid (int, optional) – Time ID, which is the one-based index of the result set.

Returns

fields – Fields corresponding to the request.

Return type

Field

get_imaginary_fields(timeid=None)#

Retrieve the complex fields at a requested time.

Parameters

timeid (int, optional) – Time ID, which is the one-based index of the result set.

Returns

fields – Fields corresponding to the request.

Return type

list[Field]

get_imaginary_field(timeid=None)#

Retrieve the complex field at a requested time.

Parameters

timeid (int, optional) – Time ID, which is the one-based index of the result set.

Returns

fields – Field corresponding to the request.

Return type

Field

add_field(label_space, field)#

Add or update a field at a requested label space.

Parameters
  • label_space (dict[str,int]) – Label space of the requested field. For example, {“time”:1, “complex”:0}.

  • field (Field) – DPF field to add or update.

Examples

>>> from ansys.dpf import core as dpf
>>> fc= dpf.FieldsContainer()
>>> fc.labels =['time','complex']
>>> for i in range(0,20): #real fields
...     mscop = {"time":i+1,"complex":0}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
>>> for i in range(0,20): #imaginary fields
...     mscop = {"time":i+1,"complex":1}
...     fc.add_field(mscop,dpf.Field(nentities=i+10))
add_field_by_time_id(field, timeid=1)#

Add or update a field at a requested time ID.

fieldField

DPF field to add or update.

timeid: int, optional

Time ID for the requested time set. The default is 1.

add_imaginary_field(field, timeid=1)#

Add or update an imaginary field at a requested time ID.

Parameters
  • field (Field) – DPF field to add or update.

  • timeid (int, optional) – Time ID for the requested time set. The default is 1.

select_component(index)#

Select fields containing only the component index.

Fields can be selected only by component index as multiple fields may contain a different number of components.

Parameters

index (int) – Index of the component.

Returns

fields – Fields container with one component selected in each field.

Return type

FieldsContainer

Examples

Select using a component index.

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> disp = model.results.displacement()
>>> disp.inputs.time_scoping.connect([1,5])
>>> fields_container = disp.outputs.fields_container()
>>> disp_x_fields = fields_container.select_component(0)
>>> my_field = disp_x_fields[0]
property time_freq_support#

Time frequency support.

deep_copy(server=None)#

Create a deep copy of the fields container’s data (and its fields) on a given server.

This method is useful for passing data from one server instance to another.

Parameters

server (ansys.dpf.core.server, optional) – Server with the channel connected to the remote or local instance. The default is None, in which case an attempt is made to use the global server.

Returns

fields_container_copy

Return type

FieldsContainer

Examples

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> disp = model.results.displacement()
>>> disp.inputs.time_scoping.connect([1,5])
>>> fields_container = disp.outputs.fields_container()
>>> other_server = dpf.start_local_server(as_global=False)
>>> deep_copy = fields_container.deep_copy(server=other_server)
get_time_scoping()#

Retrieves the time scoping containing the time sets.

Returns

scoping – Scoping containing the time set IDs available in the fields container.

Return type

Scoping

add_label(label, default_value=None)#

Add the requested label to scope the collection.

Parameters
  • label (str) – Labels to scope the entries to. For example, "time".

  • default_value (int, optional) – Default value for existing fields in the collection. The default is None.

Examples

>>> from ansys.dpf import core as dpf
>>> coll = dpf.Collection(dpf.types.field)
>>> coll.add_label('time')
get_available_ids_for_label(label='time')#

Retrieve the IDs assigned to an input label.

Parameters

label (str) – Name of the input label. The default is "time".

Returns

ids – List of IDs assigned to the input label.

Return type

list[int]

get_label_scoping(label='time')#

Retrieve the scoping for an input label.

This method allows you to retrieve a list of IDs for a given input label in the collection. For example, if the label el_type exists in the collection, you can use the get_lable_scoping method to retrieve a list of IDS with this label. You can then use these IDs to request a given entity inside the collection.

Parameters

label (str) – Name of the input label.

Returns

scoping – IDs scopped to the input label.

Return type

Scoping

get_label_space(index)#

Retrieve the label space of an entry at a requested index.

Parameters

index (int) – Index of the entry.

Returns

label_space – Scoping of the requested entry. For example, {"time": 1, "complex": 0}.

Return type

dict(str:int)

has_label(label)#

Check if a collection has a specified label.

Parameters

label (str) – Label to search for. For example, "time".

Returns

True when successful, False when failed.

Return type

bool

Examples

>>> from ansys.dpf import core as dpf
>>> coll = dpf.Collection(dpf.types.field)
>>> coll.add_label('time')
>>> coll.has_label('time')
True
>>> coll.has_label('complex')
False
static integral_collection(inpt, server: Optional[ansys.dpf.core.server.DpfServer] = None)#

Creates a collection of integral type with a list.

The collection of integral is the equivalent of an array of data sent server side. It can be used to efficiently stream large data to the server.

Parameters

inpt (list[float], list[int], numpy.array) – list to transfer server side

Return type

Collection

Notes

Used by default by the 'Operator' and the``’Workflow’`` when a list is connected or returned.

property labels#

Retrieve labels scoping the collection.

Returns

labels – List of labels that entries are scoped to. For example, ["time", "complex"].

Return type

list[str]

set_labels(labels)#

Set labels for scoping the collection.

Parameters

labels (list[str], optional) – Labels to scope entries to. For example, ["time", "complex"].