采用 GMT 绘制 SPECFEM2D 波场快照
文章目录
前言
SPECFEM2D 本身程序运行的结果也可以输出波场快照,但是其图形由于是自己生成的,并不美观,也不便于 与其他模拟程序生成的波场快照进行对比。因此本文记录如何采用 GMT 绘制 SPECFEM2D 所生成的波场快照。
运行程序中的一些参数设置
这里主要显示绘图需要的部分参数:
|
|
运行程序并绘图
运行完程序之后,在OUTPUT_FILES
文件夹下应该存在很多波场快照的文件(文件名类似于 wavefield0000100_01.txt
),最后还有一个网格节点坐标的文件(文件名类似于wavefield_grid_for_dumps.txt
)。其中波场快照文件共有两列,分别为水平向和垂直向的波场信息。网格节点坐标文件也有两列数据,每一行记录一个网格节点的坐标信息(x z)。波场快照文件和网格节点坐标文件行数都相等,为总共计算的网格点数(程序运行的时候会在终端上打印该节点数)。
构建绘图原始文本
由于波场快照文件记录的是每个网格节点上的波场值,因此和传统的有限差分程序输出的波场快照文件不同。属于不规则网格数据(即使是一个均匀分布的网格),因此无法通过 SU, Madagascar 直接绘制波场快照信息。只能通过绘制一个 xyz 数据体的格式来进行,这个采用 GMT 很容易实现。但前提是需要把原来输出的波场快照,网格节点转化为一个文本文件,然后再使用 GMT 来绘图。
构建绘图原始文本可采用 Linux 下的 paste
命令,其操作如下
|
|
通过上述处理后, wavefield_ux_uz.txt
文件的前两列分别为 x,y 坐标;后两列为 ux, uz 值。
GMT绘图脚本
|
|
结果图
只是一个简单的示例,未添加横坐标和纵坐标的label,大家可自行修改。这里显示的绘制的结果不是ux,也不是uz,
而是u=sqrt(ux**2 + uz**2)
。
注意:
之前波场输出文件的选项use_binary_for_wavefield_dumps = .false.
建议选为false,生成文本文件。最开始我选的是true主要的考虑是占用更小的磁盘空间,当时想着用 ximage 来画一个初步的波场快照信息,结果通过分析文件字节数怎么算都有个二倍的数据量,后面才想到是通过记录了两个波场分量的信息。如果采用ascii文本文件输出的话,就不会走这么多弯路了。