Writing Scientific Software: A Guide to Good Style

Part I. Numerical Software: 1. Why numerical software? 2. Scientific computation and numerical analysis 3. Priorities 4. Famous disasters 5. Exercises Part II. Developing Software: 6. Basics of computer organization 7. Software design 8. Modularity and all that 9. Data structures 10. Design for testing and debugging 11. Exercises Part III. Efficiency in Time, Efficiency in Memory: 12. Be algorithm aware 13. Computer architecture and efficiency 14. Global vs. local optimization 15. Grabbing memory when you need it 16. Memory bugs and leaks Part IV. Tools: 17. Sources of scientific software 18. Unix tools 19. Cubic spline function library 20. Multigrid algorithms Appendix A: review of vectors and matrices Appendix B: trademarks Bibliography Index.

[1]  Yuefan Deng,et al.  New trends in high performance computing , 2001, Parallel Computing.

[2]  Gerth Stølting Brodal,et al.  Cache-Oblivious Algorithms and Data Structures , 2004, SWAT.

[3]  Jennifer Vesperman Essential CVS , 2003 .

[4]  Gene H. Golub,et al.  Matrix computations , 1983 .

[5]  L. Greengard,et al.  A new version of the Fast Multipole Method for the Laplace equation in three dimensions , 1997, Acta Numerica.

[6]  E. Hairer,et al.  Solving Ordinary Differential Equations I , 1987 .

[7]  Mike Mason Pragmatic Version Control Using Subversion , 2005 .

[8]  Intel Corportation,et al.  IA-32 Intel Architecture Software Developers Manual , 2004 .

[9]  Éva Tardos,et al.  Algorithm design , 2005 .

[10]  D. Anderson,et al.  Algorithms for minimization without derivatives , 1974 .

[11]  E. Hairer,et al.  Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems , 2010 .

[12]  Jean-François Monin Understanding formal methods , 2003 .

[13]  M. Pauline Baker,et al.  Computer Graphics, C Version , 1996 .

[14]  R. LeVeque Finite Volume Methods for Hyperbolic Problems: Characteristics and Riemann Problems for Linear Hyperbolic Equations , 2002 .

[15]  Jack J. Dongarra,et al.  A set of level 3 basic linear algebra subprograms , 1990, TOMS.

[16]  Adele Goldberg,et al.  SmallTalk 80: The Language , 1989 .

[17]  David E. Stewart,et al.  Meschach : matrix computations in C , 1994 .

[18]  William H. Press,et al.  Numerical Recipes in Fortran 77: The Art of Scientific Computing 2nd Editionn - Volume 1 of Fortran Numerical Recipes , 1992 .

[19]  A. Edelman,et al.  How many eigenvalues of a random matrix are real , 1994 .

[20]  Jack J. Dongarra,et al.  An extended set of FORTRAN basic linear algebra subprograms , 1988, TOMS.

[21]  L. R. Scott,et al.  The Mathematical Theory of Finite Element Methods , 1994 .

[22]  W. Miller The engineering of numerical software , 1984 .

[23]  R. K. Shyamasundar,et al.  Introduction to algorithms , 1996 .

[24]  Mark de Berg,et al.  Computational geometry: algorithms and applications , 1997 .

[25]  Bjarne Stroustrup,et al.  C++ : programovací jazyk : The C++ programming language (Orig.) , 1997 .

[26]  J. CARRIERt,et al.  A FAST ADAPTIVE MULTIPOLE ALGORITHM FOR PARTICLE SIMULATIONS * , 2022 .

[27]  R. Brent Algorithms for matrix multiplication , 1970 .

[28]  Will Venters,et al.  Software engineering: theory and practice , 2006 .

[29]  G.E. Moore,et al.  Cramming More Components Onto Integrated Circuits , 1998, Proceedings of the IEEE.

[30]  Michael L. Overton,et al.  Numerical Computing with IEEE Floating Point Arithmetic , 2001 .

[31]  Hans-Juergen Boehm Bounding space usage of conservative garbage collectors , 2002, POPL '02.

[32]  S. Griffis EDITOR , 1997, Journal of Navigation.

[33]  Charles R. Johnson,et al.  Matrix analysis , 1985, Statistical Inference for Engineers and Data Scientists.

[34]  Iain S. Duff,et al.  An overview of the sparse basic linear algebra subprograms: The new standard from the BLAS technical forum , 2002, TOMS.

[35]  David S. Johnson,et al.  Computers and Intractability: A Guide to the Theory of NP-Completeness , 1978 .

[36]  J. Douglas Faires,et al.  Numerical Analysis , 1981 .

[37]  Jack Dongarra,et al.  Templates for the Solution of Algebraic Eigenvalue Problems , 2000, Software, environments, tools.

[38]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[39]  G. W. Stewart,et al.  Building an Old-Fashioned Sparse Solver , 2003 .

[40]  Yishai A. Feldman,et al.  Algorithmics: The Spirit of Computing , 1987 .

[41]  Ronald F. Boisvert,et al.  Developing numerical libraries in Java , 1998, Concurr. Pract. Exp..

[42]  K. Stüben A review of algebraic multigrid , 2001 .

[43]  Claes Johnson,et al.  Computational Differential Equations , 1996 .

[44]  Bertrand Meyer,et al.  Eiffel: The Language , 1991 .

[45]  J. Miller Numerical Analysis , 1966, Nature.

[46]  Brian W. Kernighan,et al.  The elements of programming style (2. ed.) , 1978 .

[47]  M. Laszlo Computational Geometry and Computer Graphics in C , 1995 .

[48]  Stéphane Bressan,et al.  Introduction to Database Systems , 2005 .

[49]  Robert Mecklenburg Managing Projects with GNU Make , 2004 .

[50]  Mei Han An,et al.  accuracy and stability of numerical algorithms , 1991 .

[51]  J. W. Thomas Numerical Partial Differential Equations: Finite Difference Methods , 1995 .

[52]  William L. Briggs,et al.  A multigrid tutorial , 1987 .

[53]  Fred P. Brooks,et al.  The Mythical Man-Month , 1975, Reliable Software.

[54]  V. Strassen Gaussian elimination is not optimal , 1969 .

[55]  I. Duff,et al.  Direct Methods for Sparse Matrices , 1987 .

[56]  Charles L. Lawson,et al.  Basic Linear Algebra Subprograms for Fortran Usage , 1979, TOMS.

[57]  J. Tukey,et al.  An algorithm for the machine calculation of complex Fourier series , 1965 .

[58]  Erik Elmroth,et al.  SIAM REVIEW c ○ 2004 Society for Industrial and Applied Mathematics Vol. 46, No. 1, pp. 3–45 Recursive Blocked Algorithms and Hybrid Data Structures for Dense Matrix Library Software ∗ , 2022 .

[59]  Todd L. Veldhuizen,et al.  Will C++ Be Faster than Fortran? , 1997, ISCOPE.

[60]  Stephen J. Wright,et al.  Numerical Optimization , 2018, Fundamental Statistical Inference.

[61]  David J. Sager,et al.  The microarchitecture of the Pentium 4 processor , 2001 .

[62]  Arnold Neumaier,et al.  Introduction to Numerical Analysis , 2001 .

[63]  Ed Anderson,et al.  LAPACK Users' Guide , 1995 .

[64]  Webb Miller Computational complexity and numerical stability , 1974, STOC '74.

[65]  H. Wilcox Elementary Linear Algebra , 1970 .

[66]  C. Severance,et al.  IEEE 754: An Interview with William Kahan , 1998, Computer.

[67]  Jack J. Dongarra,et al.  Automated empirical optimizations of software and the ATLAS project , 2001, Parallel Comput..

[68]  Matteo Frigo,et al.  Cache-oblivious algorithms , 1999, 40th Annual Symposium on Foundations of Computer Science (Cat. No.99CB37039).

[69]  Richard Barrett,et al.  Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods , 1994, Other Titles in Applied Mathematics.

[70]  Joseph D. Darcy,et al.  How Java’s Floating-Point Hurts Everyone Everywhere , 2004 .

[71]  Ronald F. Boisvert,et al.  GAMS: a framework for the management of scientific software , 1985, TOMS.

[72]  J. H. Wilkinson The algebraic eigenvalue problem , 1966 .