数值风云

那种编程语言对于CFD研究和数值计算最为友好?

在学习编程过程中,入了很多坑,大家觉得选择哪种语言,最为友好.
1)从学习阶段
2)从科研研究角度
3)从工程应用角度
这里知道openfoam是用C++编写的
image

Matlab,Python,Fortran,C和C++用户路过表示,取决于你的需求。

Matlab和Python的开发速度快,但是运行速度比较慢,最多计算到几万网格的二维问题。不过另外还有三个需要考虑的,其一是内置函数特别多,很多功能不需要自己写,可以明显减少代码量和可读性。其二是运行过程中,内存空间的变量均可以直接打开查看而不需要调试工具,对新手非常友好。其三是针对MATLAB的,软件本身运行时可以自动做共享存储式的并行,但是如果规模更大的分布式并行,可能会比C或者Fortran调用MPI更加费事。

Fortran的优势是运行速度和C差不多,但是不需要过多的关注指针内存等问题,所以如果只是需要运算速度快一点,又不想学C里面的各种奇技淫巧,建议用Fortran。还有另外两个考虑因素是,其一Fortran的编译检查相对C语言更少,写出来的程序相对C更容易出现编译通过结果不对的情况,调试难度相对会提升。其二是早期的CFD程序均为Fortran代码,如果使用Fortran写程序,有很多已有的老代码可以参考,不需要做混编。

C和C++的优势就是运行速度快,并且写出来的程序相对Fortran更容易形成比较好的结构,适合比较大的程序的开发。如果你的代码规模已经上万行,一般是建议用C去写的。Fortran代码很容易变得不那么好管理。同时C语言因为也可以做其他性质的开发,不止科学计算。所以有指针,地址操作,面向对象等等技巧,学习成本是最高的一个。最后两个需要考虑的因素就是,首先比较新的CFD开源基本上都是C,其二是用C的话以后可能好找工作一点

初学的话我觉得matlab和python最好,因为调试起来非常方便。并且我看到非常多的数值计算入门教程都用matlab作为示例,不用外部依赖一键运行。python还有一些不错的开源数值计算库,比如scipy,numpy等。

但要追求性能肯定c++,因为我看到有关数值计算的论文附的源码几乎清一色的c++,各种轮子都调起来很方便,比如Eigen库,boost库,oneapiTBB库,sparsesuit库等,再上个cuda或MPI并行计算爽歪歪。然而学习别人项目的时候,windows装环境和依赖库能装得怀疑人生,linux和mac os又没有像visualstudio那样方便的调试工具。

如果展示三维图像和结果的,matlab有很方便的库,但难以定制。主流还是c++项目,要不用跨平台的opengl,然而配置很麻烦,要不输出数据扔到paraview里去。

另外我觉得unity虽然是游戏引擎,作为结果展示也很不错,虽然我没看到有人这么用。javascript写网页也能一键运行,用three.js也能展示三维图像,但调试不方便,也没什么人用。

写得真棒,厉害了

试试Rust?毕竟Linus Torvalds都准备让Linux内核支持Rust了却一直排斥C++。

  1. 从学习阶段和科研研究角度:Rust的学习成本没有C/C++那么高,所以可以将更多时间精力投入到科研研究上。
  2. 从工程应用角度:Rust没有C/C++那样厚重的历史包袱,而且Rust是内存安全且并发友好的。

当然以上都是我在瞎扯淡,因为我并没有实际使用Rust开发过项目的经历 :crazy_face:

个人意见:
从长远发展权衡兼顾OpenFOAM发展。
新人第一们语言应该选择C语言,而不是Fortran、C++或者Python语言。学习的类库可以参考PETSc。
原因如下:

  1. C语言是静态语言,需要编译链接的过程,为今后过渡到C++打下基础。
  2. C语言强类型,这点Fortran, C++等都是。但是Python不是,这样,今后学习Python等进行后处理时,会很容易上手。因为你知道C的罗嗦,也就知道Python不好。但是Python太灵活,你又发现C可能没那么差了。
  3. C语言也有很多学习代码,无论偏计算机方向还是CFD方向。所以不用担心学习的问题。
  4. C语言学习起来很方便,你如果想破圈请教是很容易找到人的。但是C++就不一定了。

最终学习的目的是为了干活,那么就一定要在工作中干活干起来。如果是研究生阶段想快点。应该是C->Python(Matlab)->C++,Fortran可以留到上班时间再学。如果真的编程能力提高了,学其他语言也是快的。

从学习,科研,工程角度,都建议直接C++,这是趋势。学习成本高与低,就看个人情况。

此话题已在最后回复的 24 小时后被自动关闭。不再允许新回复。