Multifrontal Factorization of Sparse Matrices on Shared-Memory Multiprocessors