GEOS-Chem化学求解器性能优化探索:LSODE与SDIRK求解器的对比研究

GEOS-Chem化学求解器性能优化探索:LSODE与SDIRK求解器的对比研究

【免费下载链接】geos-chem GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submodule within the GCClassic and GCHP wrappers, as well as in other modeling contexts (external ESMs). 【免费下载链接】geos-chem 项目地址: https://gitcode.com/gh_mirrors/ge/geos-chem

引言

在大气化学模型GEOS-Chem的开发过程中,研究团队发现其化学动力学积分时间明显长于同类模型CAM-chem。经过性能对比测试发现,CAM-chem采用的简单后向欧拉求解器使其化学求解器计算速度比GEOS-Chem快数倍。这促使团队开始探索在GEOS-Chem中使用更简单求解器以提高计算性能的可能性。

研究背景

CAM-chem模型使用名为"chem_proc"的KPP等效预处理器,主要采用"隐式"(后向欧拉)求解器作为其主要求解方法。测试数据显示,在CESM环境中运行2个模型日,CAM-chem在求解器上仅花费约15秒,而GEOS-Chem的Rosenbrock求解器则需要约120秒。

技术尝试

研究团队尝试在GEOS-Chem中实现LSODE(Livermore ODE求解器),这一尝试带来了约75%的性能提升,将计算时间缩短至29秒。然而,这一改变也带来了两个主要问题:

  1. 在CESM环境中运行两周后,臭氧浓度差异超过10ppb
  2. 在GEOS-Chem经典版本中完全无法收敛,模型在第一个时间步就崩溃

问题诊断

经过深入分析,发现LSODE求解器存在线程安全问题。当在GEOS-Chem中启用并行循环(在fullchem_mod.F90中循环网格框并调用KPP求解器)时,会出现大量错误信息。调试发现,非收敛问题源于DTSODE内部例程中的浮点错误。

进一步研究发现,LSODE内部包含一个F77公共块(DLS001),这在现代Fortran90环境中是不必要的。由于所有子程序都在CONTAINS语句下,这些变量应该对这些例程都可见。这个公共块可能是导致线程安全问题的根源。

替代方案探索

由于LSODE的线程安全问题难以解决,研究团队转向评估SDIRK求解器配合后向欧拉方法的可行性。初步测试表明,这种方法可能提供更好的性能和稳定性平衡。

结论与建议

  1. LSODE求解器虽然能显著提升性能,但由于其固有的线程安全问题,不适合在并行环境中使用
  2. 在GEOS-Chem经典版本中,LSODE求解器无法正常工作的问题可能源于其线程不安全特性
  3. SDIRK求解器配合后向欧拉方法可能成为更可行的替代方案
  4. 未来研究应关注不同求解器在精度和性能之间的权衡,特别是对于短寿命卤素物种的处理

这项研究为GEOS-Chem的性能优化提供了重要方向,同时也揭示了化学求解器选择对模型整体性能的关键影响。后续工作应继续探索既能保持计算效率又能确保结果准确性的求解方案。

【免费下载链接】geos-chem GEOS-Chem "Science Codebase" repository. Contains GEOS-Chem science routines, run directory generation scripts, and interface code. This repository is used as a submodule within the GCClassic and GCHP wrappers, as well as in other modeling contexts (external ESMs). 【免费下载链接】geos-chem 项目地址: https://gitcode.com/gh_mirrors/ge/geos-chem

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值