void ciMsaFluidSolver::advectRGB(int bound, const ci::Vec2f* duv) {
	int i0, j0;
	float x, y, s0, t0, s1, t1, dt0x, dt0y;
	int	index;
	
	dt0x = _dt * _NX;
	dt0y = _dt * _NY;
	
	for (int j = _NY; j > 0; --j)
	{
		for (int i = _NX; i > 0; --i)
		{
			index = FLUID_IX(i, j);
			x = i - dt0x * duv[index].x;
			y = j - dt0y * duv[index].y;
			
			if (x > _NX + 0.5) x = _NX + 0.5f;
			if (x < 0.5)     x = 0.5f;
			
			i0 = (int) x;
			
			if (y > _NY + 0.5) y = _NY + 0.5f;
			if (y < 0.5)     y = 0.5f;
			
			j0 = (int) y;
			
			s1 = x - i0;
			s0 = 1 - s1;
			t1 = y - j0;
			t0 = 1 - t1;
			
			i0 = FLUID_IX(i0, j0);	//we don't need col/row index any more but index in 1 dimension
			j0 = i0 + (_NX + 2);
			r[index] = s0 * ( t0 * rOld[i0] + t1 * rOld[j0] ) + s1 * ( t0 * rOld[i0+1] + t1 * rOld[j0+1] );
			g[index] = s0 * ( t0 * gOld[i0] + t1 * gOld[j0] ) + s1 * ( t0 * gOld[i0+1] + t1 * gOld[j0+1] );                  
			b[index] = s0 * ( t0 * bOld[i0] + t1 * bOld[j0] ) + s1 * ( t0 * bOld[i0+1] + t1 * bOld[j0+1] );                          
		}
	}
	setBoundaryRGB();
}
	void FluidSolver::advectRGB(int bound, const ofVec2f* duv) {
		int i0, j0;
		float x, y, s0, t0, s1, t1, dt0x, dt0y;
		int	index;
		
		dt0x = deltaT * _NX;
		dt0y = deltaT * _NY;
		
		for (int j = _NY; j > 0; --j)
		{
			for (int i = _NX; i > 0; --i)
			{
				index = FLUID_IX(i, j);
				x = i - dt0x * duv[index].x;
				y = j - dt0y * duv[index].y;
				
				if (x > _NX + 0.5) x = _NX + 0.5f;
				if (x < 0.5)     x = 0.5f;
				
				i0 = (int) x;
				
				if (y > _NY + 0.5) y = _NY + 0.5f;
				if (y < 0.5)     y = 0.5f;
				
				j0 = (int) y;
				
				s1 = x - i0;
				s0 = 1 - s1;
				t1 = y - j0;
				t0 = 1 - t1;
				
				i0 = FLUID_IX(i0, j0);	//we don't need col/row index any more but index in 1 dimension
				j0 = i0 + (_NX + 2);
				color[index] = ( colorOld[i0] * t0 + colorOld[j0] * t1 ) * s0 + ( colorOld[i0+1] * t0 + colorOld[j0+1] * t1) * s1;
			}
		}
		setBoundaryRGB();
	}