Update (May 2020): The original description below is a bit outdated, as
BaikalETK was restructured (for the better!) a bit after ETK telecon discussions. For one,
BaikalETK is now two thorns:
BaikalVacuum, where the former includes stress-energy source terms and the latter does not. Also the former contains 2nd and 4th order finite-difference derivative C code kernels and the latter includes 4th, 6th, and 8th order kernels. These may be specified at runtime, so the user need not rerun
NRPy+ to generate the most commonly used kernels. Still for maximum flexibility one would need to run
NRPy+ to generate kernels that are not already provided. For more details please read the documentation linked to below, and do check out the contents of the
doc/ directories of each thorn.
BaikalETK is an open-source
NRPy+-based BSSN thorn, which has been demonstrated to yield excellent agreement with
ML_BSSN when evolving BBHs and BNSs, and in certain cases (e.g., ADM mass volume integral over entire grid vs time in a pre-merged BNS simulation) better results than
BaikalETK is BSD 2-clause open-source licensed and available in the
NRPy+ github page (https://github.com/zachetienne/nrpytutorial). One can browse its source code & documentation with nbviewer: https://nbviewer.jupyter.org/github/zachetienne/nrpytutorial/blob/master/Tutorial-BaikalETK.ipynb
BaikalETK has the following neat features:
- The core BSSN kernel is generated by
SymPy, which is entirely free and open source, just like
BaikalETK. According to benchmarks by Erik,
BaikalETKruns more than 10% faster than the
ML_BSSNcurrently part of the Toolkit. Work is ongoing to improve
BaikalETK's performance even more.
- It is documented in a Jupyter notebook, which itself is linked to other Jupyter notebooks that document the BSSN formalism & gauge choices.
- It can be generated by either running the aforementioned Jupyter notebook or just importing a Python module within
NRPy+. The Jupyter notebook contains a self-validation test that will fail if the Python module is updated without a corresponding update to the Jupyter notebook.
- Its scheduling and general structure are closely based on the very nice
- It supports arbitrary finite-differencing order and a variety of gauge conditions, which can be extended further. It implements Brown’s covariant formulation of the BSSN equations.
- It supports as an option nonzero BSSN source terms, with appropriate linkage to
ML_BSSN, which (due to Mathematica licensing constraints and consistency with other monolithic thorns) needed to contain all gauge choices, finite difference orders, etc.,
BaikalETKwill only generate a BSSN thorn with a particular gauge and finite-differencing order chosen at the time of thorn generation. That is to say, choices about finite difference order, etc must be made prior to compile-time, which is not conventional at the moment.
BaikalETKis not a complete
ML_BSSNreplacement yet as:
BaikalETKdoes not yet support symmetries, but this should be rather straightforward to fix in an automated way, as
NRPy+requires information about gridfunctions and gridfunction symmetries.
BaikalETKdoes not support
Llamagrids, and I’m not sure the path forward in this sense