捐赠我们 社区应用 会员列表 统计排行 邀请注册
主题 : UDF能量方程,内附程序
tangtao9842 离线
级别: 普通会员
显示用户信息 
0  发表于: 2009-07-14   
倒序阅读   全看  

UDF能量方程,内附程序

管理提醒: 本帖被 coppercj 执行加亮操作(2010-08-24)
做动网格计算,UDF能量源项程序如下,也设置了memory,source应该是加到能量方程中去了,但是计算后处理,C_UDMI(c,t,4)中得数为0,这是为什么呀?请高手指点,看看我的source有问题没?



DEFINE_SOURCE(energy,c,t,dS,eqn)
{
  double source;
  double A=5.0e+04;                   
  double time60=15e-3;           
double timecur=CURRENT_TIME+15e-3;       
double dt=timecur-time60;
  int    n=RP_Get_Integer("time-step");     
  double resis;
  double TIME=CURRENT_TIMESTEP;
  double arc14ms=-(timecur-time60)*2*pi*50;
  double VOLUME;                           
 
  //Thread *t;
  //cell_t c;
    dS[eqn]=0.0;

    temp=C_T(c,t);
    if(temp>=5000)
    {source=pow(A*sin(arc14ms),2)*C_UDMI(c,t,2)-C_UDMI(c,t,1);
     return source;}
    else if((temp>=4000)&&(temp<5000))
    {resis=10000/0.005;
     source=pow(A*sin(arc14ms),2)*resis-C_UDMI(c,t,1);
     return source;}
    else if((temp>3000)&&(temp<4000))
    {resis=10000/0.002;
     source=pow(A*sin(arc14ms),2)*resis-C_UDMI(c,t,1);
     return source;}
    else
    {source=0;
     return source;}
       
    C_UDMI(c,t,4)=source;
   
    return source;
}
tangtao9842 离线
级别: 普通会员
显示用户信息 
1  发表于: 2009-07-14   
全看  
问题大概出在前面用DEFINE_EXECUTE_AT_END(ON_DEMAND) 中,定义的)C_UDMI(c,t,2),和C_UDMI(c,t,1)没调用到DEFINE_SOURCE中来,计算后得0;不过在后处理中C_UDMI(c,t,2),和C_UDMI(c,t,1)都是有值的呀?
哪位高手提点一下C_UDMI(c,t,i)定义有什么要求吗,这个应该是存储器,为什么在source中调用无值呢?
znon 离线
级别: 普通会员
显示用户信息 
2  发表于: 2009-07-24   
全看  
  if(temp>=5000)
    {source=pow(A*sin(arc14ms),2)*C_UDMI(c,t,2)-C_UDMI(c,t,1);
    return source;}
    else if((temp>=4000)&&(temp<5000))
    {resis=10000/0.005;
    source=pow(A*sin(arc14ms),2)*resis-C_UDMI(c,t,1);
    return source;}
    else if((temp>3000)&&(temp<4000))
    {resis=10000/0.002;
    source=pow(A*sin(arc14ms),2)*resis-C_UDMI(c,t,1);
    return source;}
    else
    {source=0;
    return source;}


去掉判断中的 return source。
tangtao9842 离线
级别: 普通会员
显示用户信息 
3  发表于: 2009-07-27   
全看  
谢谢znon的解答,去掉了判断句中的return source,计算非稳态,能量方程源项如上所示,但是计算几步后就不收敛发散,出现错误,已经改过欠松弛因子,克朗特数,等等,还是不行,请问有什么好的意见, 急求
zjuCFD 离线
级别: 普通会员
显示用户信息 
4  发表于: 2009-08-02   
全看  
我觉得你应该把求source的步骤写在adjust里面,比如
define_adjust(name,d)
{
double source;
double xx,xxx,xxxx;//定义求souce时用到的变量
Thread *t;
cell c;

source=xxxxx;//计算source的表达式

C_UDMI(c,t,SOURCE)=source;//把计算得到的source值赋给传递数据的中间变量
                              //当然,你先得定义SOURCE
}

//接下去,在define source宏内,直接读取C_UDMI(c,t,SOURCE)就可以了
define_source(c,t,dS,eqn)
{
return C_UDMI(c,t,SOURCE);
}

我之前也碰到udm传值出问题的情况,基本上这样可以解决吧 ,你试试看
清空我的评分动态本帖最近评分记录: 共1条评分记录
donno 积分 +1 2010-04-08 优秀文章
隐藏评分记录
杭州流体科技有限公司
http://www.hzfluid.com
zjuCFD 离线
级别: 普通会员
显示用户信息 
5  发表于: 2009-08-02   
全看  
还有把一些常数变量都定义在最上面
杭州流体科技有限公司
http://www.hzfluid.com
znon 离线
级别: 普通会员
显示用户信息 
6  发表于: 2009-08-10   
全看  
一直没上来看。
如果解决了UDM变量储存数据的问题而且数据量级合理,剩下的就是模型或者是网格的问题。
看了一下,你的是动网格, 没做过不敢多说,可以先尝试非动网格的能量方程的模拟,如果还发散,应该是网格或者是参数选择的不合适。
tangtao9842 离线
级别: 普通会员
显示用户信息 
7  发表于: 2009-08-11   
全看  
谢谢,各位的解答。二维计算中没有太大问题,不过到三维中,出现错误
error 1000000: failed to allocate            9.68 memory
这是哪一种错误,
是不 是问题还是出现在网格上呢
tangtao9842 离线
级别: 普通会员
显示用户信息 
8  发表于: 2009-08-11   
全看  
谢谢,各位的解答。二维计算中没有太大问题,不过到三维中,出现错误
error 1000000: failed to allocate            9.68 memory
这是哪一种错误,
是不 是问题还是出现在网格上呢
云顶晓风 离线
待酒醒,春风十里柔情之时,制造些许浪漫,邀汝共跳月光之舞。
级别: 论坛版主
显示用户信息 
9  发表于: 2010-04-08   
全看  
udf确实挺难的,没有静下心,很难搞懂的。
瘦西湖畔人凄凉,
二十四桥影独只;
枝柳迎风水煽情,
满湖落叶残花荡。
icem—cfx交流群:90823071
chenruifeng 离线
级别: 注册会员
显示用户信息 
10  发表于: 2010-12-25   
全看  
回 7楼(tangtao9842) 的帖子
楼主好,我的二维计算也出现了这种情况,那个UDM在别的宏里面调用不了,请问你是怎么解决的啊!



呵呵,已解决,是我的梯度宏里面出现了负值,我一直没有注意到
[ 此帖被chenruifeng在2010-12-26 11:14重新编辑 ]
zengyu113 离线
级别: 普通会员
显示用户信息 
11  发表于: 2011-01-14   
全看  
学习了,楼主做的不错
szthu 离线
级别: 注册会员
显示用户信息 
12  发表于: 2012-12-11   
全看  
学习学习学习学习
bj2860 离线
级别: 注册会员
显示用户信息 
13  发表于: 2012-12-16   
全看  
回 4楼(zjuCFD) 的帖子
4楼说的好
dave0817 离线
级别: 注册会员
显示用户信息 
14  发表于: 2012-12-21   
全看  
学习学习学习学习
描述
快速回复

验证问题:
傲雪论坛成立于哪一年? 正确答案:2002年
按"Ctrl+Enter"直接提交