: d dup ;
: fract d floor - ;
: px x .5 - ;
: py y .5 - ;
: len px d * py d * + sqrt ;
: mix 1 over - z* swap drop ;
: f fract 3 over 2 * - over * * ;
: power pop d push ;

: uvx px py atan2 pi 2 * / .5 + power * ;
: uvy len .4 * t .05 * + power * ;
: uvz .5 t .01 * + power * ;

: v power mod floor ;

: uv0x uvx v ;
: uv1x uvx 1 + v ;

: uv0y uvy v 100 * ;
: uv1y uvy 1 + v 100 * ;

: uv0z uvz v 10000 * ;
: uv1z uvz 1 + v 10000 * ;

: vx uv0x uv0y uv0z + + ;
: vy uv1x uv0y uv0z + + ;
: vz uv0x uv1y uv0z + + ;
: vw uv1x uv1y uv0z + + ;

: ra .001 * sin 100000 * fract ;
: rb uv1z + uv0z - ra ;
: r0 vx ra vy ra uvx f mix vz ra vw ra uvx f mix uvy f mix ;
: r1 vx rb vy rb uvx f mix vz rb vw rb uvx f mix uvy f mix ;

2 len 6 * -

1.5 2 / 16 push

r0 r1 uvz f mix 2 * 1 -
*
+
pop drop

( color correction )
abs sqrt 1 swap - 0 max

1.5 * d 2 ** .4 * over 3 ** .15 * rot
( 3 / d 2.5 * over sqrt )

( based on “Ball of Fire” GLSL shader by Trisomie21 )