We develop a general equality-constrained nonlinear optimization algorithm
based on a smooth penalty function proposed by Fletcher (1970). Although it was
historically considered to be computationally prohibitive in practice, we
demonstrate that the computational kernels required are no more expensive than
other widely accepted methods for nonlinear optimization. The main kernel
required to evaluate the penalty function and its derivatives is solving a
structured linear system. We show how to solve this system efficiently by
storing a single factorization each iteration when the matrices are available
explicitly. We further show how to adapt the penalty function to the class of
factorization-free algorithms by solving the linear system iteratively. The
penalty function therefore has promise when the linear system can be solved
efficiently, e.g., for PDE-constrained optimization problems where efficient
preconditioners exist. We discuss extensions including handling simple
constraints explicitly, regularizing the penalty function, and inexact
evaluation of the penalty function and its gradients. We demonstrate the merits
of the approach and its various features on some nonlinear programs from a
standard test set, and some PDE-constrained optimization problems