
   Description of the test
   ========================

   This test executes the parallel cholesky Factorization
   using two-dimensional grid of processes.

   The matrix distribution used is two-dimensional 
   heterogeneous block-cyclic distribution of matrices

   CONDITIONS
   ----------
   N must be a multiple of g and r (matrices are divided into 
   whole number of generalized blocks).
   g must be a lcm of p and q.

   Files
   -----

   cholesky_i.h         ----> header containing the function declarations and variable declarations
   cholesky_i.c         ----> Contains the algorithm of parallel cholesky factorization
                              using heterogeneous block-cyclic distribution of matrices
   cholesky.c           ----> contains the main
   Load_balance.c  ----> Matrices A, B, and C are distributed amongst the processes
                         (Proportional to the speeds of the processors)
   counter.h       ----> Contains the parameters
                         N=Size of the matrix to solve
                         r=communication-computation ratio/granularity (values of 16, 32 can be used)
                         p=Number of processes along the row/column in a square grid
                         g=generalized block size along the row/column 
   mat.c mat.h vec.c vec.h  errors.c errors.h qinv.c qinv.h 
                   -----> Code to calculate the inverse of a matrix
   cholesky_mpc.mpc ----> Performance model definitions

   HOW TO RUN
   ----------

   shell$ hmpibcast cholesky.c cholesky_i.h cholesky_i.c simpleGrid.* mat.c mat.h vec.c vec.h  errors.c errors.h qinv.* Load_balance.c counter.h

   shell$ hmpiload -o cholesky cholesky.c

   shell$ hmpirun cholesky
   N=1024, p=2, q=2, r=4, block size=8, time(sec)=3.70
