我的背景:我在攻读博士学位期间学习了一些数值分析课程,并阅读了一些关于该主题的书籍。我主要研究低雷诺数流体力学,并使用边界元法求解非结构化网格上的斯托克斯方程。我主要阅读数学方程式并在 Fortran 90 中编写自己的代码。
我很少使用大型线性代数包。如果我需要一些东西,那么我会编写自己的代码。我已经意识到这是非常不可持续和不可扩展的。我需要在 Trilinos 或 PETSc 等优化的线性代数包之上开始编写代码。不利用这些优化的软件包似乎很愚蠢。
但是,由于我没有 C++ 或 C 的背景,我发现很难理解如何编写这些大型代码背后的哲学。例如,如何制作类和模板。我发现很难仅阅读 PETSc 或 Trilinos 中的代码并理解它们为什么以某种方式编写/组织。目前,我正在阅读 Karniadakis 和 Kirby 所著的《C++ 和 MPI 中的并行科学计算》一书以获取一些想法,但我需要查看具有大量描述的示例。
请向我提供一些建议或想法,以指导如何开始编写甚至考虑编写如此大型的软件库。你有什么特别推荐的书或视频讲座吗?
考虑到我在 FORTRAN 的经验,我也不确定我将如何从使用 C++ 类中受益。只是为了更好地组织代码吗?我如何开始考虑在 C++ 中实现数学对象?