DVstream


Synopsis

integrate a velocity field producing streamlines or streamribbons


group DVstream {
Mesh+Node_Data+Iparam &in { /* input field */
xform+nonotify;
nnodes+req;
};
Grid+Xform+ Iparam &probe; /* where the streamlines originate */
int+Iparam order; /* order of integration */
int+Iparam forw_back; /* toggle for lines forward/backward */
int+Iparam nseg;
float+Iparam min_vel;
int+Iparam max_seg;
int+Iparam stream_comp;
int+Iparam ribbons;
int+notify rib_width;
int+notify rib_angle;
Mesh+Node_Data+Oparam out { /*output field */
&xform<weight=-1> => in.xform;
};
method+notify_val+notify_inst upd_stream = "stream";
} ;

Description

DVstream generates streamlines or streamribbons based on a field of any mesh type that has at least one component that is a 1, 2, or 3 element vector.

You place a sample of points (the &probe) at a starting location in the field. Then, for every time step, DVstream advances each sample point through space based on the interpolated value of the vector field at its present position. The result is a set of streamlines or streamribbons showing the progress of massless particles through a vector field.

Input

&in

The input is a reference to a field with any type of mesh. Its Node_Data must contain at least one component that is a 1, 2, or 3 element velocity vector.

&probe

A reference to any mesh whose coordinates represent the sample points. To create this sampling mesh you could, for example, use the Plane, Line or Box objects in Geometries.[plane|slice|box] or the slice macro.

order

An integer. Sets the order of integration. Higher orders are more accurate, but execute more slowly.

forw_back

An integer. If the value is not 0, streamlines are generated forward from the starting sample points. If the value is 0, they are generated backward from the starting sample points.

nseg

An integer. Sets how many integration steps will be used within one grid "cell" to compute the streamline path.

min_velocity

A float. When a streamline falls below this velocity, the integration process for that streamline stops. You use this to prevent wasted computation for streamlines barely moving, or even stationary (min_velocity =0).

max_seg

An integer. Sets the total number of integration steps to take. When an individual streamline exceeds this value, integration for it stops.

stream_comp

An integer. Sets which component to base the streamlines upon. The selection must be a three element vector.

ribbons

An integer. When this is not 0, DVstream will produce streamribbons rather than streamlines.

rib_width

An integer. Scales the width of the ribbon. Ribbon width varies along its length according to the divergence of the flow. This value controls ribbon width at the beginning of the ribbon.

rib_angle

An integer. Controls the initial angle at which the ribbon is drawn. Reasonable values are from 0.0 to 360.0.

Output

out

The output field is a new object. It contains an unstructured Mesh of cell type Polyline that represents streamlines. Its new Node_Data contains the selected element's velocity component. The output also contains a reference to the input field's xform.

Algorithm

The streamlines are calculated using the Runge-Kutte method of specified order with adaptive time steps.

Files

v/dv.v
modules/stream.c

Utility DVM macros

DVMstream_param

Example

Libraries.Main.Mappers.streamlines
Libraries.Main.Mappers.advector

See also