Parallel Implementation of FEM Solver for Shared Memory Using OpenMP. (19th March 2022) - Majeed, Rabia; Farrukh, Ramisha; Riaz, Omer; Ali, Sikandar; Samad, Ali; Khan, Mukhtaj
Abstract : FEM solver is designed for shared memory architectures using an object-oriented paradigm. The FEM solver is divided into five major sections; these are a collection of mesh data, creating an object for each finite element, application of boundary conditions, assembly of a linear system of equations, and lastly a solver to calculate the solution for the system of linear equations. This work has focused on the study of multiple parallel implementations for each stage of the FEM solver. All the stages are implemented in C++ while each stage parallel regions are implemented using OpenMP. The data structures used in this work are also C++ objects implemented using STL containers, like sparse matrix used is constructed as two-layer nested binary trees where each internal tree represents a sparse row in a global matrix. These structures are used in every stage and have never been converted into more conventional matrix structures like CSR, etc. Finally, this work has shown the contribution of time for each stage and the amount of speedup achieved for them. Using 16 threads, the solver has attained a speedup of 5.21 for mesh having 2099201 unknowns and Poisson's equation. Two linear solvers Jacobi and CG are used which were consuming 95% of total solver time. The novelty of our work lies in the fact that this work focused on the implementation of Finite Element Application (FEA) using object-oriented programming for a shared memory architecture using OpenMP without considering conventional techniques of application speedup and specialized data structures like CSR, etc.