Implicit Coupling of Solvers

A fundamental question when solving systems of PDEs is how to couple the individual equations. Many solution strategies are based on solving one equation at a time, in either a "Gauss-Seidel" or "Jacobi" fashion, depending on how primary unknowns are approximated (by either the most recently computed values ("Gauss-Seidel") or values from the previous iteration ("Jacobi")). However, for many systems of PDEs such iterations converge slowly or face problems with divergence. More implicit coupling is then necessary. The extreme is to solve all the PDEs in the system fully coupled, which is often prohibitively costly. Solving one or more subsets of the PDEs fully coupled is then a natural way to go. Finding the most feasible coupling for a given system of PDEs must usually be based on extensive experimentation. Flexible software for implementing the various solution strategies is then needed. We investigate how solvers written in Python, utilizing the FEniCS software suite, can be constructed to facilitate the construction of optimal, tailored solution algorithms to systems of PDEs.