gmgpolar

High Order Geometric Multigrid for planes in curvilinear coordinates

https://github.com/scicompmod/gmgpolar

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
    Links to: springer.com
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.3%) to scientific vocabulary

Keywords

fusion high-order high-performance-computing multigrid node-level numerics plasma simulation threading
Last synced: 6 months ago · JSON representation ·

Repository

High Order Geometric Multigrid for planes in curvilinear coordinates

Basic Info
  • Host: GitHub
  • Owner: SciCompMod
  • License: apache-2.0
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 1.37 MB
Statistics
  • Stars: 16
  • Watchers: 2
  • Forks: 2
  • Open Issues: 11
  • Releases: 6
Topics
fusion high-order high-performance-computing multigrid node-level numerics plasma simulation threading
Created about 3 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

GMGPolarCI codecov

gmgpolar_logo

GMGPolar is a performant geometric multigrid solver using implicit extrapolation to raise the convergence order. It is based on meshes in tensor- or product-format. GMGPolar's focus applications are geometries that can be described by polar or curvilinear coordinates for which suited smoothing procedures have been developed.

If using GMGPolar, please cite:

M. J. Kühn, C. Kruse, U. Rüde. Implicitly extrapolated geometric multigrid on disk-like domains for the gyrokinetic Poisson equation from fusion plasma applications. Journal of Scientific Computing, 91 (28). Springer (2022). Link: https://link.springer.com/article/10.1007/s10915-022-01802-1

Obtaining the source code

The GMGPolar Solver can run with or without the sparse direct solver MUMPS, though using MUMPS is recommended for optimal performance. This guide provides instructions on obtaining the code and installing the necessary dependencies.

Clone the GMGPolar Repository

To begin, download the latest stable version of GMGPolar by running the following commands in your terminal:

# Clone the repository. This will create a directory named GMGPolar.
git clone https://github.com/mknaranja/GMGPolar

Configuring the Solver

After cloning the repository, you'll need to configure the solver for your system. Edit the CMakeLists.txt file to reflect your system's configuration (e.g., paths to libraries, file names, etc.).

Installing MUMPS using Spack

We highly recommend using Spack to manage and install external dependencies such as MUMPS. The following steps outline the process for installing MUMPS and related tools.

Step 1: Install Spack

To install and set up Spack, execute the following commands in your terminal:

# Clone the Spack repository
git clone https://github.com/spack/spack.git

# Add Spack to your environment by sourcing its setup script
echo ". $HOME/spack/share/spack/setup-env.sh" >> ~/.bashrc

# Refresh your terminal or source your .bashrc
source ~/.bashrc

Step 2: Install MUMPS

With Spack set up, you can now install MUMPS. The following command installs version 5.5.1 of MUMPS with specific options that are recommended for GMGPolar:

spack install mumps@5.5.1 ~blr_mt ~complex +double +float ~incfort ~int64 +metis ~mpi +openmp ~parmetis ~ptscotch ~scotch +shared

Note on AVX / AVX-512 Compatibility

If your system does not support AVX or AVX-512 instructions (e.g., on AMD processors), install MUMPS with the following command:

spack install mumps@5.5.1 target=x86_64 ~blr_mt ~complex +double +float ~incfort ~int64 +metis ~mpi +openmp ~parmetis ~ptscotch ~scotch +shared

Step 3: Configure CMake for GMGPolar

After installing MUMPS and other dependencies, ensure that the paths to the libraries are correctly set in the CMakeLists.txt file.

Final Step: Compiling the GMGPolar Solver

Once everything is configured, compile the solver by running the following commands:

bash cd scripts ./compile.sh [Debug|Release]

After executing ./compile.sh [Debug|Release], the script will compile the solver using the specified build type. You can also run ./compile.sh without any arguments afterward, and it will automatically use the last configured build type.

Currently, the default build process only supports gnu compiler although Intel compiler has been successfully tested for some configurations.

Optional: Measuring performance

We use Likwid for performance monitoring. You can install it using Spack as well:

Install Likwid (Performance Monitoring Tool): bash spack install likwid

Running GMGPolar

You can run the solver without having to write a code (as we do in the next section). After building the library, a binary is created called ./build/gmgpolar, it takes parameters directly from command-line.

# To try GMGPolar on a small problem size, without having to write any code,
# ./build/gmgpolar uses default parameters with a grid 33 x 64.

./build/gmgpolar

# For more details on the available parameters, see the scripts/tutorial/run.sh script.

Issue tracker

If you find any bug, didn't understand a step in the documentation, or if you have a feature request, submit your issue on our Issue Tracker: https://github.com/mknaranja/GMGPolar/issues by giving:

  • reproducible parameters
  • computing environment (compiler, etc.)

Release Notes

GMGPolar 1.0.0

1) Working multigrid cycle 2) In-house solver and possibility to link with MUMPS for the smoothing and coarse grid solution 3) Extrapolation strategies:

a. No extrapolation (--extrapolation 0)

b. Default implicit extrapolation (--extrapolation 1)

c. Non-default implicit extrapolation with smoothing of all nodes on the finest level [experimental, use with care, convergence cannot be observed with residual] (--extrapolation 2)

6) Optimization of applyA / buildrhs / applyprolongation / buildAsc / applyAscortho

GMGPolar 2.0.0

1) Enhancements and New Class Layout: - Linear Algebra: - Introduced custom Vector and SparseMatrix classes. - Added a (cyclic) Tridiagonal Solver for improved performance and usability. - Input Functions: - Separated into distinct components: DomainGeometry, BoundaryConditions, SourceTerm, etc. - Polar Grid: - Indexing is now based on circle/radial smoother. - Residual: - Improved the residual calculation by addressing the unintuitive behavior that previously applied only to the interior part of the matrix. - Direct Solver: - Fixed a bug where boundary values were not treated correctly. - Built matrices to be symmetric, reducing factorization time. - Smoother: - Separated into extrapolated and standard smoothers. - Replaced the LU-Decomposition algorithm with the Thomas algorithm for improved efficiency.

2) New Features

  • Introduced W- and F cycles for enhanced solving capabilities.
  • Added FMG (Full Multigrid) to obtain improved starting solutions.
  • Implemented advanced caching behavior options for the "Give" implementation strategy.
  • Added a faster strategy named 'Take,' which is appropriate for cases where memory is less of a constraint, resulting in an 80% increase in memory usage.
  • Comprehensive Unit Tests: Integrated Google Unit Tests for all classes, ensuring robust and reliable functionality across the codebase.

3) Performance Improvements

  • Removed the task-based approach, which did not scale well with increasing parallelization.
  • Reduced maximum usage by 61.5% by constructing symmetric matrices and utilizing the tridiagonal structure of smoother matrices.

4) Updated Features

  • Added a new LU decomposition solver, allowing users to choose between MUMPS and the in-house solver for greater flexibility and performance.

Owner

  • Name: SciCompMod
  • Login: SciCompMod
  • Kind: organization

Citation (CITATION.cff)

title: GMGPolar
version: 2.0.0
date-released: "2023-04-14"
repository-code: "https://github.com/mknaranja/GMGPolar"
url: "https://github.com/mknaranja/GMGPolar"
doi: "10.5281/zenodo.7827802"
license: Apache-2.0
type: software
authors:
  #Authors
  - given-names: Philippe
    family-names: Leleux
    affiliation: "Inserm"     
    orcid: "https://orcid.org/0000-0002-3760-4698"
  - given-names: Martin J.
    family-names: Kühn
    affiliation: "German Aerospace Center (DLR)"     
    orcid: "https://orcid.org/0000-0002-0906-6984"
  - given-names: Schwarz
    family-names: Christina
    affiliation: "Universität Bayreuth"     
  - given-names: Carola
    family-names: Kruse
    affiliation: "CERFACS"     
    orcid: "https://orcid.org/0000-0002-4142-7356"
  - given-names: Ulrich
    family-names: Rüde
    affiliation: "FAU Erlangen"     
    orcid: "https://orcid.org/0000-0001-8796-8599"
  - given-names: Allan
    family-names: Kuhn
    affiliation: "German Aerospace Center (DLR)"
  - given-names: Julian
    family-names: Litz
    affiliation: "German Aerospace Center (DLR)"             
#Contributors
cff-version: 2.0.0
message: >-
  If you use this software, please cite it using the
  metadata from this file.
keywords:
  - Geometric Multigrid
  - Parallel-Computing
  - Extrapolation
  - Curvilinear coordinates
  - Plasma fusion
abstract: >-
  GMGPolar is a performant geometric multigrid solver using
  implicit extrapolation to raise the convergence order. 
  It is based on meshes in tensor- or product-format. 
  GMGPolar's focus applications are geometries that can be
  described by polar or curvilinear coordinates for which
  suited smoothing procedures have been developed.
contact:
  - affiliation: "German Aerospace Center (DLR)"
    email: Martin.Kuehn@dlr.de
    family-names: Kühn
    given-names: Martin J.
  - affiliation: "CERFACS"
    email: Carola.Kruse@CERFACS.fr
    family-names: Kruse
    given-names: Carola    
references:
  - title: "Implicitly extrapolated geometric multigrid on disk-like domains for the gyrokinetic Poisson equation from fusion plasma applications"
    authors:
      - family-names: Kühn
        given-names: Martin J.
      - family-names: Kruse
        given-names: Carola
      - family-names: Rüde
        given-names: Ulrich             
    type: article
    doi: 10.1007/s10915-022-01802-1
    url: "https://link.springer.com/article/10.1007/s10915-022-01802-1"

GitHub Events

Total
  • Create event: 34
  • Issues event: 35
  • Watch event: 3
  • Delete event: 36
  • Member event: 2
  • Issue comment event: 62
  • Push event: 208
  • Pull request event: 53
  • Pull request review comment event: 171
  • Pull request review event: 213
  • Fork event: 2
Last Year
  • Create event: 34
  • Issues event: 35
  • Watch event: 3
  • Delete event: 36
  • Member event: 2
  • Issue comment event: 62
  • Push event: 208
  • Pull request event: 53
  • Pull request review comment event: 171
  • Pull request review event: 213
  • Fork event: 2

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 28
  • Total pull requests: 31
  • Average time to close issues: over 1 year
  • Average time to close pull requests: 2 months
  • Total issue authors: 4
  • Total pull request authors: 4
  • Average comments per issue: 0.86
  • Average comments per pull request: 0.65
  • Merged pull requests: 15
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 9
  • Pull requests: 26
  • Average time to close issues: 17 days
  • Average time to close pull requests: 4 days
  • Issue authors: 2
  • Pull request authors: 3
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.35
  • Merged pull requests: 12
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • mknaranja (19)
  • CodingAllan (7)
  • julianlitz (1)
  • EmilyBourne (1)
Pull Request Authors
  • julianlitz (18)
  • mknaranja (9)
  • CodingAllan (3)
  • EmilyBourne (1)
Top Labels
Issue Labels
enhancement (6) good first issue (3) bug (1) epic (1)
Pull Request Labels
enhancement (1) bug (1)