Object-oriented finite element programming: symbolic derivations and automatic programming
New technologies in computer science applied to numerical computations open the door to alternative approaches to mechanical problems using the finite element method. In classical approaches, theoretical developments often become cumbersome and the computer model which follows shows resemblance with the initial problem statement. The first step in the development consists usually in the analysis of the physics of the problem to simulate. The problem is generally described by a set of equations including partial differential equations. This first model is then replaced by successive equivalent or approximated models. The final result consists in a mathematical description of elemental matrices and algorithms describing the matrix form of the problem. The traditional approach consists then in constructing a computer model, generally complex and often quite different from the original mathematical description, thus making further corrections difficult. Therefore, the crucial problem of both the software architecture and the choice of the appropriate programming language is raised. Partially breaking with this approach, we propose a new approach to develop and program finite element formulations. The approach is based on a hybrid symbolic/numerical approach on the one hand, and on a high level software tool, object-oriented programming (supported here by the languages Smalltalk and C++) on the other hand. The aim of this work is to develop an appropriate environment for the algebraic manipulations needed for a finite element formulation applied to an initial boundary value problem, and also to perform efficient numerical computations. The new environment should make it possible to manage al1 the concepts necessary to solve a physical problem: manipulation of partial differential equations, variational formulations, integration by parts, weak forms, finite element approximations… The concepts manipulated therefore remain closely related to the original mathematical framework. The result of these symbolic manipulations is a set of elemental data (mass matrix, stiffness matrix, tangent stiffness matrix,…) to be introduced in a classical numerical code. The object-oriented paradigm is essential to the success of the implementation. In the context of the finite element codes, the object-oriented approach has already proved its capacity to represent and handle complex structures and phenomena. This is confirmed here with the symbolic environment for derivation of finite element formulations in which objects such as expression, integral and variational formulation appear. The link between both the numerical world and the symbolic world is based on an object-oriented concept for automatic programmation of matrix forms derived from the finite element method. As a result, a global environment in which the numerical is capable of evolving, using a language close to the natural mathematical one, is achieved. The potential of the approach is further demonstrated, on the one hand, by the wide range of problems solved in linear mechanics (electrodynamics in 1 and 2D, heat diffusion,…) as well as in nonlinear mechanics (advection dominated 1D problem, Navier Stokes problem), and, on the other hand by the diversity of the formulations manipulated (Galerkin formulations, space-time Galerkin formulations continuous in space and discontinuous in time, generalized Galerkin least-squares formulations).