找回密码
 注册
Simdroid-非首页
查看: 515|回复: 7

[07.动网格] 动网格计算中stop+remesh+restart过程的问题请教(flyingmind版主请进)

[复制链接]
发表于 2010-10-25 21:20:20 | 显示全部楼层 |阅读模式 来自 法国
搜索了论坛里关于这个主题的讨论,其中flyingmind版主的http://forum.simwe.com/thread-867530-1-1.html帖子最有学习的价值。

我的例子物理过程是一个液滴的变形行为:涉及ALE+N-S+PDE,其中PDE求出来的变量作为N-S流动的驱动力,使流体流动并变形。由于在有的情况下变形比较大,有必要用到remesh.

照着flyingmind版主和说明书的提示做了一下,有几个问题没有想明白,请指点一下。谢谢!

flyingmind版主的帖子里说的流程是:“打开allow remesh,同时设置stop condition,停止后,然后创建最后正常时刻的deform mesh在当前的geom里,然后,更改起始时间为最后正常的时刻,再用restart求解,可以正常运行一会,再出现,再重复这个步骤。”

举个例子:

1、 假设现在计算0.1, 0.2.........0.8秒,满足stop condition停下来了,这时在mesh→Create Geometry From Mesh的Source中选择Deformed Mesh, 生成一个新的Geom. (这里有个选项:就是solution at time,就选0.8s时的解。有两个问题:可不可以选择0.6秒或者其他时刻的解?这里一定要重新划分网格,是吧?)

2、 然后在solver paremeters中更改计算的初始时间,就是range(Tinitial, 0.1,T)。这里有一个问题:这个Tinitial应该就是第一步中的那个重新划分网格的时间,如果上一步选择了0.6s,这里就应该写0.6s?但问题是随后计算Restart之后,程序用的是哪个时刻的解作为初始值呢?我试了一下,似乎它还用的是0.8s的,因为有时候会出现“Cannot find consistent initial value",然后计算没办法进行。即使在solver manage里将0.6秒的上一步计算值存起来作为初始值,也会出现“Cannot find consistent initial value"。

是不是因为重新划分网格了,前面一次计算停止时的结果,没有能够“传递”给后面新的网格?这个应该怎么办?

还有那个每次计算结果导出FEM structure,在把各次计算结果合起来,具体是一个什么过程啊?好像我3.5版本的Comsol菜单里没有这个选项?

请指点!非常感谢!

评分

2

查看全部评分

发表于 2010-10-26 17:57:38 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
本帖最后由 flyingmind 于 2010-10-26 18:44 编辑

关于你的例子1,因为你用的是gui模式,所以前面计算完成后,最后时刻的解是0.8s的,当你重新create geo from mesh,然后重新划分网格,这时使用restart求解,只能从0.8s开始,因为最后的解还是0.8s的,如果你要从0.6s开始,需要使用0.6s时的mesh以及解,而不能仅仅通过将起始时间改为0.6s
既然你希望从0.6s开始重新划分网格,那么前一步就0.6s停下来好了,因为restart无论如何都是用前面计算完成的最后一步的解作为初始值的,至于网格重新划分,并不会导致解不对,软件会根据插值的方式映射解到网格及节点上的
所以你在0.8s停下来,然后又想从0.6s重新开始计算,那对不起,在gui下比较难实现,在命令模式下,如果你将0.6s的网格保存下来,且解也保存了,通过load的方式(具体怎么实现你看看帮助,我也没试过),将0.6s的网格及解均load,然后通过网格创建几何体,然后重新剖分,就可以restart了

具体实现你可以参考下面的例子,comsol自己的,里面的更具有代表性,当初我弄的那个只是小儿科,只是自己瞎摸索的而已

你可以注册一个comsol网站上的账号,里面有ALE的电子运动的例子(有源代码),比我的例子更好,我做的只是阐述一个思路,在运动过程中不断的重新划分运动区域内的网格(和其它软件的band差不多含义)
http://www.comsol.com/
上这个网站搜索ALE

有很多信息,我贴出其中一个
http://www.comsol.com/community/exchange/17/
注册下应该可以下载的,不用是正版用户

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-10-26 20:13:54 | 显示全部楼层 来自 法国
谢谢,非常感谢!所谓答疑解惑啊。
回复 不支持

使用道具 举报

发表于 2010-10-27 14:05:52 | 显示全部楼层 来自 江西南昌
版主好强。。膜拜
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-6 01:32:18 | 显示全部楼层 来自 法国
非常奇怪。我按照flyingmind 版主的指示,一步步做。到达stop 条件后,停下来,另存一个文档,然后(1)从mesh→Create Geometry From Mesh,(2)重新画网格,(3)修改计算开始时间,restart.

但为什么有时候好使,有时候就会出现Failed to find consistent initial value呢?

非常奇怪。可能是算的流体,对网格质量要求相当高,有时候最小网格质量为0.75都有可能不收敛!一个后果就是,每次的计算时间只能推进一点点,变形也小,重新画网格时“似乎”就必须很细,否则就是Failed to find consistent initial value。不知道版上有没有遇到这个问题的大侠?

看来得弄成自动的了!这样在GUI下手工做,实在不行啊。
回复 不支持

使用道具 举报

发表于 2010-11-6 13:51:17 | 显示全部楼层 来自 浙江杭州
确实需要自动的,通过脚本的方式实现
GUI只能简单的验证一下remesh的思路而已
就像其他有限元软件一样,每一个时间步都需要remesh,这在comsol的GUI下几乎不可能
顺便说一下,瞬态分析(带移动网格的),移动网格部分的剖分质量以及瞬态分析的步长对瞬态分析的结果以及收敛性可能都会有影响,所以你最好在脚本下实现
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-7 13:18:43 | 显示全部楼层 来自 法国
flyingmind 版主:谢谢!对于COMSOL我是新手,脚本这种高级技巧更是没弄过。是得好好学习了!

初步看了你指点的那个例子,有几个地方不明白。归纳为一句话:假设我现在在GUI下面已经分成好多段把一个问题算完了,现在想把这个过程通过脚本来实现,具体该怎么做?

初步的想法是:
把其中的一个算例先保存为.m文件,找到“从网格创建实体-重新划分网格-restart”的那一段,然后让这一过程按照某个标准实行循环。但如何弄呢?

TBE版主曾经给了个例子,但没有细节。现在的想法是,先去把那些命令什么的熟悉熟悉。有问题再上来请教。

再次谢谢!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-24 16:59:15 | 显示全部楼层 来自 法国
6# Flyingmind版主这句:“顺便说一下,瞬态分析(带移动网格的),移动网格部分的剖分质量以及瞬态分析的步长对瞬态分析的结果以及收敛性可能都会有影响,所以你最好在脚本下实现。”

真是真知灼见啊。

我现在弄的那个问题就屡屡碰到这个问题。当然,我现在还是在GUI下面试试。确实发现上述现象,所以每次都要“试错”几次才能找到能够继续算下去的求解器设置。

本质上讲,应该是任意的stop condition下,满足这一条件停止程序下来,remesh+restart就可以继续算下去。但试下来,却是有的可以继续,有的就出错(大部分都是Failed to find consistent initial condition,就是前一个停止时刻的计算结果作为后面重新开始计算的初始条件,但好像这个没有“传递”好)。

为什么?现在不知道是COMSOL自己内部的问题,还是自己有哪里确实没有掌握。比较迷茫。因为,在GUI下面试算都这样,如果在MATLAB下面写脚本,该怎么写那个循环呢?问题太大了!

有没有动网格高手,也碰到过这样类似的问题?谢谢指点一下啊!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 14:37 , Processed in 0.039281 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表