从头开始实施科学模拟方法的最佳实践

Ope*_*way 6 simulation implementation

在科学模拟(物理学)领域我正在考虑用C/C++开发一些新的仿真包.从头开始,您认为最佳做法是什么?你能推荐一些参考书目吗?

谢谢

Hig*_*ark 3

这是一个阅读清单。不确定这对你来说是否太基础:

编写科学软件:基本“学习 C++ 编程”或其他内容的良好后续。

C++ 和 MPI 中的并行科学计算:如果您不打算并行化您的应用程序,那么您应该这样做。

Engineering and Scientific C++:关于 C++ 编程的良好的、特定领域的介绍。语言细节有点过时,但整体方法并没有过时。

我建议您通读诸如“我应该如何设计大型 C++ 程序?”等问题的 SO 答案。有关其他可能感兴趣的书籍的建议。

至于最佳实践,这里有一些建议。再说一次,我不确定你的出发点,所以其中一些可能太基本了:

  • 正如我上面所写,您应该从一开始就计划开发并行程序。如果您不喜欢集群上的消息传递,至少考虑多核桌面的共享内存编程。 OpenMP值得研究。
  • 让自己熟悉现有的工作。BOOST库可能是必不可少的虽然我对您自行开发的意图表示赞赏,但不要忽视现有的完善的数值库,例如 BLAS 和 LAPACK,您可以在Netlib中找到它们。根据您的开发平台和工具集,您可能会发现它们已经安装。
  • 如果您有科学背景,您可能想提高软件工程方面的知识和技能。例如:源代码控制;测试;代码分析和优化;深入了解您的编译器可以做什么。根据我的经验,许多计算科学家在所有这些方面的背景都很薄弱。
  • 您应该计划在设计和测试程序上花费(大约)与实际编码一样多的时间。即使是自己工作,在开始编码之前制定一个良好的行动计划也很重要。没有理由一开始就必须把每一个细节都完成,但永远不要在没有地图的情况下进入领土。
  • 您对想要模拟的物理世界的各个方面保持沉默。在各种物理模拟中有很多现有技术,如果您更具体一点,那么也许能够提供一些更具体的建议。