The finite element code dynamically allocates memory for the load vector and stiffness matrix. The FEM program was modified to store the data in forms compatible with each solver. The input data was the same for the different solvers, but the assembly and solution sections varied to be compatible with each solver. PETSc required the most modifications. PETSc uses an object-oriented approach that does operations to the stiffness matrix object and the load vector object.
PETSc routines operate on the objects to solve the system.
The PETSc object stored the assembled matrix in compressed sparse row format. PIM and Aztec both used the Compressed Row Storage for the assembled matrix, but PIM also requires a user-supplied matrix vector multiply routine that is consistent with the storage format chosen. Since this is the heart of the solution, a poorly chosen routine could have significant effects on the performance of the solver. The times for solution and assembly of the load vector and stiffness matrix are examined. The parallel performance of the three library packages is assessed for a constant size problem with an increasing number of processors, and for a increasing size problem with a corresponding increase in the number of processors.