找回密码
 注册
查看: 3090|回复: 4

udf 发现了问题, 能编译但是run时在fluent 显示了问题

[复制链接]
发表于 2011-5-30 23:37:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
下面这个是一个UDF的例子, 不过总是出现一个问题



下面是udf 代码:

# include "udf.h"
# define domain_ID 1

DEFINE_ADJUST(adjust_gradient, domain)
{
  Thread *t;
  cell_t c;
  face_t f;
  
  domain = Get_Domain(domain_ID);

  /* Fill UDS with the variable. */  
  thread_loop_c (t,domain)
    {
       begin_c_loop (c,t)
         {
           C_UDSI(c,t,0) = C_DUDX(c,t);  /× 问题貌似在这出现了, 求二阶导数, 但是出现问题了×/
         }
       end_c_loop (c,t)
    }
   
/* thread_loop_f (t,domain)
    {
       if (THREAD_STORAGE(t,SV_UDS_I(0))!=NULL)
       begin_f_loop (f,t)
         {
           F_UDSI(f,t,0) = F_VOF(f,t);  
         }
       end_f_loop (f,t)
    }
*/
}

/*DEFINE_ON_DEMAND(store_gradient)
{
  Domain *domain;
  cell_t c;
  Thread *t;

  domain=Get_Domain(1);
  
  /* Fill the UDM with magnitude of gradient. */
/*  thread_loop_c (t,domain)
    {
       begin_c_loop (c,t)
         {
           C_UDMI(c,t,0) = NV_MAG(C_UDSI_G(c,t,0));
         }
       end_c_loop (c,t)
    }
}
*/

下面是出现的问题, 在fluent 显示的

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: #f



有没有前辈指导这是什么问题啊。

[ 本帖最后由 chenzhaolin 于 2011-5-30 16:15 编辑 ]
发表于 2011-5-31 09:32:45 | 显示全部楼层
迭代第一步梯度还没储存,所以出错的。可以用如下语句检测梯度是否已经存储。
if(NULL!=THREAD_STORAGE(t,SV_UDSI_G(0))
{你的正常代码}
else
{梯度未保存时候的临时解决方案,一般只在迭代第一步才会用到}

其中,0代表UDS的号码,如果你的UDS序号不是0,要相应修改。
发表于 2011-5-31 09:32:45 | 显示全部楼层
迭代第一步梯度还没储存,所以出错的。可以用如下语句检测梯度是否已经存储。
if(NULL!=THREAD_STORAGE(t,SV_UDSI_G(0))
{你的正常代码}
else
{梯度未保存时候的临时解决方案,一般只在迭代第一步才会用到}

其中,0代表UDS的号码,如果你的UDS序号不是0,要相应修改。
 楼主| 发表于 2011-5-31 19:55:19 | 显示全部楼层
恩 明白了, 对了,求二阶导数时, 要同时用UDS 和UDM 吗, 就是增加一个量 然后在储存 是这样吗, 还是用C_UDSI 这个就行了
发表于 2020-10-3 18:39:22 | 显示全部楼层
检测UDS梯度不应该用这个宏吗:T_STORAGE_R_NV
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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