24小时热门版块排行榜    

查看: 1106  |  回复: 4

jiangge2585

铜虫 (小有名气)

[求助] udf 热源 初始化

求大神帮我看看我的程序哪里出问题了?这是一个激光高斯面热源程序,我的意图是:激光脉宽0.008s,频率是10Hz,就是1秒激光打10次,每次持续0.008s。但是
模拟的结果却是不能初始化,初始化时就卡主了,一直停在那。求大神救我!
这是程序:
DEFINE_PROFILE(heat_flux,t,i)
{
  real xx[ND_ND];
  real y,x,r,a,time_step;
  int n;
  face_t f;
  begin_f_loop(f,t)
  {
    F_CENTROID(xx,f,t);
    y=xx[1];
    x=xx[0];
    r=0.001;
    a=0;
    n=0;
    if(a<=1)
    {
      if(a>=0.108*n&&a<=0.108*n+0.08)
      {
        if(sqrt(x*x+y*y)<=0.001)
        {
          F_PROFILE(f,t,i)=1160*0.7/(3.1415926*r*r)*exp(-(x*x+y*y)/(r*r));
        }
        else
        {
          F_PROFILE(f,t,i)=0;
        }
      RP_Get_Real("flow-time";
      a=RP_Get_Real("flow-time";
      n=(int)a/0.108;
      }
      else
      {
        F_PROFILE(f,t,i)=0;
      }
    }
    else
    {
      Error("error reading file";
    }
  }
  end_f_loop(f,t)
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangge2585

铜虫 (小有名气)

这些天想了想,好像是begin_f_loop(f,t)
和循环程序冲突了,所以才会卡主,begin_f_loop(f,t)
扫描出一个面网格中心P,然后把符合(sqrt(x*x+y*y)<=0.001)
的P丢进循环语句执行,执行过一次之后,a和n的值就已经超出了循环条件所规定的范围,不能再进行循环了。
我就改了一下,但下面这个程序却没有发热,不知道哪有问题了?求大神救我!
#include "udf.h"
DEFINE_PROFILE(heat_flux,t,i)
{
  real xx[ND_ND];
  real y,x,r,a;
  int n;
  face_t f;
  begin_f_loop(f,t)
  {
    F_CENTROID(xx,f,t);
    y=xx[1];
    x=xx[0];
    r=0.001;
     if(sqrt(x*x+y*y)<=0.001)
      for(a=n=0;a>=0.1*n&&a<=0.1*n+0.008&&a<=1;n=(int)a/0.1)
      {
        F_PROFILE(f,t,i)=1160*0.7/(3.1415926*r*r)*exp(-(x*x+y*y)/(r*r));
        a=RP_Get_Real("flow-time";
      }
  }
  end_f_loop(f,t)
}
2楼2013-06-25 15:14:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

CFD项目承接

新虫 (初入文坛)

本帖内容被屏蔽

3楼2013-06-25 15:24:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

CFD项目承接

新虫 (初入文坛)


1592203609: 金币+1, 谢谢回帖,建议给出更为详细的答案 2013-06-25 17:58:02
本帖内容被屏蔽

4楼2013-06-25 15:27:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

perfectgem

新虫 (小有名气)

引用回帖:
2楼: Originally posted by jiangge2585 at 2013-06-25 15:14:35
这些天想了想,好像是begin_f_loop(f,t)
和循环程序冲突了,所以才会卡主,begin_f_loop(f,t)
扫描出一个面网格中心P,然后把符合(sqrt(x*x+y*y)<=0.001)
的P丢进循环语句执行,执行过一次之后,a和n的值就已经 ...

我只看出了一点就是,你用 F_CENTROID(xx,f,t),,是将网格质点中心给了xx值,,就是已经确定具体的位置了,,然后后面 a=RP_Get_Real("flow-time"。。这个的含义是获得流动时间,就是要移动,位置会发生改变,,,这两个好像同时用,会冲突吧?
5楼2014-01-06 15:49:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jiangge2585 的主题更新
信息提示
请填处理意见