void fnAdvectSemiLagrange_time_fraction(FluidSolver* parent, FlagGrid& flags, MACGrid& vel, GridType& orig, int order, Real strength, Real time_fraction) {
        typedef typename GridType::BASETYPE T;
	
	Real dt = (time_fraction) * parent->getDt();
	std::cout << " time_fraction = " << time_fraction << std::endl ;
	std::cout << " dt = " << dt << std::endl ;
	bool levelset = orig.getType() & GridBase::TypeLevelset;

	// forward step
	GridType fwd(parent);
	SemiLagrange<T> (flags, vel, fwd, orig, dt, levelset);
	
	if (order == 1) {
		orig.swap(fwd);
	}
	else if (order == 2) { // MacCormack
		GridType bwd(parent);
		GridType newGrid(parent);
	
		// bwd <- backwards step
		SemiLagrange<T> (flags, vel, bwd, fwd, -dt, levelset);
		
		// newGrid <- compute correction
		MacCormackCorrect<T> (flags, newGrid, orig, fwd, bwd, strength, levelset);
		
		// clamp values
		MacCormackClamp<T> (flags, vel, newGrid, orig, fwd, dt);
		
		orig.swap(newGrid);
	}
}