Solving PDEs in C++: Numerical Methods in a Unified Object-Oriented Approach

In this chapter, we apply the adaptive-refinement algorithm to a diffusion equation with discontinuous and anisotropic coefficients in a complicated nonrectangular domain. We show that this algorithm gives good accuracy with a moderate number of nodes. We also show that the multigrid preconditioner is more efficient than other preconditioners in solving the individual stiffness systems.
Here, we introduce the diffusion equation used in the present numerical tests. The PDE is
in the domain in Figure 19.1, where the diffusion coefficients P and Q are equal to 1 in most of the domain, except its lower-left quarter, where they are very large:
The boundary conditions are also indicated in Figure 19.1. On the circular part of the boundary, mixed boundary conditions of the form
are given, where
is the outer normal vector. The letter D in the figure indicates the part of the boundary where Dirichlet boundary conditions of the form
are given. Finally, homogeneous Neumann boundary conditions of the form
are given on the rest of the boundary. This completes the introduction of the boundary-value problem. In the next section, we discuss the finite-element discretization.
The finite-element mesh is constructed by the adaptive-refinement algorithm with automatic boundary refinement (Chapter 14, Section 8). The initial mesh contains only 11 nodes and 9 triangles, providing a rather poor approximation of the domain and its boundary (Figure 19.2).