Skip to content

Commit

Permalink
Adding an example of coupling heat with history and wave.
Browse files Browse the repository at this point in the history
  • Loading branch information
danwills committed Aug 9, 2015
1 parent 8d8a308 commit 22b8dca
Showing 1 changed file with 250 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
<?xml version="1.0"?>
<VTKFile type="ImageData" version="0.1" byte_order="LittleEndian" compressor="vtkZLibDataCompressor">
<RD format_version="3">
<description>
The &lt;a href=&quot;http://en.wikipedia.org/wiki/Heat_equation&quot;&gt;heat equation&lt;/a&gt;, also known as the diffusion equation, describes multiple phenomena including the spreading-out of heat in a solid body and the diffusion of chemicals in a liquid.

This formula adds additional reagents to the Heat Equation that model something akin to 'Boil History' in B and 'Boil Wave/Wake' in C and D. When the boil threshold is exceeded, the boil-event emits value into history and wave, allowing it to leave a diffusing history behind it, as well as a rippling wake.

In this pattern (using the boiling heat formula as described above), moving glider-like wavefronts form against a background of chaotic boil-events. Constant creation and annihlation usually ends up with a particular flow-direction winning out overall, and wider wavefronts can form once this direction is established, which tend to dominate the individual smaller wavefronts.

Written by Dan Wills, (as a bit of an homage-to-CAPOW by Rudy Rucker) based on earlier code in the Ready repo.
</description>
<rule name="Heat Equation with History And Wave" type="formula" wrap="1" neighborhood_type="vertex" neighborhood_range="1" neighborhood_weight="laplacian">
<param name="timestep">
0.01
</param>
<param name="a_diffusion_rate">
15
</param>
<param name="a_boil_rate">
0.01
</param>
<param name="a_from_b">
0
</param>
<param name="a_boil_history_rate">
0.124
</param>
<param name="a_clamp_min">
0
</param>
<param name="a_clamp_max">
100
</param>
<param name="a_power">
0.97
</param>
<param name="boil_diffusion">
-0.05
</param>
<param name="boil_threshold">
0.98
</param>
<param name="boil_heat_loss">
0.5
</param>
<param name="boil_power">
0.25
</param>
<param name="b_from_a">
0
</param>
<param name="b_from_boil">
222
</param>
<param name="b_damp">
0.395
</param>
<param name="b_diffusion">
16
</param>
<param name="b_pow">
0.999
</param>
<param name="b_pow_norm">
1
</param>
<param name="b_clamp_min">
0
</param>
<param name="b_clamp_max">
1
</param>
<param name="wave_from_a">
0
</param>
<param name="wave_from_b">
0
</param>
<param name="wave_from_boil">
155
</param>
<param name="wave_diffusion">
0.2
</param>
<param name="wave_damp">
0.9999
</param>
<param name="wave_power">
1.0008
</param>
<param name="wave_pow_norm">
1.5
</param>
<param name="wave_DC_value">
0.5
</param>
<param name="wave_clamp">
2.5
</param>
<param name="wave_to_a">
0.013
</param>
<param name="wave_to_b">
0
</param>
<param name="wave_to_Da">
0
</param>
<param name="wave_to_Db">
0
</param>
<param name="wave_to_b_damp">
0
</param>
<formula number_of_chemicals="4">
a = clamp( sign(a) * pow( fabs( a + a_boil_rate ), (float4) a_power ) + (c-wave_DC_value)*wave_to_a, (float4) a_clamp_min, (float4) a_clamp_max);
float4 boil = pow( clamp( (float4) ( ((a+laplacian_a * boil_diffusion) - boil_threshold ) * boil_heat_loss ), (float4) 0.0, (float4) 1.0 ), (float4)boil_power );
a = a + ( -a * boil + b * -a * a_boil_history_rate );
delta_a = laplacian_a * (a_diffusion_rate + (c-wave_DC_value)*wave_to_Da) + (c-wave_DC_value)*wave_to_a + b*a_from_b;
delta_b = -b*(b_damp + c*wave_to_b_damp) + a*b_from_a + boil*b_from_boil + (b_diffusion + (c-wave_DC_value)*wave_to_Db) * laplacian_b + (c-wave_DC_value)*wave_to_b;
b = clamp( sign(b) * pow( (float4)( fabs(b)/b_pow_norm ), (float4)b_pow )*b_pow_norm, b_clamp_min, b_clamp_max );
c = wave_DC_value + clamp( sign(c-wave_DC_value) * pow( (float4)( fabs(c-wave_DC_value)/wave_pow_norm * wave_damp ), (float4)wave_power )*wave_pow_norm, -wave_clamp, wave_clamp);
delta_d = (laplacian_c) * wave_diffusion;
delta_c = d + delta_d + a * wave_from_a + b * wave_from_b + boil*wave_from_boil;
</formula>

</rule>
<initial_pattern_generator apply_when_loading="true">
<overlay chemical="a">
<overwrite>

</overwrite>
<white_noise low="0" high="1">

</white_noise>
<rectangle>
<point3D x="0" y="0" z="0">

</point3D>
<point3D x="1" y="1" z="1">

</point3D>

</rectangle>

</overlay>
<overlay chemical="b">
<overwrite>

</overwrite>
<constant value="0">

</constant>
<everywhere>

</everywhere>

</overlay>

</initial_pattern_generator>
<render_settings>
<surface_color r="1" g="1" b="1">

</surface_color>
<color_low r="0" g="0" b="0">

</color_low>
<color_high r="1" g="1" b="1">

</color_high>
<show_color_scale value="false">

</show_color_scale>
<show_multiple_chemicals value="false">

</show_multiple_chemicals>
<active_chemical value="c">

</active_chemical>
<low value="0">

</low>
<high value="1">

</high>
<vertical_scale_1D value="1">

</vertical_scale_1D>
<vertical_scale_2D value="40">

</vertical_scale_2D>
<contour_level value="0.25">

</contour_level>
<use_wireframe value="false">

</use_wireframe>
<show_cell_edges value="false">

</show_cell_edges>
<show_bounding_box value="true">

</show_bounding_box>
<slice_3D value="true">

</slice_3D>
<slice_3D_axis value="z">

</slice_3D_axis>
<slice_3D_position value="0.5">

</slice_3D_position>
<show_displacement_mapped_surface value="false">

</show_displacement_mapped_surface>
<color_displacement_mapped_surface value="true">

</color_displacement_mapped_surface>
<use_image_interpolation value="true">

</use_image_interpolation>
<timesteps_per_render value="128">

</timesteps_per_render>

</render_settings>

</RD>
<ImageData WholeExtent="0 255 0 255 0 0" Origin="0 0 0" Spacing="1 1 1">
<Piece Extent="0 255 0 255 0 0">
<PointData>
<DataArray type="Float32" Name="a" format="binary" RangeMin="0.70942783356" RangeMax="0.96719479561">
CAAAAACAAAAAAAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA=eJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAE=
</DataArray>
<DataArray type="Float32" Name="b" format="binary" RangeMin="0.076563090086" RangeMax="0.68640810251">
CAAAAACAAAAAAAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA=eJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAE=
</DataArray>
<DataArray type="Float32" Name="c" format="binary" RangeMin="-1.1533857584" RangeMax="3.239613533">
CAAAAACAAAAAAAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA=eJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAE=
</DataArray>
<DataArray type="Float32" Name="d" format="binary" RangeMin="-2.813505888" RangeMax="0.32402923703">
CAAAAACAAAAAAAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA=eJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAF4nO3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAABeJztwQEBAAAAgJD+r+4ICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAXic7cEBAQAAAICQ/q/uCAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAE=
</DataArray>
</PointData>
<CellData>
</CellData>
</Piece>
</ImageData>
</VTKFile>

0 comments on commit 22b8dca

Please sign in to comment.