跳转到主要内容

计算Kerr拟正常模式频率、分离常数和球-椭球混合系数的包

项目描述

github PyPI version Conda Version DOI JOSS status arXiv:1908.10377 ascl:1910.022 license Build Status Documentation Status

欢迎来到qnm

qnm是一个开源Python包,用于计算Kerr拟正常模式频率、角分离常数和球-椭球混合系数。该qnm包包括一个Leaver求解器,具有对角区域的Cook-Zalutskiy光谱方法,以及一个缓存机制以避免重复计算。

使用此Python包,您可以在所需的无量纲自旋参数0≤a<1处计算由不同(s,l,m,n)标记的QNMs。角区域被处理为自旋加权椭球谐波的谱分解为自旋加权球谐波。因此,在求解ω和A时(下面详细介绍),您可以免费获得球-椭球分解系数。

我们预先计算了一个大量低频模式(s=-2和s=-1,所有l<8,所有n<7)的缓存。这些可以通过单个函数调用自动安装,并在某些a值处插值以获得根查找的良好初始猜测。

安装

PyPI

qnm可在PyPI上找到

pip install qnm

Conda

qnmconda-forge 上可用。

conda install -c conda-forge qnm

从源代码安装

git clone https://github.com/duetosymmetry/qnm.git
cd qnm
python setup.py install

如果没有root权限,将最后一步替换为 python setup.py install --user。除了手动使用 setup.py,也可以将最后一步替换为 pip install .pip install --user .

依赖关系

这些都可以通过pip或conda安装。

文档

自动生成的API文档可在 Read the Docs: qnm 上找到。

使用方法

最高级接口是通过 qnm.cached.KerrSeqCache,它从磁盘加载缓存的 自旋序列。自旋序列只是用 (s,l,m,n) 标记的模态,其中自旋 a 的范围从 a=0 到某个最大值,例如 0.9995。已经预先计算了大量低自旋序列并可供在线使用。首次使用此包时,请下载预先计算的序列。

import qnm

qnm.download_data() # Only need to do this once
# Trying to fetch https://duetosymmetry.com/files/qnm/data.tar.bz2
# Trying to decompress file /<something>/qnm/data.tar.bz2
# Data directory /<something>/qnm/data contains 860 pickle files

然后,使用 qnm.modes_cache 加载一个感兴趣的 qnm.spinsequence.KerrSpinSeq。如果模式不可用,它将尝试计算它(有关如何控制该计算的详细说明,请参阅文档)。

grav_220 = qnm.modes_cache(s=-2,l=2,m=2,n=0)
omega, A, C = grav_220(a=0.68)
print(omega)
# (0.5239751042900845-0.08151262363119974j)

调用自旋序列 seq 并使用 seq(a) 将返回复数拟正常模态频率 omega、复数角分离常数 A 以及分解相关自旋加权球面波函数的系数向量 C(有关详细信息,请参阅下文)。

对模态的视觉检查非常有用,可以检查求解器是否表现良好。使用matplotlib可以轻松完成。以下是一些部分示例(完整示例请参阅源代码库中的 notebooks/examples.ipynb 文件)

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

s, l, m = (-2, 2, 2)
mode_list = [(s, l, m, n) for n in np.arange(0,7)]
modes = { ind : qnm.modes_cache(*ind) for ind in mode_list }

plt.subplot(1, 2, 1)
for mode, seq in modes.items():
    plt.plot(np.real(seq.omega),np.imag(seq.omega))

plt.subplot(1, 2, 2)
for mode, seq in modes.items():
    plt.plot(np.real(seq.A),np.imag(seq.A))

这会导致以下图(格式除外)

example_22n plot

s, l, n = (-2, 2, 0)
mode_list = [(s, l, m, n) for m in np.arange(-l,l+1)]
modes = { ind : qnm.modes_cache(*ind) for ind in mode_list }

plt.subplot(1, 2, 1)
for mode, seq in modes.items():
    plt.plot(np.real(seq.omega),np.imag(seq.omega))

plt.subplot(1, 2, 2)
for mode, seq in modes.items():
    plt.plot(np.real(seq.A),np.imag(seq.A))

这会导致以下图(格式除外)

example_2m0 plot

精度和验证

连分数的默认容差 cf_tol 为 1e-10,复数根精炼的 tol 为 DBL_EPSILON≅1.5e-8。这些可以在运行时更改,以便您可以将缓存的值精炼到更高的精度。

Greg Cook 的预计算数据表(使用任意精度算术计算)可用于验证此代码的结果。请参阅比较笔记本 notebooks/Comparison-against-Cook-data.ipynb,以查看此类比较,可以修改为比较任何可用的模式。

球面-球面分解

QNMs 的角依赖性自然是自旋加权 球面 波函数。球面波函数实际上不是一个完整的正交基。同时,自旋加权 球面 波函数是完整的正交归一基,并且被广泛使用。因此,您通常希望将球面波函数(在左边)用球面波函数(在右边)表示

equation $${}_s Y_{\\ell m}(\\theta, \\phi; a\\omega) = {\\sum_{\\ell'=\\ell_{\\min} (s,m)}^{\\ell_\\max}} C_{\\ell' \\ell m}(a\\omega)\\ {}_s Y_{\\ell' m}(\\theta, \\phi) \\,.$$

这里 ℓmin=max(|m|,|s|) 和 ℓmax 可在运行时选择。C 系数以复数 ndarray 返回,其中零元素对应于 ℓmin。为了避免索引错误,您可以通过调用 qnm.angular.ells 获取 ℓ 值的 ndarray,例如

ells = qnm.angular.ells(s=-2, m=2, l_max=grav_220.l_max)

贡献

欢迎贡献力量!至少有两种方式可以为这个代码库做出贡献

  1. 如果您发现了一个错误或想提出改进建议,请使用 GitHub 上的 问题跟踪器。查看过去的问题也是一个好主意,以查看是否有人遇到过同样的问题或提出过相同的建议。
  2. 如果您将编写或编辑Python代码,我们使用分叉和拉取请求模型。

您也可以根据MIT许可证的详细说明使用此代码的其他目的。对于任何类型的贡献,请遵循行为准则

引用方法

如果此软件包对导致发表的项目的贡献,请在引用JOSS中的qnm文章时予以认可。以下BibTeX条目在qnm.__bibtex__字符串中可用

@article{Stein:2019mop,
      author         = "Stein, Leo C.",
      title          = "{qnm: A Python package for calculating Kerr quasinormal
                        modes, separation constants, and spherical-spheroidal
                        mixing coefficients}",
      journal        = "J. Open Source Softw.",
      volume         = "4",
      year           = "2019",
      number         = "42",
      pages          = "1683",
      doi            = "10.21105/joss.01683",
      eprint         = "1908.10377",
      archivePrefix  = "arXiv",
      primaryClass   = "gr-qc",
      SLACcitation   = "%%CITATION = ARXIV:1908.10377;%%"
}

致谢

代码由Leo C. Stein开发和维护。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

qnm-0.4.3.tar.gz (94.3 kB 查看哈希值)

上传时间

构建分布

qnm-0.4.3-py2-none-any.whl (95.1 kB 查看哈希值)

上传时间 Python 2

由以下机构支持