# Parallel DPM Udf problem

 Register Blogs Members List Search Today's Posts Mark Forums Read

 May 23, 2011, 04:44 Parallel DPM Udf problem #1 New Member   Johney Grey Join Date: May 2011 Posts: 6 Rep Power: 7 Hi, all! I wrote a DPM UDF for fluent 6.3.26. But I don't know how to edit it to parallel UDF(1CPU 8cores ). Can anyone help me, plz? By the way, could this udf run on Liunx system? #include "udf.h" #include "dpm.h" #include "math.h" #include "time.h" #include "stdio.h" static int n=0; double integral(double s) // to generate a parabolic particle distribution { double a=0.0,b=5.0,mid=2.5,y=-0.004*mid*mid*mid+0.3*mid; for(;fabs(s-y)>1e-6; ) { if(s>y) { a=mid; mid=(mid+b)/2.0; } else { b=mid; mid=(a+mid)/2.0; } y=-0.004*mid*mid*mid+0.3*mid; } return mid; } DEFINE_DPM_INJECTION_INIT(init_particles,I) { Particle *p; FILE *fp; real xm[ND_ND]; double R=0.0, x=0.0, y=0.0, an=0.0,k=0.0; if(n==0)srand((unsigned)time( NULL )); k=rand()/(double)(RAND_MAX); R=integral(k); an=rand()/(double)(RAND_MAX)*2*3.1415926; x=R*sin(an)/200.0; y=R*cos(an)/200.0; Message ("\n n=%d, k=%f\n",n, k); n++; p=I->p_init; P_POS(p)[0]=x; P_POS(p)[1]=y; P_POS(p)[2]=0.0; Message ("particle position x=%f, y=%f\n", P_POS(p)[0],P_POS(p)[1]); xm[0]=P_POS(p)[0]; xm[1]=P_POS(p)[1]; xm[2]=P_POS(p)[2]; P_DIAM(p)=5e-6; P_RHO(p)=1000; P_MASS(p)=P_RHO(p)*M_PI*pow(P_DIAM(p),3.0)/6.0; P_FLOW_RATE(p)=P_MASS(p)/0.06; fp=fopen("e:\\test\\pa.txt","at"); fprintf(fp,"%f %f %f\n",R,xm[0],xm[1]); fclose(fp); }

 June 10, 2011, 04:12 #2 Member   john Join Date: Nov 2010 Posts: 50 Rep Power: 7 for parallel code you should keep #if !RP_HOST #endif and #if ! RP_NODE #endif has to be kept at appropriate places in the code. See UDF manual for more details

June 10, 2011, 08:26
#3
New Member

Johney Grey
Join Date: May 2011
Posts: 6
Rep Power: 7
Quote:
 Originally Posted by johnwinter for parallel code you should keep #if !RP_HOST #endif and #if ! RP_NODE #endif has to be kept at appropriate places in the code. See UDF manual for more details
Thanks for your reply. But I just don't know where to put them. The manual only has one page mentioned about the paralleliztion of DPM model. And it mainly talks about message output.

 June 11, 2011, 00:43 #4 Member   john Join Date: Nov 2010 Posts: 50 Rep Power: 7 HI i am not an expert, based on my knowledge i have corrected your code below #include "udf.h" #include "dpm.h" #include "math.h" #include "time.h" #include "stdio.h" static int n=0; double integral(double s) // to generate a parabolic particle distribution { #if !RP_HOST double a=0.0,b=5.0,mid=2.5,y=-0.004*mid*mid*mid+0.3*mid; for(;fabs(s-y)>1e-6; ) { if(s>y) { a=mid; mid=(mid+b)/2.0; } else { b=mid; mid=(a+mid)/2.0; } y=-0.004*mid*mid*mid+0.3*mid; } return mid; #end if } DEFINE_DPM_INJECTION_INIT(init_particles,I) { #if !RP_HOST Particle *p; FILE *fp; real xm[ND_ND]; double R=0.0, x=0.0, y=0.0, an=0.0,k=0.0; if(n==0)srand((unsigned)time( NULL )); k=rand()/(double)(RAND_MAX); R=integral(k); an=rand()/(double)(RAND_MAX)*2*3.1415926; x=R*sin(an)/200.0; y=R*cos(an)/200.0; // Message ("\n n=%d, k=%f\n",n, k); n++; p=I->p_init; P_POS(p)[0]=x; P_POS(p)[1]=y; P_POS(p)[2]=0.0; //Message ("particle position x=%f, y=%f\n", P_POS(p)[0],P_POS(p)[1]); xm[0]=P_POS(p)[0]; xm[1]=P_POS(p)[1]; xm[2]=P_POS(p)[2]; P_DIAM(p)=5e-6; P_RHO(p)=1000; P_MASS(p)=P_RHO(p)*M_PI*pow(P_DIAM(p),3.0)/6.0; P_FLOW_RATE(p)=P_MASS(p)/0.06; #endif node_to_host_real_3(R, xm[0],xm[1]); #if !RP_NODE fp=fopen("e:\\test\\pa.txt","at"); fprintf(fp,"%f %f %f\n",R,xm[0],xm[1]); fclose(fp); #endif } you may need to change some more look at carefully and change. all the best

June 11, 2011, 10:03
#5
New Member

Johney Grey
Join Date: May 2011
Posts: 6
Rep Power: 7
Quote:
 Originally Posted by johnwinter HI i am not an expert, based on my knowledge i have corrected your code below #include "udf.h" #include "dpm.h" #include "math.h" #include "time.h" #include "stdio.h" static int n=0; double integral(double s) // to generate a parabolic particle distribution { #if !RP_HOST double a=0.0,b=5.0,mid=2.5,y=-0.004*mid*mid*mid+0.3*mid; for(;fabs(s-y)>1e-6; ) { if(s>y) { a=mid; mid=(mid+b)/2.0; } else { b=mid; mid=(a+mid)/2.0; } y=-0.004*mid*mid*mid+0.3*mid; } return mid; #end if } DEFINE_DPM_INJECTION_INIT(init_particles,I) { #if !RP_HOST Particle *p; FILE *fp; real xm[ND_ND]; double R=0.0, x=0.0, y=0.0, an=0.0,k=0.0; if(n==0)srand((unsigned)time( NULL )); k=rand()/(double)(RAND_MAX); R=integral(k); an=rand()/(double)(RAND_MAX)*2*3.1415926; x=R*sin(an)/200.0; y=R*cos(an)/200.0; // Message ("\n n=%d, k=%f\n",n, k); n++; p=I->p_init; P_POS(p)[0]=x; P_POS(p)[1]=y; P_POS(p)[2]=0.0; //Message ("particle position x=%f, y=%f\n", P_POS(p)[0],P_POS(p)[1]); xm[0]=P_POS(p)[0]; xm[1]=P_POS(p)[1]; xm[2]=P_POS(p)[2]; P_DIAM(p)=5e-6; P_RHO(p)=1000; P_MASS(p)=P_RHO(p)*M_PI*pow(P_DIAM(p),3.0)/6.0; P_FLOW_RATE(p)=P_MASS(p)/0.06; #endif node_to_host_real_3(R, xm[0],xm[1]); #if !RP_NODE fp=fopen("e:\\test\\pa.txt","at"); fprintf(fp,"%f %f %f\n",R,xm[0],xm[1]); fclose(fp); #endif } you may need to change some more look at carefully and change. all the best
WOW! Thanks a lot! I'll try it.

 Thread Tools Display Modes Linear Mode

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Veera Gutti FLUENT 8 July 26, 2016 07:24 Wouter Fluent UDF and Scheme Programming 6 June 6, 2012 04:43 Jun FLUENT 1 October 26, 2011 12:49 Tim FLUENT 12 July 12, 2008 12:59 Jaroslav Kotara FLUENT 1 April 19, 2006 09:02

All times are GMT -4. The time now is 11:08.