|
[Sponsors] |
April 17, 2021, 15:33 |
Erros hooking UDF for recirculation flow
|
#1 |
New Member
Gregori
Join Date: Nov 2018
Location: Uberlândia - Minas Gerais, Brazil
Posts: 8
Rep Power: 7 |
Hi everyone,
I'm writing a UDF to simulate the recirculation flow effect of species in a tubular reactor. This UDF also computes the dilution effect in the tank before the reactor. This UDF is compiled with no errors, however, when I try to hook this UDF in the species mass fraction boundary box I got the message below. I've tried to correct it in many ways by reading the Ansys Customization Manual and forums but with no success. Could anybody help me to find out what is the problem with my code? (attached) I would really appreciate any tips or help, this is an important step in my thesis. ================================================== ============================ Node 0: Process 6096: Received signal SIGSEGV. ================================================== ============================ ================================================== ============================ Node 6: Process 14268: Received signal SIGSEGV. ================================================== ============================ MPI Application rank 0 exited before MPI_Finalize() with status 2 The fl process could not be started. Code:
#include "udf.h" #define ST 2.98 #define zone_ID1 8 #define zone_ID2 7 face_t f; real Ain[ND_ND]; real Aout[ND_ND]; real area_in = 0; real area_out = 0; real initial_mfracBACT = 2.17e-07; real sum_mfracBACT_in = 0.; real sum_mfracBACT_out = 0; real mfracBACT_in; real mfracBACT_out; DEFINE_PROFILE(inlet_mfracBACT,t,i) { Domain *domain = Get_Domain(1); Thread *outletthread = Lookup_Thread(domain,zone_ID2); Thread *inletthread = Lookup_Thread(domain,zone_ID1); if(N_TIME < 1) { F_PROFILE(f,t,i)= initial_mfracBACT; } /* -------------------------------------------------------------*/ else { begin_f_loop(f,outletthread) { F_AREA(Aout,f,outletthread); area_out += NV_MAG(Aout); sum_mfracBACT_out += F_YI(f,outletthread,4)*NV_MAG(Aout);/*In the species list BACT is in the 4th position*/ } end_f_loop(f,outletthread) mfracBACT_out = sum_mfracBACT_out/area_out; /* --------------------------------------------------------------*/ begin_f_loop(f,inletthread) { F_AREA(Ain,f,inletthread); area_in += NV_MAG(Ain); sum_mfracBACT_in += F_YI(f,inletthread,4)*NV_MAG(Ain); } end_f_loop(f,inletthread) mfracBACT_in = sum_mfracBACT_in/area_in; /* ---------------------------------------------------------------*/ begin_f_loop(f,inletthread) /*recirculation effect with dilution effect >> Inletmassfraction-specie1 at every time step= (Outletmassfraction-specie1* time step (s)+ ST*Inletmassfraction-specie1)/(time step (s) *ST)*/ { F_PROFILE(f,t,i) = (F_YI(f, outletthread, 4)*CURRENT_TIMESTEP+ST*F_YI(f, inletthread, 4))/(CURRENT_TIMESTEP+ST); } end_f_loop(f,inletthread) } } |
|
April 19, 2021, 00:09 |
|
#2 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
I think the problem comes from F_YI species mass fraction macro
are you sure that number is 4 ? counting starts from 0 you can initialize case first, then load UDF, not sure that information about mass fraction is available before initialization since fluent v201 you should make your code suitable for parallel computation, few minor changes: Code:
#include "udf.h" #define ST 2.98 #define zone_ID1 8 #define zone_ID2 7 face_t f; real Ain[ND_ND]; real Aout[ND_ND]; real area_in = 0; real area_out = 0; real initial_mfracBACT = 2.17e-07; real sum_mfracBACT_in = 0.; real sum_mfracBACT_out = 0; real mfracBACT_in; real mfracBACT_out; DEFINE_PROFILE(inlet_mfracBACT,t,i) { Domain *domain = Get_Domain(1); Thread *outletthread = Lookup_Thread(domain,zone_ID2); Thread *inletthread = Lookup_Thread(domain,zone_ID1); if(N_TIME < 1) { F_PROFILE(f,t,i)= initial_mfracBACT; } /* -------------------------------------------------------------*/ else { begin_f_loop(f,outletthread) { F_AREA(Aout,f,outletthread); area_out += NV_MAG(Aout); sum_mfracBACT_out += F_YI(f,outletthread,4)*NV_MAG(Aout);/*In the species list BACT is in the 4th position*/ } end_f_loop(f,outletthread) #if RP_NODE area_out = PRF_GRSUM1(area_out); sum_mfracBACT_out = PRF_GRSUM1(sum_mfracBACT_out); #endif mfracBACT_out = sum_mfracBACT_out/area_out; /* --------------------------------------------------------------*/ begin_f_loop(f,inletthread) { F_AREA(Ain,f,inletthread); area_in += NV_MAG(Ain); sum_mfracBACT_in += F_YI(f,inletthread,4)*NV_MAG(Ain); } end_f_loop(f,inletthread) #if RP_NODE area_in = PRF_GRSUM1(area_in); sum_mfracBACT_in = PRF_GRSUM1(sum_mfracBACT_in); #endif mfracBACT_in = sum_mfracBACT_in/area_in; /* ---------------------------------------------------------------*/ begin_f_loop(f,inletthread) /*recirculation effect with dilution effect >> Inletmassfraction-specie1 at every time step= (Outletmassfraction-specie1* time step (s)+ ST*Inletmassfraction-specie1)/(time step (s) *ST)*/ { F_PROFILE(f,t,i) = (F_YI(f, outletthread, 4)*CURRENT_TIMESTEP+ST*F_YI(f, inletthread, 4))/(CURRENT_TIMESTEP+ST); } end_f_loop(f,inletthread) } }
__________________
best regards ****************************** press LIKE if this message was helpful |
|
April 19, 2021, 08:55 |
|
#3 |
New Member
Gregori
Join Date: Nov 2018
Location: Uberlândia - Minas Gerais, Brazil
Posts: 8
Rep Power: 7 |
Dear AlexanderZ,
Thank you very much for taking the time to analyze my code. I'm sure that the index of the Bact species is correct because there are more species involved in the reactions and they are listed starting from 0. I need to recirculate all species, but I'm using this udf to verify the suitability of the code and then I'll copy the code for the other species and make the appropriate changes for each one. I've tried to load the udf with your suggestions before and after initializing, and also after steady simulation, but with no success. The same errors are displayed. Before initialization, the errors appear by clicking initialize, and after initialization and steady simulation, the errors appear by hooking the udf in the inlet boundary. |
|
April 20, 2021, 01:38 |
|
#4 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
to localize the problem try to change F_YI to any constant value, compile and apply. Is problem gone?
do you use multiphase model? in that case may be it is issue with domain definition: The value of domain_id is always 1 for the mixture domain. read mode in Ansys Fluent Customization manual -> Domain Pointer
__________________
best regards ****************************** press LIKE if this message was helpful |
|
April 20, 2021, 15:08 |
|
#5 | |
New Member
Gregori
Join Date: Nov 2018
Location: Uberlândia - Minas Gerais, Brazil
Posts: 8
Rep Power: 7 |
Dear AlexanderZ,
I've made some changes in the UDF based on a thread that I found in this forum. Now the code looks like this. It is working only when I load the case in serial mode, which is already awesome since I can get some results. However, I'm trying to make it applicable also to parallel mode, using the code lines that you suggested above, but it's not working. I'm reading the customization manual and I hope to get some results in parallel mode. Quote:
|
||
April 20, 2021, 23:21 |
|
#6 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
not sure how it could work in serial either parallel
why did you add loop over cell at the end of the code? are you trying to define boundary condition (apply to face) or source (apply to zone)? In case of BC you want to have loop over faces. to have a loop over face you use Code:
begin_f_loop(f, t) {} end_f_loop(f, t); Code:
begin_c_loop(c, t) {} end_c_loop(c, t); Code:
#include "udf.h" DEFINE_PROFILE(species_profile, t, i) { /* Declare variables */ face_t f, c; Thread *outletthread; Thread *inletthread; real Ain[ND_ND], Aout[ND_ND], areain=0, areaout=0, sumspeciein=0, sumspecieout=0, ST=2.98, specieout, speciein; Domain *domain; domain = Get_Domain(1); /* Returns fluid domain pointer (1 = Mixture) */ outletthread = Lookup_Thread(domain, 7); /* Here put the number of the outlet thread. */ inletthread = Lookup_Thread(domain, 8);/* Here put the number of the inlet thread. */ /*--------------------------------------------------------------------*/ begin_f_loop(f, outletthread) { /* Loop through faces of your outlet */ F_AREA(Aout, f, outletthread); /* make A the the face vector */ areaout += NV_MAG(Aout); sumspecieout += F_YI(f, outletthread, 7) * NV_MAG(Aout); } end_f_loop(f, outletthread); #if RP_NODE areaout = PRF_GRSUM1(areaout); sumspecieout = PRF_GRSUM1(sumspecieout); #endif specieout = sumspecieout / areaout; /* specie becomes the average specie */ /*--------------------------------------------------------------------*/ begin_f_loop(f, inletthread) { /* Loop through faces of your outlet */ F_AREA(Ain, f, inletthread); /* make A the the face vector */ areain += NV_MAG(Ain); sumspeciein += F_YI(f, inletthread, 7) * NV_MAG(Ain); } end_f_loop(f, inletthread); #if RP_NODE areain = PRF_GRSUM1(areain); sumspeciein = PRF_GRSUM1(sumspeciein); #endif speciein = sumspeciein / areain; /* specie becomes the average specie */ /*--------------------------------------------------------------------*/ begin_c_loop(c, t) { F_PROFILE(c, t, i) = (specieout*CURRENT_TIMESTEP+ST*speciein)/(CURRENT_TIMESTEP+ST); } end_c_loop(c, t); }
__________________
best regards ****************************** press LIKE if this message was helpful |
|
April 26, 2021, 15:01 |
|
#7 |
New Member
Gregori
Join Date: Nov 2018
Location: Uberlândia - Minas Gerais, Brazil
Posts: 8
Rep Power: 7 |
Dear AlexanderZ,
Indeed the last loop should be over face. Thank you for noting this, I fixed this issue. I'm still working on the UDF trying to make it work in parallel. For serial it is working very well =). |
|
April 26, 2021, 23:33 |
|
#8 |
Senior Member
Alexander
Join Date: Apr 2013
Posts: 2,363
Rep Power: 34 |
the code I've shared above is ready for parallel
__________________
best regards ****************************** press LIKE if this message was helpful |
|
Tags |
mass fraction, recirculation, species, udf |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
UDF bug, for reversing flow direction and magnitude | EngGhost | Fluent UDF and Scheme Programming | 12 | April 20, 2020 08:50 |
How to run multiple cycle pulsetile flow simulation in Ansys fluent using UDF code? | Md Al Amin Sheikh | Fluent UDF and Scheme Programming | 4 | January 28, 2020 12:55 |
volume flow rate for outlet boundry condition and dfine udf for it | raminostadi | FLUENT | 0 | December 24, 2016 02:52 |
UDF for 3D turbulent fully developed flow | howhs | Fluent UDF and Scheme Programming | 0 | August 1, 2013 12:47 |
UDF for transient pressure inlet, mass flow check at nozzle exit and volumetric heat | kokoory | FLUENT | 0 | August 17, 2011 03:07 |