<feed xmlns='http://www.w3.org/2005/Atom'>
<title>compustream, branch master</title>
<subtitle>Hacky D2Q9 BGK LBM using compute shaders</subtitle>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/'/>
<entry>
<title>Flakeify build</title>
<updated>2023-01-02T10:54:20+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2023-01-02T10:54:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=8649a521f6c6e073e75fb101f2546a016bb87dda'/>
<id>8649a521f6c6e073e75fb101f2546a016bb87dda</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update lattice multiple times per frame</title>
<updated>2019-11-08T22:02:47+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-11-08T22:02:47+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=d864699c5ddd744ee7376c0d752b6bbb771429a2'/>
<id>d864699c5ddd744ee7376c0d752b6bbb771429a2</id>
<content type='text'>
Controlled by `--lupf` _Lattice updates per frame_

MLUPS are now calculated and displayed.

While performance is still bad compared to a optimized GPU implementation (such
as [1] or [2]) this improves the situation.

[1]: https://tree.kummerlaender.eu/projects/symlbm_playground/
[2]: https://code.kummerlaender.eu/boltzgen/about/
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Controlled by `--lupf` _Lattice updates per frame_

MLUPS are now calculated and displayed.

While performance is still bad compared to a optimized GPU implementation (such
as [1] or [2]) this improves the situation.

[1]: https://tree.kummerlaender.eu/projects/symlbm_playground/
[2]: https://code.kummerlaender.eu/boltzgen/about/
</pre>
</div>
</content>
</entry>
<entry>
<title>Approximate curl only if all bases are fluid</title>
<updated>2019-04-29T17:42:29+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-29T17:42:29+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=35e2c7a949dedf3221887ffdc14dddb4c5e84f4c'/>
<id>35e2c7a949dedf3221887ffdc14dddb4c5e84f4c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>More consistent restrictions of display values</title>
<updated>2019-04-28T18:41:07+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-28T18:41:07+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=d290dcd50821308a08aed4b1bcd6087e16b0c1ed'/>
<id>d290dcd50821308a08aed4b1bcd6087e16b0c1ed</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Experimental visualization of the velocity curl</title>
<updated>2019-04-28T12:22:15+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-28T10:53:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=ecaf665a05bdfcd10937152c378cfaec7cdf1836'/>
<id>ecaf665a05bdfcd10937152c378cfaec7cdf1836</id>
<content type='text'>
Calculating the curl of our simulated velocity field requires an additional
compute shader step. Handling of buffer and shader switching depending on
the display mode is implemented rudimentarily for now.
Most of this commit is scaffolding, the actual computation is more or less
trivial:

```
const float dxvy = (getFluidVelocity(x+1,y).y - getFluidVelocity(x-1,y).y)
                 / (2*convLength);
const float dyvx = (getFluidVelocity(x,y+1).x - getFluidVelocity(x,y-1).x)
                 / (2*convLength);

setFluidExtra(x, y, dxvy - dyvx);
```

This implements the following discretization of the 2d curl operator:

Let $V : \mathbb{N}^2 \to \mathbb{R}^2$ be the simulated velocity field at
discrete lattice points spaced by $\Delta x \in \mathbb{R}_{\gt 0}$.
We want to approximate the $z$-component of the curl for visualization:
$$\omega := \partial_x F_y - \partial_y F_x$$

As we do not possess the actual function $F$ but only its values at a
set of discrete points we approximate the two partial derivatives using
a second order central difference scheme:
$$\overline{\omega}(i,j) := \frac{F_y(i+1,j) - F_y(i-1,j)}{2 \Delta x} - \frac{F_x(i,j+1) - F_x(i,j-1)}{2 \Delta x}$$

Note that the scene shader does some further rescaling of the curl to better
fit the color palette. One issue that irks me is the emergence of some
artefacts near boundaries as well as isolated "single-cell-vortices".
This might be caused by running the simulation too close to divergence
but as I am currently mostly interested in building an interactive fluid
playground it could be worth it to try running an additional smoothening
shader pass to straighten things out.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Calculating the curl of our simulated velocity field requires an additional
compute shader step. Handling of buffer and shader switching depending on
the display mode is implemented rudimentarily for now.
Most of this commit is scaffolding, the actual computation is more or less
trivial:

```
const float dxvy = (getFluidVelocity(x+1,y).y - getFluidVelocity(x-1,y).y)
                 / (2*convLength);
const float dyvx = (getFluidVelocity(x,y+1).x - getFluidVelocity(x,y-1).x)
                 / (2*convLength);

setFluidExtra(x, y, dxvy - dyvx);
```

This implements the following discretization of the 2d curl operator:

Let $V : \mathbb{N}^2 \to \mathbb{R}^2$ be the simulated velocity field at
discrete lattice points spaced by $\Delta x \in \mathbb{R}_{\gt 0}$.
We want to approximate the $z$-component of the curl for visualization:
$$\omega := \partial_x F_y - \partial_y F_x$$

As we do not possess the actual function $F$ but only its values at a
set of discrete points we approximate the two partial derivatives using
a second order central difference scheme:
$$\overline{\omega}(i,j) := \frac{F_y(i+1,j) - F_y(i-1,j)}{2 \Delta x} - \frac{F_x(i,j+1) - F_x(i,j-1)}{2 \Delta x}$$

Note that the scene shader does some further rescaling of the curl to better
fit the color palette. One issue that irks me is the emergence of some
artefacts near boundaries as well as isolated "single-cell-vortices".
This might be caused by running the simulation too close to divergence
but as I am currently mostly interested in building an interactive fluid
playground it could be worth it to try running an additional smoothening
shader pass to straighten things out.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update README to include more recent visuals</title>
<updated>2019-04-24T20:50:04+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2019-04-24T20:50:04+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=fa708e6ed52115026f5dd09d270445cfb1b9f26a'/>
<id>fa708e6ed52115026f5dd09d270445cfb1b9f26a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add support for erasing walls</title>
<updated>2019-04-24T20:37:49+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-24T20:37:49+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=15f33fd09cffe05e82f5a1008cbfc2b2b12c8187'/>
<id>15f33fd09cffe05e82f5a1008cbfc2b2b12c8187</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Bind key to reset lattice buffers</title>
<updated>2019-04-18T20:15:39+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-18T20:15:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=34566b28a82869cbf004d91c6d658ba71d40ed97'/>
<id>34566b28a82869cbf004d91c6d658ba71d40ed97</id>
<content type='text'>
i.e. restarting the simulation without clearing the geometry
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
i.e. restarting the simulation without clearing the geometry
</pre>
</div>
</content>
</entry>
<entry>
<title>Add ctags to dev environment</title>
<updated>2019-04-18T20:15:15+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-18T20:15:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=1ad4daa0289c56e3d6b896d5037002aa6b461674'/>
<id>1ad4daa0289c56e3d6b896d5037002aa6b461674</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Bind keys for display toggling, palette scaling</title>
<updated>2019-04-18T18:46:10+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-18T18:46:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=043d419aba6ce2cfc41377dcc913e88820a7d589'/>
<id>043d419aba6ce2cfc41377dcc913e88820a7d589</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Pause lattice updates independently of UI</title>
<updated>2019-04-17T19:18:11+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-17T19:18:11+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=9a48932e393b8bb714e5b7748f6498f4e2e2d233'/>
<id>9a48932e393b8bb714e5b7748f6498f4e2e2d233</id>
<content type='text'>
This way walls may be drawn without disrupting the active fluid flow
even more than necessary.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This way walls may be drawn without disrupting the active fluid flow
even more than necessary.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve color palette of Knudsen criterion mode</title>
<updated>2019-04-17T18:50:49+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-17T18:50:49+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=303025eda4e10a0d962231c7b3349f8b9cb8cfa1'/>
<id>303025eda4e10a0d962231c7b3349f8b9cb8cfa1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add flag to toggle fluid quality display</title>
<updated>2019-04-16T21:14:06+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-16T21:14:06+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=e40114aad7fb5665c97c1b048515f0443cda5700'/>
<id>e40114aad7fb5665c97c1b048515f0443cda5700</id>
<content type='text'>
e.g. check out `./compustream --size 512 128 --open --lups 300 --quality`
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
e.g. check out `./compustream --size 512 128 --open --lups 300 --quality`
</pre>
</div>
</content>
</entry>
<entry>
<title>Add basic physical scaling and Knudsen quality criterion</title>
<updated>2019-04-16T20:45:11+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-04-16T20:45:11+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=fc02e4c5f8c8bbb014449dc27d7b69992ad6043f'/>
<id>fc02e4c5f8c8bbb014449dc27d7b69992ad6043f</id>
<content type='text'>
The paper "Automatic grid refinement criterion for lattice Boltzmann method" [2015]
by Lagrava et al. describes a criterion for measuring the local simulation quality
using a comparison of the theoretical Knudsen number and the quotient of the cells's
non-equilibrium and equilibrium function.

While this criterion was developed to enable automatic selection of areas to be refined,
it also offers a interesting and unique perspective on the fluid structure.

As the criterion requires calculation of the modeled Reynolds-, Mach- and Knudsen-numbers
I took the time to set up the basics for scaling the simulation to actually model a physical
system. Or rather calculating which physical model is represented by the chosen resolution
and relaxation time.

[2015]: https://arxiv.org/abs/1507.06767
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The paper "Automatic grid refinement criterion for lattice Boltzmann method" [2015]
by Lagrava et al. describes a criterion for measuring the local simulation quality
using a comparison of the theoretical Knudsen number and the quotient of the cells's
non-equilibrium and equilibrium function.

While this criterion was developed to enable automatic selection of areas to be refined,
it also offers a interesting and unique perspective on the fluid structure.

As the criterion requires calculation of the modeled Reynolds-, Mach- and Knudsen-numbers
I took the time to set up the basics for scaling the simulation to actually model a physical
system. Or rather calculating which physical model is represented by the chosen resolution
and relaxation time.

[2015]: https://arxiv.org/abs/1507.06767
</pre>
</div>
</content>
</entry>
<entry>
<title>Test density inflow condition</title>
<updated>2019-02-27T20:39:59+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-27T20:39:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=89718b245b0246e08f9d0545a636e0cf89642a72'/>
<id>89718b245b0246e08f9d0545a636e0cf89642a72</id>
<content type='text'>
Seems to be more stable when drawing around.

Not that all of this doesn't aim to be accurate in any real world sense.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Seems to be more stable when drawing around.

Not that all of this doesn't aim to be accurate in any real world sense.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add some rudimentary argument parsing</title>
<updated>2019-02-27T18:59:27+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-27T18:59:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=72cc7c54d0feb842f4fe07ce55c50f50b706c2f0'/>
<id>72cc7c54d0feb842f4fe07ce55c50f50b706c2f0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add LUPS reporting and fix glaring oversight</title>
<updated>2019-02-25T21:08:58+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-25T21:08:53+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=84666523e9a278ac95ca43dbaa534e8aaaf3ebd2'/>
<id>84666523e9a278ac95ca43dbaa534e8aaaf3ebd2</id>
<content type='text'>
The GLFW window rendering loop used to dispatch the compute shaders was
restricted to 60 FPS. I did not notice this because I never actually
measured the computed lattice updates per seconds in addition to trying
to push the GPU to its limits. Turns out the lattice sizes I commonly
use can be updated 500 times per second comfortably… Now this looks more
like the performance gains promised by GPU computation.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The GLFW window rendering loop used to dispatch the compute shaders was
restricted to 60 FPS. I did not notice this because I never actually
measured the computed lattice updates per seconds in addition to trying
to push the GPU to its limits. Turns out the lattice sizes I commonly
use can be updated 500 times per second comfortably… Now this looks more
like the performance gains promised by GPU computation.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add cylinder and dampened inflow to open geometry</title>
<updated>2019-02-25T20:29:03+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-25T20:29:03+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=9ed8efcc53f54dce8ec34279e47df851693854ec'/>
<id>9ed8efcc53f54dce8ec34279e47df851693854ec</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge streaming into collide shader</title>
<updated>2019-02-25T18:57:11+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-25T18:57:11+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=26c1cf58f483e64d80703fe37c4bd3923d1ff5b7'/>
<id>26c1cf58f483e64d80703fe37c4bd3923d1ff5b7</id>
<content type='text'>
i.e. implement the A-B pattern.

Dispatching only one compute shader per interaction-less simulation step
already yields very noticeable performance gains. All cell types are now
fully handled by the collide shader which further simplifies the code.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
i.e. implement the A-B pattern.

Dispatching only one compute shader per interaction-less simulation step
already yields very noticeable performance gains. All cell types are now
fully handled by the collide shader which further simplifies the code.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add flag to select initial geometry</title>
<updated>2019-02-24T20:35:52+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T20:35:52+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=dbac2c0b8722e17ea211fc47a6fd92f8db48402e'/>
<id>dbac2c0b8722e17ea211fc47a6fd92f8db48402e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Play around with open boundaries</title>
<updated>2019-02-24T19:56:50+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T19:56:46+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=82a37700e3ff8c1b9c43dbf00c05bd112bd58ec8'/>
<id>82a37700e3ff8c1b9c43dbf00c05bd112bd58ec8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Further abstract mouse handling</title>
<updated>2019-02-24T13:07:16+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T13:07:16+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=1f2b1cb037a202cafe25167c071a2615341dafdb'/>
<id>1f2b1cb037a202cafe25167c071a2615341dafdb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Move geometry initialization into named function</title>
<updated>2019-02-24T12:19:27+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T12:19:27+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=ecaa33e25b42f945fa09dc21b6db53ef330f2cc2'/>
<id>ecaa33e25b42f945fa09dc21b6db53ef330f2cc2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract interaction logic into separate shader</title>
<updated>2019-02-24T12:02:14+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T12:02:14+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=2d97364b3cdf1354e5b60807732d447217436523'/>
<id>2d97364b3cdf1354e5b60807732d447217436523</id>
<content type='text'>
The collide shader became to crowded for my taste.

As a nice side benefit we can now execute interaction processing only
when actual interaction is taking place.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The collide shader became to crowded for my taste.

As a nice side benefit we can now execute interaction processing only
when actual interaction is taking place.
</pre>
</div>
</content>
</entry>
<entry>
<title>Smoothen mouse interaction</title>
<updated>2019-02-24T11:25:08+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-24T11:25:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=1ab5f3db018a3169ad6074fc2b75d44c3a45dd16'/>
<id>1ab5f3db018a3169ad6074fc2b75d44c3a45dd16</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Store material in fluid buffer and improve visualization</title>
<updated>2019-02-23T15:10:08+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-23T15:10:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=389da8159978571e8156ff7692bc595d957e846e'/>
<id>389da8159978571e8156ff7692bc595d957e846e</id>
<content type='text'>
Replaces the density value which is actually not that useful for visualization.

Encoding integer values as floats by casting and comparing them using
exact floating point comparison is not very safe but works out for now.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replaces the density value which is actually not that useful for visualization.

Encoding integer values as floats by casting and comparing them using
exact floating point comparison is not very safe but works out for now.
</pre>
</div>
</content>
</entry>
<entry>
<title>Tidy up wall drawing and geometry initialization</title>
<updated>2019-02-22T21:24:30+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-22T21:24:30+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=9779fd7484f7af6d10ae28ca3763c6d938c341e3'/>
<id>9779fd7484f7af6d10ae28ca3763c6d938c341e3</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Improvise interactive wall drawing</title>
<updated>2019-02-22T20:49:07+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-22T20:49:07+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=f0b536ac93b3a9a49dfff8a7637f09b153a3b955'/>
<id>f0b536ac93b3a9a49dfff8a7637f09b153a3b955</id>
<content type='text'>
Internal wall cells need to be disabled to prevent delayed propagation
of the reflected populations.

This is just quickly thrown together - both the visual drawing and the backend's
material handling remain to be improved.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Internal wall cells need to be disabled to prevent delayed propagation
of the reflected populations.

This is just quickly thrown together - both the visual drawing and the backend's
material handling remain to be improved.
</pre>
</div>
</content>
</entry>
<entry>
<title>Tidy up streaming and bounce back boundary handling</title>
<updated>2019-02-20T22:58:15+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-20T22:58:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=1870b510acb351b5956402a21572835aa0d2dee0'/>
<id>1870b510acb351b5956402a21572835aa0d2dee0</id>
<content type='text'>
Introduce a inactive receive-only outer boundary to simplify streaming.
Extract and generalize bounce back handling. Further work will require
tracking cell _material_ to enable both easier definition and dynamic
updating of the geometry.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Introduce a inactive receive-only outer boundary to simplify streaming.
Extract and generalize bounce back handling. Further work will require
tracking cell _material_ to enable both easier definition and dynamic
updating of the geometry.
</pre>
</div>
</content>
</entry>
<entry>
<title>Initialize cells using their equilibrium distribution</title>
<updated>2019-02-20T22:52:02+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-20T22:52:02+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=409ca238ec8f4f405443931947b2a85c03754bc9'/>
<id>409ca238ec8f4f405443931947b2a85c03754bc9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use same population indexing in collide and stream</title>
<updated>2019-02-18T08:00:42+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-02-18T08:00:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=823a9dade6e36760a827aae6ac841b8c582a7935'/>
<id>823a9dade6e36760a827aae6ac841b8c582a7935</id>
<content type='text'>
Increases consistency and should help to avoid confusion
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Increases consistency and should help to avoid confusion
</pre>
</div>
</content>
</entry>
<entry>
<title>Add MIT license</title>
<updated>2019-01-15T15:32:41+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2019-01-15T15:32:04+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=1fb15504b07bf78e1881d0a49b3548cba840c7a3'/>
<id>1fb15504b07bf78e1881d0a49b3548cba840c7a3</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add README.md</title>
<updated>2018-12-27T19:10:50+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-27T19:10:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=05b2ac3792997fae015d85a09aff052d264288a1'/>
<id>05b2ac3792997fae015d85a09aff052d264288a1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Extract equilibrium function</title>
<updated>2018-12-19T20:12:39+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-19T20:12:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=5220729b8078c0b12dfbd403fb443c969362547b'/>
<id>5220729b8078c0b12dfbd403fb443c969362547b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Loopify density function</title>
<updated>2018-12-19T20:05:58+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-19T20:05:58+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=762fb7fa5304a8e96757c091667d157f4a0bd311'/>
<id>762fb7fa5304a8e96757c091667d157f4a0bd311</id>
<content type='text'>
…seems to be correctly unrolled during compilation. Or at least no
performance impact is visible.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
…seems to be correctly unrolled during compilation. Or at least no
performance impact is visible.
</pre>
</div>
</content>
</entry>
<entry>
<title>Use GLSL's mix function for color scaling</title>
<updated>2018-12-19T18:31:10+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-19T18:31:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=8df8940bced82cad259bc8144aa3668871222d22'/>
<id>8df8940bced82cad259bc8144aa3668871222d22</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Tidy up external influence implementation</title>
<updated>2018-12-19T18:07:31+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-19T18:07:05+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=994f70f0dd8fff208fab050a8a58f7fdf7bcfb24'/>
<id>994f70f0dd8fff208fab050a8a58f7fdf7bcfb24</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Hacky mouse-based fluid interaction</title>
<updated>2018-12-18T20:08:20+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-18T20:08:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=6f6073be5de8c8598c4af7f38c90c3f83b5bf1bf'/>
<id>6f6073be5de8c8598c4af7f38c90c3f83b5bf1bf</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use pressure as velocity norm display amplifier</title>
<updated>2018-12-18T19:04:51+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-18T19:04:51+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=d58c4cbeb95e25ea08994e4d39f657d078a33782'/>
<id>d58c4cbeb95e25ea08994e4d39f657d078a33782</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Purify collide shader</title>
<updated>2018-12-18T16:04:18+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-18T16:04:18+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=fed710754296111a51b1b99b40a3c5e5dc873895'/>
<id>fed710754296111a51b1b99b40a3c5e5dc873895</id>
<content type='text'>
i.e. move fluid vertex placement to appropriate vertex shader.
     Do not amplify or shift fluid moments in any way prior to
     passing it to the display pipeline.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
i.e. move fluid vertex placement to appropriate vertex shader.
     Do not amplify or shift fluid moments in any way prior to
     passing it to the display pipeline.
</pre>
</div>
</content>
</entry>
<entry>
<title>Clean up stream and collide compute shaders</title>
<updated>2018-12-17T20:01:53+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-17T20:01:53+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=556f6cea377f6e8620d05081946f8b469b8a1339'/>
<id>556f6cea377f6e8620d05081946f8b469b8a1339</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Keep track of window size in its wrapper class</title>
<updated>2018-12-17T18:31:38+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-17T18:31:38+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=f465b26a8aeac95cf7e0186a86ab1262dc771fb4'/>
<id>f465b26a8aeac95cf7e0186a86ab1262dc771fb4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Try out velocity norm color mapping</title>
<updated>2018-12-17T18:09:25+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-17T18:09:25+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=ede5386d53a453cb56c9b1c80de0a80322ddc6f1'/>
<id>ede5386d53a453cb56c9b1c80de0a80322ddc6f1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix glDrawArray call</title>
<updated>2018-12-17T18:08:50+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-17T18:08:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=85ad73153d1193e51e77ca825416df3794443fa4'/>
<id>85ad73153d1193e51e77ca825416df3794443fa4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Filter weird origin vertex</title>
<updated>2018-12-16T22:46:32+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-16T22:46:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=dc69fab1565659241eb6f2f3576076872e86c45e'/>
<id>dc69fab1565659241eb6f2f3576076872e86c45e</id>
<content type='text'>
The same thing occurs in computicle. I suspect some initialization /
compute shader invokation problem. On the other hand: Why would that
happen for the origin vertex and not e.g. the first or last vertex
in memory? To be investigated further.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The same thing occurs in computicle. I suspect some initialization /
compute shader invokation problem. On the other hand: Why would that
happen for the origin vertex and not e.g. the first or last vertex
in memory? To be investigated further.
</pre>
</div>
</content>
</entry>
<entry>
<title>Generate fluid display using geometry shaders</title>
<updated>2018-12-16T21:09:17+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-16T21:09:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=ce334547f0f0560386ca8b97f354d83da68019a5'/>
<id>ce334547f0f0560386ca8b97f354d83da68019a5</id>
<content type='text'>
This should provide much more flexibility.

For our purpose it would be useful if the vertex shader was executed
after the geometry shader (to apply the projection matrix) but alas
this is not the case. Thus the MVP matrix is applied during geometry
construction and the vertex shader only provides density extraction.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This should provide much more flexibility.

For our purpose it would be useful if the vertex shader was executed
after the geometry shader (to apply the projection matrix) but alas
this is not the case. Thus the MVP matrix is applied during geometry
construction and the vertex shader only provides density extraction.
</pre>
</div>
</content>
</entry>
<entry>
<title>Regeneralize ComputeShader wrapper</title>
<updated>2018-12-16T14:16:21+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-16T14:16:21+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=52cbbff72bd5516b5f325d1c88e4fcd8ca67f989'/>
<id>52cbbff72bd5516b5f325d1c88e4fcd8ca67f989</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Parametrize lattice resolution</title>
<updated>2018-12-16T12:58:20+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-16T12:58:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=2eb7f9925315989735b4fb746cbd7bda6c9bd5bb'/>
<id>2eb7f9925315989735b4fb746cbd7bda6c9bd5bb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Hacky D2Q9 BGK LBM on GPU using GLSL compute shaders</title>
<updated>2018-12-15T22:09:32+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2018-12-15T22:09:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/compustream/commit/?id=44f5ac32a68a617f93704d44c4339f7db13b323e'/>
<id>44f5ac32a68a617f93704d44c4339f7db13b323e</id>
<content type='text'>
Improvised on top of computicles's scaffolding.

Works in a world where _works_ is defined as "displays stuff on screen that invokes thoughts of fluid movement".
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Improvised on top of computicles's scaffolding.

Works in a world where _works_ is defined as "displays stuff on screen that invokes thoughts of fluid movement".
</pre>
</div>
</content>
</entry>
</feed>
