We have successfully implemented a serial version of the BiCGSTAB algorithm. Code for it can be found here. In preliminary tests, we have found that the serial version of BiCGSTAB actually outperforms the serial CG method, requiring far fewer iterations. However, this was only tested on the model problem (Laplace's equation), so this result may not be indicitave of the actual performance of BiCGSTAB.

We have also begun coding the parallel version of BiCGSTAB. The actual algorithm is similar to the conjugate gradient method, so few modifications were needed for that part of the code. However, in order for our code to perform on arbitrary meshes, we must handle the structure of the stiffness matrix and the ghost nodes very carefully, which we are currently working on.

For testing purposes, we have also started coding a random mesh generator and partitioner on the unit square. Since the purpose of this project is not the actual partitioning of a mesh, this will be done in the simplest way possible, that is, given the square domain, cut it into uniform squares, regardless of how the nodes are distributed within the square. Once this is completed, we will write a code that generates a finite element stiffness matrix from this mesh.


Below is a flowchart for how the problem will be solved:

Flowchart