In the meta-model, given parent-child relations are defined as flows. Flow relations can be defined as either input, output, input/output or bidirectional (see the Designer User's Guide for more details). The relation between the types determines how given object instances can be linked to one another.
Besides the flow link (an arrow indicating the direction) that connects the flow instance's producer and consumer, flows have containers that display the flow's name as well as its attributes. These containers represent the beginning (i.e. production) or the end (i.e. consumption) of the flow and are thus found inside the parent objects of the flow. The flow link also has a label displaying the name of the flow or an attribute value (this is determined in the filter).
Flows whose producer or consumer has not been defined or flows that are produced or consumed at a higher level have a port at one end of the link.
The main interest of flows is that they create links between the flow producers and consumers in the Internal Block Diagram. Consider a diagram with objects S and T. If the flow F is produced by S and consumed by T, the diagram will show a link between S and T. Moreover, if F is not directly produced by S but by one of its descendants, the diagram point of view will remain the same: producing the flow directly or indirectly are visually equivalent. The same goes for consumption.
Why this mechanism? Imagine that you have the following structure: two persons, one talking to the other. A sound flow is emitted by the mouth of the speaker and consumed by the ears of the listener. Mouth and Ears are subsystems of a human being. In
What if you have hundreds of links, how can they all be represented? Flows of the same type and of the same direction exchanged between two objects share one single link. Associated with the link, a label can be made to display the names of the flows (under the limit of five names).
In the example below, a link representing two flows is currently selected (shown in red).
Direction of a Flow
You can see the direction of a flow in both the treeview and the Internal Block Diagram. In the Internal Block Diagram, the direction of a link is indicated by an arrow that can be represented by different shapes; the arrow appears at the consumer side of the flow. The arrow style is defined in the meta-model. However, it is also possible to define the link without an arrow at the end. In the treeview, a direction icon overlays the icon of the flow object: consumed flows are marked with a arrow pointing to the left and produced flows with an arrow pointing to the right.
In the example below, Water reservoir is a container (and not a flow); Fresh water to be heated is a produced flow while the other two flow objects are consumed flows.
In the diagrams, a flow mark ο is added to the flow container, on the right-hand side for consumed flows and on the left for produced flows.
The property produced or consumed is linked to the parent-child relation of the object instances. The relation can be changed using the Change Flow Direction functionality available in the right-click menu of a flow. For more details see Changing the Direction of a Flow.
When you add a flow using the Add New Object menu, you can also choose between Produced and Consumed relations.
Sometimes, it is convenient not to define a direction for a flow. This can happen when modeling a boundary, an interface or symmetric links. In the meta-model, is it possible to define a flow type as bidirectional. In this case, flow links are represented as bidirectional and flow ports are also visually different.
Often, a flow is produced (or respectively consumed) by the focus object and consumed (or respectively produced) by an external object. In this case, the link goes out of (comes in to) the focus object. In the Internal Block Diagram, this is represented with ports. If the flow is produced (respectively consumed) in the focus object and not consumed (produced) anywhere, the link goes out of (comes into) the object, and ends in (begins with) a port.
The ports are color-coded as follows:
- Flows produced at a higher level or flows with no producer: a white square port.
- Flows consumed at a higher level or flows with no consumer: a black square port.
- Bidirectional flows connected to a higher level or with only one parent: a black and white square port.
Several Flows Passing Through a Link
If several flows of the same type are produced and consumed in the same parents, they are represented by a single link in order to simplify the graphical representation. The flow label now displays several flow names. This number of displayed flow names is configurable and can vary from 0 to all flows with five being default number (see "Maximum Number of Displayed Llinks in Labels" in Preferences). You can now access the Object Properties or Object Location of an individual flow by double-clicking on the link; this displays the Link Properties window listing all the flows passing through the link. You can now access the properties of a chosen flow from its right-click menu.
Location of Flows
The Location tab has many several display options relevant to objects that are flows. It displays different trees to show where the flow is consumed, where it is produced and where it is present as a flow-type child object in general. As for objects, the number of displayed trees depends on the number of flow parents.
In standard usage, flows are produced once and consumed once or more than once. This is true for each treeview. However, it is also possible not to respect this general rule. In this case, warnings are displayed near the flow ports. Default values are:
- If a flow has no producer, it begins with a question mark '?'.
- If a flow has no consumer, it ends in a question mark '?'.
- If a flow has several producers, a double exclamation mark '!!' is displayed near the incoming flow port (at the location where it is consumed).
Information on persistent flows can be found in Navigation.
Anchor Points of Flows
For more information on the anchor points of flows, see Organizing Objects in the Internal Block Diagram.
The following pages will show you how to work with flows.