|
[Sponsors] |
Urgent! UDF error "implicit declaration of function" |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
June 17, 2010, 17:54 |
Urgent! UDF error "implicit declaration of function"
|
#1 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
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 = t-VNin*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) } |
|
June 17, 2010, 17:57 |
|
#2 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
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. |
|
June 17, 2010, 18:24 |
|
#3 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
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 |
|
June 17, 2010, 18:30 |
|
#4 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
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. |
|
June 17, 2010, 18:35 |
|
#5 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
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 |
|
June 17, 2010, 18:37 |
|
#6 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
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 |
|
June 17, 2010, 18:39 |
|
#7 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
/* 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 = t-VNin*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) } |
|
June 17, 2010, 18:39 |
|
#8 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
Is it possible that a function libarary containing erf is NOT installed so I can NOT use erf?
|
|
June 17, 2010, 18:43 |
|
#9 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
I tried #include <math.h> with no luck. got the same error message
|
|
June 17, 2010, 18:46 |
|
#10 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
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 |
|
June 17, 2010, 18:54 |
|
#11 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
Thank you DoHander,
I am in a rush. And It just came to my mind that I can use (1-exp(-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 |
|
June 17, 2010, 19:01 |
|
#12 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
You use a very crude approximation for erf, you will get about 10^-1 error if you use (1-exp(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 |
|
June 17, 2010, 19:02 |
|
#13 |
Senior Member
Join Date: Nov 2009
Posts: 411
Rep Power: 20 |
||
June 17, 2010, 19:11 |
|
#14 |
Member
Ivan
Join Date: May 2009
Posts: 85
Rep Power: 17 |
Great! that is indeed a better approximation with elementary functions. Thanks!!
Ivan |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[swak4Foam] GroovyBC the dynamic cousin of funkySetFields that lives on the suburb of the mesh | gschaider | OpenFOAM Community Contributions | 300 | October 29, 2014 19:00 |
Urgent, Urgent, a UDF problem, PLEASE HELP!!! | Max | FLUENT | 1 | September 24, 2010 21:30 |
So many questions in DPM & UDF - Help! URGENT! | Prashanth | FLUENT | 0 | March 3, 2009 23:26 |
DecomposePar links against liblamso0 with OpenMPI | jens_klostermann | OpenFOAM Bugs | 11 | June 28, 2007 18:51 |
URGENT ! UDF ERROR! | Prateep Chatterjee | FLUENT | 6 | October 16, 2001 20:20 |