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.4.tar.gz (34.9 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.4-py3-none-any.whl (45.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pymgrit-1.0.4.tar.gz
  • Upload date:
  • Size: 34.9 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.46.1 CPython/3.8.3

File hashes

Hashes for pymgrit-1.0.4.tar.gz
Algorithm Hash digest
SHA256 f911ac078459a7f089d2e92403fa1b772ba45dc2ea4aa59bd44c39535ff51288
MD5 d4b3bb5b2c7020e4cd63a23b204c458f
BLAKE2b-256 a9d6b3013190efc23e1be74901dd7a6b1f7463fdfce3d17478f0ab5d7b53964f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymgrit-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 45.7 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.46.1 CPython/3.8.3

File hashes

Hashes for pymgrit-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 065f7ce4917ff43676cf0781b1ff78034f88fac8845a6014a3a0d4b254b9c6b3
MD5 a0255f1357acc2a9caafaa80c700362d
BLAKE2b-256 4b616b89a73a170aa9611bf6ffe7e0dc141e8c32b80fddb27165b21e1377f6a6

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