Many students, engineers, scientists and researchers have benefited from the practical, programming-oriented style of the previous editions of Programming the Finite Element Method, learning how to develop computer programs to solve specific engineering problems using the finite element method.

This new fifth edition offers timely revisions that include programs and subroutine libraries fully updated to Fortran 2003, which are freely available online, and provides updated material on advances in parallel computing, thermal stress analysis, plasticity return algorithms, convection boundary conditions, and interfaces to third party tools such as ParaView, METIS and ARPACK. As in the previous editions, a wide variety of problem solving capabilities are presented including structural analysis, elasticity and plasticity, construction processes in geomechanics, uncoupled and coupled steady and transient fluid flow and linear and nonlinear solid dynamics.

Key features:

• Updated to take into account advances in parallel computing as well as new material on thermal stress analysis

• Programs use an updated version of Fortran 2003

• Includes exercises for students

• Accompanied by website hosting software

*Programming the Finite Element Method, Fifth Edition is an ideal textbook for undergraduate and postgraduate students in civil and mechanical engineering, applied mathematics and numerical analysis, and is also a comprehensive reference for researchers and practitioners**.*

*Further information and source codes described in this text can be accessed at the following web sites:*

• www.inside.mines.edu/~vgriffit /PFEM5 for the serial programs from Chapters 4-11

• www.parafem.org.uk for the parallel programs from Chapter 12

*Preface to Fifth Edition xv*

*Acknowledgements xvii*

**1 Preliminaries: Computer Strategies 1**

*1.1 Introduction 1*

*1.2 Hardware 2*

*1.3 Memory Management 2*

*1.4 Vector Processors 3*

*1.5 Multi-core Processors 3*

*1.6 Co-processors 4*

*1.7 Parallel Processors 4*

*1.8 Applications Software 5*

*1.9 Array Features 9*

*1.10 Third-party Libraries 17*

*1.11 Visualisation 18*

*1.12 Conclusions 23*

*References 24*

**2 Spatial Discretisation by Finite Elements 25**

*2.1 Introduction 25*

*2.2 Rod Element 25*

*2.3 The Eigenvalue Equation 28*

*2.4 Beam Element 29*

*2.5 Beam with an Axial Force 31*

*2.6 Beam on an Elastic Foundation 32*

*2.7 General Remarks on the Discretisation Process 33*

*2.8 Alternative Derivation of Element Stiffness 33*

*2.9 Two-dimensional Elements: Plane Stress 35*

*2.10 Energy Approach and Plane Strain 38*

*2.11 Plane Element Mass Matrix 40*

*2.12 Axisymmetric Stress and Strain 40*

*2.13 Three-dimensional Stress and Strain 42*

*2.14 Plate Bending Element 44*

*2.15 Summary of Element Equations for Solids 47*

*2.16 Flow of Fluids: Navier–Stokes Equations 47*

*2.17 Simplified Flow Equations 50*

*2.18 Further Coupled Equations: Biot Consolidation 54*

*2.19 Conclusions 56*

*References 56*

**3 Programming Finite Element Computations 59**

*3.1 Introduction 59*

*3.2 Local Coordinates for Quadrilateral Elements 59*

*3.3 Local Coordinates for Triangular Elements 64*

*3.4 Multi-Element Assemblies 66*

*3.5 ‘Element-by-Element’ Techniques 68*

*3.6 Incorporation of Boundary Conditions 72*

*3.7 Programming using Building Blocks 75*

*3.8 Solution of Equilibrium Equations 95*

*3.9 Evaluation of Eigenvalues and Eigenvectors 96*

*3.10 Solution of First-Order Time-Dependent Problems 99*

*3.11 Solution of Coupled Navier–Stokes Problems 103*

*3.12 Solution of Coupled Transient Problems 104*

*3.13 Solution of Second-Order Time-Dependent Problems 106*

**4 Static Equilibrium of Structures 115**

*4.1 Introduction 115*

*4.2 Conclusions 157*

*4.3 Glossary of Variable Names 157*

*4.4 Exercises 159*

*References 168*

**5 Static Equilibrium of Linear Elastic Solids 169**

*5.1 Introduction 169*

*5.2 Glossary of Variable Names 221*

*5.3 Exercises 224*

*References 232*

**6 Material Non-linearity 233**

*6.1 Introduction 233*

*6.2 Stress–strain Behaviour 235*

*6.3 Stress Invariants 236*

*6.4 Failure Criteria 238*

*6.5 Generation of Body Loads 240*

*6.6 Viscoplasticity 240*

*6.7 Initial Stress 242*

*6.8 Corners on the Failure and Potential Surfaces 243*

*6.9 Elastoplastic Rate Integration 270*

*6.10 Tangent Stiffness Approaches 275*

*6.11 The Geotechnical Processes of Embanking and Excavation 289*

*6.12 Undrained Analysis 305*

*6.13 Glossary of Variable Names 322*

*6.14 Exercises 327*

*References 331*

**7 Steady State Flow 333**

*7.1 Introduction 333*

*7.2 Glossary of Variable Names 359*

*7.3 Exercises 361*

*References 367*

**8 Transient Problems: First Order (Uncoupled) 369**

*8.1 Introduction 369*

*8.2 Comparison of Programs 8.4, 8.5, 8.6 and 8.7 397*

*8.3 Glossary of Variable Names 416*

*8.4 Exercises 419*

*References 422*

**9 Coupled Problems 423**

*9.1 Introduction 423*

*9.2 Glossary of Variable Names 454*

*9.3 Exercises 459*

*References 460*

**10 Eigenvalue Problems 461**

*10.1 Introduction 461*

*10.2 Glossary of Variable Names 477*

*10.3 Exercises 480*

*References 482*

**11 Forced Vibrations 483**

*11.1 Introduction 483*

*11.2 Glossary of Variable Names 517*

*11.3 Exercises 521*

*References 522*

**12 Parallel Processing of Finite Element Analyses 523**

*12.1 Introduction 523*

*12.2 Differences between Parallel and Serial Programs 525*

*12.3 Graphics Processing Units 589*

*12.4 Cloud Computing 594*

*12.5 Conclusions 596*

*12.6 Glossary of Variable Names 597*

*References 602*

**Appendix A Equivalent Nodal Loads 605**

**Appendix B Shape Functions and Element Node Numbering 611**

**Appendix C Plastic Stress-Strain Matrices and Plastic Potential Derivatives 619**

**Appendix D main Library Subprograms 623**

**Appendix E geom Library Subroutines 635**

**Appendix F Parallel Library Subroutines 639**

**Appendix G External Subprograms 645**

**Author Index 649**

**Subject Index 653**