Hi,
I’m the author of most of the equilibrium work in Cantera and I ‘ll try to answer your questions. First, I’m currently in the midst of writing up documentation and working on algorithms for the VCS solver which will answer more of your questions. The document will probably be done by the end of the summer.
Mostly all of the codes work with constant T and P conditions within their inner loop. Then wrappers are used to calculate other conditions such as constant T and V or S and V.
ChemEquil is based on the nonstoichiometric Brinkley method which is based on the element potential method (number of elements + 1 dofs) at constant P and T. It has an analytical matrix, which was an improvement over Goodwin’s original numerical matrix, chiefly because the matrix is so often singular (singular or nearly singular matrices and numerically generated matrices, btw, are a really bad combination). Sandia’s Fuego code originally used ChemEquil to calculate its matrix of equilibrium conditions. However, it proved to be too unreliable even after a considerable amount of work trying to understand the singularity and we now use the VCS code within Fuego. The singularity is due to when the current species set with nontrivial mole fractions (> 1.E-14) don’t form a complete basis set of the element constraints.
It gets tricky when the rank deficiency of the matrix gets above order 1 . However, the method is still fast and therefore useful if you take care about initial conditions to avoid the singularity, and it can and has been extended to multiple phases if the infrastructure is put into it to do that. I haven’t done that yet, but may revisit this.
The second equilibrium code is Goodwin’s in origin and is no longer used.
The third code is the VCS method, which is the workhorse for solving complex equilibrium problems within Cantera. I’ve worked extensively on the VCS code, which is based on an extension of the VCS method in Smith and Missen’s book to nonideal solutions. Its current status is that it is robust, especially wrt minor components and species, with a list of known limitations which I will address when I get the time to do that. The number of unknowns is basically equal to the number of species. It’s a Gibbs minimization technique which is guaranteed to lower the G at all steps, even though it uses only the diagonal of the hessian.
However, it separates the species into major and minor categories, and focuses most of its energies on calculating major species. It uses a completely different algorithm for minor species that is tolerant of a large variation in the scales. I have hopes for it scaling tolerably due to its structure.
One of the biggest issue within equilibrium solvers are phase stability problems. This and the determination of the global minimum from a local minimum are really the only two hard issues. I still have one problem that is on my plate for the VCS method that I will be addressing in the near future which is the biggest issue with the solver having to do with this issue. It handles single phase pop issues tolerably, though there is some work to do in putting the algorithm into the main code in a robust manner. However, multiple phases that pop concertedly have yet to be handled correctly, and this issue has arisen in my application work. Other things to come in the near future is to put surface phases into the equilibrium solver and to resolve robustness issues for single phase problems with large numbers of species that have multiple major species.
Stanjan is proprietary, and I have not heard many good things about it. Europe’s calphad work is much better.
Harry Moffat
--
You received this message because you are subscribed to the Google Groups "Cantera Users' Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
cantera-user...@googlegroups.com.
To post to this group, send email to
canter...@googlegroups.com.
Visit this group at http://groups.google.com/group/cantera-users.
For more options, visit https://groups.google.com/d/optout.