Working With Boundary Value Problems in Practice
The finite element method is not the default tool for every partial differential equation you encounter. It works fine for Laplace or Poisson on a domain with a reasonably shaped boundary, but as soon as you introduce convection terms or discontinuous coefficients, the assembled matrix can become ill-conditioned before you even run your solver. I learned this the hard way while modeling a 2D advection-diffusion problem with a sharp boundary layer near one edge. The FEM solution oscillated badly unless I added artificial diffusion, which destroyed the accuracy I was trying to preserve. Switching to a finite volume discretization with an upwind flux resolved the issue cleanly, and the computation time dropped because the resulting system stayed diagonal-dominant throughout the iteration. This kind of problem-to-method mapping is what most introductory computational texts gloss over. They present the derivation, show a couple of clean examples on a square, and leave you to figure out why your code blows up when you apply it to something real.
Introduction To Partial Differential Equations A Computational Approach Texts In Applied Mathematics
follows that pattern in several chapters but recovers somewhat in the later sections where numerical experiments are discussed with actual code. It is useful if you already have a handle on the analytical side and want to understand how discretization choices propagate into the linear algebra. It is less useful if you need a standalone reference for getting a production-quality solver off the ground.Discretizing the Wave Equation Without Losing Stability
A common mistake beginners make is applying a centered difference in time to the wave equation without checking the CFL condition rigorously. The text derives the standard leapfrog scheme and mentions stability, but the practical consequence is often underplayed. When I ran a simulation on a nonuniform mesh, the local time step had to be reduced to match the smallest cell edge length. Using a uniform time step based on the average spacing caused high-frequency modes to grow exponentially within a few dozen iterations. Restricting the time step to roughly half the maximum allowable CFL number kept the energy norm bounded and produced physically plausible results. The text also covers the method of lines, which separates spatial discretization from time integration. This approach is straightforward to implement and works well when you can delegate the time stepping to an established ODE solver. The catch is that stiff spatial operators can force implicit time integration, which requires solving a linear system at each step. If you are not comfortable with preconditioned iterative solvers, the overhead can make an explicit scheme faster despite its smaller time step restriction. There is no universal answer here. You need to test both approaches on your specific mesh and operator before committing to one.
Handling Nonlinear Boundary Conditions
Linear problems are where most textbook examples live. Nonlinear boundary conditions appear frequently in applications like heat transfer with radiative cooling or fluid-structure interaction, and they require a different treatment strategy. The text includes a section on nonlinear elliptic problems but does not explore boundary nonlinearities in depth. In practice, I found that incorporating a nonlinear Robin condition into a Newton iteration required building the boundary contribution into the Jacobian separately from the interior stiffness matrix. Neglecting the boundary derivative term in the Jacobian caused the Newton solver to converge to the wrong root or fail entirely after a few iterations. A practical workaround I adopted was to linearize the boundary condition explicitly within each Newton step while keeping the interior Jacobian exact. This hybrid approach retained quadratic convergence for the interior terms while avoiding the complexity of a fully consistent boundary Jacobian. It worked reliably for the range of boundary parameter values I tested. If your boundary nonlinearity is stronger, such as a cubic radiation term, you may need full consistency or a damping strategy for the Newton updates. The text does not address this trade-off explicitly, so you will need to experiment or consult more specialized literature on nonlinear boundary value solvers.
Get the Full Details

Spectral Methods and Their Hidden Cost
Spectral methods offer exponential convergence for smooth solutions on simple domains, and the text covers this material adequately. The part that is harder to see from reading alone is the cost of handling less smooth data or complex geometries. I ran a test comparing a Fourier spectral method against a low-order finite difference scheme for a convection-dominated problem with a discontinuous initial condition. The spectral method produced Gibbs oscillations that persisted and polluted the entire solution field. The finite difference scheme smeared the discontinuity over a few grid points and delivered a stable result in a fraction of the wall-clock time because it did not require global matrix operations. The moral here is that spectral accuracy is conditional. When your solution lacks sufficient regularity, or when your domain topology prevents a clean global basis representation, spectral methods can become more trouble than they are worth. The text acknowledges this limitation but does not provide a decision framework for choosing between spectral and finite difference approaches. A reasonable heuristic I use is to check the smoothness of the data and the complexity of the boundary first. If both are favorable, spectral methods are worth trying. Otherwise, starting with a finite difference or finite volume discretization avoids unnecessary debugging time.
Reading the Book in a Useful Way
Do not read this book cover to cover if your goal is to build working numerical solvers. The theoretical chapters are solid but dense, and the computational sections assume familiarity with matrix decomposition and iterative methods that many students do not yet have. A more effective strategy is to pick a specific equation type you need to solve, read the corresponding chapter for the discretization theory, then implement the scheme immediately on a test case. Verify your implementation against an analytical solution when one exists. If not, perform a grid refinement study and check that the error decreases at the expected rate. The book is best used as a reference for the mathematical structure underlying common discretizations rather than as a coding manual. The strengths lie in the clear derivations of finite difference and finite element formulations for linear PDEs. The weaknesses are the sparse coverage of nonlinear problems, boundary treatment strategies, and practical solver selection. If you need guidance on those topics, supplement the text with resources focused on numerical linear algebra and computational fluid dynamics. The combination will give you a more complete picture than either source alone.