24小时热门版块排行榜    

查看: 1995  |  回复: 0

杀人者武三郎

新虫 (小有名气)

[求助] 并行计算udf

昨天下午开始着手并行计算,遇到很多问题,从64位系统编译udf,到单机多核计算的设置,晚上终于能算了。但是上午一看结果,动网格在动了一个周期之后就没有运动了。这个udf是单核计算的udf,并行计算下需要修改吗?udf如下:

#include <stdio.h>
#include "udf.h"
//调用fluent udf头文件
//udf.h中的运动控制子程序
DEFINE_CG_MOTION(finright, dt, vel, omega, time, dtime)
// finright在udf里的名字
{  
//# define PI 3.1415926

   real freq=0.3;
   real T = 1.0/freq;

//定义上下摇翼前后平均值(初值)
   real faiLC=0.0*M_PI/180;
   real faiFEC=0.0*M_PI/180;
   real faiFLC=0.0*M_PI/180;
//定义上下摇翼前后幅值
   real faiLA=20.0*M_PI/180;
   real faiFEA=32.4406*M_PI/180;
   real faiFLA=0.0*M_PI/180;
//上下相对摇翼的相位差
   real dfaiL=0.0*M_PI/180;
//前后相对摇翼的相位差
   real dfaiFL=0.0*M_PI/180;
//前后相对摇翼的相位差
   real dfaiFE=90.0*M_PI/180;
//35度的角fai,翼型初始时y*轴与固定坐标系y轴的夹角   
   real fai=0.0*M_PI/180;
//faiL=faiLC-faiLAcos(w*t+dfaiL)当t=0时的faiL用faiLini表示
   real faiLini;
//faiFL=faiFLC-faiFLAcos(w*t+dfaiFL)当t=0时的faiFL用faiFLini表示   
   real faiFLini;
//摇翼角速度
   real omegaFE;
//上下拍翼角速度
   real omegaL;
//前后拍翼角速度
   real omegaFL;
//上下拍翼角度
//   real faiL;
//摇翼角度
   real faiFE;
//前后拍翼角度
   real faiFL;


  
          
/* reset velocities */
//初始化速度和角速度
  NV_S (vel, =, 0.0);
  NV_S (omega, =, 0.0);
  // 定义
/*faiFE=faiFEC-faiFEA*cos(2*M_PI*freq*time+dfaiFE);
omegaFE=faiFEA*2*M_PI*freq*cos(2*M_PI*freq*time+dfaiFE);
omegaL=faiLA*2*M_PI*freq*cos(2*M_PI*freq*time+ dfaiL);*/
//
//faiLini=faiLC-faiLA*cos(dfaiL);

  if (!Data_Valid_P ())
    return;

// 在0~T/4时间内将faiL转到faiLini,即先将翼转到初始的位置
// 这里实际就是绕x星转faiLini角,下面的程序就是要找出在固定坐标系下怎么转得到这个结果
// x星=cosfai*x+sinfai*y
// x星的单位矢量=cosfai*i+sinfai*j
// w=wx星*x星的单位矢量
// 现在未知的是wx星,需要wx星在0~T/4内积分=faiLini
// 试凑出wx星=faiLini*w*coswt
// 所以w=faiLini*w*coswt*cosfai*i+faiLini*w*coswt*sinfai*j
// 实际上认为t=0时,faiL=faiLini,但模型初始不是的
// T周期w=2pi/T
if (time >=0 && time<0.25*T)
{
         
            
            //x轴omega[0],y轴omega[1],z轴omega[2]
            faiFEini= faiFEC+faiFEA*sin(dfaiFE);
            faiFLini=faiFLC+faiFLA*sin(dfaiFL);
            
omega[0]= faiFLini*2.0*M_PI*freq*cos(2.0*M_PI*freq*time)*sin(faiFEini);
omega[1]= faiFEini*2.0*M_PI*freq*cos(2.0*M_PI*freq*time);
omega[2]= faiFLini*2.0*M_PI*freq*cos(2.0*M_PI*freq*time)*cos(faiFEini);

         
}
// 运动控制
    if (time >=0.25*T)
         
         
           {
                            faiFE=faiFEC+faiFEA*sin(2*M_PI*freq*(time-0.25*T)+ dfaiFE);
                                faiFL=faiFLC-faiFLA*sin(2*M_PI*freq*(time-0.25*T)+dfaiFL);
                           omegaFE=faiFEA*2*M_PI*freq*cos(2*M_PI*freq*(time-0.25*T) + dfaiFE);
                                omegaFL=faiFLA*2*M_PI*freq*cos(2*M_PI*freq*(time-0.25*T)+dfaiFL);
                                omegaL=faiLA*2*M_PI*freq*cos(2*M_PI*freq*(time-0.25*T));

            omega[0]=-omegaFE*sin(fai)+omegaFL*cos(fai)*sin(faiFE)+omegaL*cos(faiFL)*cos(faiFE)*cos(fai)-omegaL*sin(faiFL)*sin(fai);
                        omega[1]=omegaFE*cos(fai)+omegaFL*sin(faiFE)*sin(fai)+omegaL*cos(faiFL)*cos(faiFE)*sin(fai)+omegaL*sin(faiFL)*cos(fai);
                        omega[2]=omegaFL*cos(faiFE)-omegaL*cos(faiFL)*sin(faiFE);      

           }
  
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 学员ev57BJ 的主题更新
信息提示
请填处理意见