util.h

其它辅助函数

Author

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

Date

2025-08

Functions

char **grt_string_split(const char *string, const char *delim, size_t *size)

指定分隔符,从一串字符串中分割出子字符串数组

参数:
  • string[in] 原字符串

  • delim[in] 分隔符

  • size[out] 分割后的子字符串数组长度

返回:

子字符串数组

char **grt_string_from_file(FILE *fp, size_t *size)

从文本文件中,将每行内容读入字符串数组

参数:
  • fp[inout] 文件指针

  • size[out] 读入的字符串数组长度

返回:

字符串数组

bool grt_string_composed_of(const char *str, const char *alws)

判断字符串是否由特定的若个字符组成(充分条件)

参数:
  • str[in] 待检查的字符串

  • alws[in] 允许的字符集合

返回:

是否符合

int grt_string_ncols(const char *string, const char *delim)

指定分隔符,获得字符串的分割出的子字符串数。 相当于是 grt_string_split 函数的简化版本

参数:
  • string[in] 原字符串

  • delim[in] 分隔符

返回:

子字符串数

const char *grt_get_basename(const char *path)

从路径字符串中找到用/或\分隔的最后一项

参数:

path[in] 路径字符串指针

返回:

指向最后一项字符串的指针

void grt_trim_whitespace(char *str)

去除字符串首尾空白

参数:

str[inout] 字符串

bool grt_is_comment_or_empty(const char *line)

检查是否为注释行或空行

参数:

line[in] 读入一行的字符串

ssize_t grt_getline(char **lineptr, size_t *n, FILE *stream)

由于 Windows MSYS2 环境没有 getline 函数(即使定义了 _GNU_SOURCE) 所以这里需要使用自定义的 getline 函数,参数与 POSIX 定义相同

void grt_GF_freq2time_write_to_file(const char *command, const GRT_MODEL1D *mod1d, const char *s_output_dir, const char *s_modelname, const char *s_depsrc, const char *s_deprcv, const real_t wI, GRT_FFTW_HOLDER *pt_fh, const size_t nr, char *s_dists[nr], const real_t dists[nr], real_t travtPS[nr][2], const real_t depsrc, const real_t deprcv, const real_t delayT0, const real_t delayV0, const bool calc_upar, const bool doEX, const bool doVF, const bool doHF, const bool doDC, const char *chalst, cplx_t *grn[nr][GRT_SRC_M_NUM][GRT_CHANNEL_NUM], cplx_t *grn_uiz[nr][GRT_SRC_M_NUM][GRT_CHANNEL_NUM], cplx_t *grn_uir[nr][GRT_SRC_M_NUM][GRT_CHANNEL_NUM])

处理单个震中距对应的数据逆变换和SAC保存

参数:
  • command[in] 模块名

  • mod1d[in] 模型结构体指针

  • s_output_dir[in] 保存目录(调用前已创建)

  • s_modelname[in] 模型名称

  • s_depsrc[in] 震源深度字符串

  • s_deprcv[in] 接收深度字符串

  • wI[in] 虚频率

  • pt_fh[inout] FFTW结构体

  • nr[in] 震中距数量

  • s_dists[in] 输入的震中距字符串数组

  • dists[in] 震中距数组

  • travtPS[out] 保存不同震中距的初至P、S

  • depsrc[in] 震源深度

  • deprcv[in] 接收深度

  • delayT0[in] 延迟时间

  • delayV0[in] 参考速度

  • calc_upar[in] 是否计算位移偏导

  • doEX[in] 是否保存爆炸源结果

  • doVF[in] 是否保存垂直力源结果

  • doHF[in] 是否保存水平力源结果

  • doDC[in] 是否保存剪切力源结果

  • doDC[in] 是否保存剪切力源结果

  • chalst[in] 要保存的分量字符串

  • grn[in] 格林函数频谱结果

  • grn_uiz[in] 格林函数对z偏导频谱结果

  • grn_uir[in] 格林函数对r偏导频谱结果