24小时热门版块排行榜    

查看: 1921  |  回复: 10

phoever

新虫 (初入文坛)

[求助] fluent平移温度场的UDF问题 已有2人参与

非稳态计算,一个100mm*100mm*100mm的铁块,每1mm一个单元,希望UDF能使温度场在X轴负方向上每一个时间步移动一格。算法是先用循环把整个温度场根据坐标存到数组里,再用另一个循环重新给温度场赋值,右边界上不做改变。但是这个UDF运行就会报错。代码如下:
#include "udf.h"
DEFINE_EXECUTE_AT_END(move_temperature)
{
        Domain *d;
        real a[ND_ND];
        int x,y,z;
        real T[100][100][100];
        int i;
        Thread *t;
        cell_t c;
        d = Get_Domain(1);
        thread_loop_c(t,d)
        {
                begin_c_loop(c,t)
                {
                        C_CENTROID(a,c,t);
                        x=a[0]*1000+49.5;
                        y=a[1]*1000+49.5;
                        z=a[2]*1000+49.5;
                        T[x][y][z]=C_T(c,t);
                }
                end_c_loop(c,t)
        }
        thread_loop_c(t,d)
        {
                begin_c_loop(c,t)
                {
                        C_CENTROID(a,c,t);
                        x=a[0]*1000+49.5;
                        y=a[1]*1000+49.5;
                        z=a[2]*1000+49.5;
                        if(x!=49.5) C_T(c,t)=T[x+1][y][z];
                }
                end_c_loop(c,t)
        }
}

这是报错信息,设置的残差为1e-06。
Updating solution at time levels N and N-1.
done.
  iter continuity x-velocity y-velocity z-velocity     energy     time/iter
     1 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 9.3887e-06  0:00:19   19
!    2 solution is converged
     2 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 5.7086e-07  0:00:14   18

Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
Error Object: ()
请问是哪里出了问题呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

CFD_light

铁虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
想法很新颖,不过显然写错了
模拟的最高境界:同形不同理
2楼2015-07-21 10:03:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhouxman

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
x=a[0]*1000+49.5;
                        y=a[1]*1000+49.5;
                        z=a[2]*1000+49.5;
                        T[x][y][z]=C_T(c,t);
这里x y z是数组的索引,这样计算   你确保会不出现 非自然数??

可以写源项 温度场为时间的函数 即可
3楼2015-07-21 10:46:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phoever

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by zhouxman at 2015-07-21 10:46:09
x=a*1000+49.5;
                        y=a*1000+49.5;
                        z=a*1000+49.5;
                        T=C_T(c,t);
这里x y z是数组的索引,这样计算   你确保会不出现 非自然数??

可 ...

具体怎么做呢?因为温度场并不均匀,而要做的是平移温度场。如果靠计算差值来达到目的的话仍然要读取各位置的温度场。
4楼2015-07-21 14:00:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phoever

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by CFD_light at 2015-07-21 10:03:02
想法很新颖,不过显然写错了

请问哪里错了?
5楼2015-07-21 14:01:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhouxman

金虫 (小有名气)

【答案】应助回帖

引用回帖:
4楼: Originally posted by phoever at 2015-07-21 14:00:22
具体怎么做呢?因为温度场并不均匀,而要做的是平移温度场。如果靠计算差值来达到目的的话仍然要读取各位置的温度场。...

你是施加温度场还是热源?  帮助文档里面很多源项的例子  随便找一个 就可以看懂的
6楼2015-07-21 14:33:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phoever

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by zhouxman at 2015-07-21 14:33:02
你是施加温度场还是热源?  帮助文档里面很多源项的例子  随便找一个 就可以看懂的...

我想用这样施加温度场的,因为不清楚问题出在哪所以提出这个问题的。如果需要的话我也可以上传cas文件和c函数。
另外,热源项的话是用温度梯度来做吗?但是我想知道C_T_G提供的温度梯度是前差还是后差抑或是这两者的平均?我的理解是根据温度梯度算出前后两点之前温度的差值,再根据热容和体积算出需要附加的热源项,但是这样做感觉比直接施加温度场要复杂很多。
7楼2015-07-21 17:14:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhouxman

金虫 (小有名气)

引用回帖:
7楼: Originally posted by phoever at 2015-07-21 17:14:13
我想用这样施加温度场的,因为不清楚问题出在哪所以提出这个问题的。如果需要的话我也可以上传cas文件和c函数。
另外,热源项的话是用温度梯度来做吗?但是我想知道C_T_G提供的温度梯度是前差还是后差抑或是这两者 ...

没有必要上传文件,你描述一下你要做什么。
8楼2015-07-21 19:41:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phoever

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by zhouxman at 2015-07-21 19:41:14
没有必要上传文件,你描述一下你要做什么。...

这两天有事没上网
是这样的,算法的内容我上面已经说过了,想通过一个数组存储温度场,然后再根据这个数组重新给温度场赋值,理论上应该没有问题但程序会报错。我不太清楚为什么会出现这种错误因此想请教一下。
9楼2015-07-24 17:00:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhouxman

金虫 (小有名气)

引用回帖:
9楼: Originally posted by phoever at 2015-07-24 17:00:53
这两天有事没上网
是这样的,算法的内容我上面已经说过了,想通过一个数组存储温度场,然后再根据这个数组重新给温度场赋值,理论上应该没有问题但程序会报错。我不太清楚为什么会出现这种错误因此想请教一下。...

我说
                        y=a*1000+49.5;
                        z=a*1000+49.5;
                        T=C_T(c,t);
这里x y z是数组的索引,这样计算   你确保会不出现 非自然数??


这样肯定会出现非自然数的数组索引的。不出错才怪
10楼2015-07-24 21:51:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 phoever 的主题更新
信息提示
请填处理意见