Updated my Map of the Universe project to include the SDSS3-DR12 data. It now visualizes 2.5 million galaxies, reaching up to the Hubble horizon.

I'm also making some updates to my Solar System project. Now the textures and small bodies are downloaded incrementally rather than all-at-once. The neighboring stars are also drawn with bubbles around their vicinity so relative distance is easier to see.


Since the last update I've been getting into LuaJIT+OpenCL. So much of the HydrodynamicsGPU project's OpenCL code became generated that I figured it would be best to grow that aspect of it further. C++ isn't the best language in the world for string manipulation, Lua was already being used for the configuration file, so I had basically created a C++ sandwich between a slice of Lua and a slice of OpenCL. I decided to get rid of the fat middleman and kicked out the C++.

Tada, the Hydro-CL-Lua project was born. String manipulation takes place via templating engine, which works so clean in Lua compared to other scripting languages. ImGui drives the GUI, relayed through LuaJIT FFI bindings of CImGui. OpenCL does the work. No C++ required.

Somewhere in the middle of this work, I decided to try to write a solver for the Einstein field equations, first in multithreaded C++, next in LuaJIT+OpenCL. The development of this and the OpenCL hydrodynamics project is slowly smoothing out the use cases for the LuaJIT+OpenCL libraries, all of which I have written exactly zero documentation for.

Some random math notes are now up in my math worksheets repository.


I've been contributing to my GitHub repos more than I have to this website lately. Hence the lack of an update in over a year.

In that time I've managed to successfully implement the 3D Bona-Masso ADM equations into the OpenCL Hydrodynamics project. Some videos can be found at its github repo. It is still lacking shift conditions or black hole excision. These are required to get a black hole merger simulation working.

I've also managed to add Special Relativistic Euler Equations to the OpenCL Hydrodynamics and Hyperbolic Conservation Law solver. From there, General Relativistic Hydrodynamics is a very simple thing, as long as you already have a General Relativistic solver working. Hence the Bona-Masso ADM solver mentioned above.

With all this comes a few changes to the Symbolic Lua project, namely a lot more index gymnastics and shorthand notation. I've already for a symbolic math library that can be easily called to and from C/C++, which is done easily, if not through Lua's own C api, then via the LuaCxx project. I'm also aiming for one that can handle tensor representations concisely and handle index gymnastics easily. Check out some of the examples alcubierre.lua, flrw.lua, gravitation_16_1.lua, or most the others for more on this. Some day I'll update the documentation as well.


Added a lot of random projects to my GitHub account. Many of them too small to justify a page on here. Here's the list: audio, image, simplex noise, integration tests, and data synchronization over network.

I also added a Lua parser to my abstract syntax tree project. My original purpose of the project was to be able to automatically inline Lua functions. I've applied this to the vector and TCP synchronization projects (as well as a few unpublished ones) and observed a significant increase in performance. However in the original version the inlined functions had to be provided in a hierarchy of ast objects. Now the parser should handle most of that for you.

You can probably see the common theme emerge from all these projects. Yes, I have coded up a videogame or two in LuaJIT. I plan to fish out all of the (c)'d artwork before posting them. I also plan to post my SDL+LuaJIT platform-specific umbrella projects, including the tolerable-performance Android version and the intolerable-performance Wii/devkitPro version.


Got a 1D simulation of gravitational waves to work. The 1D case uses a 5x5 matrix, which finally lent to success after my tinkering with 3x3 matrices for so long. The spherical symmetry simulation uses a 9x9 matrix, and worked so well I thought I'd revisit my MHD simulation.

Got Orszag-Tang working with Burgers MHD solver. I'm optimistic about the MHD Roe solver now.


Posted a page on Libs.v3 and WebGL Util, just to have something there. More needs to be written for them. Documentation is so much less fun than programming.

Got Euler HLLC working.

Got MHD HLLC working with Euler cases.

Now to get MHD HLLC working, and hopefully patch that into the fail case of the MHD Roe solver. Almost there.


Haven't fixed that last tiny hurdle in the MHD or the HLLC solver just yet. Got caught up in my Symbolic Lua project. Why, you ask? This will all come together eventually. Maybe no time soon. See, CAS's are great, but I haven't found too many (in my price range) that integrate well with code. There's always some degree of intermediate (1) copy the equations, (2) reformulate them to an integrator, (3) implement them in the actual code. That's where the Symbolic Lua project comes in. I never intended it as a replacement to other CAS's (like Maxima, which I'm still attached to for its -- once again -- much reduced price).

Instead, I wanted a library that integrated well with other code, yet could still express equations symbolically and as close to mathematical expressions as possible. I experimented a bit with compile-time template metaprogramming, but large systems tended to break certain compilers. From there I changed gears and tried doing it all in some script language, banking on the flexibility of languages for dynamic code generation. I've also got different language targets. Lua and Javascript now, with plans for OpenCL and the likes.

For a live example of what this looks like, check out my Metric Visualization project. All the partial and covariant derivatives are calculated symbolically. If I ever get around to it I'll add symbolic curvature calculations as well. For an offline example, check out the spring force test. It starts with a Hamiltonian and, from there, generates the explicit-integration update functions. I'm working on automatic implicit integration next.

How does this tie in with the MHD and HLLC solvers? While it doesn't replace them, especially with all the degeneracies in the MHD solver, I still wouldn't mind setting up a program that could accept any equation and list of state variables and churn out a first best guess at what the hyperbolic formalism looked like. Maybe for simple systems it wouldn't take much tweaking past that to get it to run? We'll see.


Got MHD symmetrization eigenbasis solved for all degenerate cases. Here's the results. The solver runs for a few seconds but then dies, due to a common negative pressure problem. Most papers I read say to solve it by switching to a HLLC solver during those negative pressure conditions. So I tried implementing a HLLC solver -- first for the compressible Euler equations -- and that too explodes after a few seconds. This is due to my choice in wavespeeds, or a bug in the math or the code. I just have to iron out those details. Nonetheless, my self-gravitating shockwave-capturing 1D-3D magnetohydrodynamic Roe scheme is almost done.

I've also put some work into my Solar System simulation. This includes adding time controls back (now based on Keplerian orbital elements, since full N-body simulation would take some effort), incorporating data for the 100,000 stars at the HYG Star Database, and adding exoplanetary star systems from the Open Exoplanet Catalogue. Plus lots of polish. Now you can fly around our local corner of the galaxy, all at correct scale in simulation. The next step is incorporating the universe simulation or some larger database rendition thereof.

I also added the 500,000+ small bodies, comets, and asteroids from NASA's JPL SSD small-bodies data. They can, however, only be searched and added one at a time. Or twenty at a time. Point being, you can't see all 500,000 of them at the moment, not without too much performance overhead. Another next step is to get these all rendering in realtime.


Seems I've been populating my GitHub account more than this site. One object of note is yet another framework + build system for C++ projects.

Another is the Social Browsing plugin to the website, allowing you to see where everyone's mouse cursor is while browsing the site -- and to chat with them by simply typing text outside of any input elements or text areas.

I'm working on adding the MHD equations to my OpenCL Hydrodynamics project. I still haven't solved for all degenerate cases of the eigensystems. You can follow my progress in this Maxima worksheet.


Ported hydrodynamics to OpenCL so I could get a realtime 3D simulation going. I've also added some math oddities such as the 4D Renderer and Metric Visualization. The Metric Visualization coincides with the math used in the Black Hole Raytracer and the Relativistic Simulation, and is in the same vein as the Symbolic Lua and Tensor Calculator projects. It is especially nifty in its demonstration of LaTeX/MathJax output from the Symbolic Lua project. Makes me want to incorporate LaTeX/MathJax into the Symbolic Lua page.


Teaching myself hydrodynamics. I have a 1D, 2D, and 2D GPU-driven example. Plans to do crazy things like AMR and arbitrary hyperbolic problems (1D ADM, MHD, etc). Maybe someday 3D even.


Added a solar system visualizer that lets you view gravitational and tidal influences on planets by other planets. Also added an Emscripten console to some of the Lua math modules. Now you can try them out from the browser.


I did add some Lua symbolic math tools: Symbolic Lua for your basic equation simplification needs and Lua Tensor Calculator for applying them to lots of equations at once. As you can tell from the demos of Symbolic Lua, it is easier to write your own tensor math out yourself rather than to try to integrate these two.

Speaking of math, I put a demo of different integration methods online. Nothing pretty, and the Adams-Bashforth is buggy as you can tell. Feel free to tell me what the bug is.


I added a time dilation demo.


I've spent the last two years studying physics in my free time. I've been tied up in a 6-month horrible employment ordeal and a subsequent 18-month lawsuit, so I've had a lot of free time on my hands. Here's the story if you're interested. Now that it's over I'm going to start building and posting physics demos to the website. Right now I've got a WebGL Map of the Universe and a Hydrogen wavefunction visualizer. Expect more to come!


Nothing new for a while, but I am prepping to post some old projects that I've been picking at for years now. These include my 2D engine; it's predecessor, a 3D engine; my thesis; and surely some other little things here and there.


Started working on some Android games. Keep an eye on that site to see how they progress.


I started on this one a while back and only now finally came back around to finishing it. It is a symbolic math library for C++. You heard me. Right now all it supports is differentiation, with vectors too. I have half a heart to use it to automatically calculate gradients to complex vector equations for performaing optimizations (N-th order anyone?). More on that to come. Check it out here.


Lots has been going on behind the scenes. Lots of subtle updates. A new SDL umbrella code has been posted with intentions of hammering out the linux side of my build environments. Now Glush Windows comes with a DLL and a Screensaver build. The OS X version has a dylib build (which doesn't work by default with require for Lua, but can be if you manually add its extension to your LUA_CPATH), so it still needs a .so verison as well as a screensaver version.


I added a little something for Christmas.


I've updated the GL Lua Shell a few times. One feature was to add a color picture, as can be seen demonstrated in the GPU Fluid Simulation page. Another was to make the menu system pixel-based rather than sized according to some arbitrary ratio of the window.

Speaking of window ratios, I added Carbon windows resize functionality somewhere in there. It's a wonder I got by so long without it added. The menu system components are now set up with a scale parameter. Set the root's scale to a constant for arbitrary scaling. Set it to (c/width, c/width) to scale the menu to maintain its ratio while stretching the width of the screen. Set it to (c/height, c/height) to scale the menu to maintain ratio and stretch to height. Set it to (c/width, c/height) to simply stretch the menu to some arbitrary unit of measure independent of pixels.

Speaking of fluid simulation, I added that as well as a GPU implementation of Conway's Life as well as Wolfram's Rule 110.

...and the HTML Beautifier is now a HTML parser.


I added an important caveat on building anything Lua-based to my GL Lua Shell page.

I also added a mark-and-sweep garbage collection system. I implemented this in my menu system to hopefully give it even a bit more safety in the memory management side of things. With that comes updates for the menu system, parallax mapping demo, and the GL Lua Shell.


While updating things I also fixed some memory-management-on-shutdown bugs in the menu library and updated that. I also found a subtlety in the VirtualBox Windows OpenGL drivers that I'm using that was preventing glGetActiveUniformARB from working when I passed it a null buffer to fill its name with -- even if I asked it to write no characters into that null pointer. Now the parallax mapping demo works for me in Windows. I can't say if it would or wouldn't have for you, had you tried the script version before the GL Lua Shell update.

I also just learned that I can't tell you if any of my Windows-based code that uses framebuffer objects is working. That extension comes up as missing in my VirtualBox GL drivers. Maybe I'll use this as an opportunity to bullet-proff the GL Lua Shell on failing gracefully when it finds missing extensions...