safim.h

以下代码实现的是自适应Filon积分,参考:

    Chen, X., and H. Zhang (2001). An Efficient Method for Computing Green’s Functions for a 
    Layered Half-Space at Large Epicentral Distances, Bulletin of the Seismological Society of America 91, 
    no. 4, 858–869, doi: 10.1785/0120000113.
Author

Zhu Dengda (zhudengda@mail.iggcas.ac.cn)

Date

2025-4-27

Functions

real_t grt_sa_filon_integ(GRT_MODEL1D *mod1d, real_t k0, real_t dk0, real_t tol, real_t kmax, real_t kref, size_t nr, real_t *rs, cplx_t sum_J0[nr][GRT_SRC_M_NUM][GRT_INTEG_NUM], bool calc_upar, cplx_t sum_uiz_J0[nr][GRT_SRC_M_NUM][GRT_INTEG_NUM], cplx_t sum_uir_J0[nr][GRT_SRC_M_NUM][GRT_INTEG_NUM], FILE *fstats, GRT_KernelFunc kerfunc)

自适应Filon积分, 在大震中距下对Bessel函数取零阶近似,得

\[ J_m(x) \approx \sqrt{\frac{2}{\pi x}} \cos(x - \frac{m \pi}{2} - \frac{\pi}{4}) \]
其中 \(x=kr\).

参数:
  • mod1d[inout] GRT_MODEL1D 结构体指针

  • k0[in] 前一部分的波数积分结束点k值

  • dk0[in] 前一部分的波数积分间隔

  • tol[in] 自适应Filon积分的采样精度

  • kmax[in] 波数积分的上限

  • kref[in] 将k区间整体分为[dk0, kref]和[kref, kmax],后一段使用更宽松的拟合规则

  • nr[in] 震中距数量

  • rs[in] 震中距数组

  • sum_J0[out] 积分值

  • calc_upar[in] 是否计算位移u的空间导数

  • sum_uiz_J0[out] uiz的积分值

  • sum_uir_J0[out] uir的积分值

  • fstats[out] 文件指针,保存不同k值的格林函数积分核函数

  • kerfunc[in] 计算核函数的函数指针

返回:

k 积分截至时的波数