|
作为第一篇博客,就写写这个礼拜一直折腾的多块网格内边界识别吧。
每个做计算的课题组都有代代相传的程序,我们组也一样。当接过拷有三维计算程序的u盘时,我有一种拿到武功秘籍的感觉。
废话少说,代码是多块网格有限体积法的,由于没有规范的网格接口,网格画好之后需要人工指定边界条件。这对于多块网格来说简直丧心病狂,因为你永远不知道哪些块是相互对接,又哪些点是重合的。
老板说他回国后花了三个月时间解决多块网格内边界和外边界识别的问题(三维)。我一听,心里凉了半截。三维计算我现在不打算弄,二维的边界识别看来只能自己弄了。
开始参考的一个程序原以为是老板写的,一看发现其实也不怎么难。谁知跟老板讨论后,老板说那是一个韩国人(……)糊弄他老板写的,没有用。
好吧,只能重头开始了。
内边界识别的逻辑过程如下:
主网格:当前被识别边界的网格
从网格:用来与主网格匹配的剩下的那些网格
网格边界:结构网格在计算空间为四边形,对于一个四边形,边的命名如下
3
|-------------|
| |
4| |2
| |
|-------------|
1
这种命名方法的好处是方便识别是竖边还是横边,edgeNumber mod 2? =1 横边,=0 竖边
对主网格的每条边进行匹配,用剩下的所有从网格的边与主网格边的点对比,如果坐标相同则认为重合,此时对重合的点做标记。由于主网格的边与从网格的边可能只有一部分是重合的,而下表i,j的走向可能相反,即两条重合的边在其各自的网格块的下标增长方向相反。因此首先得知道两条边是否下标走向相同。在找到第一个重合点后,考察两条边中该点各自下标+1的两个点是否也重合,如果重合则说明他们下标走向相同,如果不重合则说明走向相反。这一判断的隐含逻辑是两条边如果有一个点是重合的,那么至少有两个点是重合的。完成走向判断后,按下标增长方式逐渐配对,直到不再重合为止。此时,导出主网格边与从网格边的方向和重合点起始为止。对所有块的所有边重复上述过程。到此内边界的识别就完成了。
这么简单一个过程的编程折腾了我一个礼拜,最主要的是上述逻辑过程没有理清楚。今天突发奇想,程序就写好了。
看来真是磨刀不误砍柴工,逻辑弄清楚了,程序写起来就简单了。
附上程序源代码,供后辈师弟们瞻仰。
题外话:在linux下用vim写fortran对于一个vim菜鸟是个痛苦的过程,配置fortran.vim花了不少时间。stackflow上有个讲配置的帖子,自己去搜吧
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 22:09
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社