24小时热门版块排行榜    

查看: 1918  |  回复: 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的回帖

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的回帖
查看全部 11 个回答

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的回帖
信息提示
请填处理意见