VTK NetDMF Reader
The NetDMF project is no longer under active development. Improvements that motivated this project have been implemented directly in XDMF.
This site is scheduled for take-down as of 1/1/2019. Contact email@example.com if you have a need for this site beyond then. DEPRECATED
This page is for ideas, proposed architecture, etc. for the VTK NetDMF reader implementation.
- 1 XML hierarchy
- 2 Mapping to VTK data structures
- 3 Use Case: Visualizing movements and communications over time
- 4 NetDMF file format and NetDMF class library
- 5 Class diagram
- 6 Basic Graph
The following diagram shows how XML elements may be nested within a NetDMF file.
Mapping to VTK data structures
The most basic thing we can do is to make Conversation nodes map to graph edges, and IP addresses to graph vertices.
Location (at a given point in time) can be a property attached to the vertices of the graph.
Node elements may contain devices, and devices contain IP addresses, and may contain other devices. We could output a separate vtkTree with that information. Does the device hierarchy change over time?
How to we capture physical network setups? It looks like Channel elements can specify these static links. Do we output a separate vtkGraph with this information? Is the network able to change over time?
There is also the question of time. Do we split it into multiple graphs, one for each simulation time point, or do we combine all the information together, then filter the output when animating, etc.?
Multiple homogeneous data structures vs. one heterogeneous graph
We could place all information into one heterogeneous graph, where nodes/links can have different meanings, or split the information into multiple data objects.
Use Case: Visualizing movements and communications over time
In this use case, the goal is to display vehicles moving around a terrain along with communications between devices as they happen. For efficiency, it is important to distinguish between data that does not change throughout the simulation, and data that changes frequently. The static data will be computed once, and dynamic data will be generated as needed for particular frames of the visualization.
The static data consists of a tree taken from the Scenario section containing nodes, devices, IP addresses, and possibly ports. It may not be possible to enumerate all possible ports from the Scenario section.
The dynamic information consists of two basic parts: positions and conversations.
We should be able to query the data source to get the position/velocity of nodes at a particular moment in time. These positions could be output as a separate table, or we can update the points associated with nodes in the static tree.
For visualizing conversations, we most likely do not want only conversations happening at a given moment, but want all conversations within a range of time. This would allow the visualization have animation effects such as fading out recent conversations, or animating communications along trajectories as they are about to occur. To do this, you would need to define a sliding window around the current time.
The conversation data would consist of a graph containing all conversations during that window. The vertices in this graph would contain minimal information (IP address/port), and would be related back to devices by referencing the static tree.
Combining all this information, we could have a visualization that looks something like the following picture. Nodes would be glyphed as vehicles, people, etc. In order to distinguish between multiple devices/IPs/ports within a node, we could render a virtual tree of items emanating from each node, perhaps colored/glyphed by various characteristics. Conversations would have ports as endpoints.
NetDMF file format and NetDMF class library
Here is a possible class diagram of the NetDMF format. The diagram does not exactly match the specifications but has been designed to split the objects from the events. The scenario no longer describes the mobile devices, communication devices and protocols. They now are handled at a higher level. The scenario and result only handle events.
Here is a possible output graph of a NetDMF file.