Explore a mesh#

MAPDL LSDYNA Fluent CFX

This tutorial explains how to access a mesh data and metadata so it can be manipulated.

Download tutorial as Python script Download tutorial as Jupyter notebook

Define the mesh#

The mesh object in DPF is a |MeshedRegion|. You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. For more information check the Create a mesh from scratch and Get a mesh from a result file tutorials.

For this tutorial, we get a |MeshedRegion| from a result file. You can use one available in the |Examples| module. For more information see the Get a mesh from a result file tutorial.

# Import the ``ansys.dpf.core`` module
from ansys.dpf import core as dpf
# Import the examples module
from ansys.dpf.core import examples
# Import the operators module
from ansys.dpf.core import operators as ops

# Define the result file path
result_file_path_1 = examples.find_static_rst()
# Create the model
model_1 = dpf.Model(data_sources=result_file_path_1)
# Get the mesh
meshed_region_1 = model_1.metadata.meshed_region
# Import the ``ansys.dpf.core`` module
from ansys.dpf import core as dpf
# Import the examples module
from ansys.dpf.core import examples
# Import the operators module
from ansys.dpf.core import operators as ops

# Define the result file path
result_file_path_2 = examples.download_d3plot_beam()
# Create the DataSources object
ds_2 = dpf.DataSources()
ds_2.set_result_file_path(filepath=result_file_path_2[0], key="d3plot")
ds_2.add_file_path(filepath=result_file_path_2[3], key="actunits")
# Create the model
model_2 = dpf.Model(data_sources=ds_2)
# Get the mesh
meshed_region_2 = model_2.metadata.meshed_region
# Import the ``ansys.dpf.core`` module
from ansys.dpf import core as dpf
# Import the examples module
from ansys.dpf.core import examples
# Import the operators module
from ansys.dpf.core import operators as ops

# Define the result file path
result_file_path_3 = examples.download_fluent_axial_comp()["flprj"]
# Create the model
model_3 = dpf.Model(data_sources=result_file_path_3)
# Get the mesh
meshed_region_3 = model_3.metadata.meshed_region
# Import the ``ansys.dpf.core`` module
from ansys.dpf import core as dpf
# Import the examples module
from ansys.dpf.core import examples
# Import the operators module
from ansys.dpf.core import operators as ops

# Define the result file path
result_file_path_4 = examples.download_cfx_mixing_elbow()
# Create the model
model_4 = dpf.Model(data_sources=result_file_path_4)
# Get the mesh
meshed_region_4 = model_4.metadata.meshed_region

Explore the mesh data#

You can access the mesh data by manipulating the |MeshedRegion| object methods. The mesh data includes :

  • Unit

  • Nodes, elements and faces

  • Named selections

The :method:`MeshedRegion.nodes <ansys.dpf.core.meshed_region.MeshedRegion.nodes>`, :method:`MeshedRegion.elements <ansys.dpf.core.meshed_region.MeshedRegion.elements>`, :method:`MeshedRegion.faces <ansys.dpf.core.meshed_region.MeshedRegion.faces>` and :method:`MeshedRegion.named_selections <ansys.dpf.core.meshed_region.MeshedRegion.named_selections>` properties give corresponding DPF objects: |Nodes|, |Elements|, |Faces| and |Scoping|.

For more information of other types of data you can get from a mesh, see the API reference of the |MeshedRegion| class.

In this tutorial, we explore the data about the mesh nodes.

# Get the mesh nodes
nodes_1 = meshed_region_1.nodes

# Print the object type
print("Object type: ",type(nodes_1),'\n')

# Print the nodes
print("Nodes: ", nodes_1)
Object type:  <class 'ansys.dpf.core.nodes.Nodes'> 

Nodes:  DPF Node collection with 81 nodes

# Get the mesh nodes
nodes_2 = meshed_region_2.nodes

# Print the object type
print("Object type: ",type(nodes_2),'\n')

# Print the nodes
print("Nodes: ", nodes_2)
Object type:  <class 'ansys.dpf.core.nodes.Nodes'> 

Nodes:  DPF Node collection with 1940 nodes

# Get the mesh nodes
nodes_3 = meshed_region_3.nodes

# Print the object type
print("Object type: ",type(nodes_3),'\n')

# Print the nodes
print("Nodes: ", nodes_3)
Object type:  <class 'ansys.dpf.core.nodes.Nodes'> 

Nodes:  DPF Node collection with 16660 nodes

# Get the mesh nodes
nodes_4 = meshed_region_4.nodes

# Print the object type
print("Object type: ",type(nodes_4),'\n')

# Print the nodes
print("Nodes: ", nodes_4)
Object type:  <class 'ansys.dpf.core.nodes.Nodes'> 

Nodes:  DPF Node collection with 6219 nodes

You can also get the bounding box of the mesh using the :method:`MeshedRegion.bounding_box <ansys.dpf.core.meshed_region.MeshedRegion.bounding_box>` property.

The bounding box gives the minimum and maximum coordinates of the mesh in the X, Y and Z directions.

It is a 6D |Field| with overall location and 1 entity, containing the bounding box data in the format [x_min, y_min, z_min, x_max, y_max, z_max].

# Get the mesh bounding box
bbox_1 = meshed_region_1.bounding_box

# Print the bounding box
print("Bounding box: ", bbox_1)
Bounding box:  DPF bounding_box Field
  Location: overall
  Unit: m
  1 entities 
  Data: 6 components and 1 elementary data 

  IDs                   data(m)
  ------------          ----------
  0                     0.000000e+00   3.000000e-02   0.000000e+00   3.000000e-02   6.000000e-02   3.000000e-02   
                        


# Get the mesh bounding box
bbox_2 = meshed_region_2.bounding_box

# Print the bounding box
print("Bounding box: ", bbox_2)
Bounding box:  DPF bounding_box Field
  Location: overall
  Unit: mm
  1 entities 
  Data: 6 components and 1 elementary data 

  IDs                   data(mm)
  ------------          ----------
  0                     -1.500000e+02  -1.500000e+02  0.000000e+00   1.500000e+02   1.500000e+02   1.010000e+02   
                        


# Get the mesh bounding box
bbox_3 = meshed_region_3.bounding_box

# Print the bounding box
print("Bounding box: ", bbox_3)
Bounding box:  DPF bounding_box Field
  Location: overall
  Unit: m
  1 entities 
  Data: 6 components and 1 elementary data 

  IDs                   data(m)
  ------------          ----------
  0                     -5.146646e-02  -1.041350e-01  -6.350001e-02  2.717609e-02   -5.315754e-02  1.847001e-02   
                        


# Get the mesh bounding box
bbox_4 = meshed_region_4.bounding_box

# Print the bounding box
print("Bounding box: ", bbox_4)
Bounding box:  DPF bounding_box Field
  Location: overall
  Unit: m
  1 entities 
  Data: 6 components and 1 elementary data 

  IDs                   data(m)
  ------------          ----------
  0                     -5.000000e-01  -1.000000e+00  0.000000e+00   5.000000e-01   6.000000e+00   6.500000e+00   
                        


Explore the mesh metadata#

You can access the mesh metadata by manipulating the |MeshedRegion| object properties.

The mesh metadata information describes the mesh composition.

You can access which metadata information is available for a given result file.

# Get the available properties
available_props_1 = meshed_region_1.available_property_fields

# Print the available properties
print("Available properties: ", available_props_1)
Available properties:  ['connectivity', 'elprops', 'eltype', 'apdl_element_type', 'section', 'mat']
# Get the available properties
available_props_2 = meshed_region_2.available_property_fields

# Print the available properties
print("Available properties: ", available_props_2)
Available properties:  ['connectivity', 'eltype', 'mat']
# Get the available properties
available_props_3 = meshed_region_3.available_property_fields

# Print the available properties
print("Available properties: ", available_props_3)
Available properties:  ['connectivity', 'eltype', 'faces_type', 'faces_nodes_connectivity', 'elements_faces_connectivity', 'elements_faces_reversed']
# Get the available properties
available_props_4 = meshed_region_4.available_property_fields

# Print the available properties
print("Available properties: ", available_props_4)
Available properties:  ['connectivity', 'eltype']

You can also chose which property you want to extract.

When extracting the properties you get a |PropertyField| with that information. Their data is mapped to the entity they are defined at.

Here, we extract the element types for the mesh elements.

The element type is given as a number. See the list of available element types in a DPF mesh to find the corresponding element name.

# Get the element types on the mesh
el_types_1 = meshed_region_1.elements.element_types_field

# Print the element types by element
print(el_types_1)
DPF Property Field
  8 entities 
  Data: 1 components and 8 elementary data 

  Elemental
  IDs                   data
  ------------          ----------
  5                     1              
                        
  6                     1              
                        
  1                     1              
                        
  ...


# Get the element types on the mesh
el_types_2 = meshed_region_2.property_field(property_name="eltype")

# Print the element types by element
print(el_types_2)
DPF Property Field
  2056 entities 
  Data: 1 components and 2056 elementary data 

  Elemental
  IDs                   data
  ------------          ----------
  257                   11             
                        
  258                   11             
                        
  259                   11             
                        
  ...


# Get the element types on the mesh
el_types_3 = meshed_region_3.property_field(property_name="eltype")

# Print the element types by element
print(el_types_3)
DPF Property Field
  13856 entities 
  Data: 1 components and 13856 elementary data 

  Elemental
  IDs                   data
  ------------          ----------
  1                     11             
                        
  2                     11             
                        
  3                     11             
                        
  ...


# Get the element types on the mesh
el_types_4 = meshed_region_4.property_field(property_name="eltype")

# Print the element types by element
print(el_types_4)
DPF Property Field
  15695 entities 
  Data: 1 components and 15695 elementary data 

  Elemental
  IDs                   data
  ------------          ----------
  1                     10             
                        
  2                     10             
                        
  3                     10             
                        
  ...


For more information about how to explore a mesh metadata before extracting it from a result file, see the Explore a mesh metadata tutorial.