Fundamentals of computational fluid dynamics