Skip to main content

Python implementation of the MGRIT algorithm

Project description

Test Status Code Coverage Lint Status Docs Status Publish Status

Introduction

PyMGRIT is a package for the Multigrid-Reduction-in-Time (MGRIT) algorithm in Python.

PyMGRIT is currently developed by Jens Hahne and Stephanie Friedhoff.

What is MGRIT?

The MGRIT algorithm is a reduction-based time-multigrid method for solving time-dependent problems. In contrast to solving sequentially for one time step after the other, the MGRIT algorithm is an iterative method that allows calculating multiple time steps simultaneously by using a time-grid hierarchy. The MGRIT method is a non-intrusive approach that essentially uses the same time integrator as a traditional time-stepping algorithm. Therefore, it is particularly well suited for introducing time parallelism in simulations using existing application codes.

PyMGRIT Features

PyMGRIT features:

  • Classical Multigrid-Reduction-in-Time (MGRIT) for solving evolutionary systems of equations

    • Non-intrusive approach

    • Optimal time-multigrid algorithm

    • A variety of cycling strategies, relaxation schemes, and coarsening strategies

  • Time parallelism

  • Specific to space-time problems

    • Space & time parallelism

    • Additional coarsening in space

Citing

@MISC{PyMGRIT,
  author = "Hahne, J. and Friedhoff, S.",
  title = "{PyMGRIT}: Multigrid-Reduction-in-Time in {Python} v1.0",
  year = "2020",
  url = "https://github.com/pymgrit/pymgrit",
  note = "Release 1.0"
  }

Installation

PyMGRIT requires mpicc (from openmpi or mpich)

>>> pip3 install pymgrit

or

>>> git clone https://github.com/pymgrit/pymgrit.git
>>> cd pymgrit
>>> pip3 install .

Example Usage

PyMGRIT is easy to use! The following code generates a discrete Dahlquist test problem and solves the resulting linear system using a two-level MGRIT algorithm.:

# Import PyMGRIT
from pymgrit import *

# Create Dahlquist's test problem with 101 time steps in the interval [0, 5]
dahlquist = Dahlquist(t_start=0, t_stop=5, nt=101)

# Construct a two-level multigrid hierarchy for the test problem using a coarsening factor of 2
dahlquist_multilevel_structure = simple_setup_problem(problem=dahlquist, level=2, coarsening=2)

# Set up the MGRIT solver for the test problem and set the solver tolerance to 1e-10
mgrit = Mgrit(problem=dahlquist_multilevel_structure, tol=1e-10)

# Solve the test problem
info = mgrit.solve()

Program output:

INFO - 21-02-20 16:18:43 - Start setup
INFO - 21-02-20 16:18:43 - Setup took 0.009232759475708008 s
INFO - 21-02-20 16:18:43 - Start solve
INFO - 21-02-20 16:18:43 - iter 1  | conv: 7.186185937031941e-05  | conv factor: -                       | runtime: 0.013237237930297852 s
INFO - 21-02-20 16:18:43 - iter 2  | conv: 1.2461067076355103e-06 | conv factor: 0.017340307063501627    | runtime: 0.010195493698120117 s
INFO - 21-02-20 16:18:43 - iter 3  | conv: 2.1015566145245807e-08 | conv factor: 0.016864981158092696    | runtime: 0.008922338485717773 s
INFO - 21-02-20 16:18:43 - iter 4  | conv: 3.144127445017594e-10  | conv factor: 0.014960945726074891    | runtime: 0.0062139034271240234 s
INFO - 21-02-20 16:18:43 - iter 5  | conv: 3.975214076032893e-12  | conv factor: 0.01264329816633959     | runtime: 0.006150722503662109 s
INFO - 21-02-20 16:18:43 - Solve took 0.05394101142883301 s
INFO - 21-02-20 16:18:43 - Run parameter overview
  time interval             : [0.0, 5.0]
  number of time points     : 101
  max dt                    : 0.05000000000000071
  number of levels          : 2
  coarsening factors        : [2]
  cf_iter                   : 1
  nested iteration          : True
  cycle type                : V
  stopping tolerance        : 1e-10
  time communicator size    : 1
  space communicator size   : 1

Getting Help

For documentation see https://pymgrit.github.io/pymgrit/

Create an issue.

Look at the Quickstart, Tutorial or the Examples.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymgrit-1.0.2.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pymgrit-1.0.2-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file pymgrit-1.0.2.tar.gz.

File metadata

  • Download URL: pymgrit-1.0.2.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for pymgrit-1.0.2.tar.gz
Algorithm Hash digest
SHA256 d9a785546ce3e21d999331975fb06124424a210ba68a3ea6b6670970296d5347
MD5 2c43416bdf557f22b75949a730b06143
BLAKE2b-256 4e28e856bd2d30e134c887406a4363e979bf705ae8737f4701d349b615fe1b4d

See more details on using hashes here.

File details

Details for the file pymgrit-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: pymgrit-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.2

File hashes

Hashes for pymgrit-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0e15bba5b2dc7a6b02b23a249b6e44cf6c12bea1f0cfcac279120b0354e7cf13
MD5 36a5bdb0182f40bd30b93f6a918db0a1
BLAKE2b-256 b88b822ec80d3d6ea5f5c7c5d2590fdd99439ee9862cfcd7844f1205930af4f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page