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); } }