|
[Sponsors] |
Direct condensation of steam to subcooled water spray |
![]() |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
![]() |
![]() |
#1 |
New Member
mohammad reza
Join Date: Apr 2014
Location: Iran-Isfahan
Posts: 10
Rep Power: 10 ![]() |
As in the article " https://doi.org/10.1016/j.cep.2019.04.015 ", I want to simulate direct condensation of steam to subcooled water spray.
The results are good when I simulate only hydrodynamics, but when I compile the UDF to mass transfer and add source terms, In the first few iterations, it diverges and gives the following error: "WARNING: Invalid cp (0.000000e+00 J/kgK) for water-vapor at temperature nan K Error at host: floating point exception Error: floating point exception Error Object: #f" I have attached the UDF to this post. I would be grateful if you could help me. Last edited by m.r.soufivand; November 18, 2021 at 11:00. Reason: I forgot to upload the attachment |
|
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,256
Rep Power: 33 ![]() ![]() |
your code
Code:
#include "udf.h" #include "math.h" #include "sg.h" #include "sg_mphase.h" #include "flow.h" #include "mem.h" #include "metric.h" #define R 8.314 #define pi 3.14159 #define T_SAT 373.15 #define h_lv 2455.1345e3 #define M 18.0 #define Beta 0.6666 #define a 23.224 #define b 3841.22 #define cc -45.0 DEFINE_ADJUST(store_gradient, domain) { Thread *t; Thread **pt; cell_t c; int phase_domain_index = 0.; Domain *pDomain = DOMAIN_SUB_DOMAIN(domain,phase_domain_index); Alloc_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL); Scalar_Reconstruction(pDomain, SV_VOF,-1,SV_VOF_RG,NULL); Scalar_Derivatives(pDomain,SV_VOF,-1,SV_VOF_G,SV_VOF_RG,Vof_Deriv_Accumulate); mp_thread_loop_c (t,domain,pt) if (FLUID_THREAD_P(t)) { Thread *ppt = pt[phase_domain_index]; begin_c_loop (c,t) { C_UDMI(c,t,0) = C_VOF_G(c,ppt)[0]; C_UDMI(c,t,1) = C_VOF_G(c,ppt)[1]; C_UDMI(c,t,2) = NV_MAG(C_VOF_G(c,ppt)); } end_c_loop (c,t) } Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL); } DEFINE_SOURCE(vap_src, cell, pri_th, dS, eqn) { Thread *mix_th, *sec_th; real m_dot_v,T_v,T_l,P_v,P_sat; mix_th = THREAD_SUPER_THREAD(pri_th); sec_th = THREAD_SUB_THREAD(mix_th,1); T_v=C_T(cell,pri_th); P_v=C_P(cell,pri_th); T_l=C_T(cell,sec_th); P_sat=exp(a-(b/(T_l+cc))); if(C_T(cell,mix_th)>=T_SAT) { m_dot_v = 0.0; dS[eqn] = 0.0; } if(C_T(cell,mix_th)<=T_SAT) { m_dot_v =C_VOF(cell,sec_th)*(2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); C_UDMI(cell,mix_th,3) =m_dot_v; dS[eqn] = 0.0; } return m_dot_v ; } DEFINE_SOURCE(liq_src,cell,sec_th,dS,eqn) { Thread * mix_th, *pri_th; real m_dot_l,T_v,T_l,P_v,P_sat; mix_th=THREAD_SUPER_THREAD(sec_th); pri_th=THREAD_SUB_THREAD(mix_th,0); T_v = C_T(cell,pri_th); P_v = C_P(cell,pri_th); T_l = C_T(cell,sec_th); P_sat=exp(a-(b/(T_l+cc))); if(C_T(cell,mix_th)>=T_SAT) { m_dot_l = 0.0; dS[eqn] = 0.0; } if(C_T(cell,mix_th)<=T_SAT) { m_dot_l = C_VOF(cell,sec_th)*(2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); C_UDMI(cell,mix_th,4) =m_dot_l; dS[eqn] =(2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); } return m_dot_l; } DEFINE_SOURCE(enrg_src,cell,mix_th,dS,eqn) { Thread *pri_th, *sec_th; real m_dot,T_v,T_l,P_v,P_sat; pri_th = THREAD_SUB_THREAD(mix_th,0); sec_th = THREAD_SUB_THREAD(mix_th,1); T_v=C_T(cell,pri_th); P_v=C_P(cell,pri_th); T_l=C_T(cell,sec_th); P_sat=exp(a-(b/(T_l+cc))); if(C_T(cell,mix_th)>=T_SAT) { m_dot =0.0; dS[eqn] =0.0; } if(C_T(cell,mix_th)<=T_SAT) { m_dot=C_VOF(cell,sec_th)*(2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); C_UDMI(cell,mix_th,5) =h_lv*m_dot; dS[eqn]= 0.0; } return h_lv*m_dot; } was #define h_lv 2455.1345e3 to be #define h_lv 2.4551345e6 from your error I may assume you have problem with temperature convergence. you may decrease time step check your mesh check boundary conditions
__________________
best regards ****************************** press LIKE if this message was helpful |
|
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 25 ![]() |
I tried to refactor your code, because you repeated your equations a few times:
Code:
#include "udf.h" #include "math.h" #include "sg.h" #include "sg_mphase.h" #include "flow.h" #include "mem.h" #include "metric.h" #define R 8.314 #define pi 3.14159 #define T_SAT 373.15 #define h_lv 2455.1345e3 #define M 18.0 #define Beta 0.6666 #define a 23.224 #define b 3841.22 #define cc -45.0 DEFINE_ADJUST(store_gradient, domain) { Thread *t; Thread **pt; cell_t c; int phase_domain_index = 0.; Domain *pDomain = DOMAIN_SUB_DOMAIN(domain,phase_domain_index); Alloc_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL); Scalar_Reconstruction(pDomain, SV_VOF,-1,SV_VOF_RG,NULL); Scalar_Derivatives(pDomain,SV_VOF,-1,SV_VOF_G,SV_VOF_RG,Vof_Deriv_Accumulate); mp_thread_loop_c (t,domain,pt) if (FLUID_THREAD_P(t)) { Thread *ppt = pt[phase_domain_index]; begin_c_loop (c,t) { C_UDMI(c,t,0) = C_VOF_G(c,ppt)[0]; C_UDMI(c,t,1) = C_VOF_G(c,ppt)[1]; C_UDMI(c,t,2) = NV_MAG(C_VOF_G(c,ppt)); } end_c_loop (c,t) } Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL); } real ds(Thread* pri_th, Thread* sec_th, cell_t cell) { real T_v, T_l, P_v, P_sat, dS; if(C_T(cell,mix_th)>=T_SAT) { dS = 0; } else { T_v=C_T(cell,pri_th); P_v=C_P(cell,pri_th); T_l=C_T(cell,sec_th); P_sat=exp(a-(b/(T_l+cc)));dS; dS = (2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); } return dS; } real mdot(Thread* pri_th, Thread* sec_th, cell_t cell) { real T_v, T_l, P_v, P_sat, m_dot; if(C_T(cell,mix_th)>=T_SAT) { m_dot = 0; } else { T_v=C_T(cell,pri_th); P_v=C_P(cell,pri_th); T_l=C_T(cell,sec_th); P_sat=exp(a-(b/(T_l+cc))); m_dot = C_VOF(cell,sec_th)*(2.0*Beta/(2.0-Beta))*C_UDMI(cell,mix_th,2)*sqrt(M/(2*pi*R))*((P_v/sqrt(T_v))-(P_sat/sqrt(T_l))); } return m_dot; } DEFINE_SOURCE(vap_src, cell, pri_th, dS, eqn) { Thread* mix_th = THREAD_SUPER_THREAD(pri_th); Thread* sec_th = THREAD_SUB_THREAD(mix_th,1); real m_dot_v=mdot(pri_th, sec_th, cell); C_UDMI(cell,mix_th,3) = m_dot_v; dS[eqn] = 0.0; return m_dot_v ; } DEFINE_SOURCE(liq_src,cell,sec_th,dS,eqn) { Thread* mix_th=THREAD_SUPER_THREAD(sec_th); Thread* pri_th=THREAD_SUB_THREAD(mix_th,0); real m_dot_l=mdot(pri_th, sec_th, cell); C_UDMI(cell,mix_th,4) = m_dot_l; dS[eqn] = ds(pri_th, sec_th, cell); return m_dot_l; } DEFINE_SOURCE(enrg_src,cell,mix_th,dS,eqn) { Thread* pri_th = THREAD_SUB_THREAD(mix_th,0); Thread* sec_th = THREAD_SUB_THREAD(mix_th,1); real m_dot=mdot(pri_th, sec_th, cell); C_UDMI(cell,mix_th,5) = h_lv*m_dot; dS[eqn]= 0.0; return h_lv*m_dot; } I also noticed that only one of your sources specifies dS (as non-zero); the code above is (relatively) easy to change if you want to improve that.
__________________
"The UDF library you are trying to load (libudf) is not compiled for parallel use on the current platform" is NOT the error after compiling. It is the error after loading. To see compiler errors, look at your screen after you click "build". |
|
![]() |
![]() |
![]() |
![]() |
#4 |
New Member
mohammad reza
Join Date: Apr 2014
Location: Iran-Isfahan
Posts: 10
Rep Power: 10 ![]() |
Thanks so much for your response and help. I try to use your code but gives the error is that mix_th is not defined.
|
|
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 25 ![]() |
I see, the definitions for ds and mdot should also have this:
Code:
Thread* mix_th = THREAD_SUPER_THREAD(pri_th);
__________________
"The UDF library you are trying to load (libudf) is not compiled for parallel use on the current platform" is NOT the error after compiling. It is the error after loading. To see compiler errors, look at your screen after you click "build". |
|
![]() |
![]() |
![]() |
Tags |
condensation, divergence issue, mass transfer, udf |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Mass imbalance problem in multiphase water and steam CFX case | Antech | CFX | 1 | October 26, 2020 04:03 |
VOF Steam condensation | Andrea159357 | FLUENT | 4 | March 19, 2019 14:20 |
No liquid water exist in my Fuel Cell simulation | fatchang | FLUENT | 19 | October 15, 2018 14:27 |
Steam Mixture material for Wall condensation | coolcrasher | CFX | 2 | October 19, 2015 09:23 |
How to solve condensation case with HBM model (NO WATER)? | kiwishall | CFX | 0 | December 23, 2013 20:47 |