悲催的科学匠人 - 冷水's blog

ExStream/ExChimera进展

 

ExStream:

  1. Wang X.同学搞定了Gammar-Reynolds转捩模型,高升力模型的计算结果改进很是明显
  2. 我自己搞定了ILU(0)预处理的GMRES,基于PETSC,效果还行,但是不如传说中的那么NB(除非简单翼型),好歹目前可以比较稳定的运行
  3. IO迁移到CGNS
  4. Shu H.M实现了1-N对接面,初步可run

ExChimera:

  1. 终于可以针对壁面距离进行重叠区域最小化了;
  2. 运动物体组装初步可run

转一个网文:C++的反思

 

转一个网文:C++的反思

http://www.skywind.me/blog/archives/1398

-----------------------------  节选 ---------------------------------

关于 C++的笑话数都数不清:

笑话:C++是一门不吉祥的语言,据说波音公司之前用ADA为飞机硬件编程,一直用的好好的,后来招聘了一伙大学生,学生们说我靠还在用这么落后的语言,然后换成C++重构后飞机就坠毁了。

笑话:什么是C++程序员呢?就是本来10行写得完的程序,他非要用30行来完成,并自称“封装”,但每每到第二个项目的时候却将80%打破重写,并美其名曰 “重构”。

笑话:C容易擦枪走火打到自己的脚,用C++虽然不容易,但一旦走火,就会把你整条腿给炸飞了。

笑话:同时学习两年 Java的程序员在一起讨论的是面向对象和设计模式,而同时学习两年 C++的程序员,在一起讨论的是 template和各种语言规范到底怎么回事情。

笑话:教别人学 C++的人都挣大钱了,而很多真正用 C++的人,都死的很惨。

笑话:C++有太多地方可以让一个人表现自己“很聪明”,所以使用C++越久的人,约觉得自己“很聪明”结果步入陷阱都不知道,掉坑里了还觉得估计是自己没学好 C++。

笑话:好多写了十多年 C++程序的人,至今说不清楚 C++到底有多少规范,至今仍然时不时的落入某些坑中。

笑话:很多认为 C++方便跨平台的人,实际编写跨平台代码时,都会发现自己难找到两个支持相同标准的 C++编译器。 

-----------------------------  节选 ---------------------------------

其中,作者提到“其实C++的矛盾在于一方面承认作为系统级语言内存管理应该交给用户决定,一方面自己却又定义很多不受用户控制的内存操作行为”。确实,看c++书籍的时候,对于其中编译器背后干的一些复杂的事情,感觉真是“你tmd还背着我干了啥?”

 

c++确实强大,但是好的c++程序员很少,科学计算领域的好c++程序员更少。我刚工作时,在一个小公司主管一个项目,技术方案上我说了算,因此我推c++开发。结果是组里5个人,能用c++的也就一个半(包括我自己),于是大多数c++编程的活都是我干了。所以后来管一个更大的cfd项目,果断用fortran 9x/2003。

后来碰到有人鄙视fortran,吹捧c++,我就心里“呵呵”了。

我被硬特fortran编译器坑的事迹

最早先,gfortran下没有问题的代码在硬特编译后出现segment fault。结果发现数组整体赋值出了问题,比如

w=w1

只要数组w和w1特别大,就fault了。只好遇到比较大的数组,就把用循环。

DO k=0,kb
  w(:,:,:,k)=w1(:,:,:,k)
ENDDO

 

最近又被坑了一次,而且完全与上面这个经验相反。

id=1
DO n=1,num
  ! get i,j,k
  ...
  DO l=ivs,ivt
    buff(id)=w(l,i,j,k)
    id = id +1
  ENDDO
ENDDO

这个片段是将w中的元素按照给定的顺序填充到一维数组buff中。

按照debug模式编译没有问题。但是优化编译后出错。最后改为

id=1
ncmp = ivt-ivs+1
DO n=1,num
  ! get i,j,k
  ...
  buff(id:id+ncmp-1)=w1(ivs:ivt,i,j,k)
  id = id + ncmp

ENDDO
就没有问题了。
原因没法知道,只能是硬特fortran的优化有问题。
 
 
上述问题都是在11.x版本上出现的。第二个问题在后来版本的编译器上没有了。我想这看来就是硬特家以前一直有非商业的免费版fortran编译器的原因吧。不过听说最近没有了,看来不再需要小白鼠了。
 
现在gfortran的性能不比ifort差多少,但是因为天河-1A上的标准配置就是ifort 11.1,所以不得不跳这些坑了。
 
 
 

关于Git的学习思路: 关键在于分支

关于Git的学习思路

去年试图学过一次,但是居然没法接受,也许是使用svn太久脑子没法转过来。

这次因为工作需要,决定转到git。找了几本书看过,发现对于一个svn老人来说,掌握git的关键还在于思路转换。

转换思路的关键在于分支,只要理解了分支,理解了git中各个分支如同锁链一样将各个commit连接在一起,知道分支之间的切换、merge和rebase等操作的概念,其它的就好说了。

如果一开始就着眼于一些琐碎的add commit checout 之类的命令,就无法有全局观念。

BTW,我觉得开源的 Git Go Pro 和 Git 的官方文档是不错的资料。蒋鑫的书,内容丰富,是本不错的书,但是内容的安排顺序却缺乏全局观,可能不适合svn老人入门。




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee