当前位置: 首页 > 仿真模拟 >“easymesh”2D网格生成软件的使用和心得

“easymesh”2D网格生成软件的使用和心得

作者 自己的证明
来源: 小木虫 500 10 举报帖子
+关注

不知道现在还有没有人用这玩意儿,从小木虫得到不不少好东西,今天我也来发一个原创。

网格划分是有限元计算的基础,看过不少网格划分的方法,可是没有操作过不知道其中的困难和繁琐,毕竟有很多划分软件,但虽然会画网格了,可是对生成网格这事还是不清楚怎么做到的。
不久前得到一个画网格的C源代码,叫easymesh,该代码写得很好,既能在Pelles C上编译通过,又能在VC++ 6.0 上编译通过,而且还可以运行,无奈作者的教程写得太简单,依葫芦画瓢都总是不成功。因此就萌生了研究其源代码的想法,虽这不是主业,但还是收获不少经验,毕竟这是第一次看完了2000行以上的代码,源代码注释寥寥,网上也找不到,因此,研究其算法也有不少乐趣。
研究之后发现,该软件确实如介绍的所说,可以生成2维的可带多个孔域(也可以不带孔)的delauny三角形和voronoi多边形区域,经过不停的测试,终于找到正确的打开方式啦。

(附PDF文件,实例说明easymesh的使用)

程序生成的example.d文件中4种最重要的数据:点总数,点坐标、F值和Mark值,线段总数(segment),还有线段的连接性定义和Mark值。

在定义自己的.d文件的时候,要注意的有几个点:
1.        注意点的总数要与后面给出的点的描述一致,在不断更改时,这是很容易忽略的。
2.        同理,segment的总数也要与描述的一致,更改几何定义时要注意更新segment数
3.        在源代码中,前后两个segment一般首尾点编号相同,但是也可以不相同(example.d中没有反应),代码挨着segment编号进行输入和扫描,当扫到一条segment的终点与后面一个segment的起点编号不同的时候,就将前面首尾相接的segment分作一组,然后同样的道理分出其他的组。一组的segment的类型可以是闭合的(第一段segment的起点是最后一条segment的终点),也可以是开口的(第一段segment的起点不是最后一段segment的终点),还可以是inside(内部segment),这种inside关系指的是组内所有segment的端点不跟任何其他组的segment有公共点。三种类型都是合法的,可以成功生成网格,而且还可以应用于对网格的更精细的控制。
4.        点的顺序问题也很重要,外边界是逆时针顺序,孔的边界是顺时针,而inside类型的segment就要用逆时针。当孔的边界是按照逆时针来描述的就不会得到孔。
5.        代码中对node数量有20000这个限制。但要计算达到20000的网格,计算速度会很慢,不过10min内可以计算出来。当发现node数量超过了20000之后,程序就不再增加点了,就在此基础上进行网格的调整处理了,网格可以正常生成,有的地方单元会大一点。要想增加node数量,就要调整源代码了 。
6.        mark的问题,mark一开始明白是什么回事,其实就是用来标记边界和内部区域的数字编号,0代表内部边界,因此example.d中是以1开始编号的,编号的目的在于供后续的有限元算法调用,比如设置边界条件时,将一条边界上的边用一个mark来记录后,可通过简单的搜寻算法找到这些边界边。因此不同的mark可以认为就是不同的边界或者材料。
7.        spacing值,这是用来控制网格密度的,它的意思是,与这个点相连的segment上,与这个点挨着的第一个点与它的距离,但是在代码中不是这么简单计算的,比较复杂。spacing的值可以设置的比较大,甚至可以比线段的长度还要大,这时这条segment只分一份,就是它自己。怎么事先控制边界的分的份数?根据代码,N是这样算的:当segment两个端点的facing值的和大于segment的长度L,N就等于1,当和小于等于segment的长度,N就等于2L/(spacing1+spacing2),然后中间点位置就是以等差数列的规律进行排列了。增加了easymesh的源代码,有需要的可以下载,
如果需要在windows系统上使用,编译源代码可以下载安装MinGW的gcc编译器进行编译,安装方法还是很好找的。当然也可以下载Pelles C或者VC++来编译。[ Last edited by 自己的证明 on 2018-1-18 at 12:19 ][ Last edited by 自己的证明 on 2018-1-18 at 14:28 ]

csdfsd

[ Last edited by 自己的证明 on 2018-1-18 at 14:30 ]

增加了easymesh的源代码,有需要的可以下载,如果需要在windows系统上使用,编译源代码可以下载安装MinGW的gcc编译器进行编译,安装方法还是很好找的。当然也可以下载Pelles C或者VC++来编译。

[ Last edited by 自己的证明 on 2018-1-18 at 14:31 ]

“easymesh”2D网格生成软件的使用和心得

[ Last edited by 自己的证明 on 2018-1-18 at 21:08 ]

 返回小木虫查看更多

今日热帖
  • 精华评论
  • 自己的证明

    pdf中有个小错误哈,粗心了,看的时候注意点总数和segment总数的问题哈

  • 绿茶冰薄荷

    楼主太牛了

  • px9410

    顶一下,感谢分享!

  • 会飞的鸟11

    楼主,您好,你有easymesh的软件吗?我想生成一个矩形形状,中间被正弦曲线分割为两部分的平面几何图形的网格。现在不知怎么办???手误应该打五星级的。

  • 枪头寒芒

    楼主有没有研究过三维的简单划分网格的程序

  • 自己的证明

    引用回帖:
    5楼: Originally posted by 会飞的鸟11 at 2017-11-28 11:13:34
    楼主,您好,你有easymesh的软件吗?我想生成一个矩形形状,中间被正弦曲线分割为两部分的平面几何图形的网格。现在不知怎么办???手误应该打五星级的。

    http://web.mit.edu/easymesh_v1.4/www/easymesh.html 可以下载的
    如果你要引入正弦曲线,可以考虑将正弦曲线近似成多段线,用CAD应该可以导出多段线的点坐标

  • 自己的证明

    引用回帖:
    5楼: Originally posted by 会飞的鸟11 at 2017-11-28 11:13:34
    楼主,您好,你有easymesh的软件吗?我想生成一个矩形形状,中间被正弦曲线分割为两部分的平面几何图形的网格。现在不知怎么办???手误应该打五星级的。

    easyMesh的源代码已经上传,可以编译通过的,如果需要在windows系统上使用,编译源代码可以下载安装MinGW的gcc编译器进行编译,安装方法还是很好找的。当然也可以下载Pelles C或者VC++来编译。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓