Field

class ansys.dpf.core.field.Field(nentities=0, nature=<natures.vector: 1>, location='Nodal', field=None, server=None)

Class representing the main simulation data container. It can be evaluated data from a ansys.dpf.core.Operator or created (by a factory and directly by an instance of this class). Field’s data is always associated to its scoping (entities associated to each value) and support (subset of the model where is the data), making the field a self-describing piece of data.

Parameters
  • nentities (int) – Number of entities reserved

  • nature (natures, optional) – Nature of the field.

  • location (str, optional) –

    Location of the field. For example:

    • "Nodal"

    • "Elemental"

    • "ElementalNodal"

  • field (ansys.grpc.dpf.field_pb2.Field, optional) – Field message generated from a grpc stub.

  • server (server.DPFServer, optional) – Server with channel connected to the remote or local instance. When None, attempts to use the the global server.

Examples

>>> # 1. Create a field from scratch
>>> from ansys.dpf.core import fields_factory
>>> from ansys.dpf.core import locations
>>> from ansys.dpf import core as dpf
>>> field_with_classic_api = dpf.Field()
>>> field_with_classic_api.location = locations.nodal
>>> field_with_factory = fields_factory.create_scalar_field(10)
>>> # 2. Extract a displacement field 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()
>>> fields_container = disp.outputs.fields_container()
>>> field = fields_container[0]
>>> len(field)
11460
>>> field.component_count
3
>>> field.elementary_data_count
3820
>>> # 3. Create a displacement field
>>> from ansys.dpf import core as dpf
>>> import numpy as np
>>> my_field = dpf.Field(10, dpf.natures.vector,dpf.locations.nodal)
>>> my_field.data = np.zeros(30)
>>> my_field.scoping.ids = range(1,11)
>>> # 4. Set data
>>> 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()
>>> fields_container = disp.outputs.fields_container()
>>> field = fields_container[0]
>>> field.data[2]
array([-0.00672665, -0.03213735,  0.00016716])
as_local_field()

Creates a deep copy of the field locally so that the user can access and modify it locally without any request sent to the server. This should be used in a with statement, so that the local field is released and the data is sent to the server in one shot. If it’s not used in a with statement, the method release_data() should be used to actually update the field.

Warning

If this as_local_field method is not used as a context manager in a with statement or if the method release_data() is not called, the data will not be actually updated.

Returns

local_field

Return type

Field

Examples

>>> from ansys.dpf import core as dpf
>>> num_entities = 3
>>> field_to_local = dpf.fields_factory.create_3d_vector_field(num_entities, location=dpf.locations.elemental_nodal)
>>> with field_to_local.as_local_field() as f:
...     for i in range(1,num_entities+1):
...         f.append([[0.1*i,0.2*i, 0.3*i],[0.1*i,0.2*i, 0.3*i]],i)
...         f.get_entity_data(i-1),[[0.1*i,0.2*i, 0.3*i],[0.1*i,0.2*i, 0.3*i]]
(array([[0.1, 0.2, 0.3],
       [0.1, 0.2, 0.3]]), [[0.1, 0.2, 0.3], [0.1, 0.2, 0.3]])
(array([[0.2, 0.4, 0.6],
       [0.2, 0.4, 0.6]]), [[0.2, 0.4, 0.6], [0.2, 0.4, 0.6]])
(array([[0.3, 0.6, 0.9],
       [0.3, 0.6, 0.9]]), [[0.30000000000000004, 0.6000000000000001, 0.8999999999999999], [0.30000000000000004, 0.6000000000000001, 0.8999999999999999]])
property location

Return the field location.

Returns

location – Location string. Either 'Nodal', 'Elemental', or 'ElementalNodal'.

Return type

str

Examples

Location for a stress field evaluated at nodes

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> model = dpf.Model(examples.download_transient_result())
>>> s_op = model.results.stress()
>>> s_fc = s_op.outputs.fields_container()
>>> field = s_fc[0]
>>> field.location
'ElementalNodal'
property shell_layers

Return the field’s shell layers order (or lack of shell layers) that defines how the field’s data is ordered.

Returns

Enum

Return type

shell_layers

to_nodal()

Convert this field to one with a Nodal location.

Only valid when this field’s location is ElementalNodal or Elemental.

Returns

nodal_field – with location=='Nodal'.

Return type

Field

plot(notebook=None, shell_layers=None)

Plot the field/fields container on mesh support if exists.

Warning

This is primarily added out of convenience as plotting directly from the field can be slower than extracting the meshed region and plotting the field on top of that. It is more efficient to plot with:

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> mesh = model.metadata.meshed_region
>>> disp = model.results.displacement()
>>> fields_container = disp.outputs.fields_container()
>>> field = fields_container[0]
>>> mesh.plot(field)
[(1.675707321585373, 1.675707321585373, 2.425707321585373),
 (0.0, 0.0, 0.75),
 (0.0, 0.0, 1.0)]
Parameters
  • notebook (bool, optional) – Bool, that specifies if the plotting is in the notebook as a static image or or as a dynamic plot outside of the notebook.

  • shell_layers (shell_layers, optional) – Enum used to set the shell layers if the model to plot contains shell elements.

resize(nentities, datasize)

Allocate memory.

Parameters
  • nentities (int) – num ids in the scoping

  • datasize (int) – data vector size

property unit

Units of the field

Returns

unit

Return type

str

Examples

Units of a displacement field

>>> from ansys.dpf import core as dpf
>>> my_field = dpf.Field(10, dpf.natures.vector,dpf.locations.nodal)
>>> my_field.unit = "m"
>>> my_field.unit
'm'
property dimensionnality

The Dimensionnality represents the shape of an elementary data contains in the Field.

Returns

dimensionnality – nature and size of the elementary data

Return type

Dimensionnality

property field_definition

its location, unit, dimensionnality, shell layers…

Type

The field definition defines what is the field

property time_freq_support

Time_freq_support of the associated field.

Returns

time_freq_support – Describe the time frequency support of the field.

Return type

TimeFreqSupport

property meshed_region

Meshed_region of the associated field.

Returns

meshed_region – Describe the mesh support of the field.

Return type

MeshedRegion

append(data, scopingid)

add an entity data to the existing data

Parameters
  • data (list of int, double or array) –

  • scopingid (int) – id of the scoping

Examples

>>> from ansys.dpf.core import fields_factory
>>> field = fields_factory.create_3d_vector_field(2)
>>> field.append([1.,2.,3.],1)
>>> field.append([1.,2.,3.],2)
>>> field.data
array([[1., 2., 3.],
       [1., 2., 3.]])
>>> field.scoping.ids
[1, 2]
property component_count

Number of components in an elementary data of the Field

Returns

ncomp – Number of component of the each elementary data

Return type

int

property data

Access the data of this field.

Notes

Print a progress bar

Returns

data – Data of this field.

Return type

numpy.ndarray

property data_as_list

The data of this field in a python list

Returns

data – Data of this field.

Return type

list

Notes

Print a progress bar

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()
>>> fields_container = disp.outputs.fields_container()
>>> field = fields_container[0]
>>> # field.data_as_list
property elementary_data_count

Number of elementary data in the field

property elementary_data_shape

Numpy-like shape of the field

get_entity_data(index)

Returns the elementary data of the scoping’s index in parameter

Returns

data

Return type

numpy.array

Examples

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> stress_op = model.results.stress()
>>> fields_container = stress_op.outputs.fields_container()
>>> fields_container[0].get_entity_data(0)
array([[-3.27795062e+05,  1.36012200e+06,  1.49090608e+08,
        -4.88688900e+06,  1.43038560e+07,  1.65455040e+07],
       [-4.63817550e+06,  1.29312225e+06,  1.20411832e+08,
        -6.06617800e+06,  2.34829700e+07,  1.77231120e+07],
       [-2.35684860e+07, -3.53474400e+07,  2.01501168e+08,
        -5.23361700e+06, -2.88789280e+07, -6.16478200e+06],
       [-3.92756960e+07, -2.72369280e+07,  1.81454016e+08,
        -3.75441450e+06, -3.62480300e+06, -3.26075620e+07],
       [ 1.63554530e+07,  2.83190520e+07,  1.05084256e+08,
        -1.30219020e+07,  5.19906719e+05,  8.82430200e+06],
       [ 1.80755620e+07,  5.25578750e+06,  7.76211600e+07,
        -7.53063750e+06,  2.44717000e+06,  2.92675125e+06],
       [ 9.25567760e+07,  8.15244320e+07,  2.77157632e+08,
        -1.48489875e+06,  5.89250600e+07,  2.05608920e+07],
       [ 6.70443680e+07,  8.70343440e+07,  2.73050464e+08,
        -2.48670150e+06,  1.52268930e+07,  6.09583280e+07]])
get_entity_data_by_id(id)

Return the data of the scoping’s id in parameter of the field.

Returns

data – Data based on the scoping id.

Return type

numpy.array

Examples

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> stress_op = model.results.stress()
>>> fields_container = stress_op.outputs.fields_container()
>>> fields_container[0].get_entity_data_by_id(391)
array([[-3.27795062e+05,  1.36012200e+06,  1.49090608e+08,
        -4.88688900e+06,  1.43038560e+07,  1.65455040e+07],
       [-4.63817550e+06,  1.29312225e+06,  1.20411832e+08,
        -6.06617800e+06,  2.34829700e+07,  1.77231120e+07],
       [-2.35684860e+07, -3.53474400e+07,  2.01501168e+08,
        -5.23361700e+06, -2.88789280e+07, -6.16478200e+06],
       [-3.92756960e+07, -2.72369280e+07,  1.81454016e+08,
        -3.75441450e+06, -3.62480300e+06, -3.26075620e+07],
       [ 1.63554530e+07,  2.83190520e+07,  1.05084256e+08,
        -1.30219020e+07,  5.19906719e+05,  8.82430200e+06],
       [ 1.80755620e+07,  5.25578750e+06,  7.76211600e+07,
        -7.53063750e+06,  2.44717000e+06,  2.92675125e+06],
       [ 9.25567760e+07,  8.15244320e+07,  2.77157632e+08,
        -1.48489875e+06,  5.89250600e+07,  2.05608920e+07],
       [ 6.70443680e+07,  8.70343440e+07,  2.73050464e+08,
        -2.48670150e+06,  1.52268930e+07,  6.09583280e+07]])
property scoping

The scoping allows to know where is the data. Each entity data is on a given scoping id.

Returns

scoping

Return type

Scoping

Examples

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> transient = examples.download_transient_result()
>>> model = dpf.Model(transient)
>>> stress_op = model.results.stress()
>>> fields_container = stress_op.outputs.fields_container()
>>> scoping = fields_container[0].scoping
>>> scoping.location
'Elemental'
>>> scoping.id(3)
586
>>> #The fourth elementary data of the field corresponds to
>>> #the element id number 586 in the mesh
property shape

Numpy-like shape of the field

Examples

Shape of a stress field

>>> from ansys.dpf import core as dpf
>>> from ansys.dpf.core import examples
>>> model = dpf.Model(examples.download_transient_result())
>>> s_op =model.results.stress()
>>> s_fc = s_op.outputs.fields_container()
>>> field = s_fc[0]
>>> field.shape
(5720, 6)
property size

The length of the data vector. Also equals to the number of elementary data times the number of components.

Returns

size

Return type

int

min()

Component-wise minimum over this field

Returns

min – Component-wise minimum field.

Return type

Field

max()

Component-wise maximum over this field

Returns

max – Component-wise maximum field.

Return type

Field

deep_copy(server=None)

Creates a deep copy of the field’s data on a given server. This can be useful to pass data from one server instance to another.

Parameters

server (DPFServer, optional) –

Returns

field_copy

Return type

Field

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()
>>> fields_container = disp.outputs.fields_container()
>>> field = fields_container[0]
>>> other_server = dpf.start_local_server(as_global=False)
>>> deep_copy = field.deep_copy(server=other_server)