Urgent! UDF error "implicit declaration of function"
Urgent, will wait online for answers!
After compiling the following UDF, I see the error message "inlet_u.c:39: warning: implicit declaration of function erf". And the simulation crash if I continue using this UDF. What is the reason? and How can I solve it? Thanks! /* UDF for specifying a transient inlet velocity profile boundary condition */ #include "udf.h" #include "math.h" #define PI 4.*atan(1.) #define RT 0.00183 real VM=21.911; real VNin=0.01; /**************** x velocity ****************/ DEFINE_PROFILE(v_x, thread, index) { face_t f; real t,dt,u; real D1,D2,D3,D4,D5,D6,D7; real G1,G2,G3; /* wind gust model parameters */ D1=VM*700; D2=7/(3*RT); D3=1; D4=3/(3*RT); D5=0.15; D6=7/(10*RT); D7=2*PI/(RT/10); /* get flow time */ t = CURRENT_TIME; /* u = X Velocity */ if (t<=VNin*RT) { u = VM;} else { /* get dt */ dt = tVNin*RT; /* wind gust model */ G1=D1*dt*exp(D2*dt); G2=D3*erf(D4*dt); G3=D5*exp(D6*dt)*sin(D7*dt); /* get u */ u = VM+G1+G2+G3;} /* assign X velocity */ begin_f_loop(f, thread) { F_PROFILE(f, thread, index) = u; } end_f_loop(f, thread) } 
The only problem is the function erf. But I have included math.h, anything else needs to be done? Or math.h is NOT the right header file to include if I want to use function erf?
erf is error function. 
I suppose you are on a Windows system ? If yes the erf function is not implemented in math.h :) . So basically you will need to implement a custom version of erf in your UDF function.
If you are on Linux erf should be already defined in math.h so you need to search for the error in a different place. Do 
Thank you so much for replying.
I run Fluent on Linux. I searched the src folder (it contains the udf.h file) for the file math.h and did NOT find it. If I have to implement a custom version of erf, how to do it? I checked the UDF manual, it says "C compilers include a library of standard mathematical and I/O functions", but it does not say what if I want to use a function like erf. 
I would recommend you to use a good book like:
http://books.google.ca/books?id=1aAO...page&q&f=false for understanding the theory (erf is not so easy to implement in C). BTW you can not use the code from the book because it is very C++ (template classes and so on) and Fluent won't accept it, but probably you can modify the code ... Do 
Hey,
try the same code but with: #include <math.h> instead of: #include "math.h" Let me know if this has solved your problem. Do 
/* UDF for specifying a transient inlet velocity profile boundary condition */
#include "udf.h" #include <math.h> #define PI 4.*atan(1.) #define RT 0.00183 real VM=21.911; real VNin=0.01; /**************** x velocity ****************/ DEFINE_PROFILE(v_x, thread, index) { face_t f; real t,dt,u; real D1,D2,D3,D4,D5,D6,D7; real G1,G2,G3; /* wind gust model parameters */ D1=VM*700; D2=7/(3*RT); D3=1; D4=3/(3*RT); D5=0.15; D6=7/(10*RT); D7=2*PI/(RT/10); /* get flow time */ t = CURRENT_TIME; /* u = X Velocity */ if (t<=VNin*RT) { u = VM;} else { /* get dt */ dt = tVNin*RT; /* wind gust model */ G1=D1*dt*exp(D2*dt); G2=D3*erf(D4*dt); G3=D5*exp(D6*dt)*sin(D7*dt); /* get u */ u = VM+G1+G2+G3;} /* assign X velocity */ begin_f_loop(f, thread) { F_PROFILE(f, thread, index) = u; } end_f_loop(f, thread) } 
Is it possible that a function libarary containing erf is NOT installed so I can NOT use erf?

I tried #include <math.h> with no luck. got the same error message

It depends of your Linux system, but yes it is possible to not have a C compiler installed.
What you can do is to give a search on all your system after math.h (probably it is in /usr/... but better check all), once you find math.h you can check directly if your particular system implements erf (on Ubuntu 9.04 I know the function is implemented). If you want I can send you my messenger id (in a private message) and we will be able to talk faster. Do 
Thank you DoHander,
I am in a rush. And It just came to my mind that I can use (1exp(D4*t)) to replace erf function in the code, and it turns out that the velocity profile looks very similar to the one using erf. Engineer must make approximations all the time anyway. I will come back to solve this problem later. :) thanks again. Ivan 
You use a very crude approximation for erf, you will get about 10^1 error if you use (1exp(x)) instead of the actual erf.
The good thing is that if you were capable to compile your code using the exp function you have math.h on your system :). The bad thing is that probably you don't have an erf implementation. Do 

Great! that is indeed a better approximation with elementary functions. Thanks!!
Ivan 
All times are GMT 4. The time now is 07:20. 