Reading a VMAP file¶
The most common use case is to get the element nodal stress tensor for
a certain geometry 1
and a certain load state STATE-2
out of the
vmap file. The vmap interface provides you the nodal geometry (node
coordinates), the mesh connectivity index and the field variables.
You can retrieve a DataFrame of the mesh with the desired variables in just one statement.
>>> (pylife.vmap.VMAPImport('demos/plate_with_hole.vmap')
.make_mesh('1', 'STATE-2')
.join_coordinates()
.join_variable('STRESS_CAUCHY')
.join_variable('E')
.to_frame())
x y z S11 S22 S33 S12 S13 S23 E11 E22 E33 E12 E13 E23
element_id node_id
1 1734 14.897208 5.269875 0.0 27.080811 6.927080 0.0 -13.687358 0.0 0.0 0.000119 -0.000006 0.0 -0.000169 0.0 0.0
1582 14.555333 5.355806 0.0 28.319006 1.178649 0.0 -10.732705 0.0 0.0 0.000133 -0.000035 0.0 -0.000133 0.0 0.0
1596 14.630658 4.908741 0.0 47.701195 5.512213 0.0 -17.866833 0.0 0.0 0.000219 -0.000042 0.0 -0.000221 0.0 0.0
4923 14.726271 5.312840 0.0 27.699907 4.052865 0.0 -12.210032 0.0 0.0 0.000126 -0.000020 0.0 -0.000151 0.0 0.0
4924 14.592996 5.132274 0.0 38.010101 3.345431 0.0 -14.299768 0.0 0.0 0.000176 -0.000038 0.0 -0.000177 0.0 0.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
4770 3812 -13.189782 -5.691876 0.0 36.527439 2.470588 0.0 -14.706686 0.0 0.0 0.000170 -0.000040 0.0 -0.000182 0.0 0.0
12418 -13.560289 -5.278386 0.0 32.868889 3.320898 0.0 -14.260107 0.0 0.0 0.000152 -0.000031 0.0 -0.000177 0.0 0.0
14446 -13.673285 -5.569107 0.0 34.291058 3.642457 0.0 -13.836027 0.0 0.0 0.000158 -0.000032 0.0 -0.000171 0.0 0.0
14614 -13.389065 -5.709927 0.0 36.063541 2.828889 0.0 -13.774759 0.0 0.0 0.000168 -0.000038 0.0 -0.000171 0.0 0.0
14534 -13.276068 -5.419206 0.0 33.804211 2.829817 0.0 -14.580153 0.0 0.0 0.000157 -0.000035 0.0 -0.000181 0.0 0.0
[37884 rows x 15 columns]
Supported features¶
So far the following data can be read from a vmap file
Geometry¶
- node positions
- node element index
Field variables¶
Any field variables can be read and joined to the node element index from the following locations:
- element
- node
- element nodal
In particular, field variables at integration point location cannot cannot be read, as that would require extrapolating them to the node positions. This functionality is not available in pyLife.
The VMAPImport Class¶
-
class
pylife.vmap.
VMAPImport
(filename)[source]¶ The interface class to import a vmap file
Parameters: filename (string) – The path to the vmap file to be read Raises: Exception
– If the file cannot be read an exception is raised. So far any exception from theh5py
module is passed through.-
filter_element_set
(element_set)[source]¶ Filters a node set out of the current mesh
Parameters: element_set (string, optional) – The element set defined in the vmap file as geometry set Returns: Return type: self Raises: APIUseError
– If the mesh has not been initialized usingmake_mesh()
-
filter_node_set
(node_set)[source]¶ Filters a node set out of the current mesh
Parameters: node_set (string) – The node set defined in the vmap file as geometry set Returns: Return type: self Raises: APIUseError
– If the mesh has not been initialized usingmake_mesh()
-
join_coordinates
()[source]¶ Join the coordinates of the predefined geometry in the mesh
Returns: Return type: self Raises: APIUseError
– If the mesh has not been initialized usingmake_mesh()
Examples
Receive the mesh with the node coordinates
>>> pylife.vmap.VMAPImport('demos/plate_with_hole.vmap').make_mesh('1').join_coordinates().to_frame() x y z element_id node_id 1 1734 14.897208 5.269875 0.0 1582 14.555333 5.355806 0.0 1596 14.630658 4.908741 0.0 4923 14.726271 5.312840 0.0 4924 14.592996 5.132274 0.0 ... ... ... ... 4770 3812 -13.189782 -5.691876 0.0 12418 -13.560289 -5.278386 0.0 14446 -13.673285 -5.569107 0.0 14614 -13.389065 -5.709927 0.0 14534 -13.276068 -5.419206 0.0
[37884 rows x 3 columns]
-
join_variable
(var_name, state=None, column_names=None)[source]¶ Joins a field output variable to the mesh
Parameters: - var_name (string) – The name of the field variables
- state (string, opional) – The load state of which the field variable is to be read
If not given, the last defined state, either defined in
make_mesh()
or defeined injoin_variable()
is used. - column_names (list of string, optional) – The names of the columns names to be used in the DataFrame If not provided, it will be chosen according to the list shown below. The length of the list must match the dimension of the variable.
Returns: Return type: self
Raises: APIUseError
– if the mesh has not been initialized usingmake_mesh()
KeyError
– if the geometry, state or varname is not found of if the vmap file is corruptedKeyError
– if there are no column names given and known for the variable.ValueError
– if the length of the column_names does not match the dimension of the variable
Notes
The mesh must be initialized with
make_mesh()
. The final DataFrame can be retrieved withto_frame()
.If the
column_names
argument is not provided the following column names are chosen- ‘DISPLACEMENT’:
['dx', 'dy', 'dz']
- ‘STRESS_CAUCHY’:
['S11', 'S22', 'S33', 'S12', 'S13', 'S23']
- ‘E’:
['E11', 'E22', 'E33', 'E12', 'E13', 'E23']
If that fails a
KeyError
exception is risen.Examples
Receiving the ‘DISPLACEMENT’ of ‘STATE-1’ , the stress and strain tensors of ‘STATE-2’
>>> (pylife.vmap.VMAPImport('demos/plate_with_hole.vmap') .make_mesh('1') .join_variable('DISPLACEMENT', 'STATE-1') .join_variable('STRESS_CAUCHY', 'STATE-2') .join_variable('E').to_frame()) dx dy dz S11 S22 S33 S12 S13 S23 E11 E22 E33 E12 E13 E23 element_id node_id 1 1734 0.0 0.0 0.0 27.080811 6.927080 0.0 -13.687358 0.0 0.0 0.000119 -0.000006 0.0 -0.000169 0.0 0.0 1582 0.0 0.0 0.0 28.319006 1.178649 0.0 -10.732705 0.0 0.0 0.000133 -0.000035 0.0 -0.000133 0.0 0.0 1596 0.0 0.0 0.0 47.701195 5.512213 0.0 -17.866833 0.0 0.0 0.000219 -0.000042 0.0 -0.000221 0.0 0.0 4923 0.0 0.0 0.0 27.699907 4.052865 0.0 -12.210032 0.0 0.0 0.000126 -0.000020 0.0 -0.000151 0.0 0.0 4924 0.0 0.0 0.0 38.010101 3.345431 0.0 -14.299768 0.0 0.0 0.000176 -0.000038 0.0 -0.000177 0.0 0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4770 3812 0.0 0.0 0.0 36.527439 2.470588 0.0 -14.706686 0.0 0.0 0.000170 -0.000040 0.0 -0.000182 0.0 0.0 12418 0.0 0.0 0.0 32.868889 3.320898 0.0 -14.260107 0.0 0.0 0.000152 -0.000031 0.0 -0.000177 0.0 0.0 14446 0.0 0.0 0.0 34.291058 3.642457 0.0 -13.836027 0.0 0.0 0.000158 -0.000032 0.0 -0.000171 0.0 0.0 14614 0.0 0.0 0.0 36.063541 2.828889 0.0 -13.774759 0.0 0.0 0.000168 -0.000038 0.0 -0.000171 0.0 0.0 14534 0.0 0.0 0.0 33.804211 2.829817 0.0 -14.580153 0.0 0.0 0.000157 -0.000035 0.0 -0.000181 0.0 0.0
[37884 rows x 15 columns]
Todo
Write a more central document about pyLife’s column names.
-
make_mesh
(geometry, state=None)[source]¶ Makes the initial mesh
Parameters: - geometry (string) – The geometry defined in the vmap file
- state (string, optional) – The load state of which the field variable is to be read.
If not given, the state must be defined in
join_variable()
.
Returns: Return type: self
Raises: KeyError
– if thegeometry
is not found of if the vmap file is corruptedKeyError
– if thenode_set
orelement_set
is not found in the geometry.APIUseError
– if both, anode_set
and anelement_set
are given
Notes
This methods defines the initial mesh to which coordinate data can be joined by
join_coordinates()
and field variables can be joined byjoin_variable()
Examples
Get the mesh data with the coordinates of geometry ‘1’ and the stress tensor of ‘STATE-2’
>>> (pylife.vmap.VMAPImport('demos/plate_with_hole.vmap') .make_mesh('1', 'STATE-2') .join_coordinates() .join_variable('STRESS_CAUCHY') .to_frame() x y z S11 S22 S33 S12 S13 S23 element_id node_id 1 1734 14.897208 5.269875 0.0 27.080811 6.927080 0.0 -13.687358 0.0 0.0 1582 14.555333 5.355806 0.0 28.319006 1.178649 0.0 -10.732705 0.0 0.0 1596 14.630658 4.908741 0.0 47.701195 5.512213 0.0 -17.866833 0.0 0.0 4923 14.726271 5.312840 0.0 27.699907 4.052865 0.0 -12.210032 0.0 0.0 4924 14.592996 5.132274 0.0 38.010101 3.345431 0.0 -14.299768 0.0 0.0 ... ... ... ... ... ... ... ... ... ... 4770 3812 -13.189782 -5.691876 0.0 36.527439 2.470588 0.0 -14.706686 0.0 0.0 12418 -13.560289 -5.278386 0.0 32.868889 3.320898 0.0 -14.260107 0.0 0.0 14446 -13.673285 -5.569107 0.0 34.291058 3.642457 0.0 -13.836027 0.0 0.0 14614 -13.389065 -5.709927 0.0 36.063541 2.828889 0.0 -13.774759 0.0 0.0 14534 -13.276068 -5.419206 0.0 33.804211 2.829817 0.0 -14.580153 0.0 0.0
-
nodes
(geometry)[source]¶ Retrieves the node positions
Parameters: geometry (string) – The geometry defined in the vmap file Returns: node_positions – a DataFrame with the node numbers as index and the columns ‘x’, ‘y’ and ‘z’ for the node coordinates. Return type: DataFrame Raises: KeyError
– if the geometry is not found of if the vmap file is corrupted
-
to_frame
()[source]¶ Returns the mesh and resets the mesh
Returns: mesh – The mesh data joined so far Return type: DataFrame Raises: APIUseError
– if there is no mesh present, i.e. make_mesh() has not been called yet or the mesh has been reset in the meantime.Notes
This method resets the mesh, i.e.
make_mesh()
must be called again in order to fetch more mesh data in another mesh.
-