中文

libwignernj:用于精确计算 Wigner 符号及相关系数的可复用 C/C++/Fortran/Python 库

计算物理 2026-05-08 v1

摘要

我们描述了 libwignernj,这是一个免费提供的、基于 BSD 许可证的库,用于在符合标准的 C99 中计算 Wigner 3j、6j 和 9j 符号,Clebsch-Gordan、Racah WW 和 Fano XX 系数,以及复数和实球谐函数上的 Gaunt 系数。libwignernj 通过带符号素数指数分解向量来表示阶乘——这是由 Dodds 和 Wiechers (Comput. Phys. Commun. 4, 268 (1972)) 为角动量系数引入的素因数分解技术,并在随后的一系列工作中得到了改进——并将该表示与 Johansson 和 Forssén (SIAM J. Sci. Comput. 38, A376 (2016)) 的多字整数 Racah 求和相结合,在此之下每个中间量都是精确的有理数,且所有舍入仅限于最终的浮点转换。单精度、双精度和长双精度结果在最后一个可表示位上都是正确的,并且通过 libquadmath 进行的 IEEE 754 binary128 评估以及通过 GNU Multiple-Precision Floating-Point Reliable (MPFR) 库进行的任意精度评估是可选公开的。libwignernj 没有强制的运行时依赖项,也没有调用方初始化步骤,这使得它易于嵌入到出现这些系数的原子、分子、核物理和电磁散射应用中。C++、CPython 和 Fortran 90 绑定随 C 库一起提供。在整个应用程序编程接口 (API) 中,半整数角动量通过整数 2j2j 参数进行精确编码。提供 CMake 包和 pkg-config 文件以实现与下游项目的直接集成,并且持续集成 (CI) 流水线在每次推送时于 Linux(共享和静态)、macOS 和 Windows 上运行完整的测试套件。

关键词

引用

@article{arxiv.2605.06634,
  title  = {libwignernj: a reusable C/C++/Fortran/Python library for exact Wigner symbols and related coefficients},
  author = {Susi Lehtola},
  journal= {arXiv preprint arXiv:2605.06634},
  year   = {2026}
}

备注

32 pages, 2 figures