ptam.h

以下代码实现的是 峰谷平均法 ,参考:

    1. 张海明. 2021. 地震学中的Lamb问题(上). 科学出版社
    2. Zhang, H. M., Chen, X. F., & Chang, S. (2003). 
          An efficient numerical method for computing synthetic seismograms 
          for a layered half-space with sources and receivers at close or same depths. 
          Seismic motion, lithospheric structures, earthquake and volcanic sources: 
          The Keiiti Aki volume, 467-486.
Author

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

Date

2024-07-24

Functions

void grt_PTA_method(GRT_MODEL1D *mod1d, real_t k0, real_t predk, 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 *ptam_fstatsnr[nr][2], GRT_KernelFunc kerfunc)

峰谷平均法 Peak-Trough Averaging Method,最后收敛的积分结果以三维数组的形式返回,

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

  • k0[in] 先前的积分已经进行到了波数k0

  • predk[in] 先前的积分使用的积分间隔dk,因为峰谷平均法使用的 积分间隔会和之前的不一致,这里传入该系数以做预先调整

  • nr[in] 震中距数量

  • rs[in] 震中距数组

  • sum_J0[out] 积分值

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

  • sum_uiz_J0[out] uiz的积分值

  • sum_uir_J0[out] uir的积分值

  • ptam_fstatsnr[out] 峰谷平均法过程文件指针数组

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

int grt_cplx_peak_or_trough(int idx1, int idx2, const cplx_t arr[GRT_PTAM_WINDOW_SIZE][GRT_SRC_M_NUM][GRT_INTEG_NUM], real_t k, real_t dk, real_t *pk, cplx_t *value)

观察连续3个点的函数值的实部变化,判断是波峰(1)还是波谷(-1), 并计算对应值。

参数:
  • idx1[in] 阶数索引

  • idx2[in] 积分类型索引

  • arr[in] 存有连续三个点的函数值的数组

  • k[in] 三个点的起始波数

  • dk[in] 三个点的波数间隔,这样使用k和dk定义了三个点的位置

  • pk[out] 估计的波峰或波谷处的波数

  • value[out] 估计的波峰或波谷处的函数值

返回:

波峰(1),波谷(-1),其它(0)

void grt_cplx_shrink(size_t n1, cplx_t *arr)

递归式地计算缩减序列的值,

\[ M_i = 0.5\times (M_i + M_{i+1}) \]

参数:
  • n1[in] 数组长度

  • arr[inout] 振荡的数组,最终收敛值在第一个,arr[0]