Hybrid-norm and Fortran 2003: Separating the physics from the solver

Next: Supporting the hybrid norm Up: Operator-based object-oriented solvers Previous: Combining operators

## Solvers

An iterative solver operates a problem that can be described as simply as equation 1. Achieving this simple form is often a more complex problem. The problem is broken up into three steps: obtaining an initial residual, finding the vector that best solves the constructed inverse problem, and updating the model according to this vector. Each one of these steps involve several different potential user inputs. For simplicity, I am going to describe all potential inversion problems in terms of a regularized inversion problem with two fitting goals (each goal could be actually multiple fitting goals combined using the functions described above).

The first step involves finding the initial residual vectors, and . The user might begin by specifying some initial values for these two vectors. These values then need to be updated according to the data associated with the problem, a potential initial model , the operators being used , and weights applied to the residual .

 (7)

Once the initial residual is calculated, we iterate to find through,

 (8)

where is a preconditioning operator. Finally we need update our model,

 (9)

This procedure allows a single solver to be written for a myriad of different inverse problems. It also demonstrates one of the biggest weaknesses of Fortran 90. Fortran 90 does not support function pointers. As a result, SEP has traditionally written different solvers for regularized and preconditioned problems. Combination operators could only be created by writing a function that specifically named the two operators that were to be combined. As a result, creating complex inversion problems quickly became cumbersome and prone to errors.
 Hybrid-norm and Fortran 2003: Separating the physics from the solver

Next: Supporting the hybrid norm Up: Operator-based object-oriented solvers Previous: Combining operators

2010-11-26