当我们研究地球表面的质量迁移时,比如冰川融化、地下水变化或者海洋质量重新分布,这些变化会导致地球表面产生弹性变形。这种变形虽然肉眼难以察觉,但通过精密仪器如GRACE卫星可以测量到。要准确计算这种变形,我们需要了解地球内部的弹性结构,这就是地球模型的重要性所在。
地球模型就像地球的"身份证",它描述了地球内部不同深度的密度、弹性模量等物理特性。PREM、STW105和AK135是三种常用的一维地球模型,它们在计算负荷变形时各有特点。PREM模型是最早的参考地球模型之一,它对地球内部结构进行了较为均衡的描述;STW105模型在岩石圈和软流圈部分有更精细的分层;而AK135模型则在地震波速方面有更准确的描述。
在实际计算中,这些模型的差异会导致负荷勒夫数和格林函数的计算结果不同,进而影响最终的变形量估算。比如在青藏高原这样的特殊区域,由于地壳厚度较大,不同模型的计算结果可能会有明显差异。我曾经在处理中国陆区数据时就发现,使用PREM模型和AK135模型计算得到的垂直位移在某些区域可以相差达到15%。
PREM(Preliminary Reference Earth Model)是最经典的参考地球模型之一,它将地球分为均匀的各向同性分层结构。这个模型特别适合全球尺度的研究,因为它在不同深度都保持了较好的平衡性。在计算负荷变形时,PREM给出的勒夫数相对平滑,这使得计算结果比较稳定。
不过PREM模型也有局限性。它对地壳和上地幔的分层相对简单,在处理区域性的负荷变形时,特别是像青藏高原这样地壳厚度异常的区域,可能会引入系统误差。我在处理中国西部地区的数据时就发现,PREM模型计算的结果与其他模型相比,在垂直位移上会偏小约5-10%。
STW105模型对地球上部结构做了更细致的划分,特别是在岩石圈和软流圈部分。这使得它在处理地表附近的负荷变化时更为精确。这个模型的一个显著特点是它对低速带的描述更加准确,这对于研究水文负荷等季节性变化特别有价值。
但是STW105模型的计算复杂度相对较高。我曾经对比过三个模型的计算时间,在相同硬件条件下,STW105的计算时间大约是PREM的1.5倍。此外,这个模型在某些深度区间的参数过渡不够平滑,可能会导致高阶勒夫数计算时出现震荡。
AK135模型最初是为地震学研究开发的,它对地震波速的描述非常精确。这个模型的一个突出优点是它对地幔过渡带(410km和660km不连续面)的处理更为合理。在负荷变形计算中,AK135给出的格林函数在近场响应更为灵敏。
实际应用中,我发现AK135模型特别适合处理GRACE数据。因为它对地表附近的质量变化响应更为敏感,能够更好地捕捉到水文变化等信号。不过需要注意的是,AK135原始模型中地表密度设置需要调整,通常需要用地下5km处的密度值来替换地表值,否则会影响负荷勒夫数的计算精度。
在使用这些地球模型前,通常需要进行一些预处理。以AK135为例,原始模型中的地表密度设置不适合直接用于负荷变形计算。我的做法是用地下5km处的密度值来替换地表值,这样可以获得更合理的勒夫数。
另一个常见问题是模型的分辨率。不同模型提供的采样间隔可能不同,在计算前最好进行重采样,保持一致的采样间隔。我一般使用三次样条插值来处理这个问题,这样可以保证参数变化的平滑性。需要注意的是,在核幔边界等参数变化剧烈的区域,插值时需要特别小心。
LoadDef是一个专门用于计算负荷变形的Python工具包,它支持多种地球模型。计算勒夫数的核心函数是run_ln.py,以下是一个典型的使用示例:
python复制from LoadDef import run_ln
# 设置模型参数
model_params = {
'model_name': 'AK135',
'max_degree': 10000,
'output_dir': './output/'
}
# 运行勒夫数计算
run_ln.compute_love_numbers(**model_params)
计算完成后,会生成包含各阶勒夫数的文件。在实际项目中,我建议至少计算到10000阶,这样可以保证短波长信号的精度。不过要注意,高阶计算会显著增加计算时间,需要权衡精度和效率。
得到勒夫数后,就可以计算格林函数了。LoadDef中的run_gf.py函数可以完成这项工作。这里有几个关键点需要注意:
计算得到的格林函数应该检查其衰减特性。正常情况下,垂直位移格林函数应该在约60°距离处衰减到峰值1%以下。如果发现异常,可能需要检查勒夫数计算的收敛性。
在中国陆区,特别是青藏高原东部,不同地球模型的计算结果差异较为明显。我使用三种模型处理了2005-2015年的GRACE数据,发现:
这种差异主要源于各模型对中国地区地壳厚度的不同处理。AK135对厚地壳区域的响应更为灵敏,因此计算得到的变形量更大。
青藏高原是检验地球模型的理想场所,因为这里的地壳厚度远超全球平均水平。在处理该区域数据时,我发现:
建议在该区域进行研究时,可以尝试使用多个模型进行计算,通过比较结果来评估不确定性。另外,由于高原地区的地壳结构复杂,有条件的话可以考虑使用区域性三维模型来替代全球一维模型。
在沿海地区,海洋负荷和陆地水负荷同时存在,模型选择更为关键。根据我的经验:
特别需要注意的是,沿海地区计算时要确保使用统一的海陆边界处理方式。我曾经遇到过因为海陆边界处理不一致导致计算结果出现系统性偏差的情况。
负荷变形计算非常耗时,特别是处理长时间序列数据时。我通过MPI实现了并行计算,速度提升了8-10倍。以下是关键的实现思路:
python复制from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
# 分配计算任务
if rank == 0:
tasks = split_tasks(total_files, size)
else:
tasks = None
# 分发任务
my_tasks = comm.scatter(tasks, root=0)
# 各进程独立计算
results = []
for task in my_tasks:
results.append(compute_deformation(task))
# 收集结果
all_results = comm.gather(results, root=0)
计算结果的验证至关重要,我通常采用以下几种方法:
以GPS验证为例,我通常会选择远离负荷变化中心的稳定站点作为参考,计算相关系数和均方根误差。好的计算结果与GPS观测的相关系数一般能达到0.7以上,季节性信号的相位差不超过2周。
在实际计算中经常会遇到各种问题,以下是一些常见情况及解决方法:
计算结果出现异常高值:
季节性信号不明显:
计算速度过慢:
我曾经遇到过一个典型案例:计算得到的垂直位移在海洋区域出现异常高值。经过排查发现是因为没有正确处理海陆边界,导致海洋负荷被错误放大。这个经验告诉我,在计算前务必仔细检查所有输入数据的空间一致性。