
[Sponsors] 
January 1, 2011, 02:17 
Thank Computer guy

#21 
New Member
masters
Join Date: Sep 2010
Posts: 5
Rep Power: 8 
Sponsored Links


Sponsored Links 
January 1, 2011, 03:01 

#22 
Senior Member
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 9 
Manohar:
1) Numerical integration: http://en.wikipedia.org/wiki/Numerical_integration 2) Custom field functions in Fluent: http://my.fit.edu/itresources/manual...g/node1221.htm If you have an analytical representation of Peq as a function of temperature, you will be able to (without a UDF) have Fluent calculate it for you (#2). You can, under the contours of the solution, examine every custom field function. You can also output the value of the custom field function using a surface or volume monitor. Then, using #1, you can derive a value for C as a function of time. Regards and Happy New Year, ComputerGuy 

January 1, 2011, 19:01 

#23 
Member
sarah
Join Date: Aug 2010
Posts: 41
Rep Power: 8 
ِDear ComputerGuy
I tried it but there are some errors when I want to initialize ,of course when I hook another udfs except udfs of viscous and inertial resistances , there is not any error and its done , I think maybe its error is related to C_UDMI(c,t,0), in fluent ,in fluid panel there are 2 directions of viscous and inertial resistances of course I give the same value to both of them while I assume porosity is constant , I saw C_POR in a literature which related to porous media ! Can you some advice about it Happy New Year cheers 

January 1, 2011, 19:56 

#24 
Senior Member
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 9 
This is unchecked. It doesn't use C_UDMI, and is not as efficient as it could be. However, I think it does what you want. I have looked through the Fluent manual and can't find C_POR, so if you must use it, I'm afraid you're on your own. Let us all know where you find it and if it works.
Code:
#include "udf.h" DEFINE_PROFILE(porosity_profile,t,i) { real x[ND_ND]; real y; cell_t c; begin_c_loop(c,t) { C_CENTROID(x,c,t); y=x[1]; if((y==1.)  (y==1.85)) { F_PROFILE(c,t,i)=0.39; } if ((y>1.) && (y<=1.425)) { F_PROFILE(c,t,i)=0.39*(1.+1.05*exp(100.*(y1.)/0.06)); } if ((y>1.425) && (y<1.85)) { F_PROFILE(c,t,i)=0.39*(1.+1.05*exp(100.*(1.85y)/0.06)); } } } DEFINE_PROFILE(C2,t,i) { real x[ND_ND]; real Dp; real c_2; real y; real por; cell_t c; Dp=100.e6; begin_c_loop(c,t) { C_CENTROID(x,c,t); y=x[1]; if((y==1.)  (y==1.85)) { por=0.39; c_2=3.5*(1  por)/(Dp*pow(por,3.)); } if ((y>1.) && (y<=1.425)) { por=0.39*(1.+1.05*exp(100.*(y1.)/0.06)); c_2=3.5*(1  por)/(Dp*pow(por,3.)); } if ((y>1.425) && (y<1.85)) { por=0.39*(1.+1.05*exp(100.*(1.85y)/0.06)); c_2=3.5*(1  por)/(Dp*pow(por,3.)); } F_PROFILE(c,t,i)=c_2; } } DEFINE_PROFILE(C1,t,i) { real x[ND_ND]; real Dp; real c_1; real y; real por; cell_t c; Dp=100.e6; begin_c_loop(c,t) { C_CENTROID(x,c,t); y=x[1]; if((y==1.)  (y==1.85)) { por=0.39; c_1=pow(Dp,2.)*pow(por,3.)/(150.*pow((1.por),3.)); } if ((y>1.) && (y<=1.425)) { por=0.39*(1.+1.05*exp(100.*(y1.)/0.06)); c_1=pow(Dp,2.)*pow(por,3.)/(150.*pow((1.por),3.)); } if ((y>1.425) && (y<1.85)) { por=0.39*(1.+1.05*exp(100.*(1.85y)/0.06)); c_1=pow(Dp,2.)*pow(por,3.)/(150.*pow((1.por),3.)); } F_PROFILE(c,t,i)=c_1; } } Last edited by ComputerGuy; January 2, 2011 at 18:44. Reason: Took out a reference to a UDMI that was not needed, corrected an issue with variable naming 

January 2, 2011, 10:35 

#25 
Member
sarah
Join Date: Aug 2010
Posts: 41
Rep Power: 8 
Dear ComputerGuy
I owe thanks to you whose advice and guidance have helped me so much in my project . Really I had to change your code a little , I just eliminated : C_UDMI(c,t,0)=F_PROFILE(c,t,i) , F_PROFILE(c,t,i)=c_2, F_PROFILE(c,t,i)=c_1; from your code andafter that it ran. I don’t know why with these while in initialization , fluent reports error But without these there is not any problem! By the way I don’t have any bias to use C_POR ! I just saw it in a literature . Thank you and wish the best for you . Sarah 

January 2, 2011, 11:22 

#26  
Senior Member
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 9 
Sarah,
I'm glad it worked. I left C_UDMI(c,t,0)=F_PROFILE(c,t,i); in the code accidentally, and you're right to take it out. However, in the C1 and C2 code, if you take out the line F_PROFILE(c,t,i)=c_2; and F_PROFILE(c,t,i)=c_1;, Fluent will not change your viscous and inertial resistances, and the result will probably not be correct according to the physics you're trying to impose. Make sure you doublecheck your results. Also, make sure you change Dp; I have assumed a particle diameter of 100 microns, but surely your particles are of a different size. Regards, ComputerGuy Quote:


January 2, 2011, 13:12 

#27 
Member
sarah
Join Date: Aug 2010
Posts: 41
Rep Power: 8 
Dear ComputerGuy
You are right but in your code , inside loops you indicated c_1 and c_2 instead of F_PROFILE , in inverse of this statement yes you are right . really how can I chek the result of udfs ? and If I want to plot temp of particles of porous medium how can I specify its zone surface? Yes, I changed the value of Dp to 0.06 . Best regards Sarah 

February 1, 2011, 21:57 

#28 
New Member
Oky Andytya
Join Date: Nov 2010
Posts: 26
Rep Power: 8 
Hi everyone,
I'm trying simulation porous media in rectangular channel, but the result isn't suitable with any research. So, would you help me. I wish someone can check my simulation and give some reports if there is something wrong. Thank you for your help. Please send your email, than i will send you my works to to your email. my email: oky.andytya.net@gmail.com Regrads, OKY Andytya P note: I use ANSYS Fluent 6.3 [CFD] 

January 7, 2012, 09:16 

#29 
New Member
Join Date: Jan 2012
Posts: 10
Rep Power: 7 
Hi Computer Guy,
I have a problem about my UDF code. You mentioned that "Fluent doesn't automatically track what you're looking for, you could always create a few UserDefined Memory Locations to track values from a previous time step." I checked the UDF MANUAL and found that F_UDMI and C_UDMI store the face value and cell value respectively. If I want to store a calculation result from the previous step, can I use this Macros? Here's part of my code. Should i use C_UDMI or F_UDMI? Code:
Q_tot=C_UDMI /*recall the result from previous time*/ thread_loop_c(t,d) { begin_c_loop(c,t) { volume=C_VOLUME(c,t); /* get cell volume */ templ=C_T_M1(c,t); tempn=C_T(c,t); /*Get cell tempertuare*/ Q=cp*density*volume*(tempntempl); Q_tot +=Q; } end_c_loop(c,t) } C_UDMI =Q_tot;/*store the new result to UDM*/ Best Regards Quote:


January 8, 2012, 13:19 

#30 
Senior Member
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 9 
Molixu,
First: You have posted this question in several threads. My suggestion, to help those who are trying to help you, is to please stop posting the same question to multiple threads. Now, to answer your question about cumulative heat. Try the code below. Before you start your simulation, run the On Demand macro UDMInit. You need to have 1 user defined memory location activated in Fluent. I haven't tried this code, so there may be syntax errors, but it should work with minor modifications. ComputerGuy Code:
/*ComputerGuy Code Jan82012*/ #include "udf.h" real TotalHeat=0.; DEFINE_ON_DEMAND(PrintTotalHeat) { printf("\n Total Sum of Heat = %g \n",TotalHeat); } DEFINE_ON_DEMAND(UDMInit) { /* run this first to initialize your UDM*/ Domain *d; /* declare domain pointer since it is not passed a */ /* argument to DEFINE macro */ real temp; Thread *t; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Loop over all cell threads in the domain */ thread_loop_c(t,d) { begin_c_loop(c,t) { temp = C_T(c,t); C_UDMI(c,t,0) = temp; } end_c_loop(c,t) } } DEFINE_ADJUST(my_adjust, d) { Thread *t; cell_t c; real volume; real templ; real tempn; real density; real cp; real Q; //Q_tot=C_UDMI thread_loop_c(t,d) { begin_c_loop(c,t) { density=C_R(c,t); cp=C_CP(c,t); volume=C_VOLUME(c,t); /* get cell volume */ templ=C_UDMI(c,t,0); tempn=C_T(c,t); /*Get cell temperature*/ C_UDMI(c,t,0)=tempn; Q=cp*density*volume*(tempntempl); TotalHeat +=Q; } end_c_loop(c,t) } /* C_UDMI =Q_tot;/*store the new result to UDM*/ /* If your goal is to get the TOTAL heat into the system, you don't need the above item, as */ /* it would write the heat to every UDM location in the domain */ /* You only want 1 total heat */ } 

January 9, 2012, 09:42 

#31  
New Member
Join Date: Jan 2012
Posts: 10
Rep Power: 7 
Really sorry for posting the same question..I was too worried about my problem... Thank you for your reply.
What I need is the total heat obtained in the domain of each step, acummulating them until a certain value and than change the boundary condition. I wrote the codes as follows, write Q_tot to a txt file and read it before using . But I found that in the txt file, the figure is always zero. and the BC didn't act in the way I want. Could you please give me some advice? Thanks a lot! Code:
#include "udf.h" #define cp 800. #define density 2180. FILE *fp; DEFINE_PROFILE(unsteady_temp,t,index) { float tempn,templ,volume,Q,Q_tot,time,a,b,tempad; int i; float Heat[5]={2780000., 280.7, 278.5, 280.5,285.}; Domain *d; Thread *ct,*t0; cell_t c,c0; face_t f; time = RP_Get_Real("flowtime"); a = time/3600; b = a/24; d = Get_Domain(1); i=(int)(((int)a)/24); if (b==(int)b) /*if it is the beginning of a day, turn Q_tot to zero*/ Q_tot=0; else /*if not, read Q_tot from the txt. file and cumulate on the previous Q_tot*/ { fp=fopen("Q_tot.txt","r"); fscanf(fp,"%f",Q_tot); fclose(fp); } thread_loop_c(ct,d) { begin_c_loop(c,ct) /*Loop over all cells*/ { volume=C_VOLUME(c,ct); /* get cell volume */ templ=C_T_M1(c,ct); tempn=C_T(c,ct); /*Get cell tempertuare*/ Q=cp*density*volume*(tempntempl); Q_tot +=Q; } end_c_loop(c,ct) } fp=fopen("Q_tot.txt","w"); fprintf(fp,"%f",Q_tot); /*write Q_tot to the file*/ fclose(fp); if (Q_tot<= Heat[i]) /*if cumulative Q_tot smaller than the value in Heat[i],keep the temperature 333k as BC*/ begin_f_loop(f,t) { F_PROFILE(f,t,index)=333; /*BC:Temp=333K*/ } end_f_loop(f,t) else /*else, let the temp on the boundary equal to the adjacent cell*/ begin_f_loop(f,t) { c0 = F_C0(f,t); t0 = THREAD_T0(t); tempad=C_T(c0,t0); /*temperature of adjacent cell*/ F_PROFILE(f,t,index)=tempad; } end_f_loop(f,t) } Quote:


April 4, 2012, 09:29 
Inlet mass flow dependent on pressure at previous time step

#32 
New Member
Varun
Join Date: Apr 2012
Posts: 1
Rep Power: 0 
Hello,
I am trying to simulate a flow in which the inlet mass flow rate depends on the pressure at previous time step in the domain. I tried implementing this in a udf using C_P_M1(c, t). But interpretation of udf always leads to segmentation violation. Can someone suggest a way to implement this using udf. Thanks, Varun. 

April 18, 2012, 09:28 

#33 
New Member
Thierry
Join Date: Apr 2012
Posts: 5
Rep Power: 7 

April 24, 2012, 03:01 
CFD Simulation of Gas turbine Engine_ Combustion Chamber

#34 
Member
Join Date: Apr 2012
Location: Mainz, Germany
Posts: 57
Rep Power: 7 
Hello everyone,
Can anyone suggest me a good document/book to start with simulation in gas turbine engine (combustion chamber). I am planning to do the post processing in FLUENT. Is Openfoam software better than Fluent for combustion purpose? Also, I intend to use C language to develop the code. Does Fluent take code written in Fortran. And which one is better? Fortran or C? Please help me as I'm a beginner in this field. 

April 25, 2012, 02:08 

#35 
Member
Join Date: Apr 2012
Location: Mainz, Germany
Posts: 57
Rep Power: 7 
I am planning to code advance combustion model and then link it to fluent/openfoam to simulate combustion chamber in a gas turbine.
I have certain parts of the code written in Fortran. Is there anyway I can directly use the fortran code in FLUENT? Do I need to convert all the FORTRAn code into C language to be able to use it in FLUENT? Any method? Please help. 

May 5, 2012, 02:54 
2D position dependent heat source

#36 
New Member
juliana
Join Date: May 2012
Posts: 2
Rep Power: 0 
hi,
I need to write an UDF for 2D heat source (on a face).The source has a parabolic position dependent & time independent function (source=x*x+2*x+1 ). Slould I use CCENTROID or FCENTROID in my programm?What is wrong with my programm? With thanks & regards. #include "udf.h" DEFINE_SOURCE(energy_source,c,t,dS,eqn) { real x[ND_ND]; real source; cell_t c; begin_c_loop(c,t) { C_CENTROID(x,c,t); source = x[0]*x[0]+2*x[0]+1; dS[eqn] = 2*x[0]+2; return source; } end_c_loop(c,t) } Last edited by leila2; May 6, 2012 at 13:10. 

May 7, 2012, 01:44 
gas turbine combustor

#37  
New Member
Reza khodadadi
Join Date: Apr 2011
Location: London, UK
Posts: 21
Rep Power: 8 
Quote:
i think you could able simulate this model, in OpenFoam, more easy than fluent, and OF is much better than fluent. your question is wrong, that you say witch one is better c or fortran both are language for writing program, if you want to use fluent you should write udf function, basically it use c. but Openfoam is much simpler than all. i myself now working of modeling one dimensional gas turbine combustor and i must use FORTRAN, have you ever seen ATEC code? many regards. Reza khodadadi. 

August 1, 2012, 16:15 
problem with implementing porosity variation as a function of distance from the wall

#38 
New Member
Rohini Bala Chandran
Join Date: Apr 2012
Posts: 8
Rep Power: 7 
Hi all,
It looks like you were able to solve a similar problem earlier. Now I am also trying to implement porosity variation as a function of distance from the wall for a packed bed reactor. My UDF has separate functions to define profiles for interfacial heat transfer coefficient, porosity and the specific surface area. I've pasted my code herewith. I am using this .c file to load for the profiles of porosity, heat transfer coefficient and the specific surface area in FLUENT 14 with a thermal nonequilibrium model selected for the porous medium. I seem to be getting an error message when I load the porosity profile function. It says  error  invalid argument [1] wrong type. Again, the .c file compiles and builds without any issues but pops this up when I try to use the porosity function.. Would you by any chance know what the bug is? Any help would be much appreciated. /************************************************** *** This is a UDF to calculate heat transfer coefficient and interfacial area for the packed bed reactor example provided in FLUENT so that the 2 temperature nonequilibrium model can be put to use ************************************************** ******/ #include "udf.h" #define d_b 0.008 /* mean diameter of particles */ real A_V_sphere = 6.0/d_b; /* areatovolume ratio of a sphere*/ DEFINE_PROFILE(Heat_trans_coeff,t,i) { cell_t c; real Nu,Re,Pr; real dens, visc; /*Fluid*/ real cond, cp; /* Fluid*/ real eps_b; /*Porosity of the bed*/ begin_c_loop(c,t) { eps_b = C_POR(c,t); /*Porosity fluid*/ dens = C_R(c,t); /*Density of fluid*/ visc = C_MU_L(c,t); /*Viscosity fluid*/ cond = C_K_L(c,t); /*Conductivity fluid*/ cp = C_CP(c,t); /*Specific heat fluid*/ Re = ND_MAG(C_U(c,t),C_V(c,t),C_W(c,t))*d_b*dens*eps_b/visc ; /*Reynolds number has been calculated based on pore velocity*/ Pr = cp*visc/cond ; Nu = 2.+ 1.1 * pow(Re,0.6) * pow(Pr,1./3.); F_PROFILE(c,t,i) = Nu*cond/d_b ; } end_c_loop(c,t) } DEFINE_PROFILE(Interfacial_Area_Density,t,i) { cell_t c; real eps_b; real A_b_V; /* areatovolume ratio or the required specific surface area */ begin_c_loop(c,t) { eps_b = C_POR(c,t); F_PROFILE(c,t,i) = (1.eps_b)*A_V_sphere; } end_c_loop(c,t) } DEFINE_PROFILE(porosity_function,t,i) { cell_t c; real x[ND_ND]; /*This will hold the position vectors*/ real y; real a1; real a2=6; /*to specifiy the porosity variation function*/ real eps_inf=0.37; real eps; a1 = (1./eps_inf)1; begin_c_loop(c,t) { C_CENTROID(x,c,t); y = (H  x[1])/ d_b ; eps = eps_inf*(1. + a1*exp(1*a2*y)); F_PROFILE(c,t,i) = eps; } end_c_loop(c,t) } 

August 1, 2012, 21:17 

#39  
Senior Member
Ji Junjie
Join Date: Feb 2010
Location: Shanghai, China
Posts: 109
Rep Power: 10 
Quote:
DEFINE_SOURCE(energy_source,c,t,ds,eqn) { real x=1.0; ds[eqn]=0.3*cos(0.3*x); return sin(0.3*x) ; } 

September 3, 2012, 06:22 

#40 
New Member
n7310889
Join Date: Aug 2012
Posts: 26
Rep Power: 7 
Hi,
I'm writing an udf to assign heat flux profile on the outer wall of (symmetric right hand side half section) of a 3D annular fluid domain of 33mm radius. This fluid is flowing through a 35 mm radius and 8 m long horizontal tube. The heat flux (q) profile varies along the circumference (horizontal x & vertical y direction) of the tube, and assumed constant & steady state along the length (horizontal z direction). Coordinates of the axis of rotation of the tube are (0,0,0) and (0,0,8.0). My earnest request to you, please check the udf written for a Fluent 3D model. I'll remain grateful to you. Also please check the logic of assigning radius value in the macro. Since my model contains only fluid domain of 33 mm, then what should be assigned value for radius among 33 mm of fluid body or 35 mm including tube? Please suggest me. #include "udf.h" #define RADIUS 0.033 #define CONVEC_LOS_COFICENT 0.05 #define TUBE_EMISIVITY 0.1378 #define GLAS_EMISIVITY 0.05 #define SIGMA 5.67e08 #define DIRECT_NORMAL_INSOLATION 937.9 #define T_KELVIN 273.0 DEFINE_PROFILE(wallheatfluxprofile,thread,index) { real x[ND_ND]; real z,glas_tube_emsivity,T_amb,T_sky,T_glass,T_gas,rad _loss,convec_loss; double a,q; face_t f; begin_f_loop(f,thread) { F_CENTROID(x,f,thread); glas_tube_emsivity=(TUBE_EMISIVITY*GLAS_EMISIVITY)/((TUBE_EMISIVITY+GLAS_EMISIVITY(TUBE_EMISIVITY*GLAS_EMISIVITY)); T_amb =T_KELVIN+28.5; T_sky =T_KELVIN+14.0; T_glass =T_KELVIN+121.0; T_gas =T_KELVIN+30.0; rad_loss =TUBE_EMISIVITY*SIGMA*((2*pow(WALL_TEMP_INNER (f,thread),4)pow(T_amb,4)pow(T_sky,4))+glas_tube_emsivity*SIGMA*(pow(WALL_T EMP_INNER (f,thread),4)pow(T_glass,4)); convec_loss =CONVEC_LOS_COFICENT*(WALL_TEMP_INNER (f,thread) T_gas); z =x[2]; for(z=0.0; z<=1.5; z++) { if ((z>=0.0) && (z<=1.2)) { for(a=0.0; a<=180.0; a++) { x[0] =RADIUS*sin(a); x[1] =RADIUS*cos(a); if ((a>=0.0) && (a<=15.9)) { q =4.1643*pow(a,3)60.818*pow(a,2)+485.19*a+32320; } if ((a>15.9) && (a<=47.5)) { q =0.1288*pow(a,3)6.7478*pow(a,2)+293.03*a+37992; } if ((a>47.5) && (a<=86.5)) { q =1.2582*pow(a,3)256.73*pow(a,2)+15690*a250299; } if ((a>86.5) && (a<=180.0)) { q =0.0004*pow(a,3)0.0716*pow(a,2)+47.947*a3026.1; } F_PROFILE(f,thread,index) =(q*DIRECT_NORMAL_INSOLATION/937.9)rad_lossconvec_loss; } } else { F_PROFILE(f,thread,index) =0.0; } } end_f_loop(f,thread) } Last edited by n7310889; September 4, 2012 at 21:45. 

Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
strain rate in UDF  Paulina  FLUENT  11  November 20, 2014 04:06 
UDF to measure Mass Flow Rate  a.lynchy  Fluent UDF and Scheme Programming  21  February 15, 2014 03:18 
UDF for critical strain rate to extinction  Birute Bunkute  FLUENT  1  March 25, 2010 16:40 
surface reaction rate with udf  yellowstuff  FLUENT  4  January 29, 2010 13:53 
heat generation rate w/m3 in 2D  Laszlo  FLUENT  1  May 6, 2004 11:58 
Sponsored Links 