What's wrong with my UDF?
Hi everybody:
This article is a little too long. I would like to thank you first if you are so insterested to go throuth it. I want to solve heat and moisture transfer analysis. This problem is the heat tranfer in conjunction with moisture transfer. This is a 3D problem. The solution domain is cube of dense bale. The governing equation is following for 1D: dM / dt = Dm * d^2 m / dx^2 dT / dt = alpha * d^2 T / dx^2 + 1 / Cp * dM / dt * Lg M : is the moisture t : time Dm : moisture diffusivity T : temperature alpha = thermal diffusivity Cp : specific heat at constant pressure Lg = L * (1 + 8.31 * exp(0.436 * m) L = 2440 The boundary conditions are at surface M = (Mi  Me)* exp(Km * t) + Me Km : moisture sorption rate, Km = 1.83e4 T = 45 deg C The initial condition T = 18 deg C M = 0.85 both T and M is uniform. I want to solve this problem with Fluent v.5.5. I add an userscalar transport equation to solve the moisture. Then determine the time derivative of moisture and substitute it into the energy equation as the source term. I employed the UDF function to do my job. However I encountered some problem. The compilation of UDF is ok, but something is wrong in excution. The error message is as follow : Error: FLUENT received fatal signal (ACCESS_VIOLATION) 1. Note exact events leading to error. : : Error Object: () I woundered that there is some bugs in my UDF codes. Maybe it is due to wrong type of passed argument or incorrect usages of some subroutine. I hope that somebody help me to debug my codes. My code is as follow : #include "udf.h" #define rho 1000 #define l 2440.0 #define mi 100.0 #define me 50.0 #define km 1.83e4 #define el 1.0 DEFINE_UDS_UNSTEADY(uds_unsteady, cell, thread, i, apu, su) { float time_step, vol, phi_old, phi_curr; time_step= RP_Get_Real("physicaltimestep"); vol = C_VOLUME(cell,thread); phi_old = C_STORAGE_R(cell,thread,SV_UDSI_M1(i)); phi_curr = C_UDSI(cell,thread,i); *apu = rho*vol*phi_curr/time_step; /*central coefficient part*/ *su = rho*vol*phi_old/time_step; /*source term part*/ } DEFINE_SOURCE(usr_ensource, cell, thread, ds, eqn) { real source; float lg,A,phi_curr,phi_old,time_diff,vol,time_step; time_step= RP_Get_Real("physicaltimestep"); vol = C_VOLUME(cell,thread); phi_old = C_STORAGE_R(cell,thread,SV_UDSI_M1(0)); phi_curr = C_UDSI(cell,thread,0); time_diff = (phi_curr  phi_old) / time_step; /* uscl = C_UDSI(cell,thread,0); */ lg = el * ( 1.0 + 8.31 * exp(1.0 * 0.436 * phi_curr) ); A=1.0/0.5*lg; source = A * time_diff * vol * rho; ds[eqn] = 0.0; return source; } DEFINE_PROFILE(usr_bndry, thread, position) { face_t f; begin_f_loop(f,thread); { real flow_time = RP_Get_Real("flowtime"); F_PROFILE(f,thread,position) = (mi  me) * exp(  1.0 * km * flow_time) + me; } end_f_loop(f,thread); } Thanks again 
Re: What's wrong with my UDF?
(1). Why not try to write a finitedifference code for this set of parabolic differential equations. (2). Most numerical method books should give you some schemes to start with. (a good reference book is: Applied Numerical Methods by Carnaham,Luther, Wilkes)

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