Axiom.Demos.DynamicTextures.runStep C# (CSharp) Method

runStep() private method

private runStep ( ) : void
return void
		void runStep()
		{
			int x, y;
			for ( x = 0; x < mSize; x++ )
			{
				delta[ 0 ][ x ] = 0;
				delta[ 1 ][ x ] = 0;
			}
			// Boundary conditions
			int idx;
			idx = 0;
			for ( y = 0; y < reactorExtent; y++ )
			{
				chemical[ 0 ][ idx ] = chemical[ 0 ][ idx + reactorExtent - 2 ];
				chemical[ 0 ][ idx + reactorExtent - 1 ] = chemical[ 0 ][ idx + 1 ];
				chemical[ 1 ][ idx ] = chemical[ 1 ][ idx + reactorExtent - 2 ];
				chemical[ 1 ][ idx + reactorExtent - 1 ] = chemical[ 1 ][ idx + 1 ];
				idx += reactorExtent;
			}
			int skip = reactorExtent * ( reactorExtent - 1 );
			for ( y = 0; y < reactorExtent; y++ )
			{
				chemical[ 0 ][ y ] = chemical[ 0 ][ y + skip - reactorExtent ];
				chemical[ 0 ][ y + skip ] = chemical[ 0 ][ y + reactorExtent ];
				chemical[ 1 ][ y ] = chemical[ 1 ][ y + skip - reactorExtent ];
				chemical[ 1 ][ y + skip ] = chemical[ 1 ][ y + reactorExtent ];
			}
			// Diffusion
			idx = reactorExtent + 1;
			for ( y = 0; y < reactorExtent - 2; y++ )
			{
				for ( x = 0; x < reactorExtent - 2; x++ )
				{
					delta[ 0 ][ idx ] += MULT( chemical[ 0 ][ idx - reactorExtent ] + chemical[ 0 ][ idx - 1 ]
									- 4 * chemical[ 0 ][ idx ] + chemical[ 0 ][ idx + 1 ]
									+ chemical[ 0 ][ idx + reactorExtent ], hdiv0 );
					delta[ 1 ][ idx ] += MULT( chemical[ 1 ][ idx - reactorExtent ] + chemical[ 1 ][ idx - 1 ]
									- 4 * chemical[ 1 ][ idx ] + chemical[ 1 ][ idx + 1 ]
									+ chemical[ 1 ][ idx + reactorExtent ], hdiv1 );
					idx++;
				}
				idx += 2;
			}
			// Reaction (Grey-Scott)
			idx = reactorExtent + 1;
			int U, V;

			for ( y = 0; y < reactorExtent - 2; y++ )
			{
				for ( x = 0; x < reactorExtent - 2; x++ )
				{
					U = chemical[ 0 ][ idx ];
					V = chemical[ 1 ][ idx ];
					int UVV = MULT( MULT( U, V ), V );
					delta[ 0 ][ idx ] += -UVV + MULT( F, ( 1 << 16 ) - U );
					delta[ 1 ][ idx ] += UVV - MULT( F + k, V );
					idx++;
				}
				idx += 2;
			}
			// Update concentrations
			for ( x = 0; x < mSize; x++ )
			{
				chemical[ 0 ][ x ] += MULT( delta[ 0 ][ x ], dt );
				chemical[ 1 ][ x ] += MULT( delta[ 1 ][ x ], dt );
			}
		}