在当下的21世纪开发科学计算软件面临着两个挑战
计算硬件的急速发展和不确定性
多核,多线程,矢量化,异构多核,异构内存,petascale时代的MPI设计等等,现下的超级并行计算软,硬件设计正处在一个动荡发展的阶段,科学计算软件的开发如何才能跟上和适应这一过程?
解析对象的复杂化:多物理场,多尺度
从气象分析,核聚变到电子器件,噪声分析,从分子动力学到多体动力学,有限元分析,这样的跨行,跨界分析已经成为现实需求。相应的,软件的设计和开发也越来越复杂。
模拟和数据分析的一体化
所谓数字孪生,与神经元网络计算的统合?等
软件的效用可以用不同尺度来衡量,比如
软件本身的生产性。包括软件开发,维护,服务的时间和费用
软件的运营效率。包括软件的运行效率,时间和费用
软件和实验,分析的综合效用。
软件工程学在这一方面提供了不少有益的见解。俗话说“better, faster, cheaper: choose any two”讲的是如何在软件开发中取得均衡。
hillyuan/四元gitee.com/hillyuan_be3b/siyuan
软件可以在各种不同的硬件下运行,但是希望能最大限度地使用硬件的计算性能。其实现方法见下述文章
柔软的,可对应于各种计算功能的软件接口。现下该接口考虑了: 静态非线性, 瞬态非线性,静瞬态感度分析,优化计算, 稳定性分析和分岔计算, 不确定性量化计算等。
DAG-Based Assembly
将所有计算数据的依存关系由DAG(Directed acyclic graph)定义并置于应用程序的上位管理程序FieldManager的一元管理之下。这种数据管理和具体计算程序分离的设计方式使得程序的功能扩张变得容易,特别适用于多物理场间的耦合运算。结合自动求导计算,还可以在方程的Jacobian计算时自动考虑到这些依存关系的影响。
自动求导功能的导入
由于自动求导功能的导入,用户不需要自己编写Jacobian计算程序。在开发自己的方程求解器是原则上只要定义好了方程式的残差计算式r(u¨(t).u˙(t),u(t),p) 即可。
FEM/FVM/FDM一体化实装
四元采用的Intrepid2 库采用的Mimetic Dicretization技术可以在本软件框架下同时实现FEM,FVM,FDM计算。
使用了大量现有(主要是Trilinos下属)库。这一策略不关是基于开发成本的考虑,也保证了本软件计算功能的完备和可靠性。
开源软件Albany采用类似的策略。其实若干年前参加开发Albany时发现有种种不满之处,实际上成为了开发《四元》软件的主要动机之一。
[1] U.S. Department of Energy :Software Productivity for Extreme-Scale Science, 2014
[2] Steve McConnell : Code Complete, Microsoft Press, 2004
[3] Andrew G. Salinger等:ALBANY: USING COMPONENT-BASED DESIGN TO DEVELOP A FLEXIBLE, GENERIC MULTIPHYSICS ANALYSIS CODE, International Journal for Multiscale Computational Engineering, 14 (4): 415–438 (2016)