.. _data-page:

#####################################
Efficient Representation of Your Data 
#####################################

To get the best performance and resource usage, it is important that you organize your data in the 
:class:`DataSource <cee::ug::DataSource>` of the UnstructGrid component as efficiently as possible. This will optimize 
the memory usage and also give the best rendering performance.

The main strategy is to avoid duplication of data and to store the data as compact as possible. All the objects in the 
data source are reference counted and can be used in many places. 

*****************************
Analysis with Multiple States
*****************************

If you only have rigid body movement of your geometry, please only define the geometry (elements and results) once and 
then use a :class:`DataResultTransformation <cee::ug::DataResultTransformation>` result to specify one transformation 
matrix per part for each state.

If you have deformations, but the topology of the model is constant (no remeshing), please only define the geometry 
(elements and results) once and then use a :class:`DataResultDisplacement <cee::ug::DataResultDisplacement>` result to 
specify new nodes for each state (reusing the geometry).

If your model is remeshed for each state, you will have to specify the full geometry for each 
:class:`DataState <cee::ug::DataState>`.

*******************
Multiple Geometries
*******************

An :class:`UnstructGridModel <cee::ug::UnstructGridModel>` and its :class:`DataStates <cee::ug::DataState>` 
can have multiple :class:`DataGeometry <cee::ug::DataGeometry>` per state. This allows combinations of 
the three options above to further reduce the resource usage. So if some parts of your model are static while others are 
remeshed, |ProductName| handles this efficiently if you split your model into two geometries and provide the data for 
each geometry in the most optimal way.
