计算Kerr拟正常模式频率、分离常数和球-椭球混合系数的包
项目描述
欢迎来到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
qnm 在 conda-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))
这会导致以下图(格式除外)
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))
这会导致以下图(格式除外)
精度和验证
连分数的默认容差 cf_tol
为 1e-10,复数根精炼的 tol
为 DBL_EPSILON≅1.5e-8。这些可以在运行时更改,以便您可以将缓存的值精炼到更高的精度。
Greg Cook 的预计算数据表(使用任意精度算术计算)可用于验证此代码的结果。请参阅比较笔记本 notebooks/Comparison-against-Cook-data.ipynb
,以查看此类比较,可以修改为比较任何可用的模式。
球面-球面分解
QNMs 的角依赖性自然是自旋加权 球面 波函数。球面波函数实际上不是一个完整的正交基。同时,自旋加权 球面 波函数是完整的正交归一基,并且被广泛使用。因此,您通常希望将球面波函数(在左边)用球面波函数(在右边)表示
这里 ℓ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)
贡献
欢迎贡献力量!至少有两种方式可以为这个代码库做出贡献
- 如果您发现了一个错误或想提出改进建议,请使用 GitHub 上的 问题跟踪器。查看过去的问题也是一个好主意,以查看是否有人遇到过同样的问题或提出过相同的建议。
- 如果您将编写或编辑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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6fd017c2acb25b1ba3a4c00fe8a70a5f0fe90e0cf7d407e45842e5b33f8cf47b |
|
MD5 | 16faa2ea9ed2185773d4739a5bffc990 |
|
BLAKE2b-256 | 71536a1e24671d0f2af6a70054c74f364cbf33e88a7db1e3f82e490a103be87b |
qnm-0.4.3-py2-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9f7f83b773b1a7f15d78e5d7dc428fbdf1c6a6fd8d5554b5cdb04f217c73ab3d |
|
MD5 | 868f9c989779c9d32785aa9c3594f0d8 |
|
BLAKE2b-256 | 6b5d03b89b152275440853078a701b1ac7e4fddf9a9a267b24f48caff786e709 |