24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2927  |  回复: 8

scottxhx

新虫 (初入文坛)

[交流] Comsol自定义场变量,只要曾经温度T>Ts,对应场变量元素为1,一旦为1,则永久保持已有3人参与

问题:comsol能否自定义一个场变量,来标记每个网格点温度T曾经是否大于Ts,一旦某个网格点温度曾经大于Ts,该网格状态量为1,即便温度降下来了,状态量不变。

这个问题非常具有代表性,其归根结底是要定义场变量f(x,y,z,t),这个场变量依附于每一个网格,可以初始化,可被用户自定义操作。我目前发现,comsol并不能不依附任何物理场模块自定义这样的变量,退而求其次的做法是采用comsol的数学模块里的域偏微分/域常微分方程/不可逆转变/生物传热模块,这些做法逻辑是能行得通,但是求解非常不准确。采用偏微分或者常微分模块,无论是通过系数将模块数学方程u=f,还是du/dt=f这么简单的方式,其中f通过逻辑控制,即便这样,我发现comsol求解出来的u误差很大,连u=f,这里置f=1或者0,都不能严格控制计算的u=1或者0;du/dt=f的方式求解的误差更离谱,我一直定义f为正,但是u求解出来的还有一点点负值,这样就无法通过u来判断它曾经的状态。不可逆转变/生物传热一样有这样的问题,我觉得这个东西应该很简单,而且计算也不困难,不知道大家有没有什么好的方案。

还要说的是,Matlab函数我也试过,本来想把这样的状态量在matlab里定义为全局场变量,但是发现comsol送过来的网格坐标是分批的,打个比方,模型有50万网格,comsol会分好几拨送过来,也就是Matlab函数在一次时间迭代开始前会被调用好几次,而且送过来的网格批次的先后顺序也不得而知,这就无法对齐场变量元素的位置。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

landl3017

新虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
用数学模块下的事件试试?官网博客有一个恒温箱的例子,温度降到一定值就会加热

发自小木虫Android客户端
2楼2018-11-13 15:44:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

scottxhx

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by landl3017 at 2018-11-13 15:44:04
用数学模块下的事件试试?官网博客有一个恒温箱的例子,温度降到一定值就会加热

我试了一下这个事件模块怎么只能调用全局变量,比如我想写为温度的函数,运行的时候提示变量未定义
3楼2018-11-13 17:56:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

landl3017

新虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
3楼: Originally posted by scottxhx at 2018-11-13 17:56:14
我试了一下这个事件模块怎么只能调用全局变量,比如我想写为温度的函数,运行的时候提示变量未定义...

没用过事件,只是看过帮助。事件有显示事件和隐式事件。隐式事件还要配套另一个项目使用。

发自小木虫Android客户端
4楼2018-11-13 19:35:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bfamq

铁杆木虫 (著名写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
遇到这个问题的人不少,comsol中的变量都是基于全部节点的,条件改变,所有节点值都会变。除非可以调用每个节点才行。
等离子体模块教学,搜索公众号【comsol等离子体模拟】获取更多经验技巧哦
5楼2018-11-13 21:27:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

scottxhx

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by bfamq at 2018-11-13 21:27:34
遇到这个问题的人不少,comsol中的变量都是基于全部节点的,条件改变,所有节点值都会变。除非可以调用每个节点才行。

Comsol调用每个节点不是问题,主要问题在于无法获知节点编号。就像我前面说的,我尝试过一种思路,就是在matlab中定义与comsol网格节点对应的场变量,但是comsol调用matlab函数的时候,传给matlab的节点是分好几拨的,而且无法获取某一波网格节点编号。
6楼2018-11-15 11:10:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

满手灰尘

铁虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我之前也是用pde做过类似的,但没有发现你说的计算结果不准确的现象,你的结果是有多离谱,贴张图来看看

发自小木虫Android客户端
7楼2018-11-16 13:29:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

scottxhx

新虫 (初入文坛)

引用回帖:
7楼: Originally posted by 满手灰尘 at 2018-11-16 13:29:46
我之前也是用pde做过类似的,但没有发现你说的计算结果不准确的现象,你的结果是有多离谱,贴张图来看看

我在这里把系数PDE设置成u=f, 在计算过程中f只会等于0或者1,结果算完,u从-0.4~1.x多都有值,这里和状态转变速度有关系,comsol求解器对于转变速度很快的方程求解,会出现很大的人为光滑。
8楼2018-11-21 16:46:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

满手灰尘

铁虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
内容已删除
9楼2018-11-25 22:47:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 scottxhx 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见