udf for heat generation rate
hi every body
I am supposed to write a udf for heat generation rate which is a cosine function #include"udf.h" DEFINE_SOURCE(energy_source,c,t,ds,eqn) { real x; ds[eqn]=0.3*cos(0.3*x); return sin(0.3*x) ; } but there are some errors! any one can help me to modidfy it. thanks |
Sarah,
Is "x" in your function the x-coordinate of the cell? If so, try the following un-checked code. Code:
#include "udf.h" Code:
#include "udf.h" |
ComputerGuy
I am really thankful of you for your response , but X is the height of my geometry (of course its better to use y instead of x , I did mistake to type x!) my geometry its here: Heat generation rate is a cosine function of y (height) : source =5.958*sin(pi *y/11)+1.866 So ds= 5.958*pi /11*cos(pi* y/11) I am grateful if you help me to write a udf for it . Best regards |
Sarah,
I have given you the code you need to make your function work. Instead of x[0], which returns the "x" component of the geometry, you'll need to use x[1], which returns the "y" component. The only other thing is changing the source=.... and dS[eqn]=.... to the heat generation function and its derivative. ComputerGuy |
Dear ComputerGuy
I am new in udf so there is some thing that I don't know about them , such as ND could you explain me about ND , why you define x[ND_ND] ? thanks Sarah |
Sarah,
You should read through the Fluent UDF manual. However, from the Fluent 6.3 UDF manual (Fluent, Inc., September 11, 2006), page 3-26: "The constant ND_ND is dened as 2 for RP 2D (FLUENT 2D) and RP 3D (FLUENT 3D). It can be used when you want to build a 2 x2 matrix in 2D and a 3 x3 matrix in 3D. When you use ND_ND, your UDF will work for both 2D and 3D cases, without requiring any modications." Thus, when I defined "real x[ND_ND]," I was making x a position vector with dimension ND, where n is the number of dimensions in your simulation. x[0] would be the x component x[1] would be the y component x[2] would be the z component The manual has extremely thorough examples -- go through it. ComputerGuy |
Hello Computer Guy
My problem is also related to heat generation in the energy eqn..
In my model Qg(heat generation) is proportional to exponential function of temperature and time gradient of new variable (dC/dt) Initial condition of C is specified i.e t=0,C=0 My aim is to calculate a C at different times.. Is this possible in fluent to include the new variable in the fluent UDF... I have written the UDF for the exponential function of temperature but how to include dc/dt is still a question for me.. |
Dear ComputerGuy
Yes , you are right , I have read this manual and its so good but there is not any theme about porosity , really in my project I have to define porosity as a function of x and I don’t know how to write a udf for it , everybody who I asked them , say: its impossible or very hard by fluent 6.3.26! Could you help me about this issue ?of course I am really thankful of you for your great help about heat generation rate . Best regards Sarah |
Sarah,
If you can write an equation (or an algorithm) for porosity as a function of geometric position, you can write a UDF for it. It's not that hard. The trick is that as opposed to DEFINE_SOURCE for energy, you must use a DEFINE_PROFILE UDF. Set the region you're interested in to a porous zone, code the DEFINE_PROFILE UDF, compile or interpret the UDF, then load the UDF into the porosity drop-down menu. Let me know if you need further assistance! ComputerGuy Quote:
|
Hello Computer Guy
My model is related due to absorption(Where gas is getting absorbed by solid).
I am solving energy equation(Unsteady) for the cylindrical model In my model Qg = exp(-const/T)*dc/dt ----(1) where dc/dt = (pg - Peq)/peq*(some constant) ----(2) where pg =constant= 3 bar peq is a function of Temperature(T). C is concentration of gas in the solid My aim is to find to find T and C for different time. I can substitute (2) eqn in (1) eqn and total heat source will be in function of temperature but finding C by means of temperature will be a long procedure. Is there any way to find both C and T parallel by writing UDF?? |
Dear ComputerGuy
Thank you It is very kind of you . well I have written an equation for porosity , Its here : Porosity= 0.39*(1+1.05*exp(-100*(y-1)/0.06)) 1 < y<1.425 Porosity= 0.39*(1+1.05*exp(-100*(1.85-y)/0.06)) 1.425<y<1.85 y=1 , y=1.85 porosity =0.39 And I have written a udf for it : #include "udf.h" DEFINE_PROFILE(porosity_profile,t,i) { real x[ND_ND]; real y; cell_t c; begin_c_loop(c,t) { y=x[1]; if(1<y<1.425) F_PROFILE(c,t,i)=0.39*(1+1.05*exp(-100*(y-1)/0.06)); else if(1.425<y<1.85) F_PROFILE(c,t,i)=0.39*(1+1.05*exp(-100*(1.85-y)/0.06)); } end_c_loop(c,t) } is it corresponding to the equation of porosity? And when we use udf for porosity so we have to write a udf for viscous resistance and inertial resistance as well , so should we interpereted and hook udfs respectively ?, It means we should first hook porosity_udf then viscous resistance_udf and inertial resistance_udf , isn’t it ? I should also thank you since your advices help me in my project so far . Best regards Sarah |
Manohar,
If I understand correctly:
ComputerGuy |
Sarah,
Your UDF was basically correct, although didn't address the case where y=1 or y=1.85. You also need to assign a vector to x, which I did with the C_CENTROID command. I've changed it below: Code:
DEFINE_PROFILE(porosity_profile,t,i) Examples 5 and 6 show the usage of both F_PROFILE and C_PROFILE for defining porosity. You can do the same for viscous and inertial resistances, using basically the same code as above, but modified with the appropriate values. ComputerGuy Quote:
|
Dear ComputerGuy
Thank you for modification of my code , but now I have faced a funny problem! While I interpreting a udf , previous udf would be removed , for example , in my case ,first I interpreted and hooked udf of energy _source and then udf of porosity but I saw energy_source udf has been removed , what should I do till fluent accepts many udfs not only one . thanks Best regards Sarah |
Sarah,
Put all the UDF's in the same .c file. For instance: #include "udf.h" DEFINE_SOURCE() {} DEFINE_PROFILE() {} etc.. All of the appropriate functions will be available in the drop-down lists. ComputerGuy |
Dear ComputerGuy
Thank you so much! , however there is still a question for me , you declared that I use the same code which written for porosity for viscous and inertial resistances , but It is too hard since in my project these are defined as: C1= (Dp^2 *porosity^3)/(150(1-porosity)^3) C2=(3.5*(1-porosity))/(Dp*porosity^3)) So can I write a udf for them like this: #include "udf.h" DEFINE_PROFILE(inertial_res,t,i) { cell_t c; begin_c_loop(c,t) { F_PROFILE(c,t,i) = 3.5*(1 - C_POR(c,t)) /(d_p*pow(C_POR(c,t),3)); } end_c_loop(c,t) } C_POR(c,t) is porosity , so I have to modify porosity code of course I don’t know how do it! Could you help me? Thanks Sarah |
Sarah,
You need to use a similar format to the porosity function I wrote, not the same one. Short of writing all the UDF's for you, here's what I'd suggest:
Regards, ComputerGuy |
Dear computerGuy
Yes , I am supposed to simulate a packed bed and I’ve read Fluent manual which related to porous media modeling , I ‘ve taken your advices and wrote this code: #define C_UDMI(c,t,0) F_PROFILE(c,t,i) 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.*(y-1.)/0.06)); } if ((y>1.425) && (y<1.85)) { F_PROFILE(c,t,i)=0.39*(1.+1.05*exp(-100.*(1.85-y)/0.06)); } } end_c_loop(c,t) } // inertial resistance udf . DEFINE_PROFILE(inertial_res,t,i) { cell_t c; begin_c_loop(c,t) { F_PROFILE(c,t,i) = 3.5*(1 - C_UDMI(c,t,0)) /(0.06*pow(C_UDMI(c,t,0),3)); } end_c_loop(c,t) } //viscous resistance udf . DEFINE_PROFILE(viscous_res,t,i) { cell_t c; begin_c_loop(c,t) { F_PROFILE(c,t,i) = 150*pow((1 - C_UDMI(c,t,0)),2) /(0.0036*pow(C_UDMI(c,t,0),3)); } end_c_loop(c,t) } Is it correct? Of course I could hook it to fluent like porosity code which I had written my self but you modified it , really you suggested to enable a user-defined memory location, why? Best regards Sarah |
Sarah,
I think everything looks right, except for the first line. Try this: Code:
DEFINE_PROFILE(porosity_profile,t,i) Let us know if this works for you! ComputerGuy |
All times are GMT -4. The time now is 23:39. |