24小时热门版块排行榜    

查看: 9079  |  回复: 36
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

duandiancqu

金虫 (初入文坛)

[求助] UDF中DEFINE_ADJUST宏中使用C_UDSI_G 已有5人参与

我在用DEFINE_ADJUST宏时,只要加上C_UDSI_G(c,t,0),就提示错误,
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.

将C_UDSI_G()替换成常数时,程序能够执行,是不是在这种情况下有什么要求啊,那位大神给我解释下,很纠结。
程序代码如下:
DEFINE_ADJUST(mhd_adjust,d)
{
        Thread *t;
        cell_t c;

        if (! Data_Valid_P())
        return;

        thread_loop_c(t,d)
        {
                begin_c_loop(c,t)
                {
                                               
                        C_UDMI(c,t,0)=-1*C_UDSI_DIFF(c,t,0)*C_UDSI_G(c,t,0)[0];
                        C_UDMI(c,t,1)=-1*C_UDSI_DIFF(c,t,0)*C_UDSI_G(c,t,0)[1];
                        C_UDMI(c,t,2)=-1*C_UDSI_DIFF(c,t,0)*C_UDSI_G(c,t,0)[2];
                }
                end_c_loop(c,t)
        }
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

759599290

银虫 (小有名气)

【答案】应助回帖

最近我也测试了使用DEFINE_ADJUST宏来获得某一变量的二阶导数。心得如下:
1、梯度变量在FLUENT计算过程中是暂存变量,计算完成后将自动释放。如果要获取,需使用如下方法强制求解器保存梯度变量已供后用:
在FLUENT主窗中输入:solve--set--expert,出现的是否保存梯度变量询问语句回答为yes
2、梯度变量在首次计算中是不存在的。即使在计算之前,UDS已经使用一定方法进行过初始化,UDS_G仍将是空值,在第一步计算时内存中不存在这一变量,因此无论如何设置,第一步计算都不能调用C_UDSI_G宏。计算进行了一步或更多步之后才可以。
3、C_UDSI_G调出的变量并不一定是内部计算使用的梯度值。在某些复杂边界处,Fluent内部有其他未公开的处理函数,C_UDSI_G只在计算区域中的绝大部分里非常接近内部计算使用的梯度值。
仅个人看法,未必正确,盼有所助。
中国热管理协会特约专家,中国热设计网高级顾问,东莞鸿艺电子技术总监
23楼2014-01-13 08:50:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 37 个回答

gyctju

金虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
臭水沟: 金币+1, 谢谢交流~~ 2012-07-04 20:39:50
可以尝试在不链接udf的情况下先计算几步,使得uds0的值合理。
2楼2012-07-04 12:31:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duandiancqu

金虫 (初入文坛)

引用回帖:
2楼: Originally posted by gyctju at 2012-07-04 12:31:48
可以尝试在不链接udf的情况下先计算几步,使得uds0的值合理。

我试过了,不行。。。
3楼2012-07-04 14:45:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lucklhz

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
臭水沟: 金币+1, 谢谢交流~~ 2012-07-04 20:40:06
楼主,看你程序,你是想取你的UDS自定义标量uds0在空间个三个方向的梯度吗?还有,这种表达方式C_UDSI_G(c,t,0)[1],是不是有问题?C_UDSI_G(c,t,i)默认的在三个方向上的梯度是一样的
4楼2012-07-04 19:43:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见