✍️ 朱邓达  •  🗓️ 2026-05-20 (创建时间)

eigenfn

简介:

基于面波频散结果,计算面波本征函数、能量积分、群速度、敏感核

语法

grt eigenfn -Cpath [ -Ff1[/f2][/df][+p] ] [ -N[n1][/n2][/dn] ] [ -Wpath[+zz1[/z2/dz]] ] [ -Upath ] [ -K[+cpath][+upath][+xpath][+zdz] ] [ -h ]

描述

基于 eigenv 模块计算的相速度频散结果, 以及其结果文件中保存的模型路径, eigenfn 模块可计算出多个物理量,各个量之间的依赖关系为

        flowchart LR

V(["Phase-Velocity Dispersion<br/> (Eigenvalues)"])
F(["Eigenfunctions"])
E(["Energy Integrals"])
G(["Group-Velocity Dispersion"])
K(["Phase/Group-Velocity Sensitivity"])

V --> F
F --> E
E --> G
E --> K

classDef cmdcls fill:#f9f2d9,stroke:#e8d174,stroke-width:2px,color:#333;
class V cmdcls
    

各个量的结果均以 NetCDF 网格格式保存,涉及的选项如下,其中公式符号的定义详见 姚振兴和谢小碧 (2026)

  • 本征函数(Eigenfunctions)-W

    ncdump -h 命令查看本征函数结果,输出类似于:

    netcdf egn_R {
    dimensions:
            freq = 1 ;
            mode = 11 ;
            z = 61 ;
            w = 8 ;
    variables:
            double freq(freq) ;
            int mode(mode) ;
            double z(z) ;
            int cnum(freq) ;
            double c(freq, mode) ;
                    c:_FillValue = 0. ;
            double eigfn(freq, mode, z, w) ;
                    eigfn:_FillValue = 0. ;
    
    // global attributes:
                    :isRayl = 1 ;
    }
    

    维度(dimensions)

    • freq - 频率点数

    • mode - 阶数点数

    • z - 深度点数

    • w - 本征函数个数 [1]

    变量(variables)

    • freq - 频率数组 (Hz)

    • mode - 阶数数组

    • z - 深度数组 (km)

    • cnum - 不同频率下的相速度点数

    • c - 不同频率不同阶的相速度 (km/s)

    • eigfn - 不同频率不同阶不同深度的本征函数

    全局属性(global attributes)

    • isRayl - 是否为Rayleigh波结果

  • 群速度频散(Group-Velocity Dispersion)-U

    ncdump -h 命令查看群速度频散结果,输出类似于:

    netcdf group_R {
    dimensions:
            freq = 1000 ;
            mode = 49 ;
    variables:
            double freq(freq) ;
            int mode(mode) ;
            int cnum(freq) ;
            double c(freq, mode) ;
                    c:_FillValue = 0. ;
            double u(freq, mode) ;
                    u:_FillValue = 0. ;
    
    // global attributes:
                    :isRayl = 1 ;
    }
    

    维度(dimensions)

    • freq - 频率点数

    • mode - 阶数点数

    变量(variables)

    • freq - 频率数组 (Hz)

    • mode - 阶数数组

    • cnum - 不同频率下的相速度点数

    • c - 不同频率不同阶的相速度 (km/s)

    • u - 不同频率不同阶的群速度 (km/s)

    全局属性(global attributes)

    • isRayl - 是否为Rayleigh波结果

  • 能量积分(Energy Integrals)-K+x

    ncdump -h 命令查看能量积分结果,输出类似于:

    netcdf egy_R {
    dimensions:
            freq = 500 ;
            mode = 1 ;
            e = 10 ;
    variables:
            double freq(freq) ;
            int mode(mode) ;
            int cnum(freq) ;
            double c(freq, mode) ;
                    c:_FillValue = 0. ;
            double egyint(freq, mode, e) ;
                    egyint:_FillValue = 0. ;
    
    // global attributes:
                    :isRayl = 1 ;
    }
    

    维度(dimensions)

    • freq - 频率点数

    • mode - 阶数点数

    • e - 能量积分个数 [2]

    变量(variables)

    • freq - 频率数组 (Hz)

    • mode - 阶数数组

    • cnum - 不同频率下的相速度点数

    • c - 不同频率不同阶的相速度 (km/s)

    • egyint - 能量积分结果

    全局属性(global attributes)

    • isRayl - 是否为Rayleigh波结果

  • 相/群速度敏感核(Phase/Group-velocity Sensitivity): -K+c , -K+u

    ncdump -h 命令查看相/群速度敏感核结果,输出类似于:

    netcdf csens_R {
    dimensions:
            freq = 500 ;
            mode = 1 ;
            z = 31 ;
            k = 3 ;
    variables:
            double freq(freq) ;
            int mode(mode) ;
            double z(z) ;
            int cnum(freq) ;
            double c(freq, mode) ;
                    c:_FillValue = 0. ;
            double csens(freq, mode, z, k) ;
                    csens:_FillValue = 0. ;
    
    // global attributes:
                    :isRayl = 1 ;
    }
    

    维度(dimensions)

    • freq - 频率点数

    • mode - 阶数点数

    • z - 深度点数

    • k - 敏感核个数 [3]

    变量(variables)

    • freq - 频率数组 (Hz)

    • mode - 阶数数组

    • z - 深度数组 (km)

    • cnum - 不同频率下的相速度点数

    对于相速度敏感核,变量包括:

    • c - 不同频率不同阶的相速度 (km/s)

    • csens - 不同频率不同阶不同深度的相速度敏感核

    对于群速度敏感核,变量包括:

    • u - 不同频率不同阶的群速度 (km/s)

    • usens - 不同频率不同阶不同深度的群速度敏感核

    全局属性(global attributes)

    • isRayl - 是否为Rayleigh波结果

必选选项

-Cpath

eigenv 模块计算的相速度频散结果保存文件路径。

可选选项

-Ff1[/f2][/df][+p]

从频散结果中挑选特定频率进行处理(默认全部),有以下几种用法:

  • -Ff1 - 单点频率 f1 ,单位 Hz

  • -Ff1/f2 - 选择频率范围 [f1, f2] ,单位 Hz

  • -Ff1/f2/df - 从频率 f1f2 ,间距 df 的一系列等距频率,单位 Hz

在以上用法后加上 +p ,则 f1,f2,df 均变为周期,单位 secs。 例如 -F0/10/2+p 表示计算周期 2s, 4s, 6s, 8s, 10s 处的频散。

注: 在使用 f1/f2/df 定义等距频率点时,为了方便,用户可以设置 f1=0, 此时程序会自动跳到下一个频率点 (df)。

-N[n1][/n2][/dn]

从频散结果中挑选特定阶数进行处理(默认仅基阶),0 对应基阶,有以下几种用法:

  • -N - 所有阶

  • -Nn1 - 仅阶数 n1

  • -Nn1/n2 - 选择阶数范围 [n1, n2]

  • -Nn1/n2/dn - 从阶数 n1n2 ,间距 dn 的一系列等距阶数

-Wpath[+zz1[/z2/dz]]

计算不同深度上的本征函数,以 NetCDF 格式输出到路径 path 。 关于 +z,有以下几种用法:

  • 如果不指定 +z,则计算模型界面深度上的本征函数;

  • +zz1 - 单点深度 z1 ,单位 km

  • +zz1/z2/dz - 从深度 z1z2 ,间距 dz 的一系列等距深度,单位 km

-Upath

计算相速度频散对应的群速度频散,以 NetCDF 格式输出到路径 path

-K[+cpath][+upath][+xpath][+zdz]

计算能量积分和相/群速度敏感核,以 NetCDF 格式输出到路径 path

  • +cpath - 输出相速度敏感核(无量纲化) \(\dfrac{\alpha}{c}\dfrac{\partial c}{\partial \alpha}, \dfrac{\beta}{c}\dfrac{\partial c}{\partial \beta}, \dfrac{\rho}{c}\dfrac{\partial c}{\partial \rho}\)

  • +upath - 输出群速度敏感核(无量纲化) \(\dfrac{\alpha}{U}\dfrac{\partial U}{\partial \alpha}, \dfrac{\beta}{U}\dfrac{\partial U}{\partial \beta}, \dfrac{\rho}{U}\dfrac{\partial U}{\partial \rho}\)

  • +xpath - 输出能量积分 \(I_1,I_2,I_3,I_4\) 以及验证项 \(\omega^2 I_1 - k^2 I_2 + k I_3 - I_4\)

  • +zdz - 计算能量积分和相/群速度敏感核时使用的深度间隔(km), 这相当于将层状模型进行阶梯式插值后再进行计算 [默认直接基于模型各层厚度]。

-h

打印帮助文档。

示例