Vortex Chaos

by Kerry Mitchell, 29 May 2000

Basic information

The iterative method of rendering fractals can also be used to perform a simulation of a chaotic event.  Then, some characteristic of the event can be sent to the coloring routine, and Ultra Fractal now becomes a workshop for visualizing chaotic physics.  These formulas simulate the chaotic interactions between point vortices.

Point vortices are the two-dimensional analog to whirlpools, like the one that sucks water down the bathroom drain, or the ones that come off of the tips of airplane wings, or the ones that come off of your spoon when you stir your coffee.  People who study the motion of gases and liquids use point vortices to model flows where there is some circulation or swirling of the fluid.  A single vortex will cause the fluid around it to rotate, and to generally rotate faster closer to the center of the vortex.  Put 2 vortices in the fluid, and they will cause each other to rotate.  However, other points in the fluid will move chaotically around the 2 vortices.  Put more than 2 vortices into the fluid, and the vortices themselves can move chaotically, as well as the fluid around them.  These formulas allow you to use 2, 3, or 4 vortices, and color the pixel by the motion of the vortices.  Alternatively, the field point information can be sent to the coloring routine.  A field point is a particle of fluid away from any vortex.  It starts out at the pixel location, and moves under the influence of the vortices.

As an added bonus, these formulas will also model sources and sinks, points of fluid being introduced into the flow, or removed from the flow.  For more aerodynamical simulations, a freestream can be added, which simulates the entire system of vortices moving through the fluid at a set speed, like the wing on an airplane.

Parameters

The 3 formulas have the same parameter structure.  The "vortex 3" parameters are used with "Vortex 3", and "Vortex 4"; the "vortex 4" parameters are used with "Vortex 4" only.

Hints

For reasonable parameter values, all points will be "inside" points.  For better simulations, use smaller timesteps.  Consequently, this can be a very slow formula, and may not be suitable for general fractaling.  The default vortex values are set to have the vortices moving along the same circle.  One cycle of the circle is completed in 1 unit of time, so a timestep of 0.01 will require 100 iterations.

Sample images

The first sample shows 2 vortices, and colors according to the position and velocity of points in the field after 10 iterations.

VortexSample1 { ; copyright Kerry Mitchell 23jan2000
fractal:
  title="Vortex Sample 1" width=600 height=400 author="Kerry Mitchell"
  created="January 23, 2000" numlayers=2
layer:
  method=multipass caption="New Layer 2" opacity=100 visible=yes alpha=no
  mergemode=difference
mapping:
  center=0/0 magn=0.5 angle=0
formula:
  filename="lkm.ufm" entry="vortex2" maxiter=10 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=-2/0 p_gamma1=0/2 p_gamma2=0/2 p_freestream=0/0
  p_timestep=0.01/0 p_ztype="field velocity"
inside:
  filename="lkm.ucl" entry="basic" density=2 transfer=linear repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=8405008 index=100
  color=11829312 index=150 color=14532495 index=200 color=16777215
  index=250 color=14532495 index=300 color=11829312 index=350 color=8405008
layer:
  method=multipass caption="New Layer 1" visible=yes alpha=no
mapping:
  center=0/0 magn=0.5 angle=0
formula:
  filename="lkm.ufm" entry="vortex2" maxiter=10 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=-2/0 p_gamma1=0/2 p_gamma2=0/2 p_freestream=0/0
  p_timestep=0.01/0 p_ztype="field position"
inside:
  filename="lkm.ucl" entry="basic" transfer=linear repeat=yes
  p_colorby="polar angle"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=4198528 index=100
  color=8405172 index=150 color=12554205 index=200 color=16777215 index=250
  color=12554205 index=300 color=8405172 index=350 color=4198528
}

This example uses the "field distance" variable type, and in 3 layers, shows the change over time.

VortexSample2 { ; copyright Kerry Mitchell 24jan2000
fractal:
  title="Vortex Sample 2" width=480 height=480 author="Kerry Mitchell"
  created="January 24, 2000" numlayers=3
layer:
  method=multipass caption="New Layer 3" opacity=100 visible=yes alpha=no
  mergemode=difference
mapping:
  center=0/0 magn=0.5 angle=270
formula:
  filename="lkm.ufm" entry="vortex3" maxiter=30 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=-1/1.7320508075689 p_z30=-1/-1.7320508075689 p_gamma1=0/2
  p_gamma2=0/2 p_gamma3=0/2 p_freestream=0/0 p_timestep=0.01/0
  p_ztype="field distance"
inside:
  filename="lkm.ucl" entry="basic" transfer=sqrt repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=8405008 index=100
  color=11829312 index=150 color=14532495 index=200 color=16777215
  index=250 color=14532495 index=300 color=11829312 index=350 color=8405008
layer:
  method=multipass caption="New Layer 2" opacity=100 visible=yes alpha=no
  mergemode=difference
mapping:
  center=0/0 magn=0.5 angle=270
formula:
  filename="lkm.ufm" entry="vortex3" maxiter=20 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=-1/1.7320508075689 p_z30=-1/-1.7320508075689 p_gamma1=0/2
  p_gamma2=0/2 p_gamma3=0/2 p_freestream=0/0 p_timestep=0.01/0
  p_ztype="field distance"
inside:
  filename="lkm.ucl" entry="basic" transfer=sqrt repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=16777215 index=50 color=15695807
  index=100 color=12536703 index=150 color=7348800 index=200 color=0
  index=250 color=7348800 index=300 color=12536703 index=350 color=15695807
layer:
  method=multipass caption="New Layer 1" visible=yes alpha=no
mapping:
  center=0/0 magn=0.5 angle=270
formula:
  filename="lkm.ufm" entry="vortex3" maxiter=10 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=-1/1.7320508075689 p_z30=-1/-1.7320508075689 p_gamma1=0/2
  p_gamma2=0/2 p_gamma3=0/2 p_freestream=0/0 p_timestep=0.01/0
  p_ztype="field distance"
inside:
  filename="lkm.ucl" entry="basic" transfer=sqrt repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=4198528 index=100
  color=8405172 index=150 color=12554205 index=200 color=16777215 index=250
  color=12554205 index=300 color=8405172 index=350 color=4198528
}

The final example is a 4-leaf clover, showing the "field position" variable type with 4 vortices.

VortexSample3 { ; copyright Kerry Mitchell 24jan2000
fractal:
  title="Vortex Sample 3" width=480 height=480 author="Kerry Mitchell"
  created="January 24, 2000" numlayers=2
layer:
  method=multipass caption="New Layer 2" opacity=100 visible=yes alpha=no
  mergemode=softlight
mapping:
  center=0/0 magn=0.5 angle=90
formula:
  filename="lkm.ufm" entry="vortex4" maxiter=25 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=0/2 p_z30=-2/0 p_z40=0/-2 p_gamma1=0/2 p_gamma2=0/2
  p_gamma3=0/2 p_gamma4=0/2 p_freestream=0/0 p_timestep=0.01/0
  p_ztype="field position"
inside:
  filename="lkm.ucl" entry="basic" transfer=linear repeat=yes
  p_colorby="polar angle"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=1081408 index=100
  color=4240512 index=150 color=9428415 index=200 color=16777215 index=250
  color=9428415 index=300 color=4240512 index=350 color=1081408
layer:
  method=multipass caption="New Layer 1" visible=yes alpha=no
mapping:
  center=0/0 magn=0.5 angle=90
formula:
  filename="lkm.ufm" entry="vortex4" maxiter=10 percheck=off p_bailout=1000
  p_z10=2/0 p_z20=0/2 p_z30=-2/0 p_z40=0/-2 p_gamma1=0/2 p_gamma2=0/2
  p_gamma3=0/2 p_gamma4=0/2 p_freestream=0/0 p_timestep=0.01/0
  p_ztype="field position"
inside:
  filename="lkm.ucl" entry="basic" transfer=linear repeat=yes
  p_colorby="polar angle"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=8 index=0 color=0 index=50 color=1081408 index=100
  color=4240512 index=150 color=9428415 index=200 color=16777215 index=250
  color=9428415 index=300 color=4240512 index=350 color=1081408
}