There are four large components of the software system: the mathematical library, the homotopy continuation routines, the root-counting methods, and the interface packages.
The sources of PHCpack are organized in the following tree of libraries:
Ada : Ada sources of PHC |-- System : 0. UNIX dependencies, e.g.: timing |-- Math_Lib : 1. general mathematical library | |-- Numbers : 1.1. number representations | |-- Matrices : 1.2. matrices and linear-system solvers | |-- Polynomials : 1.3. multivariate polynomial systems | |-- Supports : 1.4. support sets and linear programming |-- Homotopy : 2. homotopy and solution lists |-- Continuation : 3. path-tracking routines |-- Root_Counts : 4. root counts and homotopy construction | |-- Product : 4.1. linear-product start systems | |-- Implift : 4.2. implicit lifting | |-- Stalift : 4.3. static lifting | |-- Dynlift : 4.4. dynamic lifting | |-- Symmetry : 4.5. exploitation of symmetry relations |-- Schubert : 5. numerical Schubert calculus |-- Main : 6. main dispatcherThe structure reflects the discrete and continuous nature of the program.
The concept of information hiding has been applied more deeply than just separating the four stages of the solver. Next are some examples on how PHC deals with polynomials.
Note that coefficient-parameter polynomial continuation [Morgan and Sommese 1989] or cheater's homotopy [Li, Sauer and Yorke 1989], [Li and Wang 1992] is very useful and n atural concept.
The computational bottleneck in polynomial continuation is the evaluation of polynomials. The efficiency could improve a lot if the polynomials would be known at compile time, so that optimized in-line evaluators can be used. However, to keep the program user-friendly, compilation of the program must not be required each time a new system has to be solved.