This module places a seed for smoke represented by a streak line in a given vector field lattice, which varies with time. 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).
This module is similar to the LatSmoke module, but allows the use of vector fields which are time-dependent. Streak lines rather than stream lines are generated. A time-dependent vector field is represented by a sequence of lattices, each describing the vector field at specific time in the simulation. Two lattices are used for each time slice in the simulation, and linear interpolation in time is used to calculate the values of the vector field at intermediate times.
The simulation for each time slice is started by pressing the "Advect" button; after completion of the simulation a new value is output on the module's "State" output port, and this value may be used to trigger the module in reading the next lattice; this is done most easily by wiring this port to the "index" port of a ReadFName module which in turn is wired up to a ReadLat module (see the example map supplied).
A streak 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 between the lattices. Please note that particle positions are sampled only at these time intervals. Streak lines may appear coarse compared to the stream lines generated by the LatSmoke module, even if the fields do not vary greatly over a interval, if the sample time used by the LatSmoke module is small compared to the interval used by the DynLatSmoke module.
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 DynLatSmoke 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.
The first lattice read by this module represents the vector field at time t = 0. Subsequent lattices represent the vector field at t = n T, where n is the slice counter (whose value is output on the "State" port after each firing), and T is the time interval as specified by the "Time Step" widget. The time slice counter is reset if the time interval or streak type is changed.
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: Time Step
Type: Text
The time interval DT at which the vector field is
sampled. If lattice i is representative of the vector
field at t = T then lattice i+1 is representative of
the vector field at t = T + DT.
Note: the simulation uses its own internally determined time step which is dependent on the gradients in the field.
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: Advect
Type: Button
This button is to be used to start the simulation for
each time slice.
Port: StreakType
Type: Option Menu
Menu Item: Line
The smoke generated by this module is always a streak
line.
Port: Culling
Type: Radio Box
Menu Item: Off
Menu Item: Cull
In dynamic simulations the smoke will often contain
long thin tetrahedra with a large opacity value. This
effect is diminished when culling is switched on.
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.
Port: State
Type: Parameter
Time slice counter, which may be used to trigger the
reading of the next lattice.
LatSmoke MultiLatSmoke ReadFName
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.
The module ReadFName may be used to read a specified filename from a list of filenames, and as such may be used if a set of lattices is used to simulate smoke in a time- dependent vector field. See the example map for the DynLatSmoke module.