✍️ 周茂 • 📅 2026-01-12

# talwani3d

官方文档:

  talwani3d

简介:

  使用 Talwani 方法计算三维实体形成的位异常

talwani3d 读取一个多段表文件（或标准输入）。该文件包含一个三维物体在不同的 高度 z-level 下的轮廓，每段均代表一个轮廓。每段的头部信息必须包括高度 z-level 和该高度处的密度 desity 这两个参数。（密度可以被 `-D` 选项设置的 密度常数覆盖）。可通过设置 `-R` 和 `-I` 确定网格，计算位于该格网的异常， 或者使用 `-N` 计算点上的异常值。计算的异常可包括，自由空气重力异常， 垂直重力梯度异常或者大地水准面异常。同时可以使用选项控制轴的单位和方向。

## 语法

gmt talwani3d [ table ] [ `-A` ] [ `-D` density ] [ `-F` f|n[lat]|v ] [ `-G` outfile ] [ `-I` increment ] [ `-M`[h][v] ] [ `-N` trackfile ] [ `-R` region ] [ `-Z` level|obsgrid ] [ `-V`[level] ] [ `-bo` binary ] [ `-d` nodata[+c col] ] [ `-e` regexp ] [ `-f` flags ] [ `-i` flags ] [ `-o` flags ] [ `-r` reg ] [ `-x`[[-]n] ] [ --PAR=value ]

## 输入数据

table

  该输入文件用来描述三维物体的水平横截面轮廓。如果多边形没有闭合，GMT 将自动闭合 并删除重复的多边形顶点。每段的头部信息中必须包含高度（海洋中为深度）和相对密度 参数，单位为 kg/m^3 或 g/cm^3，见 `-D` 选项。如果不指定文件，就从标准输入中 读取数据。

## 可选选项

-A

-A

  设置 z 轴向上为正方向 [默认朝下为正]

-D

-D density

  设置一个固定的相对密度 density ，该设置将覆盖文件中的密度设置，单位 为 kg/m^3 或 g/cm^3

-F

-F f|n[lat]|v

  指定要计算哪种异常。

  - f 自由空气重力异常 [默认]

  - n 大地水准面异常，可以在后面追加平均纬度 lat 以计算正常重力， 默认正常重力为格网最中央位置（如果使用了 `-N` 为测线的中间）

  - v 垂直梯度重力异常

-G

-G outfile

  输出文件名。如果要计算的位置为一个网格，则该选项为必选选项，outfile 为输出网格文件名。如果已经设置了 `-N` ，即计算测线处的异常，则可以使用 `-G` 指定输出文件也可以输出到标准输出

-I

-I xinc[+e|n][/yinc[+e|n]]

  指定X和Y方向的网格间隔

  - xinc 和 yinc 为 X 和 Y 方向的网格间隔。对于地理坐标，可以指定网格间隔单位 [默认单位为度]

  - +e 微调X和Y方向范围的最大值，使得其是网格间隔的整数倍（默认会微调 网格间隔以适应给定的数据范围）

  - +n 表明 xinc 和 yinc 不是网格间隔，而是X和Y方向的节点数。 此时会根据节点数、网格区域范围以及网格配准方式重新计算网格间隔。

  注意：

  - 若 yinc 设置为0，则表示其与 xinc 相同

  - 若使用 -R grdfile 选项，则网格间隔和配准方式已经根据网格文件自动初始化， 此时依然可以使用 -I 和 -r 覆盖相应的值

-M

-M[h][v]

  设置距离单位。h 表明水平距离单位为 km [m]。z 表明垂直距离单位为 km [m]

-N

-N trackfile

  设置计算异常值的点的位置。如果输入文件中包含 3 列，就把最后一列作为观测 高度，该高度可以被 `-Z` 选项覆盖

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

  指定数据范围。 (参数详细介绍)

-V

-V[level]

  设置 verbose 等级 [w]。 (参数详细介绍)

-Z

-Z level|obsgrid

  设置观测水准面常数 level ，默认为 0。可以设置为常数 level 或者网格 obsgrid ，其中的每个值均为单独的 level 。如果设置为网格，输出结果也 对应设置的网格。

-bo

-bo[ncols][type][w][+l|b]

  控制二进制文件的输出格式。 (参数详细介绍)

-d

-d[i|o]nodata

  将某些特定值当作 NaN。 (参数详细介绍)

-e

-e[~]"pattern" | -e[~]/regexp/[i]

  筛选或剔除匹配指定模式的数据记录。 (参数详细介绍)

-f

-f[i|o]colinfo

  显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

> 地理网格（即经度、纬度维度）将通过“平面地球”近似（Flat Earth approximation），并利用当前椭球参数转换为千米单位。

-h

-h[i|o][n][+c][+d][+m segheader][+r remark][+t title]

  在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-i

-i cols[+l][+s scale][+o offset][,...][,t[word]]

  对输入的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-o

-o cols[,...][,t[word]]

  对输出的数据进行列选择以及简单的代数运算。 (参数详细介绍)

-r

-r[g|p]

  设置网格配置方式 [默认为网格线配准]。 (参数详细介绍)

-x

-x[[-]n]

  限制多核算法中能使用的核数（需要GMT开启OpenMP支持）。 (参数详细介绍)

-:

-:[i|o]

  交换输入或输出数据的前两列。 (参数详细介绍)

-^ 或 -

  显示简短的帮助信息，包括模块简介和基本语法信息（Windows下只能使用 -）

-+ 或 +

  显示帮助信息，包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

  显示完整的帮助信息，包括模块简介、基本语法以及所有选项的说明

--PAR=value

  临时修改GMT参数的值，可重复多次使用。参数列表见 配置参数

## 距离单位

GMT支持多种不同的距离单位，以及三种不同的球面距离计算方式。 详情见 单位 和 -j 选项。

## 示例

计算某个三维物体（已形成高度轮廓文件 `body3d.txt` ）在网格上的自动空气 重力异常，相对密度设置为 1700 kg/m^3，水平距离的单位为 km，垂直距离单位为 m

    gmt talwani3d -R-200/200/-200/200 -I2 -Mh -G3dgrav.nc body3d.txt -D1700 -Ff

另外，计算该物体在测线 :crossing.txt: 上形成的垂直重力梯度异常

    gmt talwani3d -Ncrossing.txt -Mh body3d.txt -D1700 -Fv > vgg_crossing.txt

最后，计算该物体在该测线位置造成的大地水准面异常（平均纬度为 30S），输出结果到 `n_crossing.txt`

    gmt talwani3d -Ncrossing.txt -Mh body3d.txt -D1700 -Fn-30 -Gn_crossing.txt

## 参考文献

Kim, S.-S., and P. Wessel, 2016, New analytic solutions for modeling vertical gravity gradient anomalies, Geochem. Geophys. Geosyst., 17, https://doi.org/10.1002/2016GC006263.

Talwani, M., and M. Ewing, 1960, Rapid computation of gravitational attraction of three-dimensional bodies of arbitrary shape, Geophysics, 25, 203-225.

## 相关模块

talwani2d, grdmath, gravfft, gravmag3d, grdgravmag3d