FLUENT 6  Tips to accelerate convergence of low Reynolds number flow calculations that include surface reactions
Simulations with surface reactions and very low Reynolds numbers may take many iterations to reaching convergence. Is it possible to accelerate the solution? The slow convergence is due to the way the source terms (implicit and explicit contributions) from mass depositions are handled. The implicit contribution is nonzero and provides stability but at the same time slows down the convergence. The convergence can be accelerated by setting the implicit term to zero and accounting for its contribution in the explicit term. The same can be achieved with the help of the attached UDF. 1. Compile and load the UDF given below. 2. The UDF assumes that the first species is nonreacting. Please select an inert species as the first species. If all the species are taking part in the reaction, you must create an additional species and define it as the first species under Mixture Species in Define > Materials panel 3. In the Define > Boundary condition panel, select the fluid zone and turn on the Source Terms option. Next, go to the Source Terms tab and select the rxn_source UDF against the source term for the first species equation. Please note that UDF in this solution makes use of a few advanced macros for which user documentation is not yet available. /********************************************************/ /* UDF to adjust the source terms in surface reaction model */ #include "udf.h" #include "sg.h" #define AP_FRACTION 0.0; /* Implicit function */ DEFINE_SOURCE (rxn_source, c0, t0, dS, eqn) { Thread *t; face_t f ; int nspe = THREAD_NSPE(t0); int ns,n,nspm = nspe1; real At,A[ND_ND],dr0[ND_ND],es[ND_ND],A_by_es,ds,S_FRAC; real diff_term[MAX_SPE_EQNS] ; c_face_loop(c0,t0,n) { f = C_FACE(c0,t0,n); t = C_FACE_THREAD(c0,t0,n); if(FLUID_THREAD_P(t>t0) && THREAD_F_WALL == THREAD_TYPE(t) && THREAD_VAR(t).wall.react && rp_spe_surf) { /* Calculate the Diffusion terms */ F_AREA(A,f,t); At=NV_MAG(A); BOUNDARY_FACE_GEOMETRY(f,t,A,ds,es,A_by_es,dr0); spe_loop(ns,nspm) diff_term[ns]=(A_by_es/ds)*(C_R(c0,t0)*C_DIFF_L(c0,t0,ns,ns)); /* Adjust the source terms */ for( ns=1;ns<nspm;ns++) { WALL_F_CVD_AP(f,t,ns) = diff_term[ns]* AP_FRACTION ; S_FRAC = 1AP_FRACTION ; WALL_F_CVD_S(f,t,ns) = diff_term[ns] * C_YI(c0,t0,ns) * S_FRAC ; } } } return 0. ; } /************************************************************/ 

