CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > ANSYS > FLUENT > Fluent UDF and Scheme Programming

UDF for specific heat

Register Blogs Community New Posts Updated Threads Search

Like Tree1Likes
  • 1 Post By p_agoodboy

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   November 28, 2010, 23:36
Unhappy UDF for specific heat
  #1
New Member
 
Join Date: Nov 2010
Posts: 8
Rep Power: 16
p_agoodboy is on a distinguished road
Hi,
Does anybody know why user defined functions dont work with defining specific heat (Cp) in fluent? I need to siulate critcal flows in which specific heat dramatically varies, and there is no way but to use UDFs. piecewise linear method is not that accurate and is very time-consuming as well. I welcome any suggestion.
p_agoodboy is offline   Reply With Quote

Old   December 3, 2010, 22:57
Default
  #2
Senior Member
 
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 16
ComputerGuy is on a distinguished road
UDFs for specific heat have been implemented in Fluent 12. If you're using Fluent < 12, use a piecewise polynomial, and curve fit your data in Excel or some other similar tool. A good one is www.zunzun.com. How significantly do your pressures and temperatures change?

ComputerGuy
ComputerGuy is offline   Reply With Quote

Old   December 14, 2010, 03:51
Default
  #3
New Member
 
Join Date: Nov 2010
Posts: 8
Rep Power: 16
p_agoodboy is on a distinguished road
Thnx for reply. I have Ansys 12.1 but I still can not use define_property macro for Cp. There is also another macro named define_specific_heat which I could not use it, since this macro do not get information for every cell (unlike define_property macro); rather it gets a Temperature from solver which is always constant and equal to zero. In fact the arguments of the 2 functions are totally different. I do not know if I could used the latter for finding Cp at each cell and iteration as a function of cell's temoerature, and could not find a good guid.
Specific heat varies by near 10 times in a 20-30 degree temperature range so I can not neglect it. Pieacewise polinomial also does not work since in my version it only accepts 3 pieces, which is not enough for an accurate approximation in my proble.
p_agoodboy is offline   Reply With Quote

Old   December 14, 2010, 08:49
Default
  #4
Senior Member
 
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 16
ComputerGuy is on a distinguished road
What information are you trying to get about the cell other than the temperature, and why is the cell temperature 0? 0 Kelvin?

Send me a private message with that data you're trying to fit, and I'll see if I can find a 3-piece polynomial that will do it.
ComputerGuy is offline   Reply With Quote

Old   December 14, 2010, 23:17
Default
  #5
New Member
 
Join Date: Nov 2010
Posts: 8
Rep Power: 16
p_agoodboy is on a distinguished road
The specific heat is only function of temperature. My udf is as follows:

DEFINE_SPECIFIC_HEAT(my_user_cp, T, Tref, h, yi)
{
real cp;
real TT=T-273.16;

if (T < 33.)
cp = 1000/(.4171-0.0000008225*pow(TT,3.));
else if (T <37.)
cp = 5730.+23590./(1+pow((TT-35.33)/(0.9414),2.));
else
cp = 1000/(0.9288-190.14/pow(TT,1.5));

*h = cp*(TT-Tref);
return cp;
}

I wrote it according to Ansys 12.0 UDF manual. (of course the way for calculating h must be modified in the udf, but that is not the source of problem.) According to the manual, the macro gets T (temperature), T_ref (some reference temperature) and yi, from the solver and returns specific heat. h is enthalpy. But when I run software with this udf interpreted, the resulted C_p is constant for all cells and equals the value corresponding to 0 (Kelvin), and enthalpy is also some constant negative value. It seems that the solver only gives a constant temperature of zero to the macro.

It should be added that the syntax of define_specific_heat macro is different with define_property macro; the latter gets cell and tread as input arguments while the former only get a temperature.
altinel likes this.
p_agoodboy is offline   Reply With Quote

Old   December 15, 2010, 00:14
Default
  #6
Senior Member
 
Real Name :)
Join Date: Jan 2010
Location: United States
Posts: 192
Rep Power: 16
ComputerGuy is on a distinguished road
p_agoodboy,

A couple things:
1) I'd suggest ensuring that all of your values are written floats/doubles. There are 3 values (1000, 1, 1000) that don't have this. It just helps debugging later.

2) Most importantly (I think) is this statement:
Code:
*h = cp*(TT-Tref);
The second line of your code redefines TT as
Code:
real TT=T-273.16;
and you don't flip it back to Kelvin before defining the enthalpy change.

If your code compiles as expected, try and add:
Code:
TT=TT+273.16;
before
Code:
*h = cp*(TT-Tref);
and see if it works.

For clarity, here's the code as I would write it:
Code:
DEFINE_SPECIFIC_HEAT(my_user_cp, T, Tref, h, yi) 
{ 
	real cp;
	real TT=T-273.16;

	if (T < 33.)
	{
		cp = 1000./(.4171-0.0000008225*pow(TT,3.));
	}
	else if (T <37.)
	{
		cp = 5730.+23590./(1.+pow((TT-35.33)/(0.9414),2.));
	}
	else
	{
		cp = 1000./(0.9288-190.14/pow(TT,1.5));
	}
	TT=TT+273.16;
	*h = cp*(TT-Tref); 
	return cp; 
}
Finally: ensure that Tref is defined properly in the materials panel!
Best,
ComputerGuy

Quote:
Originally Posted by p_agoodboy View Post
The specific heat is only function of temperature. My udf is as follows:

DEFINE_SPECIFIC_HEAT(my_user_cp, T, Tref, h, yi)
{
real cp;
real TT=T-273.16;

if (T < 33.)
cp = 1000/(.4171-0.0000008225*pow(TT,3.));
else if (T <37.)
cp = 5730.+23590./(1+pow((TT-35.33)/(0.9414),2.));
else
cp = 1000/(0.9288-190.14/pow(TT,1.5));

*h = cp*(TT-Tref);
return cp;
}

I wrote it according to Ansys 12.0 UDF manual. (of course the way for calculating h must be modified in the udf, but that is not the source of problem.) According to the manual, the macro gets T (temperature), T_ref (some reference temperature) and yi, from the solver and returns specific heat. h is enthalpy. But when I run software with this udf interpreted, the resulted C_p is constant for all cells and equals the value corresponding to 0 (Kelvin), and enthalpy is also some constant negative value. It seems that the solver only gives a constant temperature of zero to the macro.

It should be added that the syntax of define_specific_heat macro is different with define_property macro; the latter gets cell and tread as input arguments while the former only get a temperature.

Last edited by ComputerGuy; December 15, 2010 at 00:29. Reason: added code
ComputerGuy is offline   Reply With Quote

Old   January 30, 2011, 00:46
Default
  #7
New Member
 
Tinnaphop
Join Date: Jun 2010
Posts: 1
Rep Power: 0
simulater is on a distinguished road
why don't you use complying instead of interpreting. the complied UDF is recommended for DEFINE_SPECIFIC_HEAT.
simulater is offline   Reply With Quote

Old   December 18, 2012, 20:12
Default Did you guys figure it out?
  #8
Member
 
Abhijeet Shrawage
Join Date: Feb 2012
Posts: 31
Rep Power: 14
ashrawage is on a distinguished road
@ Computer Guy & p_agoodboy

Did you guys figure the UDF for Cp out?
I have created the following UDF for Cp of water at 24MPa and Temp varying from 350C to 450C

Here is the UDF, I am getting Temperature limited to 1K in many cells (>19,000 cells). Can you guys help me out?

#include "udf.h"
/* Date: 11/15/2012
Specific heat of supercritcal water at pressure line of 24MPa*/
DEFINE_SPECIFIC_HEAT(specific_heat, T, Tref, h, yi)
{
real cp;
int i;
int N1 = 8;
real aa[8]={-9.731592783661666e+015, 1.074681034976496e+014, -5.086001403165526e+011,
1.337146166142533e+009, -2.109165058548607e+006, 1.996050543970421e+003,
-1.049392685740774, 2.364317464886547e-004};
int N2 = 5;
real bb[5]={1.362812606162869e+016, -8.330882640185808e+013, 1.909751859195201e+011,
-1.945719052198394e+008, 7.433859903690445e+004};
int N3 = 8;
real cc[8]={7.705464178099725e+012, -7.521528195313355e+010, 3.145122808193584e+008,
-7.302941362683474e+005, 1.016975967814141e+003, -0.849330125970483,
3.938872500273441e-004, -7.825155875904535e-008};

/* Inorder to prevent the solution to collapse in case the temperature of the system goes below the ranges provided
the following steps were taken to limit the values to a constant quantity*/
if (T < 618.0)
{
cp = 6730.0;
*h = cp*(T-Tref);
}
else if (T > 773.0)
{
cp = 3634.0;
*h = cp*(T-Tref);
}
/* Finally the curve fits are implemented in the following way for the three temperature ranges*/
if (T >= 618 && T <= 653.86)
{
cp = aa[7];
for (i=N1-2; i>=0; i--)
cp = cp*T + aa[i];
*h = 0.000029553968311081836302205150257549*(pow(T,8)-pow(Tref,8)) - 0.14991324082011057784922871048496*(pow(T,7)-(Tref,7)) + 332.67509066173681731015676632524*(pow(T,6)-pow(Tref,6)) - 421833.01170972138643264770507813*(pow(T,5)-pow(Tref,5)) + 334286541.53563326597213745117188*(pow(T,4)- pow(Tref,4)) - 169533380105.51753743489583333333*(pow(T,3)-pow(Tref,3)) + 53734051748824.796875*(pow(T,2)-pow(Tref,2)) - 9731592783661666.0*(T-Tref);
}
else if (T > 653.86 && T <= 654.96)
{
cp = bb[4];
for (i= N2-2; i>=0; i--)
cp = cp*T + bb[i];
*h = 14867.719807380888960324227809906*(pow(T,5)-pow(Tref,5)) - 48642976.304959848523139953613281*(pow(T,4)-pow(Tref,4)) + 63658395306.506703694661458333333*(pow(T,3)-pow(Tref,3)) - 41654413200929.0390625*(pow(T,2)-pow(Tref,2)) + 13628126061628690.0*(T-Tref);
}
else if (T > 654.96 && T <= 773)
{
cp = cc[7];
for (i= N3-2; i>=0; i--)
cp = cp*T + cc[i];
*h = -0.0000000097814448448806689168386557060517*(pow(T, 8)-pow(Tref,8)) + 0.000056269607146763441313043672766168*(pow(T,7)-pow(Tref,7)) - 0.14155502099508049385079289095302*(pow(T,6)-pow(Tref,6))+ 203.39519356282819444459164515138*(pow(T,5)-pow(Tref,5)) - 182573.53406708684633485972881317*(pow(T,4)-pow(Tref,4)) + 104837426.93978613615036010742188*(pow(T,3)-pow(Tref,3)) - 37607640976.5667724609375*(pow(T,2)-pow(Tref,2)) + 7705464178099.724609375*(T-Tref);
}
/* Return the value of specific heat calculated by the curve fits*/
return cp;
}

There is no issue with compiling.. It hooked successfully.
Thank you
Abhijeet
ashrawage is offline   Reply With Quote

Old   July 19, 2013, 11:20
Default udf function
  #9
Member
 
Vjoess
Join Date: Oct 2012
Posts: 54
Rep Power: 14
dinesh is on a distinguished road
Quote:
Originally Posted by p_agoodboy View Post
The specific heat is only function of temperature. My udf is as follows:

DEFINE_SPECIFIC_HEAT(my_user_cp, T, Tref, h, yi)
{
real cp;
real TT=T-273.16;

if (T < 33.)
cp = 1000/(.4171-0.0000008225*pow(TT,3.));
else if (T <37.)
cp = 5730.+23590./(1+pow((TT-35.33)/(0.9414),2.));
else
cp = 1000/(0.9288-190.14/pow(TT,1.5));

*h = cp*(TT-Tref);
return cp;
}

I wrote it according to Ansys 12.0 UDF manual. (of course the way for calculating h must be modified in the udf, but that is not the source of problem.) According to the manual, the macro gets T (temperature), T_ref (some reference temperature) and yi, from the solver and returns specific heat. h is enthalpy. But when I run software with this udf interpreted, the resulted C_p is constant for all cells and equals the value corresponding to 0 (Kelvin), and enthalpy is also some constant negative value. It seems that the solver only gives a constant temperature of zero to the macro.

It should be added that the syntax of define_specific_heat macro is different with define_property macro; the latter gets cell and tread as input arguments while the former only get a temperature.



can you tell me from where this formula for Cp is taken. Actually i want to know it for my simulation. Do we need to input this Cp in the Cp property of material menu in fluent as UDF.
dinesh is offline   Reply With Quote

Old   November 26, 2014, 11:58
Default
  #10
New Member
 
carla menale
Join Date: Nov 2014
Posts: 3
Rep Power: 12
carla menale is on a distinguished road
Hello!
I need to introduce in FLUENT 6.3.26 a UDF of Cp. There is not the possibility in this version. I tried to introduce a piecewise polynomial, but I need to introduce 4 ranges, and the maximum number is 3!

Is there a way to introduce more ranges??
carla menale is offline   Reply With Quote

Reply


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 Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Heat source UDF, please Sasha Fluent UDF and Scheme Programming 4 October 14, 2014 02:32
Constant velocity of the material Sas CFX 15 July 13, 2010 09:56
Specific Heat (Cp) cannot be calculated by UDF??? João Fernandes FLUENT 0 October 16, 2008 19:58
UDF for heat transfer ranjit FLUENT 13 January 18, 2007 11:36
heat transfer coefficient udf nam su FLUENT 0 March 25, 2005 03:28


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