This book describes a set of fundamental techniques for writing parallel application codes. These techniques form the basis for parallel algorithms frequently used in scientific and engineering applications. Parallel computing by itself is a very large topic as is scientific computing by itself. The book makes no claim of comprehensive coverage of either topic, just a basic outline of how to write parallel code for scientific applications.