24小时热门版块排行榜    

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

yxy657828314

新虫 (初入文坛)

[求助] udf编程问题已有2人参与

最近在使用udf进行编程,主要使用两种宏,difine和profile,程序目的主要是截取三维模型进出口参数利用一维进行计算,三维和一维不断进行相互参数互换。
在difine宏里面插入一部分C++的程序,但是fluent迭代的时候就卡机了,不知道是因为什么原因,想问一下是否是因为C++程序里面使用了do-while语句。
下面是我的源程序
#include "udf.h"
real NV_VEC(A);
real avg_tempout;
real avg_tempin;
real sum_T_A=0.0;
real sum_A=0.0;
real sum_V_A=0.0;
real V2;
real V1;
Thread *thread_out;
Thread *thread_in;
face_t f;
Domain *domain;
    int i;
    int j;
        int k;
        real q[200];
        real F[200];
        real F1[200];
        real F2[200];
        real Y[200];
        real Fmax;
        real pj[200];
        real Ar;   
        real Aj;  
        real vj;   
        real zsxs;
        real dpj[200];
        real Ck[3][6];  
        real ph[6];  
        real R[6];   
        real G;
        real Q[6];   
        real fjts[6];   
        real hfy;
        real f1;   
        real f2;   
        real Ar=80;
        real Aj=0.8;
        real vj=30;
        real zsxs=1;
        real Ck[3][6]={0,0,0,0,0,0,0,1,0,1,-1,0,0,0,1,1,0,-1};
        real R[6]={0,0.02,0.02,0.01,0.02,0.02};
        real fjts[6]={0,6,12,0,0,0};
        real Ph[6]={0,0,0,0,0,0};
        real Q[6]={0,295,20,15,5,280};
DEFINE_ADJUST(inlet_T,d)   
{
        domain=Get_Domain(1);
    thread_in=Lookup_Thread(domain,6);
    begin_f_loop(f,thread_in)
{
        F_AREA(A,f,thread_in);
    sum_A+=NV_MAG(A);                 
    sum_T_A+=NV_MAG(A)*F_T(f, thread_in);
}
    end_f_loop(f,thread_in)
    avg_tempin=sum_T_A/sum_A;
   
}
DEFINE_ADJUST(inlet_v,d)   
{
domain=Get_Domain(1);
thread_in=Lookup_Thread(domain,6);
begin_f_loop(f,thread_in)
{
  F_AREA(A,f,thread_in);
  sum_A+=NV_MAG(A);
  sum_V_A+=NV_MAG(A)*F_W(f,thread_in);
}
end_f_loop(f,thread_in);
V1=sum_V_A/sum_A;

}
DEFINE_ADJUST(outlet_T,d)   
{domain=Get_Domain(1);
thread_out=Lookup_Thread(domain,5);
begin_f_loop(f,thread_out)
{
        F_AREA(A,f,thread_out);
sum_A+=NV_MAG(A);                 
sum_T_A+=NV_MAG(A)*F_T(f, thread_out);
}
end_f_loop(f,thread_out)
avg_tempout=sum_T_A/sum_A;

}
DEFINE_ADJUST(outlet_v,d)   
{
domain=Get_Domain(1);
thread_out=Lookup_Thread(domain,5);
begin_f_loop(f,thread_out)
{
  F_AREA(A,f,thread_out);
  sum_A+=NV_MAG(A);
  sum_V_A+=NV_MAG(A)*F_W(f,thread_out);
}
end_f_loop(f,thread_out);
V2=sum_V_A/sum_A;

        f1=101000*29/8.314/avg_tempin;   
      f2=101000*29/8.314/avg_tempout;   
    Ph[1]=0.5*f1*V2*V2-0.5*f2*V1*V1+0.5*9.8*12*f1-0.5*9.8*12*f2;   
for(i=1;i<=200;i++)
                F=0.0;
        for(i=1;i<=200;i++)
                F1=0.0;
        for(i=1;i<=200;i++)
                F2=0.0;
        for(i=1;i<=200;i++)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                Y=0.0;
        for(i=1;i<=200;i++)
                q=10000.0;
        for(i=1;i<=200;i++)
                pj=0.0;
   for(i=1;i<=5;i++)   
   {
   pj=fjts*(-1.2*vj*Aj*zsxs*fabs(Q)/Ar/Ar+1.2*vj*Aj*zsxs*vj/Ar);
   dpj=fjts*(-1.2*vj*Aj*zsxs/Ar/Ar);}
       do{for(i=1;i<=2;i++)   
         {  F=0;
        Y=0;       
        for(j=1;j<=5;j++)
                {
          F=F+Ck[j]*R[j]*Q[j]*fabs(Q[j])-Ck[j]*pj[j];
       Y=Y+2*Ck[j]*Ck[j]*R[j]*fabs(Q[j])-Ck[j]*Ck[j]*dpj[j];}
       q=-F/Y;
    for(j=1;j<=5;j++)
        {if(Ck[j]>0)
                Q[j]=Q[j]+q;
         else if(Ck[j]<0)
                Q[j]=Q[j]-q;
        }
       
                F1=0;      
                F2=0;
                for(j=1;j<=5;j++)        
                {if(Ck[j]/Q[j]>0)
                F1=F1+Ck[j]*R[j]*Q[j]*fabs(Q[j]);}
                for(j=1;j<=5;j++)
                {if(Ck[j]/Q[j]<0)
                F2=F2+Ck[j]*R[j]*Q[j]*fabs(Q[j]);}

                for(j=1;j<=5;j++)        
                {if(Ck[j]*Ph[6]<0)
                F1=F1-Ck[j]*Ph[6];}
                for(j=1;j<=5;j++)
                {if(Ck[j]*Ph[6]>0)
                F2=F2-Ck[j]*Ph[6];}
       
                for(j=1;j<=5;j++)      
                {if(Ck[j]*pj[j]<0)
                F1=F1-Ck[j]*pj[j];}
                for(j=1;j<=5;j++)
                {if(Ck[j]*pj[j]>0)
                F2=F2-Ck[j]*pj[j];}
        for(j=1;j<=5;j++)      
        { pj[j]=fjts[j]*(-1.2*vj*Aj*zsxs*fabs(Q[j])/Ar/Ar+1.2*vj*Aj*zsxs*vj/Ar);
         dpj[j]=fjts[j]*(-1.2*vj*Aj*zsxs/Ar/Ar);
        }
       }
   Fmax=0;
        for(k=1;k<=2;k++)
       {if(fabs(fabs(F1[k]/F2[k])-1)>Fmax)
                Fmax=fabs(fabs(F1[k]/F2[k])-1);
        }
        } while(Fmax>0.0001);     
DEFINE_PROFILE(in,thread,position)
{
         
begin_f_loop(f,thread)
{
  if(fabs((Q[1]-295)/295)>0.1)
  F_PROFILE(f,thread,position)=Q[1];
  else
  F_PROFILE(f,thread,position)=Q[1]/50;     
  Message("\\nQ = %g\\n",Q[1]);
}
end_f_loop(f,thread)
         
}
DEFINE_PROFILE(out,thread,position)
{
         
begin_f_loop(f,thread)
{
          if(fabs((Q[1]-295)/295)>0.1)
  F_PROFILE(f,thread,position)=Q[1];
  else
  F_PROFILE(f,thread,position)=Q[1]*Q[1]/80/80;   
          Message("\\nQ = %g\\n",Q[1]);
}
end_f_loop(f,thread)
         
}

麻烦大神帮忙看看是因为什么原因程序不能正常运行
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
3楼2016-06-23 09:07:42
已阅   申请仿真EPI   回复此楼   编辑   查看我的主页
查看全部 9 个回答

mycc

专家顾问 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
do-while语句是可以用的,UDF文件可以自己调试,看看问题出在什么地方
项目汇总:http://www.cfluid.com/forum.php?mod=viewthread&amp;tid=114340&amp;extra=
2楼2016-06-23 08:07:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小七工作室1

新虫 (著名写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
月只蓝: 金币-100, 应助指数-2, 屏蔽内容, 违规存档, 多次用完全一样、无实质性帮助的内容,回复不同应助帖! 2017-03-24 11:15:47
本帖内容被屏蔽

4楼2016-06-24 08:56:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yxy657828314

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by mycc at 2016-06-23 08:07:09
do-while语句是可以用的,UDF文件可以自己调试,看看问题出在什么地方

UDF文件调试是没有问题的,但是FLUENT选择初始化的时候程序就卡了,没有办法进行迭代输出数据
5楼2016-06-27 09:30:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见