在美国留学期间,我曾尝试采用 Go 语言编写一套完整的物质点法 (Material point method, MPM) 的求解器。当时我雄心勃勃的想要将 Go 语言应用于科学计算,不过后来我转变了自己的研究方向,该计划也就无疾而终(期间我采用 Python 实现了一套完整的代码用于快速实现不同类型的土的本构关系,取得了一定的成功)。

尽管 Go 语言的运算效率可以媲美 C 语言,并且具有快速编译等优点,但相比较 Python、Julia 和 C++ 等,采用 Go 语言进行科学计算并不是一个好的选择。究其原因, Go语言缺少像 Numpy 和 Scipy 等成熟的计算包来提供完整的科学函数功能。

​目前主流的 Go 语言科学计算包有:

我之所以想要采用 Go 语言实现 MPM 的求解器,主要原因是该数值计算方法在计算过程中会设计到大量的迭代运算,而对此 Python 的计算效率过于低下。作为一个工科老博士,我已经没有精力和时间再去深入的学习 C++了,此时 Go 语言似乎成了最好的选择。

​在编写 Gompm 求解器的过程中,我首先需要解决的一个问题是将三维的有限元网格转换为规则排列的物质点模型。即使我提出了一个相对比较简单的方法,但是该过程依旧涉及到大量的运算,好在最终的代码执行效率很高,能够在短时间生成上百万个规则排列的物质点,后续我会对该算法进行详细的介绍。

​上述例子表明采用Go语言实现 MPM 求解器是能够满足计算效率的需求的。或许 Go 语言并不适合用于科学计算,但它确实能够帮助我更好的完成自己的研究课题。从这个角度而言,采用 Go 语言实现不同类型的数值计算方法似乎并没有什么不妥。