CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   FLUENT (https://www.cfd-online.com/Forums/fluent/)
-   -   Hello, everyone. I'd like to ask a question about the parallelization of DEFINE_GRID_ (https://www.cfd-online.com/Forums/fluent/248694-hello-everyone-id-like-ask-question-about-parallelization-define_grid_.html)

rabbit_1 March 27, 2023 22:39

Hello, everyone. I'd like to ask a question about the parallelization of DEFINE_GRID_
 
#include "udf.h"
#include <stdio.h>
#include "dynamesh_tools.h"
static int thread_I=13;
#define NUM_USED_UDM 7


DEFINE_GRID_MOTION(cshadow, domain, dt, time, dtime)
{

#if !RP_HOST
Thread *tf = DT_THREAD(dt);
Thread *tf_shadow = THREAD_SHADOW(tf);
Thread *t2,*t0;
Node *v;
face_t face,f,f_shadow;
cell_t c2,cell,c0;
real tui,tui1,tui2,e1,midu,p;
real ee,ee1;
real area,wall_shear_force;
real ct0,ct1,x,reliu,wendu;
real NV_VEC(V), NV_VEC(A);
int n,i=0,j=0;

SET_DEFORMING_THREAD_FLAG (THREAD_T0 (tf)); // set deforming flag on adjacent cell zone


begin_f_loop(f, tf)
{
if(PRINCIPAL_FACE_P(f,tf))
{
f_shadow=F_SHADOW(f,tf); /*get the corresponding face in the shadow thread */
ct0=C_T(F_C0(f,tf),THREAD_T0(tf));
p=C_P(F_C0(f,tf),THREAD_T0(tf));
ct1=C_T(F_C0(f_shadow,tf_shadow),THREAD_T0(tf_shad ow));//固体侧温度
F_AREA(A,f,tf);
reliu=-1.0*BOUNDARY_HEAT_FLUX(f,tf)/NV_MAG(A);

f_node_loop(f, tf, n)
{
v=F_NODE(f, tf, n);

if(NODE_POS_NEED_UPDATE(v))
{
NODE_POS_UPDATED(v);

//异相化学反应:r=(A*T的0次方*e幂(-E/RT)Pj的0.5次方)/midu,j是氧化物组分co2和h20
//tui=1500*pow(2.718,-290000/8.314/ct1)*pow(p*F_YI(f,tf,0)/18,0.5)/2000+28.3*pow(2.718,-280000/8.314/ct1)*pow(p*F_YI(f,tf,1)/44,0.5)/2000;温度指的是壁温
if(C_YI(F_C0(f,tf),THREAD_T0(tf),2)>0.0&&time<=4) //C_YI(c,t,i):species mass fraction宏,此处表示有co(i=2)生成时,开始计算壁面退移速率
{
tui1=0.75*pow(2.718,(-34880.92/ct1))*pow((p*C_YI(F_C0(f,tf),THREAD_T0(tf),0)/18.0),0.5)+0.01415*pow(2.718,(-33678.133/ct1))*pow((p*C_YI(F_C0(f,tf),THREAD_T0(tf),1)/44.0),0.5);
if(NODE_X(v)>0.124) //本案例对机械侵蚀发生区域进行限制(忽略收敛段的机械侵蚀,只考虑扩张段机械侵蚀)
{
ee=1.0*NODE_Y(v);
ee1=-1.0*pow(1.0*27.3399/23.7052,2)+1000000*ee*ee/pow(1.0*23.7052,2);//计算截面膨胀比与喷吼出口膨胀比之差
tui2=1.5*pow(ee1,0.49)*pow(2.718,-1.0*ee1)*0.001;//机械侵蚀计算公式
}
tui=tui1+tui2;
NODE_Y(v)=NODE_Y(v)+(tui1+tui2)*dtime;
}

else
{
tui=0.0;
NODE_Y(v)=NODE_Y(v)+tui*dtime;
}
}
}
C_UDMI(F_C0(f,tf),THREAD_T0(tf),2)=reliu;
C_UDMI(F_C0(f,tf),THREAD_T0(tf),3)=ct1; //存储固体侧温度
C_UDMI(F_C0(f,tf),THREAD_T0(tf),4)=ct0-ct1; //存储流体和固体侧温度差
C_UDMI(F_C0(f,tf),THREAD_T0(tf),5)=tui*1000.0;
}
}
end_f_loop(f, tf)
#endif
}

DEFINE_GRID_MOTION(c, domain, dt, time, dtime) //加载在画网格时建立的wall上 固体
{

#if !RP_HOST
Thread *tf=Lookup_Thread(domain, thread_I); //thread_I获取流体侧线指针
Thread *tf_shadow = THREAD_SHADOW(tf); //然后把指针传给固体,控制固体侧节点移动
Thread *t2,*t0;
Node *v;
Node *v_shadow;
face_t face,f,f_shadow;
cell_t c2,cell,c0;
real A[ND_ND];
real tui,tui1,tui2,ct1,ct0,p,ee,ee1;
int n,i=0;

SET_DEFORMING_THREAD_FLAG (THREAD_T0 (tf_shadow));

begin_f_loop(f, tf)
{
if(PRINCIPAL_FACE_P(f,tf))
{
p=C_P(F_C0(f,tf),THREAD_T0(tf));
f_shadow=F_SHADOW(f,tf);
ct0=C_T(F_C0(f,tf),THREAD_T0(tf));
ct1=C_T(F_C0(f_shadow,tf_shadow),THREAD_T0(tf_shad ow));

f_node_loop(f_shadow, tf_shadow, n)
{
v_shadow = F_NODE (f_shadow,tf_shadow, n);

if(NODE_POS_NEED_UPDATE(v_shadow))
{
NODE_POS_UPDATED(v_shadow);

if(C_YI(F_C0(f,tf),THREAD_T0(tf),2)>0.0&&time<=4)
{

tui1=0.75*pow(2.718,(-34880.92/ct1))*sqrt(p*C_YI(F_C0(f,tf),THREAD_T0(tf),0)/18.0)+0.01415*pow(2.718,(-33678.133/ct1))*sqrt(p*C_YI(F_C0(f,tf),THREAD_T0(tf),1)/44.0);
if(NODE_X(v_shadow)>0.124) //本案例对机械侵蚀发生区域进行限制(忽略收敛段的机械侵蚀,只考虑扩张段机械侵蚀)
{
ee=1.0*NODE_Y(v_shadow);
ee1=-1.0*pow(27.3399/23.7052,2)+1000000*ee*ee/pow(23.7052,2);//计算截面膨胀比与喷吼出口膨胀比之差
tui2=1.5*pow(ee1,0.49)*pow(2.718,-1.0*ee1)*0.001;//机械侵蚀计算公式
}

NODE_Y(v_shadow)=NODE_Y(v_shadow)+(tui1+tui2)*dtim e;
}

else
{
tui=0.0;
NODE_Y(v_shadow)=NODE_Y(v_shadow)+tui*dtime;
}
}
}
}
}
end_f_loop(f, tf)
#endif
}

Can you help me see what's wrong with this udf parallelization? Thank you very much!


All times are GMT -4. The time now is 17:47.