CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   Fluent UDF and Scheme Programming (http://www.cfd-online.com/Forums/fluent-udf/)
-   -   UDF for multicomponent particle vaporization (http://www.cfd-online.com/Forums/fluent-udf/97102-udf-multicomponent-particle-vaporization.html)

Mohsin February 8, 2012 21:55

UDF for multicomponent particle vaporization
 
I have coal particles surrounded by liquid water (hence multi-component). As soon as the wet coal will enter into the domain, the liquid water will evaporate into vapors and dry coal will exit the domain.


FLUENT’s inbuilt code only supports droplet (1 component) vaporization. Hence, UDF has to be written for multi-component particles. Fortunately, Fluent has provided a UDF code to solve multi-component vaporization in the following link:
http://hpce.iitm.ac.in/website/Manuals/Fluent_6.3/fluent6.3/help/html/udf/node64.htm


However, when I compile and hook the above UDF in DPM model of FLUENT and run the simulation, I get 0 evaporation of water. I think, there is some problem in the code and modifications have to be done in the code, as there is no mentioning of vaporization that should start when “Tp>=vap-temp”

The following is the same UDF code as was seen in the link above but boiling portion is neglected(as there is no boiling in my case). Could anyone please explain what should be added here to get vaporization of water from coal particles?

/************************************************** *********************
UDF for defining the heat and mass transport for
multicomponent particle vaporization
************************************************** *********************/

#include "udf.h"

DEFINE_DPM_HEAT_MASS(multicomponent_vaporization,p ,Cp,hgas,hvap,cvap_surf,Z,dydt,dzdt)
{int ns;
Material *sp;
real dens_total = 0.0; /* total vapor density*/
real P_total = 0.0; /* vapor pressure */
int nc = TP_N_COMPONENTS(p); /* number of particle components */
Thread *t0 = P_CELL_THREAD(p); /* thread where the particle is in */
Material *gas_mix = THREAD_MATERIAL(DPM_THREAD(t0, p)); /* gas mixture material */
Material *cond_mix = P_MATERIAL(p); /* particle mixture material*/
cphase_state_t *c = &(p->cphase); /* cell information of particle location*/
real molwt[MAX_SPE_EQNS]; /* molecular weight of gas species */
real Tp = P_T(p); /* particle temperature */
real mp = P_MASS(p); /* particle mass */
/*..............................................*/
real molwt_bulk = 0.; /* average molecular weight in bulk gas */
real Dp = DPM_DIAM_FROM_VOL(mp / P_RHO(p)); /* particle diameter */
real Ap = DPM_AREA(Dp); /* particle surface */
real Pr = c->sHeat * c->mu / c->tCond; /* Prandtl number */
real Nu = 2.0 + 0.6 * sqrt(p->Re) * pow(Pr, 1./3.); /* Nusselt number */
real h = Nu * c->tCond / Dp; /* Heat transfer coefficient*/
real dh_dt = h * (c->temp - Tp) * Ap; /* heat source term*/
dydt[0] += dh_dt / (mp * Cp);
dzdt->energy -= dh_dt;

mixture_species_loop(gas_mix,sp,ns)
{
molwt[ns] = MATERIAL_PROP(sp,PROP_mwi); /* molecular weight of gas species */
molwt_bulk += c->yi[ns] / molwt[ns];
}
/* prevent division by zero */
molwt_bulk = MAX(molwt_bulk,DPM_SMALL);

for (ns = 0; ns < nc; ns++)
{
int gas_index = TP_COMPONENT_INDEX_I(p,ns); /* average molecular weight */
if( gas_index >= 0 )
{
/* condensed material */
Material * cond_c = MIXTURE_COMPONENT(cond_mix, ns);
/* vaporization temperature */
real vap_temp = MATERIAL_PROP(cond_c,PROP_vap_temp);
/* diffusion coefficient */
real D = MATERIAL_PROP_POLYNOMIAL(cond_c,PROP_binary_diffus ivity, c->temp);
/* Schmidt number */
real Sc = c->mu / ( c->rho * D );
/* mass transfer coefficient */
real k = (2. + 0.6 * sqrt(p->Re) * pow(Sc, 1./3.)) * D / Dp;
/* bulk gas concentration (ideal gas) */
real cvap_bulk = c->pressure / UNIVERSAL_GAS_CONSTANT / c->temp
* c->yi[gas_index] / molwt_bulk/ solver_par.molWeight[gas_index];

/* vaporization rate */
real vap_rate = k * molwt[gas_index] * Ap
* (cvap_surf[ns] - cvap_bulk);

/* no vaporization below vaporization temperature, no condensation*/
if (Tp < vap_temp || vap_rate < 0.0)
vap_rate = 0.;

dydt[1+ns] -= vap_rate;
dzdt->species[gas_index] += vap_rate;
/* dT/dt = dh/dt / (m Cp)*/
dydt[0] -= hvap[gas_index] * vap_rate / ( mp * Cp );
/* gas enthalpy source term */
dzdt->energy += hgas[gas_index] * vap_rate;

P_total += cvap_surf[ns];
dens_total += cvap_surf[ns] * molwt[gas_index];
}
}
}

Sujala September 27, 2012 01:16

Hi, How did u solve this problem. I am also doing CFD simulation of pneumatic dryer. I followed your thread and used the multicomponent droplet (particles + water). And used the UDF Define_DPM_HEAT_MASS. And couldn't see any evaporation. I am student from KNU, south korea.

Mark New April 10, 2014 21:16

multicompotent
 
dear sir ,
i am glad to meet you ,have you solved your problems about the vaporization of water using the UDF? NOW,i also meet the same issue ,canyou help me this <thankyou

Leepox April 11, 2014 10:37

Does anybody know if you can use this DPM to define evaporation of water from coal in a combustion rather than multicomponent particle?

SJSW March 30, 2015 06:12

Maybe you can try to remove the dydt[FF] whose "FF" !=0 or 1, since dydt[0] is K/s and dydt[1..] is Kg/s.

Test which dydt[FF] using different "FF" is for water.

In this UDF,
"gas_index = TP_COMPONENT_INDEX_I(p,ns)"
......I don't know how to find the index and discover the number of water.
what I can do is to test.

Melvin November 10, 2016 02:01

Hi Mohsin
Do you have complite your fluent simulation??? Pleas help me.....
My model almost same to your model but in transient. It's very difficult to make UDF to solve that problem
thanks.....

SJSW November 15, 2016 02:35

I always hope that someone who get the solution could share their method in the forum.
--
"dydt[0]" is the temperature of the particle.(Unit:K/s)
You can figure this out by this line "dydt[0] += dh_dt / (mp * Cp);".

"dydt[1]~dydt[aa]" is the mass fraction of the components in a particle. (Unit:Kg/s)
dydt[0] is for temperature, so the value range of "aa" starts from 1.

"dzdt->energy" is the enthalpy changing rate of the gas mixture in the cell where the particle is located.. (Unit:J/s)
You can figure this out by the line "dzdt->energy += hgas[gas_index] * vap_rate;".

"dzdt->species[gas_index]" is the mass changing rate of the component gas in the cell where the particle is located.(Unit: kg/s)
The value of "gas_index" starts from 0.

So what are the meanings of "[gas_index]" and "[aa]" ?

For example,
dydt[1]~dydt[3] = h2, o2, n2
dzdt->species[0]~dzdt->species[10] = c2h2, ch4, c3h8, h2o, n2o, n2 ...
This means 3 components in a particle mixture and 11 component in the gas mixture.
First, check your material list in "Mixture Species→Edit→Elected Species", and make sure the order is correct.
Secondly, make sure "injection→Components→Evaporating Species" is correct.

For example, you want that h2 and o2 become h2o.
dydt[1] and dydt[2] will decrease as depicted in this line "dydt[1+ns] -= vap_rate".
dzdt->species[3], that is the fourth component h2o, will increase as depected in this line "dzdt->species[gas_index] += vap_rate;".

Melvin November 20, 2016 04:26

Quote:

Originally Posted by SJSW (Post 625374)
I always hope that someone who get the solution could share their method in the forum.
--
"dydt[0]" is the temperature of the particle.(Unit:K/s)
You can figure this out by this line "dydt[0] += dh_dt / (mp * Cp);".

"dydt[1]~dydt[aa]" is the mass fraction of the components in a particle. (Unit:Kg/s)
dydt[0] is for temperature, so the value range of "aa" starts from 1.

"dzdt->energy" is the enthalpy changing rate of the gas mixture in the cell where the particle is located.. (Unit:J/s)
You can figure this out by the line "dzdt->energy += hgas[gas_index] * vap_rate;".

"dzdt->species[gas_index]" is the mass changing rate of the component gas in the cell where the particle is located.(Unit: kg/s)
The value of "gas_index" starts from 0.

So what are the meanings of "[gas_index]" and "[aa]" ?

For example,
dydt[1]~dydt[3] = h2, o2, n2
dzdt->species[0]~dzdt->species[10] = c2h2, ch4, c3h8, h2o, n2o, n2 ...
This means 3 components in a particle mixture and 11 component in the gas mixture.
First, check your material list in "Mixture Species→Edit→Elected Species", and make sure the order is correct.
Secondly, make sure "injection→Components→Evaporating Species" is correct.

For example, you want that h2 and o2 become h2o.
dydt[1] and dydt[2] will decrease as depicted in this line "dydt[1+ns] -= vap_rate".
dzdt->species[3], that is the fourth component h2o, will increase as depected in this line "dzdt->species[gas_index] += vap_rate;".

Thanks SJSW
After I modified the UDF as your suggestion where gas index changed based on the number of particle component or species of gas. The Simulation still get an error. The errors are:
1. Simulation still gets access violation and the simulation stop, or
2. Sometimes simulation can run normally but after I check the total mass of Particle, there is no vaporization occur (total mass not reduce) .
Can you give other suggestion to solve my problem???
Thanks for your response before ??

vincentl1 November 28, 2016 04:10

Hi,Melvin
I am studying this official udf case too,while,i get confused by two macros listed below.
real Dp = DPM_DIAM_FROM_VOL(mp / P_RHO(p)); /* particle diameter */
real Ap = DPM_AREA(Dp); /* particle surface */
i can not find "DPM_DIAM_FROM_VOL" and "DPM_AREA" from the udf manual(version 14.5).Are they custom functions that didn't posted along with the main code? Actually,there are many macros like that in the code.can you tell why? thanks....

vincentl1 November 28, 2016 04:22

Hi,SJSW
I am studying this official udf case too,while,i get confused by two macros listed below.
real Dp = DPM_DIAM_FROM_VOL(mp / P_RHO(p)); /* particle diameter */
real Ap = DPM_AREA(Dp); /* particle surface */
i can not find "DPM_DIAM_FROM_VOL" and "DPM_AREA" from the udf manual(version 14.5).Are they custom functions that didn't posted along with the main code? Actually,there are many macros like that in the code.can you tell why? thanks....

SJSW November 28, 2016 04:30

"DPM_DIAM_FROM_VOL" and "DPM_AREA" are pre-defined macro.
You can find them in udf.h or other h file.

The manual did not show all the macroes and definitions.
Maybe there is a complete manual about UDF.
However, In most conditions, you have to ask for the support from ANSYS.

The UDF must be modified to match the settings of the case.
Maybe material properties, boundary conditions, Zone ID, ...and how they are defined in the codes...so I suggest that one could try to realize the meaning of the code.

vincentl1 November 28, 2016 06:00

ha!,I find their definitions in dpm_tools.h.Thank you so much!

vincentl1 November 29, 2016 21:32

Hi,SJSW
i've compiled the udf file sucessfully in my case.however,i didn't know where to hook. There are two UDF options in decrete phase model.One is under the main dialog board of DPM and the other is under the injection board. My problem is that nothing seemd to have happened in the two places after i complied correctly.My version is 14.5.can you give me an advice?Thank you!

SJSW November 29, 2016 22:36

You can go to ANSYS Help→Fluent→Customization Manual→Creating and Using User Defined Functions→Hooking UDFs to ANSYS Fluent→ Hooking Discrete Phase Model (DPM) UDFs.
There are descriptions there.


All times are GMT -4. The time now is 09:12.