Detecting communities using modularity maximization is an important operation in network analysis. As the size of the networks increase to petascales, it is important to design parallel algorithms to handle the large-scale data. In this chapter, a shared memory (OpenMP-based) implementation of the Louvain method, one of the most popular algorithms for maximizing modularity, is introduced. This chapter also discusses the challenges in parallelizing this algorithm as well as metrics for evaluating the correctness of the results. The results demonstrate that the implementation is highly scalable. Moreover, it also focuses on how this template can be extended to time-varying networks.