简要说明
本文主要对mineos软件运行的程序进行深入解析,尝试理解程序运行的原理。
内容均源自mineos软件的程序代码。
minos_bran程序子进程介绍
1 | wmin=max(wmin,0.1d0) ! wmin最小为0.1mhz,此为w最小限制。 |
w最小为0.1mHz,这是w的最小限制
l最小值为1
选择计算径向振型时,l只计算基阶,即l=0的情况。
model(iin, iout)
drspln(i1,i2,x,y,q,f)
rspln computes cubic spline interpolation coefficients for y(x) between grid points i1 and i2 saving them in q.
the interpolation is continuous with continuous first and second derivitives.
it agrees exactly with y at grid points and with the three point first derivitives at both end points (i1 and i2).
x must be monotonic but if two successive values of x are equal a discontinuity is assumed and
seperate interpolation is done on each strictly monotonic segment.
the arrays must be dimensioned at least - x(i2), y(i2), q(3,i2), and f(3,i2). f is working storage for rspln. -rpb
rspln在i1与i2点之间计算y(x)的三次样条插值系数,将系数保存到q。
插值是连续的,具有连续的一阶和二阶导数。
它与网格点处的 y 以及两个端点(i1 和 i2)处的三点一阶导数完全一致。
x 必须是单调的,但如果 x 的两个连续值相等,则假定此处为间断面(模型具有莫霍面和古登堡面等),对每个严格单调的部分进行单独插值。(有间断面的情况插值在间断面之间进行)
数组的维度必须至少为 - x(i2)、y(i2)、q(3,i2) 和 f(3,i2)。(例如,i1=1,i2=n(模型节点数),x=r,y=rho)
f 是 rspln 的工作存储器。
示例:
drspln(1,n,r,rho,qro,wrk)
从点1-n进行对rho(r)的spline插值,结果保存到qro中。
wrk为一个工作存储器,存储器可能只是用于存储中间值,无实际含义。(存疑)
grav(g,rho,qro,r,n)
given rho and spline coeffs,computes gravity
给定 rho 和样条系数,计算重力。
变量:
- nsl 地表边界,为固态侧边界。若是具有海洋的地球模型,则nsl为地表与海洋边界的固态侧。
- nslp1 地表边界,液态侧。
- ncip1 ICB索引液态侧
- nocp1 CMB索引固态侧
- tref 校正值。<=0时无校正。
wtable(iout,ioeig,ifreq)
makes up table of frequencies
计算本征频率列表
共用区变量:
1 | common/bits/pi,rn,vn,wn,w,wsq,wray,qinv,cg,wgrav,tref,fct,eps,fl, |
- iout 输出模型列表文件单元号
- ioeig 输出本征函数文件单元号
- ifreq =0时不输出本征函数文件
steps(eps)
计算8个无量纲step大小for rks integration积分
- eps 输入的eps,即准确度大小。
detqn(wdim,knt,det,ifeif)
supevises the integration of the equations,it returns the value
of the secular determinant as det and the count of zero crossings
假设方程的积分,它返回行列式形式的secular dterminant的值(det)和零交点数量。
- wdim 一个二维数组,为最小和最大本征频率计算范围
- knt 零交叉点数量
- det 长期行列式的值
- ifeif
共用区变量:
1 | common r(mk),fmu(mk),flam(mk),qshear(mk),qkappa(mk), |
1 | print *,'eigenfunction file (output):' |
这里说明了ifreq的来历。当本征函数文件(eigenfunction file)名前四个字符为none时,ifreq=0,将不再计算本征函数文件。
1 | if(ifeif.eq.0) return |
该语句表明ifreq在detqn子进程中为ifeif参数。当ifreq=0时,即本征函数文件名为:’none*’时不再输出本征函数文件(文件为空)。
sdepth(wdim,ls)
finds starting level,ls, for a given l and w
对于给定的l和w寻找开始的层ls
fprpmn(jf,jl,f,h,nvefm,iexp)
propagate the minor vector in a fluid region from level jf to jl
在流体区域从jf层到jl层传播minor vector
zknt(s,sp,f,fp,x,y,ifsol)
zknt(s,h,f,fp,x,y,1)
给定次向量和导数,构造模式计数
remedy(ls)
Obtains the eigenfunction of an awkward spheroidal mode by integrating to the icb or the mcb.
通过积分到ICB或CMB得到一个不合适的(awkward)球振振型的本征函数
fprop(jf,jl,f,iexp)
fprop propagates the fundamental matrix f from jf to jl (a fluid region)
fprop 将基本矩阵 f 从 jf 传播到 jl(流体区域)
示例:
fprop(noc,nicp1,af,iexp)
# 该函数位于2515行左右,表示地壳上海洋部分基本矩阵af的传播。
fsbdry(af,as,kg)
fsbdry creates solid fundamental matrix as from fluid fundamental matrix af.
It is presumed that fsbdry is used to cross a f/s boundary.
fsbdry 从流体基本矩阵 af 创建固体基本矩阵 as。
假定 fsbdry函数 用于跨越 f/s 边界。
sprop(li,jf,jl,f,iexp)
sprop propagates the fundamental matrix f from jf to jl (a solid region)
if jorth=1 the columns of f are orthogonalized at each level except in regions of oscillatory p and s.
sprop 将基本矩阵 f 从 jf 传播到jl(实心区域) 如果jnorth=1,f的列在除振荡 p 和 s 区域之外的每个层(level)上都是正交的。
ortho(li,lc,b,kg)
Finds the orthogonal matrix v such that the columns of bv are orthogonal,
the array a is replaced by av for levels li - lc.
Array b is replaced by b*v and is then ready for entry to sprop at level lc.
This is intended to diminish the onset of degeneracy caused by rapid exponential
growth in the mantle for modes with deeply turning S and shallowly turning P.
找到正交矩阵 v,使得 bv 的列是正交的,对于层 li 至 lc,数组 a 被 av 替换。
数组 b 被 b*v 替换,然后准备好进入 lc 层的 sprop。这是为了减少由深度旋转 S 和
浅度旋转 P 的模式在地幔中快速指数增长引起的退化的开始。
sfbdry(jf,jl,as,af,kg)
The tangential traction scalar is forced to vanish at the solid side of a s/f boundary(level jl).
a(j,3,i) is elliminated for i=jf…jl and af is loaded from a at level jl.
切向牵引标量在 s/f 边界的实体侧(水平 jl)消失。 a(j,3,i) 对于 i=jf…jl 被消除并且 af 从 a 在级别 jl 加载。
baylis(q,maxo1)
baylis returns the coefficients for rks integration.
see e. baylis shanks(1966 a. m. s.) and references therein for the coefficients.
the eight runge-kutta-shanks formulae are (1-1) (2-2) (3-3) (4-4) (5-5) (6-6) (7-7) (8-10).
for orders greater than 4 the formulae are approximate rather than exact so incurring less roundoff.
baylis 返回 rks 积分的系数。 见e. baylis shanks(1966 a. m. s.)及其中的系数参考。
八runge-kutta-shanks公式是 (1-1) (2-2) (3-3) (4-4) (5-5) (6-6) (7-7) (8-10)。
对于大于 4 的阶数,公式是近似的而不是精确的,因此产生的舍入较少。
match(n,j,kg,af,afr,icomp)
Matches boundary conditions during downward integration – first try is at cmb, second try is at icb.
在向下积分时符合边界条件——第一次尝试在 cmb,第二次尝试在 icb。
eifout(lsmin)
massages spheroidal mode eigenfunctions before output
在输出前“修改”球振振型本征函数
rotspl(eps1,wt,iout,ioeig,ifreq,ncall)
通过样条差值查找roots
kchar 1s 2t 3s 4c
- eps1 输入的频率准确度控制参数eps
- wt 两个元素的数组:wmin和wmax
- iout 输出模型文件的单元号
- ioeig 输出本征函数文件的单元号
- ifreq 与本征函数文件名有关。前四个字符为none时为0,输出缺少qmod和wdiff(q和动能与势能之比-1),其他时候为1。
- ncall 一个有关计数的参数
gauslv(r1,r2,iq,fint,nint)
fifth order gauss-legendre integration
五阶高斯-勒让德积分。
intgds(rr,iq,vals)
interpolates integrands for normalisation,cg,q etc..for use with gauslv
插值积分以进行归一化、cg、q等,gauslv使用该�