integral.h

Author

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

Date

2025-04-03

将被积函数的逐点值累加成积分值

Functions

void grt_int_Pk(real_t k, real_t r, const cplx_t QWV[GRT_SRC_M_NUM][GRT_QWV_NUM], bool calc_uir, cplx_t SUM[GRT_SRC_M_NUM][GRT_INTEG_NUM])

计算核函数和Bessel函数的乘积,相当于计算了一个小积分区间内的值。参数中涉及两种数组形状:

  • QWV. 存储的是核函数,第一个维度不同震源,不同阶数,第二个维度3代表三类系数qm,wm,vm

  • SUM. 存储的是该dk区间内的积分值,第一个维度不同震源,不同阶数,维度4代表4种类型的F(k,w)Jm(kr)k的类型

参数:
  • k[in] 波数

  • r[in] 震中距

  • QWV[in] 不同震源,不同阶数的核函数 \( q_m, w_m, v_m \)

  • calc_uir[in] 是否计算ui_r(位移u对坐标r的偏导)

  • SUM[out] 该dk区间内的积分值

void grt_merge_Pk(const cplx_t sum_J[GRT_SRC_M_NUM][GRT_INTEG_NUM], cplx_t tol[GRT_SRC_M_NUM][GRT_CHANNEL_NUM])

将最终计算好的多个积分值,按照公式(5.6.22)组装成3分量。

参数:
  • sum_J[in] 积分结果

  • tol[out] Z、R、T分量结果

void grt_int_Pk_filon(real_t k, real_t r, bool iscos, const cplx_t QWV[GRT_SRC_M_NUM][GRT_QWV_NUM], bool calc_uir, cplx_t SUM[GRT_SRC_M_NUM][GRT_INTEG_NUM])

和int_Pk函数类似,不过是计算核函数和渐近Bessel函数的乘积 sqrt(k) * F(k,w) * cos ,其中涉及两种数组形状:

  • QWV. 存储的是核函数,第一个维度不同震源,不同阶数,第二个维度3代表三类系数qm,wm,vm

  • SUM. 存储的是该dk区间内的积分值,第一个维度不同震源,不同阶数,维度4代表4种类型的F(k,w)Jm(kr)k的类型

参数:
  • k[in] 波数

  • r[in] 震中距

  • iscos[in] 是否使用cos函数,否则使用sin函数

  • QWV[in] 不同震源,不同阶数的核函数 \( q_m, w_m, v_m \)

  • calc_uir[in] 是否计算ui_r(位移u对坐标r的偏导)

  • SUM[out] 该dk区间内的积分值

void grt_int_Pk_sa_filon(const real_t k3[3], real_t r, const cplx_t QWV3[3][GRT_SRC_M_NUM][GRT_QWV_NUM], bool calc_uir, cplx_t SUM[GRT_SRC_M_NUM][GRT_INTEG_NUM])

对sqrt(k)*F(k,w)进行二次曲线拟合,再计算 (a*k^2 + b*k + c) * cos(kr - (2m+1)/4) 的积分,其中涉及两种数组形状:

  • QWV. 存储的是核函数,第一个维度不同震源,不同阶数,第二个维度3代表三类系数qm,wm,vm

  • SUM. 存储的是该三点区间内的积分值,第一个维度不同震源,不同阶数,维度4代表4种类型的F(k,w)Jm(kr)k的类型

参数:
  • k3[in] 三点等距波数

  • r[in] 震中距

  • QWV3[in] k3对应的不同震源,不同阶数的核函数 \( q_m, w_m, v_m \)

  • calc_uir[in] 是否计算ui_r(位移u对坐标r的偏导)

  • SUM[out] 该三点区间内的积分值