
[Sponsors] 
Continuing User Defined Real Gas Model issues 

LinkBack  Thread Tools  Search this Thread  Display Modes 
October 20, 2010, 00:00 
Continuing User Defined Real Gas Model issues

#1 
New Member
Join Date: Jul 2009
Posts: 22
Rep Power: 13 
I am trying to model a gun blast in fluent. I am not modeling the round, rather I am patching the barrel to known internal pressure, temperature and velocity distributions. I can supply two different "materials", one to the air domain and one to the gun domain (i.e. molecular weights and Cp). My domain is a quarter section. I am interested in implementing a new equation of state (abelnobel) and have written and successfully compiled a user defined real gas model that runs fine in serial and parallel.
The issue is that as far as I can tell I can only specify one molecular weight and Cp when using the UDRGM. So the question is, is there any way that I can specify two different molecular weights and CP's when using a UDRGM? I know it must be a possibility since examples such as this: http://www.fluent.com/solutions/examples/x253.htm are not difficult to come by. Thanks in advance for any help on this one. Here is my UDRGM, I have just modified the real gas example given in the fluent documentation: #include "udf.h" #include "stdio.h" #include "ctype.h" #include "stdarg.h" static int (*usersMessage)(char *,...); static void (*usersError)(char *,...); #define covolume 0.0010044 #define TDatum 288.15 #define PDatum 1.01325e5 #define rDatum 1.2941 #define MW 23 #define RGAS (UNIVERSAL_GAS_CONSTANT/MW) DEFINE_ON_DEMAND(I_do_nothing) { /* This is a dummy function to allow us to use */ /* the Compiled UDFs utility */ } void IDEAL_error(int err, char *f, char *msg) { if (err) usersError("IDEAL_error (%d) from function: %s\n%s\n",err,f,msg); } void IDEAL_Setup(Domain *domain, cxboolean vapor_phase, char *filename, int (*messagefunc)(char *format, ...), void (*errorfunc)(char *format, ...)) { /* Use this function for any initialization or model setups*/ usersMessage = messagefunc; usersError = errorfunc; usersMessage("\nLoading RealIdeal Library: %s\n", filename); } double IDEAL_density(double Temp, double press, double yi[]) { double r=press/((RGAS*Temp)+(covolume*press)); /* Density at Temp & press */ return r; /* (Kg/m^3) */ } double IDEAL_specific_heat(double Temp, double density, double P, double yi[]) { double cp= 1807.39; return cp; /* (J/Kg/K) */ } double IDEAL_enthalpy(double Temp, double density, double P, double yi[]) { double h=Temp*IDEAL_specific_heat(Temp, density, P, yi); return h; /* (J/Kg) */ } double IDEAL_entropy(double Temp, double density, double P, double yi[]) { double CV=RGAS/IDEAL_specific_heat(Temp, density, P, yi); double gamma=IDEAL_specific_heat(Temp, density, P, yi)/CV; double s=CV*log(fabs(Temp/TDatum))+ RGAS*log(fabs((1.0/densitycovolume)/(1.0/rDatumcovolume))); return s; /* (J/Kg/K) */ } double IDEAL_mw(double yi[]) { return MW; /* (Kg/Kmol) */ } double IDEAL_speed_of_sound(double Temp, double density, double P, double yi[]) { double CV=RGAS/IDEAL_specific_heat(Temp, density, P, yi); double gamma=IDEAL_specific_heat(Temp, density, P, yi)/CV; return sqrt(Temp*RGAS*gamma)*(1.0/(1.0(covolume*density))); /* m/s */ } double IDEAL_viscosity(double Temp, double density, double P, double yi[]) { double mu=1.7894e05; return mu; /* (Kg/m/s) */ } double IDEAL_thermal_conductivity(double Temp, double density, double P, double yi[]) { double ktc=0.0242; return ktc; /* W/m/K */ } double IDEAL_rho_t(double Temp, double density, double P, double yi[]) { /* derivative of rho wrt. Temp at constant p */ double rho_t=((covolume*density*density)density)/Temp; return rho_t; /* (Kg/m^3/K) */ } double IDEAL_rho_p(double Temp, double density, double P, double yi[]) { /* derivative of rho wrt. pressure at constant T */ double rho_p=((1.0(density*covolume))*(1.0(density*covolume)))/(RGAS*Temp); return rho_p; /* (Kg/m^3/Pa) */ } double IDEAL_enthalpy_t(double Temp, double density, double P, double yi[]) { /* derivative of enthalpy wrt. Temp at constant p */ return IDEAL_specific_heat(Temp, density, P, yi); } double IDEAL_enthalpy_p(double Temp, double density, double P, double yi[]) { /* derivative of enthalpy wrt. pressure at constant T */ /* general form dh/dpT = (1/rho)*[ 1 + (T/rho)*drho/dTp] */ /* but for ideal gas dh/dp = 0 */ return covolume ; } UDF_EXPORT RGAS_Functions RealGasFunctionList = { IDEAL_Setup, /* initialize */ IDEAL_density, /* density */ IDEAL_enthalpy, /* enthalpy */ IDEAL_entropy, /* entropy */ IDEAL_specific_heat, /* specific_heat */ IDEAL_mw, /* molecular_weight */ IDEAL_speed_of_sound, /* speed_of_sound */ IDEAL_viscosity, /* viscosity */ IDEAL_thermal_conductivity, /* thermal_conductivity */ IDEAL_rho_t, /* drho/dT const p */ IDEAL_rho_p, /* drho/dp const T */ IDEAL_enthalpy_t, /* dh/dT const p */ IDEAL_enthalpy_p /* dh/dp const T */ }; /************************************************** ************/ 

October 21, 2010, 16:13 
Perhaps not the problem

#2 
New Member
Join Date: Jul 2009
Posts: 22
Rep Power: 13 
It turns out that I may be attacking my problem the wrong way. Perhaps somebody can help me out with what I think will answer this question.
From the first post, I have two types of gas one is the gun gas and one is just air. So, since air is already avaiable, I made a new material called "gun_gas" which included my required cp and mw and changed the cell zone for the gun to include the new material. I then patched the gun to the pressure, temperature and velocity distributions as described. However, it would appear that I have forced the "cell zones" associated with the gun to always be the material I have described.. So the question is now, how do I specify an initial condition in the gun that has a different cp molecular weight (gamma, R etc), pressure, temperature, and velocity distribution than in the fluid domain? I suppose this must be similar to forcing some species of gas into the ambient, sort of like a venting tank. Yet I don't seem to be able to find any exmples of this. 

October 22, 2010, 16:28 
Problem Solved

#3 
New Member
Join Date: Jul 2009
Posts: 22
Rep Power: 13 
All,
I'll do my usual trick and answer this question in case anybody is interested in the answer. For this you need to write a user defined multispecies real gas model (example provided in Fluent documentation). In my case, I had two species of gas. When you initialize the problem you can set the mas fraction of gas in each fluid zone that was specified in the UDRGM. 

April 29, 2015, 11:56 

#4 
New Member
Tim Clark
Join Date: Apr 2015
Posts: 3
Rep Power: 7 
Hi Aeroman,
I don't know if you're still active on these forums but it'd be great if you were. I'm trying to tackle almost exactly the same problem as you, I initially tried to solve it use a dynamic mesh but that proved way to computationally intensive so I've moved onto to trying to implement the same solution as you. I was just wondering if you'd be able to shed any more light on how you solved this problem? Did you work on a 64 bit system? I've been trying to compile a real gas UDF and have gotten absolutely nowhere. 

April 29, 2015, 21:34 

#5 
New Member
Join Date: Jul 2009
Posts: 22
Rep Power: 13 
Wow this was a while ago. I'm not sure "active" is the right word for it, but I still use the site primarily as a resource. I'd be happy to help if i can. I ended up getting very good results as compared to experimental data and wrote a paper and presented the results. However it was important in my case that I used both multiple species as well as dynamic adaptive meshing. This helped achieve the blast wave propagated appropriatly and that the peak pressure at the shock was not reduced due to smearing across cells. I used a high performance computing cluster for this work. I'd have to double check specifics. It may be easier if you email me to discuss.


May 1, 2015, 03:57 

#6 
New Member
Tim Clark
Join Date: Apr 2015
Posts: 3
Rep Power: 7 
Cheers Aeroman I'd really appreciate it, I've sent you a pm with a little more info and my contact information


April 8, 2016, 04:34 

#7 
New Member
Join Date: Apr 2016
Posts: 1
Rep Power: 0 
Hi Aeroman and timclark11,
i am facing the same problem can you please help me i have tried to do adaptive meshing but with no success. o can u plz sen me the details on how you tackled the problem. my mail id is abhilashputti37@gmail.com waiting for your reply. thanking you in advance. 

Thread Tools  Search this Thread 
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Superlinear speedup in OpenFOAM 13  msrinath80  OpenFOAM Running, Solving & CFD  18  March 3, 2015 06:36 
OpenFOAM static build on Cray XT5  asaijo  OpenFOAM Installation  9  April 6, 2011 13:21 
Wall Treatment of User defined Turbulence Model  Yang Chung  FLUENT  0  August 23, 2008 12:31 
Real Gas Mixture With Reactions  Jake Cannon  Main CFD Forum  0  January 16, 2007 12:46 
Gas pressure question  Dan Moskal  Main CFD Forum  0  October 24, 2002 23:02 