| List of Figures | p. xi |
| List of Tables | p. xv |
| Preface | p. xvii |
| Acknowledgments | p. xxi |
| Disclaimer | p. xxii |
| p. 1 |
| Development Costs and Complexity | p. 3 |
| Introduction | p. 3 |
| Conventional Scientific Programming Costs | p. 7 |
| Conventional Programming Complexity | p. 11 |
| Alternative Programming Paradigms | p. 19 |
| How Performance Informs Design | p. 24 |
| How Design Informs Performance | p. 25 |
| Elements of Style | p. 27 |
| The Object-Oriented Way | p. 31 |
| Nomenclature | p. 31 |
| Object-Oriented Analysis and Design | p. 33 |
| Encapsulation and Information Hiding | p. 36 |
| Wrapping Legacy Software | p. 40 |
| Composition, Aggregation, and Inheritance | p. 48 |
| Static and Dynamic Polymorphism | p. 53 |
| Oop Complexity | p. 54 |
| More on Style | p. 55 |
| Scientific Oop | p. 57 |
| Abstract Data Type Calculus | p. 57 |
| Analysis-Driven Design | p. 66 |
| Design Metrics | p. 69 |
| Complexity Theory | p. 71 |
| Information Theory | p. 73 |
| Still More on Style | p. 77 |
| The Tao of Soop | p. 79 |
| SOOP To Nuts And Bolts | p. 83 |
| Design Patterns Basics | p. 85 |
| Essentials | p. 85 |
| Foundations | p. 86 |
| Building Architecture | p. 87 |
| Software Architecture | p. 93 |
| Scientific Software Architecture | p. 98 |
| Canonical Contexts | p. 99 |
| The Lorenz Equations: A Chaotic Dynamical System | p. 100 |
| Quantum Vortex Dynamics in a Superfluid | p. 102 |
| Burgers' Equation: Shock Formation and Dissipation | p. 104 |
| The Object Pattern | p. 107 |
| The Problem | p. 107 |
| The Solution | p. 108 |
| Fortran implementation | p. 110 |
| C++ Style and Tools | p. 116 |
| C++ Implementation of Vortex | p. 122 |
| The Consequences | p. 127 |
| Related Patterns | p. 127 |
| The Abstract Calculus Pattern | p. 129 |
| The Problem | p. 129 |
| The Solution | p. 130 |
| Fortran Implementation | p. 131 |
| C++ Implementation | p. 137 |
| The Consequences | p. 140 |
| Related Patterns | p. 141 |
| The Strategy and Surrogate Patterns | p. 143 |
| The Problem | p. 143 |
| The Solution | p. 144 |
| Fortran Implementation | p. 146 |
| C++Implementation | p. 155 |
| The Consequences | p. 164 |
| Related Patterns | p. 164 |
| The Puppeteer Pattern | p. 167 |
| The Problem | p. 167 |
| The Solution | p. 169 |
| Fortran Implementation | p. 170 |
| Ac++Tool:2D Allocatable Arrays | p. 185 |
| C++Implementation | p. 191 |
| The Consequences | p. 199 |
| Related Patterns | p. 201 |
| Factory Patterns | p. 202 |
| The Problem | p. 202 |
| The Solution | p. 203 |
| Fortran Implementation | p. 205 |
| C++ Implementation | p. 216 |
| The Consequences | p. 226 |
| Related Patterns | p. 227 |
| Gumbo Soop | p. 229 |
| Formal Constraints | p. 231 |
| Why Be Formal? | p. 231 |
| Problem Statement | p. 233 |
| Side Effects in Abstract Calculus | p. 237 |
| Formal Specification | p. 238 |
| Modeling Arrays with Ocl | p. 238 |
| Hermeticity | p. 239 |
| Economy | p. 242 |
| The Shell Pattern | p. 244 |
| An Assertion Utility for Fortran | p. 245 |
| Case Study: A Fluid Turbulence Solver | p. 247 |
| Mixed-Language Programming | p. 251 |
| Automated Interoperability Tools | p. 251 |
| Manual Interoperability: C++/Fortran 95 | p. 254 |
| Case Study: ForTrilinos and CTrilinos | p. 259 |
| C Interoperability in Fortran 2003 | p. 261 |
| Method Invocation | p. 269 |
| Tabulation, Construction, and Destruction | p. 273 |
| Polymorphism and Hierarchy Mirroring | p. 278 |
| Discussion | p. 281 |
| Multiphysics Architectures | p. 285 |
| Toward a Scalable Abstract Calculus | p. 285 |
| Amdahl's Law and Parallel Efficiency | p. 286 |
| Automatic Parallelization: Compiler Technology | p. 292 |
| Directive-Based Parallelization: Openmp | p. 295 |
| Library-Based Parallelization: ForTrilinos and Mpi | p. 297 |
| Intrinsic Parallelization: Fortran 2008 Coarrays | p. 309 |
| Case Studies: Multiphysics Modeling | p. 317 |
| Quantum Turbulence in Superfluid Liquid Helium | p. 318 |
| Lattice-Boltzman Biofiuid Dynamics | p. 320 |
| Particle Dispersion in Magnetohy drodynamics | p. 325 |
| Radar Scattering in the Atmospheric Boundary Layer | p. 326 |
| The Morfeus Framework | p. 330 |
| Mathematical Background | p. 335 |
| Interpolation | p. 335 |
| Lagrange Interpolation | p. 335 |
| Linear Solvers | p. 337 |
| Gaussian Elimination | p. 337 |
| Lu Decomposition | p. 342 |
| Nonlinear Solvers | p. 343 |
| Newton's Method in Id | p. 343 |
| Newton's Method in Multiple Dimensions | p. 344 |
| Partial Differential Equations | p. 345 |
| The Heat Equation | p. 345 |
| The Burgers Equation | p. 346 |
| Numerical Analysis | p. 347 |
| Finite Differences | p. 347 |
| Numerical Methods for Differential Equations | p. 350 |
| Unified Modeling Language Elements | p. 357 |
| Use Case Diagrams | p. 357 |
| Class Diagrams | p. 359 |
| Classes | p. 359 |
| Relationships | p. 362 |
| Object Diagrams | p. 366 |
| Sequence Diagrams | p. 367 |
| Interactions and Messages | p. 368 |
| Sequence Diagrams | p. 368 |
| The Object Constraint Language | p. 370 |
| The Context of OCL Expression | p. 370 |
| Initial Value Rule | p. 371 |
| Specifying Object Invariants | p. 371 |
| Adding Pre- and Postconditions to Operations | p. 371 |
| Bibliography | p. 373 |
| Index | p. 379 |
| Table of Contents provided by Ingram. All Rights Reserved. |