Introduction to computational fluid dynamics