public void UpdateFluid(ParticleSystem particleSystem){
		particleSystem.ApplyExternelForce();
		ODESolver.EulerToStar(particleSystem.getParticles());
		//find neighbours
		long startTime=System.currentTimeMillis();
		particleSystem.FitIntoCells();
		particleSystem.UpdateNeighbours();
		long neighbourEndTime=System.currentTimeMillis();
		// make it align with constraints
		for(int i = 0; i < 3; i++){
			long beginDeltaPos=System.currentTimeMillis();
			for(Particle particle:particleSystem.getParticles()){
				ComputeC(particle);
			}
			long endCtime=System.currentTimeMillis();
			for(Particle particle:particleSystem.getParticles()){
				ComputeLamda(particle);
			}
			long endLamdaTime=System.currentTimeMillis();
			for(Particle particle:particleSystem.getParticles()){
				ComputeDeltaPos(particle);
			}
			long endDeltaPos=System.currentTimeMillis();
			particleSystem.CollisionWithBox();
			long endCollision=System.currentTimeMillis();
			for(Particle particle:particleSystem.getParticles()){
				particle.getPosStar().Add(particle.getDeltaPos());
			}
			System.out.println("neighbour time = " + (neighbourEndTime - startTime) + "\t delta pos = " + (endDeltaPos - beginDeltaPos) 
					+ "\t collistion = " + (endCollision - endDeltaPos) + "\t C time = "  + (endCtime - beginDeltaPos) + "\tlandatime =" + (endLamdaTime - endCtime));
		}
		
		//v = (posStar-pos) / t
		for(Particle particle : particleSystem.getParticles()){
			particle.setVelocity(Vector3D.Scale(Vector3D.Substract(particle.getPosStar(), particle.getPos()), 1/0.05f));
		}
			
		//apply vorticity confinement and XSPH viscosity
		// pos = posStar
		for(Particle particle : particleSystem.getParticles()){
			Vector3D posStar = particle.getPosStar();
			particle.getPos().set(posStar.x, posStar.y, posStar.z);
		}
	}