# gmgrid: Geometric multigrid on CPU (OpenMP) ### Status on 2025-May-14 - The multigrid part is deactivated via `*#undef MG` in *main.cpp* and so only a simple Jacobi iteration is performed as solver. - `make run` - or `main.GCC_ levels` with number of `levels` in [0,7]. ### Data structures/implementation for GPU - use data structures from cg_2:Framework for preconditioned solvers on GPU and CPU - suggested: class vec from vdop_gpu.h - suggested: class CRS_Matrix_GPU from crsmatrix_gpu.h - use cuBLAS, cuSPARSE and more libraries whenever possible. ### current code structure - *main.cpp* - *binaryIO.cpp* : reads CRS matrix and vector from files - *vdop.cpp* : some basic vector operations on CPU, also in *utils.h* - *geom.cpp* : reads the coarse geometry, performes mesh handling and includes mesh hierarchy - *getmatrix.cpp* : compressed row storage matrix and its generation from a 2D mesh - *cuthill_mckee_ordering.cpp* : graph reordering to minimize the bandwidth - *jacsolve.cpp* : Jacobi solver/smoother for a linear system of equations with CRS matrix; multigrid solver - *elements.cpp* : more general elements - experimental. Try with *el_main.cpp* - *generateCRS.cpp* : Reads mesh files and generates files output with stiffness matrix (Laplace) and right hand side.