Skip to main content

Python/SymPy-based code generation for numerical relativity... and beyond!

Project description

Python CI

NRPy+ 2.0: Python/SymPy-Based Code Generation for Numerical Relativity... and Beyond!

Quick start:

  1. pip install nrpy
  2. Choose a project to build, run the provided command, then follow the instructions for compiling & running the generated C code.
    • Wave equation solver
      • Cartesian coordinates: python3 -m nrpy.examples.wave_equation_cartesian
      • Curvilinear coordinates: python3 -m nrpy.examples.wave_equation_curvilinear
    • General relativity
      • Two black holes collide: python3 -m nrpy.examples.two_blackholes_collide
      • Black hole spectroscopy: python3 -m nrpy.examples.blackhole_spectroscopy
      • Spinning black hole: python3 -m nrpy.examples.spinning_blackhole

Slow start, in case you want to develop NRPy+ directly:

  1. Clone this repository, and cd nrpy
  2. Add the repository root directory to your Python path. export PYTHONPATH=.:$PYTHONPATH . For convenience, add this command to your ~/.bashrc file: echo "export PYTHONPATH=.:\$PYTHONPATH" >> ~/.bashrc
  3. Then e.g., run an example code: python3 nrpy/examples/wave_equation_cartesian, then follow the instructions for compiling & running the generated C code.
  4. Run ./wavetoy. It'll output at various times the solution from the point closest to r=0, as well as the relative error compared to the exact solution at that point to a file out0d-conv_factor1.00.txt.
  5. All BlackHoles@Home (BHaH) infrastructure codes now support parameter files, and each code generation automatically outputs a parfile named [project name].par. So you'll find an editable wavetoy.par.
  6. In addition, users can override certain parameter file parameters at the command line. E.g., wavetoy has a parameter convergence_factor that increases the resolution (technically Nx=Ny=Nz) by this factor. To output at twice the resolution, simply run ./wavetoy 2.0, and a new file will be output out0d-conv_factor2.00.txt, which contains data at 2x the resolution.
  7. Analyze the output from out0d-conv_factor1.00.txt and out0d-conv_factor2.00.txt in e.g., gnuplot.

Key Improvements over NRPy+ 1.0:

Easy Installation

  • NRPy+ has been transformed into a proper Python project and can now be installed via pip! Use the command pip install nrpy to get started.
  • Visit our PyPI page for more information.
    • With pip, it's easier than ever to build your own projects based on NRPy+.
    • You can now generate a complete C project from start to finish without the need for running a Jupyter notebook.
      • For instance, running pip install nrpy && python3 -m nrpy.examples.two_blackholes_collide will generate a C code project that evolves Brill-Lindquist forward in time using the BSSN formulation.
    • Check out GitHub README for instructions on generating other pre-baked example codes... or use them to generate your own codes!

Python 3.6+ Features

  • NRPy+ now makes use of Python features introduced in version 3.6 and above, such as f-strings.
  • The code is now more Pythonic and incorporates objects where useful. Global variables are now a thing of the past!

User-friendly

  • It's much simpler to work with NRPy+ now; you no longer have to read the source code of each function you call.
    • Facilitating this, you'll find:
      • Docstrings for all functions, classes, and modules.
      • Type hints across all modules; mypy --strict passes.
      • Numerous doctests.
      • Code formatted with Black.
      • Stricter linting.

Improved Continuous Integration

  • GitHub Actions now checks all files within the repo and will fail if any of the following conditions are met:
    • Doctest failure
    • pylint score less than 9.5
    • Black needs to reformat any .py file
    • mypy --strict fails on any .py file
    • Generating and compiling all examples from the pip-installed NRPy+ fresh from the latest git commit fails.

More Extensible

  • The "SENR" infrastructure has been replaced with "BHaH" (BlackHoles@Home). All BHaH-specific functionality is located in nrpy/infrastructures/BHaH/.
    • While BHaH currently only supports single grids, multi-patch support will be added soon.
    • You'll notice the old paramstruct has been broken into commondata_struct (data shared by all grids) and griddata (contains data specific to a particular grid).
      • Adding multi-patch support is a matter of setting commondata.NUMGRIDS > 1 and all the special algorithms.
    • There is a common but slightly customizable main.c file used by all BHaH codes, see nrpy/infrastructures/BHaH/main_c.py. This should greatly minimize code duplication in BHaH codes.
    • Parameter files are now supported, as well as advanced command-line input.
    • The infrastructures/ directory includes helper functions for specific infrastructures. It currently contains BHaH and CarpetX subdirectories, with more to come.
    • Cparameters has been renamed to CodeParameters, allowing for future extensions of NRPy+ to output kernels in Python, Fortran, etc.
    • Rewritten expression validation infrastructure, to make it easier to validate newly added sympy expressions -- regardless of how complex they are.

Plans for Old nrpytutorial Code

  • We'll migrate the Jupyter notebooks to a new nrpytutorial GitHub repo as they are updated to NRPy+ 2.0.
  • All the core .py files from nrpytutorial have been modernized & ported to NRPy+ 2.0.
  • What .py files remain in nrpytutorial will be ported to NRPy+ 2.0.

Download files

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

Source Distribution

nrpy-2.0.14.tar.gz (265.0 kB view details)

Uploaded Source

Built Distribution

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

nrpy-2.0.14-py3-none-any.whl (326.4 kB view details)

Uploaded Python 3

File details

Details for the file nrpy-2.0.14.tar.gz.

File metadata

  • Download URL: nrpy-2.0.14.tar.gz
  • Upload date:
  • Size: 265.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for nrpy-2.0.14.tar.gz
Algorithm Hash digest
SHA256 9119d6d5d0ca3849717e88c8cf0479e123ee8aacfc34e94c09271d61f59348f9
MD5 9095656281b47b419f6509a991f036a6
BLAKE2b-256 3ad8367b48f42a739f2721034593423f04799c07a977108f7a11c7d71b389bd5

See more details on using hashes here.

File details

Details for the file nrpy-2.0.14-py3-none-any.whl.

File metadata

  • Download URL: nrpy-2.0.14-py3-none-any.whl
  • Upload date:
  • Size: 326.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.3

File hashes

Hashes for nrpy-2.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 407dbf3e98b40cf826291dcc8694f089457cf25c88579dc6da06fe896ed82ede
MD5 1205e659a32edc142995bc81c7988619
BLAKE2b-256 0375a7a873f587ba8d6099af34d16877f7e23ae6ac790a18f6acb65ba8cd12c1

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