Computer simulation is an indispensable research tool in modeling, understanding and predicting nanoscale phenomena. However, the advanced computer codes used by researchers are too complicated for graduate students wanting to understand computer simulations of physical systems. This book gives students the tools to develop their own codes. Describing advanced algorithms, the book is ideal for students in computational physics, quantum mechanics, atomic and molecular physics, and condensed matter theory. It contains a wide variety of practical examples of varying complexity to help readers at all levels of experience. An algorithm library in Fortran 90, available online at www.cambridge.org/9781107001701, implements the advanced computational approaches described in the text to solve physical problems.