# UDF for energy source term

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

 February 5, 2012, 16:46 UDF for energy source term #1 New Member   Join Date: Feb 2012 Posts: 3 Rep Power: 6 in my heat transfer model i want to write a udf for the energy source term S y = - density * dH\dt where H= the total enthalpy , t= time my udf is ; #include "udf.h" #define dens 800.0 DEFINE_SOURCE(heat source,cell,thread,dS,eqn) { real source ; source= - C_H-G(cell,thread)*dens ; dS [eqn] =0 ; return source ; } can any one help me to , i dont know if the cell enthaly gredient is equal to the chane of enthalpy with time?

 February 25, 2012, 10:26 #2 New Member   Join Date: Feb 2012 Posts: 3 Rep Power: 6 im waiting for ur help???

 February 28, 2012, 09:36 #3 New Member   Philipp Schapotschnikow Join Date: Oct 2010 Posts: 11 Rep Power: 8 No, the gradient is a spacial derivative. Besides, it is a vector. You need a time derivative, which YOU have to provide.

 March 1, 2012, 22:57 #4 New Member   Join Date: Feb 2012 Posts: 3 Rep Power: 6 yes u are right but how can i write the dh/dt?

 March 6, 2012, 17:49 #5 Senior Member   Micael Boulet Join Date: Mar 2009 Location: Quebec, Canada Posts: 112 Rep Power: 10 I did this before. I don't have access to it right now, but here is the idea (I AM NOT SURE OF THE EXACT SYNTAX, I just write it roughly by memory): 1- compute/store H in a UDM with a "Adjust" UDF 2- then derive it in your Source UDF, something like that (first order in that example): time_step = "macro for time step goes here"; dHdt = (UDM(0) - UDM_M1(0)) / time_step; // suppose you put H in UDM(0) For what I remember, it was not that easy to implement, but the idea is there. Among all, make sure to understand exactly when "Adjust" is executed. This line: dS [eqn] =0 ; can be a problem. Make sure to understand what it means, look at UDF guide. You may need to derive your source term to ever converge (depend on your problem). I always derive my source term, it is either safer or downright necessary (numerically). Keep motivation high, this problem will be challenging if you are beginner, but it is feasible. Last edited by Micael; March 7, 2012 at 18:50.

March 7, 2012, 17:40
#6
Senior Member

Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 8
Quote:
 Originally Posted by engloly yes u are right but how can i write the dh/dt?
Perhaps something like the following:

Make sure you enable a user-defined memory location... Also, I'm assuming you want the density at the current time step, not the average density between the two timesteps (current and previous). Also, enthalpy has a spatial gradient (x/y/z), but you want the gradient w.r.t. time.

This is a crude approximation of a derivative. Ideally, you should do some higher order approximations.

Finally: there is an "if" statement in there to ensure that, at the beginning of the simulation where you have no derivative information, no source term is calculated.

--ComputerGuy

Code:
```#include "udf.h"
{
real source;
source=0.0;
real dHdt;
if(CURRENT_TIME>0)
{
}
dS[eqn] =0.0;
return source;
}```

March 7, 2012, 19:00
#7
Senior Member

Micael Boulet
Join Date: Mar 2009
Posts: 112
Rep Power: 10
Quote:
 Originally Posted by ComputerGuy Perhaps something like the following: Make sure you enable a user-defined memory location... Also, I'm assuming you want the density at the current time step, not the average density between the two timesteps (current and previous). Also, enthalpy has a spatial gradient (x/y/z), but you want the gradient w.r.t. time. This is a crude approximation of a derivative. Ideally, you should do some higher order approximations. Finally: there is an "if" statement in there to ensure that, at the beginning of the simulation where you have no derivative information, no source term is calculated. --ComputerGuy Code: ```#include "udf.h" DEFINE_SOURCE(heat_source,cell,thread,dS,eqn) { real source; source=0.0; real dHdt; dHdt=(C_H(cell,thread)-C_UDMI(cell,thread,0))/CURRENT_TIMESTEP; if(CURRENT_TIME>0) { source= -dHdt*C_R(cell,thread); } C_UDMI(cell,thread,0)=C_H(cell,thread); dS[eqn] =0.0; return source; }```
I don't think that can work. The reason is that DEFINE_SOURCE should be called more than once per time step (many iterations to solve a given time step). Hence, this line should be remove:
Code:
```
C_UDMI(cell,thread,0) should be compute only once per time step and an DEFINE_EXECUTE_AT_END (or was it an DEFINE_ADJUST? - I don't remember) can do this. I do remember that it was tricky, I could find those files this weekend.

Keep in mind that dS[eqn]=0 could lead to convergence problem, but it is ok to try it first like that.

Otherwise, ComputerGuy is right, DEFINE_SOURCE should looks similar to that.

Last edited by Micael; March 7, 2012 at 20:52.

March 7, 2012, 19:17
#8
Senior Member

Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 8
Quote:
 Originally Posted by Micael I don't think that can work. The reason is that DEFINE_SOURCE should be called more than once per time step (many iterations to solve a given time step). Hence, this line should be remove: Code: ``` C_UDMI(cell,thread,0)=C_H(cell,thread);``` C_UDMI(cell,thread,0) should be compute only once per time step and an ADJUST can do this. I do remember that it was tricky, I could find those files this weekend.
Hmmm, you're right. Ok... Something like this ought to record the enthalpy once per timestep.

ComputerGuy

Code:
```#include "udf.h"

DEFINE_EXECUTE_AT_END(ThisRunsAtEndOfTimestep)
{

Domain *d;
cell_t c;
d = Get_Domain(1);   /* mixture domain if multiphase */

{
{
begin_c_loop(c,t)
{
C_UDMI(c,t,0)=C_H(c,t);
}
end_c_loop(c,t)
}
}
}

{
real source;
source=0.0;
real dHdt;
if(CURRENT_TIME>0)
{
}
dS[eqn] =0.0;
return source;
}```

 March 7, 2012, 20:51 #9 Senior Member   Micael Boulet Join Date: Mar 2009 Location: Quebec, Canada Posts: 112 Rep Power: 10 Yes, that's it ComputerGuy! Only left is the special case of the very first time step and the whole thing is adressed.

March 7, 2012, 21:13
#10
Senior Member

Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 8
Quote:
 Originally Posted by Micael Yes, that's it ComputerGuy! Only left is the special case of the very first time step and the whole thing is adressed.
I think, because the code runs at the end of the time step, it should be fine. I've also addressed this in the define_source macro, where I check to see that the time is > 0. If it isn't, it wouldn't be possible to obtain a derivative, and thus I set the source to zero.

engloly: Let us know if these work

ComputerGuy

 March 8, 2012, 16:33 #11 Senior Member   Micael Boulet Join Date: Mar 2009 Location: Quebec, Canada Posts: 112 Rep Power: 10 Still one detail, the UDM should be initialized so that during the first time step there is a value for 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 stage81 FLUENT 0 September 27, 2010 07:20 Christian FLUENT 4 August 1, 2009 05:53 summer FLUENT 0 August 24, 2006 17:44 Greg Perkins FLUENT 0 October 13, 2000 23:03 Greg Perkins FLUENT 0 October 11, 2000 03:43

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