# Problem to parallelize a UDF

 User Name Remember Me Password
 Register Blogs Members List Search Today's Posts Mark Forums Read

 LinkBack Thread Tools Display Modes
 March 9, 2011, 07:32 Problem to parallelize a UDF #1 New Member   Pierre-Louis Schmitt Join Date: Jan 2011 Posts: 10 Rep Power: 6 Hi, I'm now facing a big issue trying to make a serial UDF parallel. This UDF is divided into 2 parts. An execute_on_demand at the begining to read and send to nodes some scheme variables and the second one that is used to simulate some reaction rates at wall. The UDF works perfectly in serial but I need now to adapt it for parallel computation. The main problem seems to be the fact that I have to call a face on a different thread. #include #define n 0.6 #define F 96485300 /*Constante de Faraday*/ real sig; /*perméabilité oxygene*/ real pinh; /*pression interne hydrogène*/ real permh; /*perméabilité hydrogène*/ real absp; /*absorption poreux*/ int valeur1; /*ID milieu poreux*/ real Pout; /*Pression partielle*/ real U; /*tension electrique equivalente*/ real dh; /*epaisseur membrane hydrogène*/ real dox; /*epaisseur membrane oxygène*/ real tau; /*toruosité*/ real por; /*porosite*/ real con; /*constricitivite*/ int absoid; int rejetoid; int abshid; int rejethid; int nspecies; real p_op; int type_diff; int therm_diff; real uref; /*vitesse reference*/ real alpha; /*viscous resistance*/ real C1; int ido; int idh; real Mm[12]; int n_species; DEFINE_ON_DEMAND(parallel_scheme) { #if !RP_NODE printf("OK_demand_1 \n"); p_op=RP_Get_Real("operating-pressure"); sig=RP_Get_Real("udf/permo"); /*sigma*/ permh=RP_Get_Real("udf/permh"); /*perméabilité hydrogène*/ absp=RP_Get_Real("udf/absp"); /*absorption poreux*/ dh=RP_Get_Real("udf/epmemh"); /*epaisseur de la membrane hydrogène*/ dox=RP_Get_Real("udf/epmemo"); /*epaisseur de la membrane oxygène*/ tau=RP_Get_Real("udf/tau"); /*tortuosite*/ con=RP_Get_Real("udf/con"); /*constrictivite*/ por=RP_Get_Real("udf/por"); /*porosite*/ absoid=RP_Get_Integer("udf/absoid"); /*ID absorption Ox*/ abshid=RP_Get_Integer("udf/abshid"); /*ID absorption Hy*/ rejetoid=RP_Get_Integer("udf/rejetoid"); /*ID rejet Ox*/ rejethid=RP_Get_Integer("udf/rejethid"); /*ID rejet Hy*/ alpha=RP_Get_Real("udf/alpha"); /*Inertial resistance*/ C1=RP_Get_Real("udf/c1"); /*Viscous resistance*/ uref=RP_Get_Real("udf/uref"); /*Vitesse de reference*/ type_diff=RP_Get_Boolean("species/multicomponent-diffusion?"); therm_diff=RP_Get_Boolean("species/thermal-diffusion?"); #endif host_to_node_real_5(sig,permh,absp,C1,p_op); host_to_node_real_7(dh,dox,tau,con,por,uref,alpha) ; host_to_node_int_4(absoid,rejetoid,abshid,rejethid ); host_to_node_int_2(type_diff,therm_diff); Domain *d=Get_Domain(1); Material *mix = mixture_material(d); /* Get mixture material */ Material *sp; int i; real mw[MAX_SPE_EQNS]; char *sp_name; Message("\nIndex\tName\tMW\n"); n_species = 0; /* Reset species counter */ /* Loop over species in mixture */ mixture_species_loop(mix, sp, i) { /* Get name of species i */ sp_name = MIXTURE_SPECIE_NAME(mix, i); /* Get species molecular weight */ mw[i] = MATERIAL_PROP(sp, PROP_mwi); Mm[i]=mw[i]; /* Display species data */ Message("%d\t%s\t%f\n", i, sp_name, mw[i]); if (mw[i] < 32. && mw[i] > 31.8 ) {ido=i;} else if (mw[i] < 2.1 && mw[i] > 2.) {idh=i;} n_species++; printf("ido : %i, identh : %i\n",ido,idh); } printf(" n_species : %i\n",n_species); printf(" n_species apres endif: %i\n",n_species); printf("OK_demand_2 \n"); /*host_to_node_int_1(n_species);*/ } /************************************************** ******************************************/ DEFINE_SR_RATE(my_rate_ox, f, t, r, mw, yi, rr) { /*Lecture des variables scheme*/ Domain *domain=Get_Domain(1); /*Controle d'entree dans la fonction*/ /*printf("OK_demand_1 \n");*/ /*Déclaration des variables locales*/ real Pin; real pos[ND_ND]; real xro[ND_ND]; real xra[ND_ND]; real epsilon = 0.000001; Thread *ta=Lookup_Thread(domain,absoid); Thread *tr=Lookup_Thread(domain,rejetoid); Thread *text; cell_t cext; Thread *tin; cell_t cin; face_t fin; face_t fr; face_t fext; face_t fa; /*printf("absoid : %i\t rejetoid : %i\n",THREAD_ID(ta),THREAD_ID(tr)); */ /*Définition des faces et thread temporaires pour les calculs*/ if (THREAD_ID(t)==absoid) { /*printf("premier if\n"); printf("por : %f\t absoid : %i\n",por,absoid); printf("declaration face ok\n");*/ F_CENTROID(pos,f,t); begin_f_loop(fr,tr) { F_CENTROID(xro,fr,tr); /*printf("xro : %f\t pos : %f\n",xro[1],pos[1]);*/ if (pos[1]>xro[1]-epsilon&&pos[1]t1*/ cext=F_C0(f,t); /*Renvoie cext cellule adjacente à fext,K->t1*/ tin=THREAD_T0(tr); /*Affecte a tin le thread adjacent à K->t2*/ cin=F_C0(fin,tr); /*Renvoie cin cellule adjacente à fx,K->t2*/ /*printf("thread tin : %i, pression : %f\n", THREAD_ID(tr),C_P(cin,tin));*/ } else if (THREAD_ID(t)==rejetoid) { F_CENTROID(pos,f,t); begin_f_loop(fa,ta) { F_CENTROID(xra,fa,ta); if (pos[1]>xra[1]-epsilon&&pos[1]t1*/ cext=F_C0(fext,ta); /*Renvoie cext cellule adjacente à fext,K->t1*/ tin=THREAD_T0(t); /*Affecte a tin le thread adjacent à K->t2*/ cin=F_C0(f,t); /*Renvoie cin cellule adjacente à fx,K->t2*/ } /*Calcul et affichage de la pression partielle interne*/ Pin = C_YI(cin,tin,ido)*C_R(cin,tin)*UNIVERSAL_GAS_CONST ANT*C_T(cin,tin)/(mw[ido]); /*printf("Pin : %f\n",Pin);*/ /*Calcul de la pression partielle, tension equivalente et production*/ Pout = C_YI(cext,text,ido)*C_R(cext,text)*UNIVERSAL_GAS_C ONSTANT*C_T(cext,text)/(mw[ido]); U = log(Pout/Pin)*UNIVERSAL_GAS_CONSTANT*C_T(cext,text)/(4*F); /*printf("Pout : %f\n",Pout);*/ /*Condition sur le thread pour absorption ou rejet*/ if (THREAD_ID(t)==absoid) { *rr = sig/dox*U/F ; /*Stockage dans les UDMI*/ C_UDMI(cext,text,0)=*rr; C_UDMI(cext,text,1)=U; C_UDMI(cext,text,2)=Pout; } else if (THREAD_ID(t)==rejetoid) { *rr = -sig/dox*U/F ; /*Stockage dans les UDMI*/ C_UDMI(cin,tin,0)=*rr; C_UDMI(cin,tin,1)=U; C_UDMI(cin,tin,2)=Pin; } } If you have any idea to resolve it. Thanks in advance Pilou

 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 Rizwan Fluent UDF and Scheme Programming 32 May 8, 2015 06:05 july Fluent UDF and Scheme Programming 3 June 20, 2010 06:56 akr FLUENT 3 August 22, 2007 07:14 speedcat FLUENT 1 May 16, 2005 03:09 chiseung FLUENT 4 January 10, 2002 10:58

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

 Contact Us - CFD Online - Top