用 C++ 编写数值软件的设计模式

计算科学 设计模式
2021-12-16 00:00:00

我正在寻找有关数字软件设计模式和原则的资源,可能但不一定关注面向对象的数字代码方法。

我知道文本,编写科学软件:良好风格指南,但这仍然涉及浮点问题、如何以及何时优化等问题。

我正在寻找有关设计数字代码的更大图景的信息,而不是任何涉及算法等的信息。

我希望有这方面的资源,而不是仅仅通过一个又一个库,特别是因为除了我自己对 C++ 中良好习语和实践的了解之外,没有关于哪些事情正确设计的指南。

(这不是特定于语言的,但如果有任何特定于语言的内容,我更喜欢 C++。)

2个回答

现在已经开发了 20 年的数值软件,我发现我们可能已经使用了四人帮一书中描述的大多数设计模式(见这里)。归根结底,数值软件也只是大规模、复杂的软件,因此与其他软件相同的设计考虑因素可能并不奇怪。

当然,有许多案例确实特定于数值算法(例如,请参见此处),但了解“传统”设计模式集确实是一个好的开始。

我推荐这个 Matthew G Knepley。用于科学计算的编程语言。arXiv 预印本 arXiv:1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

我还建议查看和阅读其他代码,例如,triangle、PETSc、MoAB、deal.II、fenics 和许多其他代码。并非所有解决方案都适合您,但最终,应对和向他人(经验丰富的开发人员和成功的代码)学习是如何设计代码的最佳课程。

此外,我认为加入现有项目并成为贡献者或开发人员会更好。有时你喜欢开始一些新的东西,但你必须有坚实的论据才能做到这一点。