参考
Mineos简介
这一部分是官方文档中的第一章,此处进行翻译。
本征函数系统
minos_bran是Mineos软件包的核心程序。通过频率范围(fmin, fmax)和简正振型(nmin,nmax,lmin,lmax),
minos_bran输出的大小取决于fmax,即设定的最高频率,以及输入模型的径向节点数量。如果设定的周期为6s,选择所有离散分支,则计算的本征函数和本征频率数量为:球振振型150,000个、环振振型100,000个。
eigcon程序执行两个主要步骤。首先对本征函数进行重归一化,截断表格数据,只延伸到考虑的最深的地震深度。即输入的max deepth参数。
这种截断大大减小了本征函数文件的大小,加快了格林函数计算速度。此外,eigcon重构了输出的本征函数文件为二进制文件,相比于minos_bran输出的本征函数文件独立于计算机功能结构。
最终的输出基于.eigen关系,指向磁盘中的本征函数文件。详细关系见[Mineos程序参数解释].eigen关系表。
获取.site和.sitechan文件的方式:申请SEED文件,例如IRIS DMC,然后使用rdseed或者antelope(例如sd2de seed2db)转换得到这两个文件。
antelope可以用来查看格林函数。
Mineos局限性
当前版本的Mineos使用与低频应用,而周期为几秒(即0.nHz)情况下不适用。
尝试制作衍射P波合成记录时发现内核振型(尤其是能量积分)不能够被准确计算。不确定在内核中添加节点是否能解决问题。已发表的成功事例表明:通过使用不同方式进行能量积分能够解决这个问题,这种方式不依赖于节点间距。
官方安装包安装
Mineos安装分为如下几步,目前在第二步出现问题,尚未解决。
configure
./configure
直接使用这个命令会出现依赖环境问题。例如:
check g77 … no
使用如下命令可以避免出现这种问题。
./configure F77=gfortran FFLAGS=-O2
make
使用命令:
make
出现错误:
1 | make[1]: 进入目录“/home/shizhiyuan/Documents/mineos-1.0.0” |
DATA 语句中类型不兼容,目前未知解决方法。
使用Hermann网站提供的修改过minos_bran.f文件的安装包安装更为简便,且能够安装成功。
环境:Centos8
依赖环境
Mineos依赖于:
- gcc
- g77
- f77
- gfortran
一般安装gcc-gfortran即可。
sudo yum install gcc-gfortran
configure
./configure F77=gfortran FFLAGS=-O2
make
make
成功的输出:
1 | make all-am |
make check
不知道具体含义,运行后没有输出。可能是指检查某项内容。
install
sudo make install
不用sudo可能出现没有权限创建新目录的情况。
运行成功后的输出:
1 | make[1]: 进入目录“/home/shizhiyuan/Documents/hermann/MINEOS/mineos-1.0.0.rbh” |
补充内容
运行.csh文件需要安装csh
sudo yum install csh
test
先将mineos文件内DEMO文件夹中的DEMO压缩包解压。当然更推荐命令操作:
cd DEMO
gunzip -c DEMO.tar.gz | tar xf - # 这一步使用操作界面完成,就是解压的步骤。
export PATH=$HOME/cig/bin:$PATH # 添加变量?运行后没有输出。
cd DEMO3
./RUN_MINEOS.sh prem_noocean
输出结果:
1 | Step 1: minos_bran runs for S modes ..................... |
文件运行初步解析
运行1
cd DEMO3
./RUN_MINEOS.sh prem_noocean
输出如上test
。
以下为 运行1
运行之后前后对比。
以下进行初步解析。
据minos_bran.f
文件
Files prem_noocean_S. prem_noocean_T, eprem_noocean_S and eprem_noocean_T are output of the minos_bran program.
minos_bran输出的文件为:prem_noocean_S
,prem_noocean_T
, eprem_noocean_S
和eprem_noocean_T
。
以及
The results are stored in test_S and test_T databases (eigenfunctions); in green database (Green functions); and in Syndat (synthetic seismograms).
test_S.eigen.dat
、test_T.eigen.dat
是eigenfunctions,即特征函数。但还有两个同名.eigen文件。 green.wfdisc.dat
为格林函数,Syndat.wfdisc.dat
为理论地震图。
第一步:运行minos_bran。S modes S振型?
输入为:/models/prem_noocean.txt
,即prem模型,该模型将海洋处用上地壳填充。
输出为: prem_noocean_S
。
特征函数文件:eprem_noocean_S
。
eps: 1e-10
wgrav: 1
jcom: 为3,表示为球型振型。
1 | 输入的参数: |
使用time命令运行minos_bran程序,返回程序运行时间。具体含义可参考Linux系统命令。
注:使用time命令可以直接运行当前目录之外的程序。
1 | real 0m1.450s |
第二步:运行minos_bran Tmodes T振型?
屏幕上的输出大意:
输入同样为/models/prem_noocean.txt
输出为: prem_noocean_T
特征函数文件:eprem_noocean_T
eps: 1e-10
wgrav: 1
jcom: 2
输入的参数:
lmin 2
lmax 8000
wmin 0
wmax 200
nmin 0
nmax 0
输出???
real 0m0.243s
user 0m0.242s
sys 0m0.000s
第三步 S model-eigen
运行的程序为eigcon,它的功能是:
converts eigenfunction files (output from minos_bran) into .eigen relation containing only info about the upper most
dmax km ( 0 < dmax < Rn), where, RO is radius of the free surface in km. This version works for all modes: spheroidal, toroidal, and radial.
将minos_bran的输出文件转换为.eigen,仅包含最上层dmax km ( 0 < dmax < Rn) 的信息。R0是自由界面半径(单位km)。
他能够运行于所有振型,自动读取输入文件的振型。
这一步读取控制参数。
读取了输入文件的jcom。
输入的模型文件名称:``prem_noocean.text``
输入的最大深度(max depth,km):``1000``
minos_bran的输出文件: ``prem_noocean_S``
minos_bran的输出无格式二进制文件:``eprem_noocean_S``
输入路径或名称,存储特征函数。其中,输入方式为两种:路径path/dbase_name
或名称dbase_name
。
创建的文件为:dbase_name.eigen
, 创建的文件夹为dbase_name.eigen.dat
,文件夹中有二进制文件eigen
。
在屏幕运行输出仅输出了三个参数:
n 185
nstart 119
nrad 67
结尾有:
real 0m0.046s
user 0m0.043s
sys 0m0.003s
第四步 关于T的eigen,同3。
记录屏幕上输出的内容:
jcom 2
输入的模型文件名称:prem_noocean.text
输入的最大深度(max depth,km):1000
minos_bran的输出文件: prem_noocean_T
minos_bran的输出无格式二进制文件:eprem_noocean_T
路径:test_T
n 185
nstart 119
nrad 67
real 0m0.024s
user 0m0.021s
sys 0m0.003s
输出的test_S.eigen
和test_S.eigen.dat
:
eigen文件格式
示例其中一行:
1 | 0 20 S 19 347.66000 5.61667 3.99901 241.43201 67 7 7 f4 34272 test_S.eigen.dat eigen -1 04/15/24-20:16:12 |
分别为:
n, l, 振型类型, eigenfunction id, 本征频率mHz, 相速度, 群速度, 品质因子q,行数nrow, 列数ncol, 参数数no. of parameters, datatype, byte offset, 保存的文件目录,文件名, comment id, 文件创建时间load date
第五步:格林函数估值(evaluation)
运行的程序为:green.f
green program computes for a single event and a given set of stations, the Green functions.
这个程序计算单个事件和一组给定的台站。
输入db的路径,结合sta和stachan:short 这两个文件一开始就有
short是指shrot.site
这个文件和short.sitechan
文件,‘结合sta,stachan’可能是指这两个文件。
文件内容如下:
输入nmodes列表的文件名 :db_list
这个文件一开始就有
db_list文件内容为:
test_S
test_T
输入CMT文件名: china_cmt_event
这个文件一开始就有
考虑的最小和最大频率(单位mHz):10 260
输入pts
输入格林函数的输出文件名:green
。这个程序输出的文件为:green.wfdisc
这个文件内容与屏幕输出不同,但是其包含的内容一致。均为台站、通道、时间等信息。
输出依然存在:
real 0m1.471s
user 0m1.455s
sys 0m0.015s
第六步:构建理论地震图
使用的程序为:syndat.f
syndat program makes synthetic seismograms by convolutions of Green
functions with the seismic moment tensor of the choosen event.
选择的事件的地震矩张量和格林函数的卷积,得到理论地震图。
输入CMT文件名:china_cmt_event
张量类型: 0
输入dbname: green
输出dbname:SYndat
输出单位: 0 [nm/s/s] 1 [nm/s] 2 [nm]
(可能并没有选择输出单位?屏幕输出仅为此。)
该程序最后输出的文件为:syndat.wfdisc
。
也输出了.origin
、.site
、.sitechan
文件。
也有Syndat.wfdisc.dat
,里面应该是理论地震图。
之后需要运行将理论地震图转换为sac格式的程序。这一步为运行2的内容。
运行2
cucss2sac Syndat Syndat_SAC
将理论地震图转化为sac格式,并保存在Syndat_SAC文件夹中。
运行3
cucss2sac -a Syndat Syndat_ASC
转化为ASC格式,即ASCII文件。
运行4
./RUN_ENDIAN.csh Syndat
./RUN_ENDIAN.csh green
把这两个文件波形从LOW_ENDIAN bytes转换到BIG_ENDIAN bytes
如果有ANTELOPE软件,可以在SUN‘s平台直接看到结果(格林函数和理论地震图)
dbpick Syndat
dbpick green
目前还没有找到软件。
运行5
1 | eigen2asc 0 0 6 8 test_S test_S_ASC |
将eigen文件转化为asc文件。
使用该方法转换的文件在test_S_ASC
文件夹中,文件命名为:“S.radial order.angular order.ASC”
第一行为文件信息,示例:
1 | 0 (n) 20(l) S(mode type) 19 (eigenfunction id) 347.66000(frequency) 5.61667(phase velocity) 3.99901(group velocity) 241.43201(q) 67(行数nrow) 7(列数ncol) |
分别为:
n, l, 振型模式, eigenfunction id, 频率(单位mhz), 相速度, 群速度, q,行数nrow, 列数ncol
其中,球型振型中的格式为:
(r, U, U_dr , V, V_dr , P, P_dr )
环型振型为:
(r, W, W_dr )
BASH 运行文件(原DEMO3内RUN_MINEOS.csh,经过了修改)
- 增加了STEP0,生成.site和.sitechan文件。
- 增加了STEP7,内容为将Syndat转化为SAC格式。
- 修改了china_cmt_event为xinjiang_cmt_event。内容为另一个地震事件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127#!/bin/csh
#
# Example of the synthetic seismogram's generation script.
#
# Usage: RUN_MINEOS.sh model_name
#
# Available model names for DEMO version:
# prem_noocean prem_ocean CPacific NRussia
#----------------------------------------------------------
if( $#argv != 1) then
echo " Usage: RUN_MIN.csh model_name"
exit
endif
alias cp cp
alias rm rm
alias mv mv
set model=$1 # setup 1-D model name
# check model name
set flg=0
foreach f (CPacific NRussia prem_noocean prem_noocean_na prem_ocean prem_noocean_1ln.txt)
if($f == $1) set flg=1
end
if($flg == 0) then
echo "Model name $1 is wrong, allowed names are:"
echo "CPacific NRussia prem_noocean prem_noocean_na prem_ocean prem_noocean_1ln.txt"
exit
endif
#----------------------------------------------------------------
# Step 0
# make .site and .sitechan
time simpledit stations short
#---------------------------------------------------------------------
# 1 run minos_bran for S mpde
# n=0, f 0-200mhz
echo "Step 1: minos_bran runs for S modes ....................."
echo "============== Program minos_bran =================="
if( -f ${model}_S) rm -f ${model}_S # 存在的话移除掉
if( -f e${model}_S) rm -f e${model}_S
time minos_bran << EOF
../models/$model.txt
${model}_S
e${model}_S
1.0e-10 1
3
2 8000 0.0 200.0 0 0
EOF
#=========================================================
# 2. run minos_bran program for fundamental T mode,
# where, n=0, 0 < f < 0.2 Hz,
#
echo "Step 2: minos_bran runs for T modes ....................."
echo "============== Program minos_bran =================="
if( -f ${model}_T) rm -f ${model}_T
if( -f e${model}_T) rm -f e${model}_T
time minos_bran << EOF
../models/$model.txt
${model}_T
e${model}_T
1.0e-10 1
2
2 8000 0.0 200.0 0 0
EOF
#============================================================
# 3. Convert minos_bran results to .eigen relation (S mode)
#
echo "Step 3: eigen for S ....................................."
if( -f test_S.eigen) rm -rf test_S.*
time eigcon << EOF
3
../models/$model.txt
1000
${model}_S
e${model}_S
test_S
EOF
#============================================================
# 4. Convert minos_bran results to .eigen relation (T mode)
echo "Step 4: eigen for T ....................................."
if( -f test_T.eigen) rm -rf test_T.*
time eigcon << EOF
2
../models/$model.txt
1000
${model}_T
e${model}_T
test_T
EOF
#=========================================================
# 5. Evaluate green functions for given sitechan relation
echo "Step 5: green functions evaluation ........................."
if( -f green.wfdisc) rm -rf green.*
time green << EOF
short
db_list
xinjiang_cmt_event
10 260
8000
green
EOF
cp -p short.site green.site
cp -p short.sitechan green.sitechan
# create origin relation for data base green
creat_origin xinjiang_cmt_event green
#============================================================
# 6. Synthetic data construction
echo "Step 6: synthetic seismogram construction .................."
if( -f Syndat.wfdisc) rm -rf Syndat.*
time syndat << EOF
xinjiang_cmt_event
0
green
Syndat
0
EOF
# convert Green functions to BIG_ENDIAN binary numerical storage
# this is ANTELOPE requirement
# $bin/wfendi 0 0 Syndat Syndat
# copy .site, .sitechan relations into database Syndat
cp -p short.site Syndat.site
cp -p short.sitechan Syndat.sitechan
creat_origin xinjiang_cmt_event Syndat
# =====================================================
#7.MAKE SAC TRANSFORM
echo "Step 7: SAC transform"
time cucss2sac Syndat Syndat_SAC
echo "over"
exit