科学计算代码开发动手介绍

计算科学 参考请求 计算力学
2021-12-16 16:31:36

我有计算力学的背景,但我的知识仍然非常面向用户。我的意思是,我对如何使用诸如 Ansys 之类的商业工程仿真软件有相当好的了解。我对模拟如何工作的机制也有很好的理解:我们有一个物理现象,例如流体流动,然后使用守恒定律(机械原理)将其建模为 PDE,然后使用不同的方案(例如 FEM 或 FVM)对这些 PDE 进行数值求解然后将结果可视化,依此类推。

我自己从未熟悉过从头开始开发科学工具的整个过程。我在网上看到了不同的教程,关于如何使用几行 python 来解决一个简单的梁偏转问题,我对此并不感兴趣。我也看过很多Lang教授等关于计算科学的书。那些理论资源我也不感兴趣。

我正在寻找的是一个更实用的动手教程,我可以在其中了解我需要考虑的不同步骤,以开发用于固体力学或流体动力学或传热的科学计算独立工具,并进行固体分步实施讨论。

假设我想继续我作为科学计算代码开发人员的职业生涯。您必须建议哪些资源或在线课程(请不要说“去参加计算机科学课程”)。

我一直在使用诸如“科学计算代码开发”之类的关键词在整个互联网上寻找,我发现的只是关于 FEM 或数值分析的课程,以及一些在 matlab 或 python 中实现的非常通用的简单代码。

我拥有计算力学博士学位,并且精通 Python,并且精通 C++。

PS:奇怪的是,该社区的名称“computational-science”标签在页面建议的标签中不存在!

2个回答

如果您对开发基于有限元法的 continua 仿真科学软件的过程感兴趣,您可能会对 deal.II 库 ( https://www.dealii.org/ ) 及其广泛的套件感兴趣教程程序将引导您逐步了解这些模拟器的开发方式(https://dealii.org/developer/doxygen/deal.II/Tutorial.html)。还有大量的视频讲座经历了这个过程(https://www.math.colostate.edu/~bangerth/videos.html)。

免责声明:我是 deal.II 的开发者之一,也是视频讲座的作者。

毕竟,科学计算项目是一个代码开发项目,其中的领域专业知识来自科学计算。你需要:

  • 事先进行某种需求分析目标是什么,有多少人会做出贡献,是否有截止日期等。

  • 某种项目管理:您将如何开发,例如以瀑布或敏捷风格,发布频率是多少,合作如何进行等?这在有更多贡献者的项目中尤为重要。一旦你一个人开始编写代码,它可能看起来像是开销,但即便如此,它也可以帮助你有纪律地朝着你的目标工作。

  • 对已经解决您的问题或作为帮助者做出贡献的可用工具和库的回顾(例如,用于线性代数的 BLAS)。也许还有一个故事,你的代码将以何种方式改进可用的东西......但坦率地说,编码的乐趣和通过这种彻底学习的东西在大多数时候对我来说已经足够了。

  • 工具链的选择,包括代码语言和开发环境 ( IDE )。当然,对这些事情有点精通。(因为您似乎对 deal.II 感兴趣,我将在下面给出 C++ 的示例)

  • 代码存储库例如 git,也可能是在线商店,例如 github、bitbucket 等。

  • 一个构建工具,例如 CMake(--这样许多用户最终可以应用您的工具)。

  • 您的代码文档,在代码之外提供参考,也在代码内解释您的算法的棘手部分。您可以为此使用例如 doxygen。

  • 一个合适的用户界面如果您正在编写库,这意味着需要的功能和直观的函数名称。如果它更像是一个科学应用程序,您将需要一种传递参数的方法,例如通过命令行参数、文件(txt、json、xml)或通过 GUI。

  • 单元测试,例如通过库catch2。

  • 其他软件质量测量:代码审查、结对编程、通过专门工具进行的静态代码分析、运行时分析等。

如前所述,您可以阅读有关软件开发的文献中的任何这些组件。玩得开心!