atomscf.grid
Functions
|
生成用于变量变换方法的指数网格。 |
|
生成线性(等间隔)径向网格及其梯形积分权重。 |
|
生成对数(几何)径向网格及其梯形积分权重。 |
|
生成混合径向网格:核附近为对数网格,外层为线性网格。 |
为给定单调递增的径向网格计算梯形积分权重。 |
- atomscf.grid.radial_grid_linear(n, rmin, rmax)[源代码]
生成线性(等间隔)径向网格及其梯形积分权重。
线性网格的定义:
\[r_i = r_\min + i\,\Delta r, \quad i=0,\dots, N-1,\ \ \Delta r = \frac{r_\max - r_\min}{N-1}.\]- 参数:
- 返回类型:
- 返回:
r (numpy.ndarray) -- 线性径向网格坐标 \(r_i\)。
w (numpy.ndarray) -- 对应的梯形积分权重 \(w_i\)。
示例
>>> import numpy as np >>> from atom_scf.grid import radial_grid_linear >>> r, w = radial_grid_linear(5, 0.0, 1.0) >>> np.allclose(np.sum(w), 1.0) True
- atomscf.grid.radial_grid_log(n, rmin, rmax)[源代码]
生成对数(几何)径向网格及其梯形积分权重。
对数网格的定义(对数等差,适用于 Numerov):
\[r_i = r_\min\,\exp\!\left( i\,\Delta x \right),\ \ \Delta x = \frac{\ln(r_\max) - \ln(r_\min)}{N-1}.\]- 参数:
- 返回类型:
- 返回:
r (numpy.ndarray) -- 对数径向网格坐标 \(r_i\)。
w (numpy.ndarray) -- 对应的梯形积分权重 \(w_i\)。
备注
对数网格能在小 \(r\) 处加密采样,适合处理库仑势与核附近行为。
该网格满足 ln(r) 等差,适用于 Numerov 方法(参考 codex reply_check_4.md)
若后续采用有限差分离散二阶导数,需使用非均匀网格的差分公式(本包已支持)。
- atomscf.grid.radial_grid_exp_transformed(n, rmin, rmax, total_span=6.0)[源代码]
生成用于变量变换方法的指数网格。
网格公式参考文献 [1]_:
\[r(j) = R_p(\exp(j\delta) - 1) + r_{\min}, \quad j=0,1,\ldots,j_{\max}\]其中 \(R_p\) 由边界条件 \(r(j_{\max}) = r_{\max}\) 确定, \(\delta\) 由 \(j_{\max} \cdot \delta = \text{total\_span}\) 确定(默认6.0)。
该网格配合变量变换 \(v(j) = u(j) / \exp(j\delta/2)\) 使用, 可以消除坐标变换引入的一阶导数项。
- 参数:
- 返回类型:
- 返回:
r (numpy.ndarray) -- 径向网格坐标,满足 r[0] = rmin, r[-1] = rmax。
w (numpy.ndarray) -- 对应的梯形积分权重。
delta (float) -- 网格参数 \(\delta\)。
Rp (float) -- 网格参数 \(R_p\)。
备注
该网格确保 r[0] = rmin(可以为0,物理上正确)
需配合 operator.py 中的 solve_bound_states_transformed 使用
变量变换后的方程没有一阶导数项,数值稳定性好
引用
[ExpGridTransform]指数网格变量变换方法 来源:Computational Physics Fall 2024, Assignment 7, Problem 2 https://github.com/bud-primordium/Computational-Physics-Fall-2024/tree/main/Assignment_7/Problem_2 problem_2.tex 第32-46行
- atomscf.grid.trapezoid_weights(r)[源代码]
为给定单调递增的径向网格计算梯形积分权重。
使用一维梯形规则近似积分:
\[\int_{r_\min}^{r_\max} f(r)\,\mathrm{d}r \approx \sum_{i=0}^{N-1} w_i f(r_i)\]其中权重 \(w_i\) 由相邻网格间距确定。端点权重为半步长,内部点为左右间距的平均值。
- 参数:
r (numpy.ndarray) -- 单调递增的径向坐标数组 \((r_0, r_1, \dots, r_{N-1})\),要求 \(r_i < r_{i+1}\)。
- 返回:
w -- 梯形积分权重 \((w_0, \dots, w_{N-1})\),满足上述积分近似式。
- 返回类型:
备注
该权重适用于一维径向函数 \(u(r)\) 的普通积分(例如归一化 \(\int u^2\,dr=1\))。
若用于三维体积分(如 \(\int 4\pi r^2 n(r)\,dr\)),需显式将体积因子 \(4\pi r^2\) 乘入被积函数。
- atomscf.grid.radial_grid_mixed(n_inner, n_outer, rmin, r_switch, rmax)[源代码]
生成混合径向网格:核附近为对数网格,外层为线性网格。
混合网格旨在在小 \(r\) 处加密,同时控制总点数与外层行为:
内层(对数):\(r_i = r_{\min} e^{i\Delta},\ i=0..n_{\text{inner}}-1\),末点尽量接近 \(r_{\text{switch}}\);
外层(线性):从 \(r_{\text{switch}}\) 到 \(r_{\max}\) 等间距 \(n_{\text{outer}}\) 个点(含端点)。