grnspec.h

将格林函数频谱用一个结构体包裹

Author

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

Date

2026-04

Functions

void grt_grnspec_allocate_u(GRNSPEC *grn)

申请 u, uiz, uir 的内存

void grt_grnspec_free_u(GRNSPEC *grn)

释放 u, uiz, uir 的内存

void grt_grnspec_write_sac(const GRNSPEC *grn, const real_t (*travtPS)[2], const real_t *begintimes, char **outputdirs, GRT_FFTW_HOLDER *fh, SACTRACE *sac, const char *validChnls, const bool skipImagComps, const bool saveEX, const bool saveVF, const bool saveHF, const bool saveDC)

将频谱 u, uiz, uir 变换到时域后以 SAC 格式保存到本地

参数:
  • grn[in] 格林函数频谱结构体

  • travtPS[in] 不同震源距的初至P、S到时

  • begintimes[in] 不同震中距的波形时移

  • outputdirs[in] 不同震中距的保存目录

  • fh[in] 控制反傅里叶变换的结构体

  • sac[inout] SACTRACE 原型,在头段变量中记录了基本信息

  • validChnls[in] 要保存的分量,例如全波解为 “ZRT”, Rayleigh面波解为 “ZR”, Love面波解为 “T”

  • skipImagComps[in] 跳过虚频率的补偿

  • saveEX[in] 保存爆炸源结果

  • saveVF[in] 保存垂直力源结果

  • saveHF[in] 保存水平力源结果

  • saveDC[in] 保存水平力源结果

struct GRNSPEC
#include <grnspec.h>

不同震中距、不同震源、不同分量的格林函数频谱

Public Members

size_t nf

总频点数

real_t *freqs

频率数组 freqs[nf]

size_t nf1
size_t nf2

待计算的频率索引

size_t nr

震中距数量

real_t *rs

震中距数组

real_t wI

虚频率, \( \tilde{\omega} =\omega - i \omega_I \)

bool keepAllFreq

是否计算所有频点,不论频率多低

bool calc_upar

是否计算位移u的空间导数

pcplxChnlGrid *u

不同震源不同阶数的格林函数的Z、R、T分量频谱结果

pcplxChnlGrid *uiz

不同震源不同阶数的格林函数的Z、R、T分量对z偏导的频谱结果

pcplxChnlGrid *uir

不同震源不同阶数的格林函数的Z、R、T分量对r偏导的频谱结果

char *statsstr

积分结果输出路径

size_t nstatsidxs

仅输出特定频点的对应数量

size_t *statsidxs

对应频点的频率索引 statsidxs[nstatsidxs]