k_integ.h

Author

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

Date

2025-04-03

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

Functions

K_INTEG *grt_init_K_INTEG(const bool calc_upar, const size_t nr)

初始化 K_INTEG

参数:
  • calc_upar[in] 是否计算空间导数,这将决定是否申请对应变量的内存

  • nr[in] 震中距个数

返回:

K_INTEG 结构体指针

K_INTEG *grt_copy_K_INTEG(const K_INTEG *K)

复制 K_INTEG

参数:
  • K[in]K_INTEG 结构体指针

返回:

复制的K_INTEG 结构体指针

void grt_free_K_INTEG(K_INTEG *K)

释放 K_INTEG 指针内存

参数:
  • K[inout] K_INTEG 结构体指针

void grt_int_Pk(real_t k, real_t r, const cplxChnlGrid QWV, bool calc_uir, cplxIntegGrid SUM)

计算核函数和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 cplxIntegGrid sumJ, cplxChnlGrid tol)

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

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

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

void grt_int_Pk_filon(real_t k, real_t r, bool iscos, const cplxChnlGrid QWV, bool calc_uir, cplxIntegGrid SUM)

和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 cplxChnlGrid QWV3[3], bool calc_uir, cplxIntegGrid SUM)

对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] 该三点区间内的积分值

struct K_INTEG

Public Members

bool calc_upar
cplxChnlGrid QWV
cplxChnlGrid QWVz
bool applyDCM
real_t kmax
cplxChnlGrid QWV_kmax
cplxChnlGrid QWVz_kmax
size_t nr
cplxIntegGrid SUM

被积函数,用于临时存储

cplxIntegGrid *sumJ

积分值

cplxIntegGrid *sumJz

z偏导的积分值

cplxIntegGrid *sumJr

r偏导的积分值