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.6.tar.gz (45.6 kB view details)

Uploaded Source

Built Distribution

pymgrit-1.0.6-py3-none-any.whl (61.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pymgrit-1.0.6.tar.gz
  • Upload date:
  • Size: 45.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for pymgrit-1.0.6.tar.gz
Algorithm Hash digest
SHA256 c58aa741a4840405c16c80509a8609b22655ef7763314e34438a398f1ce8b281
MD5 40b60cfabcd84fcdfebcbae7f4e38093
BLAKE2b-256 70983b577eff74cd151ebcb9d8bf670ec361682967a2ec4848c9b8de559dc581

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pymgrit-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 61.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for pymgrit-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 49e924152551a78efba2fd3931f487a55e75baa2f6b794188df57ff3767f665e
MD5 5c085445ea08f955899ec94cdb48b139
BLAKE2b-256 60bfc98206c94bd3d5a7c64799a772983e80ac3b63737aefb4a8bf9da30c66d3

See more details on using hashes here.

Supported by

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