| 查看: 2006 | 回复: 2 | |||
princekeal银虫 (小有名气)
|
[求助]
有没有精通FLUENT并行计算过程中数据交换的大神?请教一下!
|
|
楼主在模型中启用了VOF模型,并且使用了并行计算,启用了6个进程。 现在楼主需要寻找模型中距离某一个点(这个点是虚拟的,并不在模型中)最近的点。这个最近点的坐标将会用到后续的source中。 在并行计算中每个部分都是独立计算的,各个部分都有自己的一套变量,相互不会影响。通过简单的loop宏楼主可以找到每个部分距离“某一点”最近的点和对应的距离。 这样通过比较这六个距离的大小,就能找到真正的最近点了。这个点可能位于任何一个node中。 但是楼主需要这个点的坐标进行进一步的计算,所以必须把这个点的坐标传递到其他node中才行。 按照FLUENT中的说明,只有node0才能向host节点传递数据,所以楼主希望这样实现把位置坐标传递到其他node中: nodeX----》node0-----》host------》其他所有node(如果最近点恰好在node0中则只需要node0-----》host------》其他所有node) 但是在实际计算过程中一开始计算程序就崩溃,不知道问题出现在哪…… 下面是楼主编写的UDF: DEFINE_ADJUST(heatinput_control,domain) { real EFFI=0.65; /*EFFI是理论上想达到的热输入水平*/ real GSUMI,Gdmin,dmin=10; real center[3]; int i=N_ITER; int N; #if !RP_HOST Thread *t,**pt; cell_t c; real SUMI=0,time=CURRENT_TIME,temp,vloss,temp0=300,vn,d,h=0.002; real x[ND_ND]; #endif #if !RP_HOST thread_loop_c(t,domain) {begin_c_loop_int(c,t) { SUMI+=C_VOLUME(c,t)*C_UDMI(c,t,12); } end_c_loop_int(c,t)} #if RP_NODE GSUMI=PRF_GRSUM1(SUMI); #endif #endif node_to_host_real_1(GSUMI); #if !RP_NODE if(GSUMI>(1.01*0.5*EFFI*U*I)) EFF=EFF*0.9952; else if(GSUMI<=(1.01*0.5*EFFI*U*I)&&GSUMI>=(0.99*0.5*EFFI*U*I)) EFF=EFF; else EFF=EFF*1.00478; if(i%10==0) {Message("GSUMI=%f\n",GSUMI); Message("EFF=%f\n",EFF);} #endif host_to_node_real_1(EFF); #if !RP_HOST mp_thread_loop_c(t,domain,pt) {Thread *p_phase=pt[1]; begin_c_loop_int(c,t) {C_CENTROID(x,c,t); if(C_VOF(c,p_phase)>0.3&&C_VOF(c,p_phase)<=1&&C_UDMI(c,t,5)>=1500&&x[1]>=0&&x[1]<=0.00011) { d=sqrt(pow(x[0]-v*time-x0,2)+x[1]*x[1]+pow(x[2]-0.0015-h,2)); C_UDMI(c,t,31)=d; if(d<=dmin) {dmin=d; center[0]=x[0]; center[0]=x[0]; center[1]=x[1]; center[2]=x[2]; } } } end_c_loop_int(c,t) } #if RP_NODE Gdmin=PRF_GRLOW1(dmin); Message("dmin=%f\n",dmin); Message("Gdmin=%f\n",Gdmin); #endif #endif #if RP_NODE if(!I_AM_NODE_ZERO_P) {if(dmin==Gdmin) PRF_CSEND_REAL(node_zero,center,3,myid); } #endif #if RP_NODE if(I_AM_NODE_ZERO_P) { compute_node_loop_not_zero(N) {PRF_CRECV_REAL(N,center,3,N); } PRF_CSEND_REAL(node_host,center,3,myid); free(center); } #endif #if RP_HOST compute_node_loop(N) {PRF_CRECV_REAL(node_zero,center,3,node_zero); } host_to_node_real(center,3); #endif #if !RP_HOST mp_thread_loop_c(t,domain,pt) {Thread *p_phase=pt[1]; begin_c_loop(c,t) {C_CENTROID(x,c,t); temp=C_T(c,t); vn=C_U(c,t)*C_UDMI(c,t,6)+C_V(c,t)*C_UDMI(c,t,7)+C_W(c,t)*C_UDMI(c,t,8); C_UDMI(c,t,30)=vn; if(C_VOF(c,p_phase)>0.3&&C_VOF(c,p_phase)<=1&&C_UDMI(c,t,5)>=1500) {if(vn<0) C_UDMI(c,t,29)=fabs(vn)*1.225*1006*(temp-temp0)*2*C_UDMI(c,t,5); else C_UDMI(c,t,29)=0; if(x[0]-v*time-x0>=0) C_UDMI(c,t,12)=6*EFF*I*U/(PI*(af1+ar1)*bh1)*exp(-3*(x[0]-center[0])*(x[0]-center[0])/(af1*af1))*exp(-3*x[1]*x[1]/(bh1*bh1))*2*C_UDMI(c,t,5); else if(x[0]-v*time-x0<0) C_UDMI(c,t,12)=(6*EFF*I*U/(PI*(af1+ar1)*bh1)*exp(-3*pow((x[0]-center[0])/ar1,2))*exp(-3*pow(x[1]/bh1,2)))*2*C_UDMI(c,t,5); else C_UDMI(c,t,12)=0;} else {C_UDMI(c,t,12)=0; C_UDMI(c,t,29)=0;} } end_c_loop(c,t) } #endif } |
» 猜你喜欢
谈谈两天一夜的“延安行”
已经有15人回复
EST投稿状态问题
已经有6人回复
职称评审没过,求安慰
已经有15人回复
垃圾破二本职称评审标准
已经有11人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有16人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
聘U V热熔胶研究人员
已经有10人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
三无产品还有机会吗
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求大神帮检查下一个简单的UDF
已经有13人回复
有关fluent并行计算的问题
已经有16人回复
在fluent中如何判断管内流动是湍流还是层流?
已经有13人回复
fluent计算可压流,第一步就发散
已经有21人回复
有限元 损伤模型,请教大神 急急急!
已经有13人回复
gambit导出的mesh能不能直接结合fluent和ansys中workbench计算?
已经有16人回复
大神们,我存了case 请问怎样在fluent打开计算结果
已经有4人回复
全长引物一直P不出目的条带来,请大神看一下我的引物设计有没有问题?谢啦!
已经有17人回复
fluent12.0单机并行计算
已经有10人回复
fluent封闭流场的遇到的一些问题,麻烦大家来探讨一下,求大神指点。多谢各位
已经有9人回复
如何在fluent中求解某一截面某一区域的速度平均值
已经有4人回复
有人用fluent计算过自由风扇的流场么?求大神指导
已经有15人回复
全部身家求大神帮忙解决fluent压力脉冲怎么编写UDF的问题
已经有8人回复
欧拉模型和VOF之间的差别
已经有11人回复
fluent VOF模型后处理
已经有12人回复
哪位大神有用过fluent中的DES模型的?~~~
已经有26人回复
【求助】64位fluent在Win7系统中如何设置并行计算
已经有10人回复
【求助】单机多核UDF怎么并行计算
已经有15人回复
princekeal
银虫 (小有名气)
拆弹专家
木虫 (正式写手)
- 应助: 20 (小学生)
- 金币: 2430.9
- 红花: 5
- 帖子: 416
- 在线: 187.4小时
- 虫号: 2422929
- 注册: 2013-04-17
- 性别: GG
- 专业: 流体力学













回复此楼