ProtoFit 1.0 revision 1 includes an improved surface speciation solver. The new algorithm uses a combination a combination of nesting of intervals, and the method of false position for robust convergence behavior and speed. The new solver should never fail to converge, although arithmetic exceptions can still occur causing the program to crash. See notes below for more detailed comments on ProtoFit's speciation solver.
The old solver used the method of successive approximation, plus some inelegant modifications to improve convergance in some cases. The result was that the old solver sometimes did not converge, especially for the constant capacitance model (CCM).
The surface speciation solver used in ProtoFit simultaneously solves the mass balance and mass action expressions for the surface. The solver does not need to do a solution speciation, since the only solution parameter needed for the surface calcuations is pH (which is measured directly). For the non-electrostatic model (i.e. surface potential is zero), this system of equations is solved algebraically. For electrostatic models, the solver must determine the correct surface potential (which is a function of surface charge) in order to accurately calculate the surface speciation.
For electrostatic models, the solver proceeds by guessing the surface charge (and thus the corresponding surface potential), calculating the surface speciation based on the guess, comparing the guessed surface charge with the calculated surface charge, and refining the surface charge guess until the difference between the guessed and calcuated surface charge is small enough to satisfy a convergance criteria. Roughly, this procedure can be outlined as follows:
1. Surface speciation is calculated using a guessed surface charge (and corresponding surface potential).
2. Calculated surface charge is compared to guessed surface charge. If convergence criteria is satisfied, procedure is exited.
3. If criteria is not satisfied, guess is refined.
4. Repeat step 1.
The methods used by the solver to refine the guess are nesting of intervals, and the method of false position (Harris & Stocker, 1998). When applied to ProtoFit's speciation solver, the method of false position is typically 2X faster than nesting of intervals. However, the method of false position can be very slow to coverge for some problems, while nesting of intervals always results in reasonable convergence times. For a given speciation calculation, ProtoFit attempts to use the method of false position as the first method. If convergence is not achieved in 12 interations, ProtoFit switches to nesting of intervals. The result is faster computation time than using nesting of intervals alone.
Reference:
Harris, J. W., & Stocker, H., 1998. Handbook of Mathematics and Computational Science. Springer, New York, 1028 p.