本人武汉理工船海研究生,目前研二。本科的时候没啥志向,只是机械性地学习,对老本行力学分析(结构和流体)自认理解得比较深刻。上了研究生,突然发现自己对于水动力方向极有兴趣,也有较强的物理层面的理解,不是我吹,势流理论和粘流理论的一般推导我磕磕巴巴基本都能搞定,网格法和粒子法的思想我也可以读懂。不过我最烦恼的是实验室都是用商业软体计算,工程项目居多,对著例子改参数,商业模型没有他们就不会搞,我个人感觉没什么含金量(无法发挥我的水平)。虽然研一一年发了几篇高速艇水动力、畸形波、破损船之类的论文,但是感觉毫无成就感。我个人有很多自认独到,也很想尝试的想法,包括最小网格逼近、自适应自由表面网格、自由造波消波、超重力(源项)、粒子法和网格法耦合、势流区域无反射波等等。然后我还设想了考虑空气、水两相的高速艇势流时域姿态捕捉方法,方程还差一个新的自由表面条件,不过我感觉可以搞定。总之吧,都是现有商业软体根本就没有的功能,我一直觉得商业软体只能做最基本的东西,拿这玩意搞科研简直搞笑,不过我的同学不这么想,我总觉得他们SB,他们也觉得我SB,不过没关系我不在乎,反正每次都是他们来抄我的作业。至于编程,说来惭愧,我对编程的理解只停留在MATLAB输入数解方程的层次,因为没学过,所以对编软体一头雾水。我请教过老师,老师也只是开发过一些经典的移动脉动源程序,还是那种没界面的,只能得到一组数,自己再拷贝进EXCEL里画曲线图的那种,这我自己就能实现,但我要的不是这个,我想要自己写一个类似于FLUENT的工业软体,不过更专业化一些,只算数值波浪水池。这是终极目标,我打算以后写出这玩意儿就去船厂卖钱,作为未来十几年的奋斗目标。研究生我只打算把二相流的势流软体写出来,估计会简单很多,但应该也难度很大。前几天我还想过写一个静水力计算软体,算各种破仓之后的力矩(compass没这功能),但我不清楚三维几何这种数据不画网格的话是怎么读取,程序算体积、惯性矩具体是怎么弄的,我只知道物理原理(门清儿),但编程我就是个渣(我只会输入一串数,然后做矩阵运算,得到一串数,和真正的软体差好多,但我不知道要学什么)。大概就是这样,我特别想做,基本都规划好了,绝对可以实现,而且有很大的趣味,绝对不是商业软体可比的!但我发现现在编程把我难住了,打算学,但不知道学什么,大学学了C,只会写简单调用函数的水平,研究生学了MATLAB,可以简单做数值计算的水平,买了本FARTORN的书还有C++,还没开始看。请问大家我要去学什么?我是真的把开发这个软体当成事业做的,虽然研究生毕业批发价能到15-18万,水动力还能高些到20-25万,但我看不上,我羡慕的是像ansys8000万美金收购spaceclaim那种,卖个软体就发达了那种为个人奋斗的感觉。我感觉船舶界懂编程的人门可罗雀,船厂设计院都用通用的商业软体,很杂,而且讲道理很多地方处理得很差,真让我挑刺儿全是毛病,我强烈感觉未来一定是专业软体取代通用软体,我如果可以开发出一个专业的数值波浪水池,只做二相表面流,而且还是汉语界面,应该会大受欢迎,不过没人理解我,我就权当他们没眼光不敢舍弃一切来赌一把了。最后说说毕业的事,其实我的毕业论文和我上面说的关系不大,是做破损船瞬态响应的快速演算法,刚开始还没眉目,不过我感觉也是编软体。我是在某一天突然发现我的一切梦想都绕不开编软体,而且一次去北大清华的经历让我有些后悔曾经没努力以及选了这个专业了,当时我被震惊了原来顶尖大学的大神真的在自己开发东西,和他们比,武汉理工真的是个拉基,不说学生有多智障了,估计教授水平都不如人家的博士,人家才是研究,我们纯粹在生产拉基论文。于是我好想博士换个专业去读计算力学啊,连上海交大的船海我都看不上了。还有两年,我还来得及吗?求各位前辈解答。(PS:我一直看不起国产工业软体一片荒漠的现状,我估计原因就是学编程的不懂理论,学理论的不懂编程,也没人肯吃苦,再加上版权意识很差,就没人做国产工业软体了,既然这样,那就我来干这个事情,立个小目标,先把船舶领域里的FLUENT和starccm给挤出去,船厂那帮人整天装比,真给他一个汉语界面的国产软体,屁颠屁颠就去用了,目前的关键是没有,没办法才去学商业软体的,而且看他们加群学不会各种撕嚎的惨样,我心里坚定了干这事一定是有前途的)各位勿笑,反正我也没别的事干,就当奉献自己爱国了。欢迎交流!

最后的最后说一点,我的理论掌握得真的是比较不错的。势流理论和粘流理论的公式我都可以看懂,可以磕磕巴巴地推导,也理解物理机理和公式的目的。除此之外,我还对旋涡理论、湍流、圆柱绕流这些专业性的教材进行了自学,还看了法国人的空化机理。而且我举一反三的能力也还可以,学过表面波(船行波),我自己就完整地想明白了空气动力学中的激波问题,做高速艇项目时我可以联想到高超音速的乘波体,而且我也爱发明,用马格努斯效应自制了推进器,对科学充满了兴趣(因而人生也比较灰暗,性格可能也有缺陷),但我是真的想干一番事业出来,而不是那种找个事业单位上班,然后找个女人交配那种,我最崇拜学术和道德的完人牛顿,偶像是埃隆-马斯克(除去他的ZZ观,我都喜欢他),而且我不想去给别人干活,我想为自己的兴趣而不懈奋斗。


为什么要泼凉水?当年Weller写OpenFOAM的时候,肯定也有不少人冷嘲热讽。认定了,开心做就是了,管那么多干嘛!既然洋人搞得出来,为啥国人搞不出来?而且人家还是几十年前做的,现在条件不比几十年前好?如果都怕难怕失败,那还活个什么劲?你自己做不出来,楼主就做不出来么?你自己写不出红楼梦,还不让曹雪芹写红楼梦?等到人家写出来,你又靠人家吃饭了。多少人嘲笑马斯克不自量力,失败频频,等到人家真的火星移民了,看你们还有屁放……

楼主想整就整,人生能有几年奔头,不做点自己喜欢的事情,跟猪狗有什么区别?如果只是迎合世俗,为钱为利,那还有什么奔头?!还有什么意义?!

以我个人粗浅的CFD开发经验,如果悟性极高又有大牛指点的话运气也比较好的话,三五年之内开发个初具规模的简化版FLUENT或者OpenFOAM是完全没有问题的。你只需要开发求解器就行了,至于网格和后处理完全可以交给其他软体来做,实际上OpenFOAM也是这样子的(甚至导入网格的格式和输出结果的格式也只需要指定一种即可)。

可以循序渐进的来,并不需要一蹴而就,那么多的离散格式,你只用实现一两个最常用最稳定的高精度的守恒型的就好了;那么多的湍流模型,也只需要开发一两个简单易用的即可,标准k-e或k-omega就好;那么多的压力速度解耦方法,也只需要开发最常用的一两个就好;求解Ax=b的方法,也只需要针对问题特性实现最高效的,并不一定要把书本上那些老掉牙的方法全部实现。选择太多的话,反而让人无所适从不知如何选择。其实更多的商业应用,用户并不希望去做太多设置,最好是直接就能算,快点出结果。

实际上,写过代码的人,都能体会到极大的成就感,这是商业软体永远无法带给你的,这也就是CFD的十八层鄙视链吧。另外,商业软体并不是万能的,虽然能解决很多常见问题,但很多问题它根本无法处理,我举个最简单的例子,哪位大神能用ANSYS的workbench做出来旗帜在风中飘扬的流固耦合模拟来,我就服他,反正FLUENT的动网格方法在处理柔性旗帜大变形卷曲的时候我觉得根本就是一坨屎。

还有,如果哪天微软禁了windows,如果哪天ANSYS禁售,怎么办?……难道要等到那时再去开发国产CFD软体么?

那些说一个人开发不出来CFD的,中科院的李新亮大神你们知道么?

最后,祝楼主玩的开心,早日实现梦想,祝国产CFD软体早日横空出世,挤垮洋人商软!!


首先题主值得鼓励,我国CFD软体一直被卡著脖子,实在是难受。

我国国产软体和国外软体相比没有什么竞争力,因为一个CFD软体的发展和迭代需要的时间太长了,以前去过一个COMSOL的讲座,工程师告诉我们一个看似简单的耦合模块他们花了6年才让他们稳定下来,如果从头做起永远比他们落后几十年。

比较糟糕的是国内环境不鼓励开源,大家为了水paper都用现成的代码改改input,高级一点的用商软做二次开发。这样也有坏处,演算法实现以及一些很tricky的东西你不知道是怎么实现的,实际去编程就知道了,要考虑stability, converge的问题,还要考虑精度。拿我以前用DEALII(有限元库)写的一个多相流流固耦合模拟器做个例子吧,有限元不能保证局部质量守恒,所以要用Discontinued Garlerkin Method去离散压力场,为了保证解的精度流体的速度场采用了Raviart-Thomas FEM,还用了人工粘度。虽然最后把本科毕设里面东西做出来,但是拿去算一些复杂的case一下子就崩了。现在看看这些代码就是屎山。

我前老板就是tough2和tough+(美国伯克利实验室开发的,是要付费的,价格还不便宜)的开发leader,他给我们上课给我们初始版本的代码,刚开始我还觉得功能少用著麻烦,觉得开发了十几年就做出来个这个东西?但是一些case人家就是能算过去,并且代码非常有条理,修改某些状态方程和控制过程也很方便,这点不服是不行的。前老板也跟我们说过他们曾经为了解决一个收敛性问题想了半年,终于有天有个人冒出来了个idea他们才解决。所以这个东西还是很看经验和持续投入的能力的。

这是需要长期投入才能看到有回报的项目,国内资本没有这么多耐心给你投钱等你发酵。

但其实个人觉得还是有两个解决方案的:

  1. 做那些细分领域专用的CFD,一步一步发展壮大,曲线救国。
  2. 弯道超车,现在的CFD领域主要还是使用有限差分和有限元,可以考虑一下SPH(真的可以考虑考虑SPH),LBM(这个其实没太有戏),MPM,这些方法都能克服传统CFD的一些天生不足,但是缺点都是要求算力或者内存太高。目前我觉得基于FEM改进的MPM还是非常有前景的,前一段时间的胡渊明大神的taichi给我感觉挺惊艳的,这几天研究研究如何能把taichi的计算内核用在工程计算上。(六月一号他们就有公开课,大家可以去听)

胡渊鸣:给每一位计算机图形学爱好者的儿童节礼物?

zhuanlan.zhihu.com图标

愿大家的付出都能有所回报。

相关:CFD的相关领域,reservoir simulation。

参考资料:

https://dealii.org/

https://tough.lbl.gov/software/tough-software/


不要重新造轮子……这个道理计算机专业的人大部分都明白,但题主好像还没明白。做这个事情,对你有多大好处呢?有多大坏处呢?

有哪些计算流体力学(CFD)大牛的故事??

www.zhihu.com图标

可能有些人会注意到,为什么涉及到Henry Weller称呼的时候,一般都是先生,而不是教授或者博士呢?

因为!他花了大量的时间把Fortran改成C++,因此博士论文没写完,博士没毕业!所以大家都成为先生。。。真特么是富有个性的人。

要考虑到可能存在的风险。


很有想法骚年。搞CFD也有近十年了,曾今包括现在的我都还有搞国产CFD软体的冲动。

不过理想很丰满,现实很骨感。

开发一款通用的CFD软体难吗?其实我觉得难度并不大,现在网上有铺天盖地的CFD教程,各种开源代码,而且CFD这么多年的发展,基本的求解方法技术都已经很成熟了。难得是如何商业化,如何进行市场竞争。在STARCCM+和fluent如此强大的竞争对手面前,你开发的软体能有什么优势跟他们竞争,汉语界面我觉得真的不值一提,我现在用软体都不喜欢汉语界面啊。也许你能开发出来最后打价格战取胜。

其实国内有很多自主开发的CFD代码,包括国内高校很多课题组都用自己开发的代码做课题研究,只是没有商业化,像题主这种靠商业软体来搞科研的确实有些low,发不了好文章吧。

关于专业软体和通用软体,我觉得专业软体的最大优势是软体背后强大的工程经验资料库支撑,这个不是一个小作坊三五人小工作室就能完成的。需要大量的试验来获取模型中的基础数据,相当烧钱的,你们船舶领域肯定也是一样的。

浇了点冷水哈哈,骚年有想法有干劲很不错加油吧。看你自述理论功底应该还可以,但是开发软体光有理论功底可差远了。抛开流体理论,CFD的数值演算法,网格处理方法,结果后处理方法,软体开发流程等等一堆活,一个人是干不过来的。好好把演算法学扎实,毕业后找个开发CFD软体的公司积累经验人脉。最后如果你足够牛逼,拉一个团队出来单干,大事可成!

祝你成功!


一个程序能计算一种方程、一种工况的,属于用于科研的专用计算代码。这一点相信研究生们都可以做到。

能在同一程序框架下计算多种方程、多种工况的属于能服务于若干工程项目的通用程序。如能做到这一点应该知道各个模块的抽象和耦合、每个类或者函数都要考虑不同的方程和工况,要精心设计数据结构。其实已经和科学计算其实关系不大。

至于「工业CFD软体」,在需要上述功能之后,考虑每种工况需要用不同理论和数值演算法去分析,一个「软体」仅有龙格库塔法可不行。说到这点显式演算法和隐式演算法对于数据模型的框架又不一样。达到这个要求每个类和函数需要精心设计和抽象,以便继承派生。最重要一点是和GUI的关联,选择桌面框架qt、wx、winform...选择三维图形框架vtk、openCascade...

所以要做软体会推点公式可不行,基本上「cfd软体」和「cfd」本身关系已经不大了,就这样。


推荐阅读:
相关文章