24小时热门版块排行榜    

查看: 3799  |  回复: 1

william985

银虫 (小有名气)

[求助] UDF函数中的Compute_Force_And_Moment的用法 已有1人参与

想要利用Compute_Force_And_Moment调用每一个迭代步计算的力和力矩信息(刚体运动,下一步要调用整个刚体所受的力与力矩),不太了解这个函数的用法。
利用它求出的是不是整个定义的动区域物体所受合力或力矩,还是整个物体所受的力和力矩需要利用cell_loop或者face_loop来循环迭加求出?
之前只找到一个小程序,个人觉得求出来的是整个动区域的物体所受合力,合力矩,直接以Compute_Force_And_Moment(d, t, CG, force, moment, FALSE)的形式调用该函数,计算结果存储到force和moment向量中,下一步直接用force[0]等进行运动方程计算。不知道理解的是否正确?求助
回复此楼
别老是眺望远方,脚下的路其实更重要
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xuwenhua625

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
william985: 金币+10, ★★★很有帮助, 昨天搜了一下,发现这个函数的帖子还是有几个讲的很不错的,感谢帮助 2016-04-07 22:38:26
这是我做过的一个case,可以参考一下
CODE:
DEFINE_CG_MOTION(foilright,dt,vel,omega,time,dtime)
{
   real x_A=0.0,y_A=0.0,x_N=0.0,y_N=0.0;
   real theta_A,theta_N;
   real omegap = 0.0;
   real presure;
   real x[ND_ND];
/////////////////////////////////////////////////////////////////////////////
    face_t f ;
    cell_t c ;
        real f_glob[ND_ND],m_glob[ND_ND],x_cg[ND_ND];
    real f1,f3,f5;
    Domain *domain= Get_Domain (1);
    Thread *tf1 = Lookup_Thread (domain, 33);
/////////////////////////////////////////////////////////////////////////////
   theta_A = -theta0*cos(w*CURRENT_TIME);
   theta_N = -theta0*cos(w*(CURRENT_TIME+CURRENT_TIMESTEP));
   omegap = (theta_N-theta_A)/CURRENT_TIMESTEP;

   x_A= Radius*cos(w*CURRENT_TIME);
   x_N= Radius*cos(w*(CURRENT_TIME+CURRENT_TIMESTEP));
   y_A= Radius*sin(w*CURRENT_TIME);
   y_N= Radius*sin(w*(CURRENT_TIME+CURRENT_TIMESTEP));
  
   vel[0] =(x_N - x_A) / CURRENT_TIMESTEP;
   vel[1] =(y_N - y_A) / CURRENT_TIMESTEP;
   omega[0] =omega[1] =0.0;
   omega[2] = omegap;
   // f1  f3  f5 output /////////////////////////////////////////////////////
   if(time>=dtime){
   x_cg[0]=DT_CG(dt)[0];
    x_cg[1]=DT_CG(dt)[1];
    Compute_Force_And_Moment (domain, tf1, x_cg, f_glob, m_glob,1);
    f1 = f_glob[0]/(0.5*rou*cord*U*U);
    f3 = f_glob[1]/(0.5*rou*cord*U*U);
    f5 = m_glob[2]/(0.25*rou*cord*cord*U*U);
    fpright=fopen("foil_right.dat", "a+");
    fprintf(fpright,"%.6f %.5f %.5f %.5f\n",CURRENT_TIME*w/(2*PI),f1,f3,f5);
        fclose(fpright);}
   //////////////////////////////////////////////////////////////////////////
  return;
}

2楼2016-04-07 13:25:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 william985 的主题更新
信息提示
请填处理意见