This module places a seed for smoke represented by a stream line in a given vector field lattice. Smoke is generated until it reaches the boundary of the data domain, or for a time interval. The calculation will always stop when a pre- set maximum number of iterations (500) has been reached, or when the smoke has reached a stationary position (i.e. the smoke has zero velocity).
A stream line has transparency and thickness, and is fast to render.
Integration is done by using the Runge-Kutta solver nag_ode_ivp_rk from the NAG C Library, and utilises the 4(5) formula pair. The size of the integration step is determined by the routine. A relative tolerance error of 0.001 is used, with threshold values determined by the velocity lattice, such that the local errors in direction i will not be greater than 0.001 * max(s, t[i]), where s is the average magnitude of the velocity over the time step, and t[i] = 0.001 * the minimum value of all components in the velocity lattice in direction i. Lattices with float or double data types may be connected to the module; the integration is always done in double precision.
You may specify the time interval at which the particle positions are sampled; smaller time intervals will lead to smoother particle trajectories, at the cost of increased sizes of geometry passed to the Render module. The sample frequency has no effect on the integration itself. The total integration time is equal to the number of time steps multiplied by the sample time.
Vector values are interpolated using cxLookup interpolation tables using linear interpolation. For more information on the interpolation method used you are referred to the man pages on cxLookupCreate and cxLookupInterp.
Note: the main differences between this module and the llnl LatSmoke module lie in the integration method employed. The calculation of the particle trajectories is done in double precision.
Note: this module is not present in every implementation of IRIS Explorer.
Acknowledgement
Portions of this module were developed by the University of California, the Lawrence Livermore National Laboratory and its contributors, for which the following disclaimer applies:
Copyright (c) 1993 The Regents of the University of California. All rights reserved.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
References
Port: Velocity
Type: Lattice
Constraints: 3-D
Constraints: 3..-vector
Constraints: float..double
Lattice describing the velocity vector. The first 3
channels will be used to define the three-dimensional
velocity.
Port: Pick
Type: Pick
Optional:
You may interactively place the seed position for the
smoke using the Pick input port. The initial polygon
from which the smoke is emitted is oriented
perpendicular to the flow.
By default the module places the seed position in the centre of the vector field.
Port: Sample Time
Type: Text
The time interval at which positions in the smoke are
sampled. These positions determine the appearance of
the geometry output from this module.
The stream line is constructed using straight line segments between the sampled positions. As such a smaller sample time (greater sample frequency) will have the effect of smoothing the stream line, at the same time increasing the size of the geometry passed to the Render module.
Port: Number of Steps
Type: Text
The maximum number of sampled positions in the smoke.
The actual number of positions may be less if the smoke
has reached the boundary of the velocity lattice, or if
the calculation has stopped for other reasons (see the
introduction).
Port: Trans
Type: Slider
The percentage of transparency of the smoke. A value of
100 means that the smoke becomes invisible, while a
value of 0 gives rise to totally opaque smoke.
Port: Compressibility
Type: Radio Box
Menu Item: Off
Menu Item: Compress
This widget has no effect in the current module.
Port: Puffing
Type: Radio Box
Menu Item: Off
Menu Item: Puff
The smoke may be animated by simulating moving smoke
puffs. The puffs will be shorter and closer together in
areas where the smoke is compressed.
Port: Texturing
Type: Radio Box
Menu Item: Off
Menu Item: Texture
Hardware texture mapping hardware may be used (if it is
available) to get the correct exponential integration
per pixel, hence eliminating most mach bands.
The transparency may change dramatically when texture mapping is changed.
Note: you may request a drawing style that uses no texture from the "Draw Style" menu in the Render module. However, this will not affect the appearance of smoke, which will continue to use texture until texture mapping is switched of using the "Texturing" widget on this module.Port: R
Type: Slider
The red component of the smoke.
Port: G
Type: Slider
The green component of the smoke.
Port: B
Type: Slider
The blue component of the smoke.
Port: StreamType
Type: Option Menu
Menu Item: Line
The smoke generated by this module is always a stream
line.
Port: BallGeom
Type: Geometry
The bounding box of the vector field.
Port: SmokeGeom
Type: Geometry
This geometry output consists of a TetraSet. This set
of transparent tetrahedra compose the smoke.
It is important that this transparant geometry is the last in the list of geometries connected to the Render module. This forces all solid geometry to be rendered first, thereby allowing to view the transparant parts of the picture.
Note: The modules DynLatSmoke, LatSmoke, and MultiLatSmoke are not available in every port of IRIS Explorer.
The module MultiLatSmoke deals with sets of lattices (multi-lattices), and allows integration to proceed starting in one lattice and continuing to another lattice; the module DynLatSmoke deals with time dependent vector fields.