This comprehensive book not only introduces the C and C++ programming languages but also shows how to use them in the numerical solution of partial differential equations (PDEs). It leads the reader through the entire solution process, from the original PDE, through the discretization stage, to the numerical solution of the resulting algebraic system. The well-debugged and tested code segments implement the numerical methods efficiently and transparently. Basic and advanced numerical methods are introduced and implemented easily and efficiently in a unified object-oriented approach.
The high level of abstraction available in C++ is particularly useful in the implementation of complex mathematical objects, such as unstructured mesh, sparse matrix, and multigrid hierarchy, often used in numerical modeling. This book introduces a unified approach for the implementation of these objects. The code segments and their detailed explanations clearly show how easy it is to implement advanced algorithms in C++. Solving PDEs in C++ contains all the required background in programming, PDEs, and numerical methods; only an elementary background in linear algebra and calculus is required. Useful exercises and solutions conclude each chapter. For the more advanced reader, there is also material on stability analysis and weak formulation. The final parts of the book demonstrate the object-oriented approach in advanced applications. The book is written for researchers, engineers, and advanced students who wish to increase their familiarity with numerical methods and to implement them in modern programming tools. Solving PDEs in C++ can be used as a textbook in courses in C++ with applications, C++ in engineering, numerical analysis, and numerical PDEs at the advanced undergraduate and graduate levels. Because it is self-contained, the book is also suitable for self-study by researchers and students in applied and computational science and engineering. List of Figures; List of Tables; Preface; Part I: Programming. Chapter 1: Introduction to C; Chapter 2: Introduction to C++; Chapter 3: Data Structures; Part II: The Object-Oriented Approach. Chapter 4: Object-Oriented Programming; Chapter 5: Algorithms and Their Object-Oriented Implementation; Chapter 6: Object-Oriented Analysis; Part III: Partial Differential Equations and Their Discretization. Chapter 7: The Convection-Diffusion Equation; Chapter 8: Stability Analysis 209; Chapter 9: Nonlinear Equations; Chapter 10: Application in Image Processing; Part IV: The Finite-Element Discretization Method. Chapter 11: The Weak Formulation; Chapter 12: Linear Finite Elements; Chapter 13: Unstructured Finite-Element Meshes; Chapter 14: Adaptive Mesh Refinement; Chapter 15: High-Order Finite Elements; Part V: The Numerical Solution of Large Sparse Linear Systems of Equations. Chapter 16: Sparse Matrices and Their Implementation; Chapter 17: Iterative Methods for Large Sparse Linear Systems; Chapter 18: Parallelism; Part VI: Applications. Chapter 19: Diffusion Equations; Chapter 20: The Linear Elasticity Equations; Chapter 21: The Stokes Equations; Chapter 22: Electromagnetic Waves; Appendix; Bibliography; Index.