在暑假的末尾经过老师的推荐,我接触了利用GPU进行计算的GCM模型---THOR,这里记录下论文的阅读过程和相关的思路。
THOR介绍
作者在建立THOR模型的时候实际上已经踩在巨人GCM的肩膀上了,所以作者的目标是发展一个健壮的GCM模型,并且要求这样的模型足够灵活可以不仅仅应付在地球上的情况,更可以支持在多种行星条件的分析工作。更为具体的目标就是提供一个dynamical core来模拟并帮助我们更好的理解多种行星中的大气动力学和气候特点。
其有下面的这些特点
- 具有一致性并且模拟的精度不会严重的依赖具体的行星条件
- 尽量减少对物理问题产生影响的假设
- 模拟工作应该建立在物理图景上为不是依靠对特定问题的认为优化
THOR由两个core组成,分别是物理core和动理学core,其中物理core主要是为了解决比如辐射传输和对流一类的物理学方程;动理学core则是为了解决流体力学方程。
网格结构
为了避免在传统的经纬网上出现的pole problem问题,模型的网格划分采用了二十面体的构型。选择二十面体的主要原因是二十面体相对其他的多面体具有更好的准平衡特征(不存在超过12个顶点的均匀网格)。但是仅仅是这样的额二十面体是不可能满足分辨率要求的,因此需要在不破坏网格准均匀特征的前提下增加顶点的数目。这里有两种方法实现,一种是迭代的方法另一种是非迭代的方法。迭代的方式是不断地在二十面体的三角形面上连接每个边的中点来分割三角形,生成新的面,并增加顶点的数量。非迭代的方式由于不便于并行,并且在相邻两点最长和最短距离比例上较大所以舍弃。论文中给出了计算在生辰网格点之后整个网格网络的空间分辨率和角分辨率。并使用平均的方法计算了不同边上的流量通量。最后为了计算两个连续层之间的流体信息,使用了拉格朗日插值的方法。
但是这样的网格还需要进一步的改善对散度和梯度操作的数值精确度,这里解决问题的重点就放在了畸变最大的初始二十面体的棱上。为了解决这个问题,作者采用了springs dynamic的方法,使用类似弹簧的形式牵引顶点(所有网格顶点都用类似弹簧的形式和最近的顶点连接起来),这样的操作在所有顶点进行一步操作所移动的距离小于10……5结束。随后作者使用l2和l(infinite)的评价手段测试了网格散度和梯度运算精确度的提升,效果还是较为显著的。
动力学方程和估计
首先在构建动力学模型的时候实际上已经提出了一些假设条件,但是这些假设条件可能是为了研究地球环境的便利提出的,对于其他星球的情况不一定使用,甚至会带来模型精度的影响。所以为了模型的灵活性,应当尽量减少假设的数量。这里被THOR模型所舍弃的假设包括静力学假设,也就是大气标高和水平网格方向的特征值比值远小于1;潜水波假设,认为我们所研究的大气厚度远远小于行星中心到研究高度的距离;滞弹性假设,为了忽略弹性而提出。虽然省略了以上的假设,但是这并不意味着THOR模型摒弃了全部假设,第一条就是大气没有被电离化;第二条是有效的重力是常数并且是沿着半径方向的。在对假设进行了上述的取舍之后,作者列出了流量形式的方程。同时也考虑到CFL条件,也就是这样的动力core 时间尺度应当足够小,可以反应较小时间间隔发生的物理过程,并且为了列出守恒方程的需要,不考虑水成分的相变,所以方程描述的是干燥大气。但是由于其中的热力学方程不能够显示的求解动能和热能之间的守恒关系(部分能量过程尺度小于方程所讨论的范围)。并且为了求出动量方程,这里引入了理想气体假设来建立气体压强的关系。
再次考虑CFL条件,THOR使用了Split-explicit的方法,包括将欧拉方程的时间间隔分成小时间间隔和大时间间隔两个部分,小时间间隔的部分处理声波相关的模式信息,大时间间隔则处理其余的问题。在THOR中,为了广泛的解决这样的CFL问题THOR的时间间隔会尽可能减小来保证每个方向的最快波信息不被遗漏。在具体的程序设计阶段则是通过在大循环中套小循环,也就是在大循环中执行长时间周期时间方程的计算,而在内循环中每进行一次内循环就相应的减小时间间隔和迭代次数。而最后在程序求解的时候通过有限差分的方式在厚度方向上进行离散,利用模型底部和顶部的两个边界条件使用Thomas算法求解。
数值耗散
数值耗散的强度取决于仿真中波的时间阻尼。THOR使用显式的耗散表示方式,传播强度是一个可调谐的量,通常被设定的足够大来保证模型的稳定性,并且不会随着经纬度的变化而变。同时需要关注的一个问题是散度运算的阶,由于低阶的散度运算通常和热传输或者分子输送有关系但是这样小尺度的过程并不能够使用GCM模型解决。因此应当尽量使用高阶的操作符。在权衡了计算量和精确度后,THOR选择使用了4阶的操作符,文中给出了通量形式的方程。并说明了辐散阻尼在每个小时间步长上都会更新,其他传播项则是在大时间步长上才会被更新。
PROFX 物理core
这里文中介绍的较少,要点就是在物理core中预测变量的更新是通过使用动力core结果带入后向欧拉方程实现的。
GPU实现
THOR在GPu实现的时候主要是分为两个部分,在第一部分,模型所需要的变量都被声明、初始化、并在主机和GPU存储中申请空间;第二部分则是构造模型的网格结构和数学操作,并且设定了大气的初始条件。在具体实施的时候,使用了并行化的手法执行,并且将所得的结果返回主机端。在我实际测试这个模式的时候我发现模型在我的GTX 1060卡上运行的速度还是很快的,大概一个小时的时间我就得到了100天的数据,出去模型spin-up阶段的100天外还是有200多天有意义的数据,这真的是一个不错的成果呢!
Benchmarking
没想到大气模型还有跑分吧,作者对THOR分别在地球条件和热木星条件下做了测试,发现结果基本和发展较为完善的模型给出的结果一致。验证了THOR的有效性。
结论
当然就是这个模型本身啦!
最后照例,上传一张图看懂THOR:
原文地址:https://www.cnblogs.com/gabriel-sun/p/12128400.html