研究生开学已经两周了,一直在学习LBM相关编程知识。因为我的数值传热基础不是很好,为了快速融入现有的工作,我专注于编程,而不是学习相关的模型和边界条件。我的主要参考书是:
中文名称:格子玻尔兹曼法-基础与工程应用(附计算机代码)
英文名:Lattice Boltzmann Method -- Fundamentals and Engineering Applications with Computer Codes
这本书的一个优点是书后有相关案例对应Fortran代码可以参考,可以节省很多时间可以节省很多时间,而不需要自己思考。但与此同时,我不得不说,这本书的代码中仍然存在一些问题。由于作者的能力仍然有限,无法完全识别相关代码的正确性,因此暂时不整理相关的错误点。
以下是前一阶段的进度分类和后一阶段的计划:熟悉基础理论和简单模型
读懂书后的Fortran并修改代码Python(扩散、对流-扩散、等温不可压缩、非等温不可压缩)基本上每章都有1-2个完整的案例,但与书中的结果有一定的差距。一般来说,它是成功的。估计细节要仔细考虑比较。
数据可视化处理(Tecplot,真的很累,学习资料不多)
Python代码加速(开始写完)python代码很慢,几乎崩溃,可能是因为python它是一种解释性语言,如C是一种编译语言,在计算速度上差距太大。幸运的是,它现在已经解决了,这也是本文需要详细说明的地方)
可视化动画的生成仍然依赖于计算过程Tecplot)
----------------------------------(TODAY)----------------------------------
说说之前计划安排的原因。1. 首先,我之前说过,我的优势在于编程。接触新领域需要先建立自信,所以一定要从我擅长的地方入手。2.其次,我不熟悉数值传热。如果计算效率不高,后期计算模型的测试肯定会减缓整体学习节奏,所以首先要提高计算速度。3. 计算过程生成可视化动画也是我的想法。对于一些较长的计算过程,很可能在计算开始时是错误的,如果每次都等待完全计算知道程序问题往往太晚,所以如果你可以迭代1万次在操作大程序之前看到视觉过程,而不是一堆密集的数据将有很大的帮助学习。
----------------------------------(FUTURE)----------------------------------
将面向过程型程序改为面向对象(制作自己的模型库,方便扩展)
实现书中的案例(包括正确性分析和不同代码之间的比较)
代码再加速(优化算法和并行计算)
补充数值传热知识点(一切准备就绪,理论知识开始丰富)
然后开始敲重点!!!怎么给!python代码提速
使用第三方的东西叫做pypy,这是一种使用Just In Time 即JIT技术解释器。使用相同的代码pypy执行和普通python执行时的差距在10-100倍左右(因为我当时看到了)pypy速度太快了,没有统计到底有多快。但敲重点!实验室师兄师姐们用的matplab当同一算例格子数和迭代次数相同时pypy执行时间是matlab十分之一(我没有亲自写程序验证,口头确认是同一个案例)很吸引人。
科技是一把双刃剑,又快又快,但也有一些问题。由于pypy可能刚出现所以对于一些包还不是很支持。例如,在第一次使用时,使用numpy库会导致速度下降,所以我基本上把一切都放在一边numpy所有代码都被替换了。第二个缺点是我想在计算过程中实时生成图像,但我发现了pypy不能pip matplotlib这个包(支持哪些库官网可以找到)只能想另一种方法来解决问题。但现在,速度是第一生产力。除非我有更好的方法,否则我不应该在短期内放弃使用pypy。