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

时间:2010-09-22 12:52:24

标签: implementation simulation

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

由于

3 个答案:

答案 0 :(得分:3)

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

Writing Scientific Software:基本的“学会用C ++编程”或其他任何内容的良好后续。

Parallel Scientific Computing in C++ and MPI:如果您不打算将应用程序并行化,那么您应该是。

Engineering and Scientific C++:一个很好的,特定于域的,用C ++编程的介绍。语言细节有点过时,但总体方法还没有老化。

我建议您阅读SO的答案,例如“我应该如何设计大型C ++程序?”关于可能感兴趣的其他书籍的建议。

关于最佳做法,这里有一些建议。同样,我不确定你的出发点,所以其中一些可能太基础了:

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

答案 1 :(得分:1)

Numerical recipes: the art of scientific computing开始。一本非常全面的大部头。但是,请记住两件事:

  • 它包含C ++和Fortran 90代码示例。
  • 忘记实际使用项目中的任何代码示例 - 但AFAIK是受版权保护的,必须获得许可才能单独使用。

但是,如果你出于教育目的需要它,这本书是一本强烈推荐的阅读材料。

答案 2 :(得分:1)

查看OpenModelica