|
[Sponsors] |
December 18, 2007, 05:41 |
compatibility problem of UDF on LINUX
|
#1 |
Guest
Posts: n/a
|
I wrote a UDF for defining a transient pressure boundary condition and it works perfectly on Windows Platform. The issue is that I must start the computation on a computer with more CPU that is on a Linux Platform and it doesn't work anymore at all!!! Here my UDF: (For testing it, I use a simple right tube: I can send you the .cas and .dat file if you want. My e-mail: manuweb_21@hotmail.com)
#include "udf.h" /************************************************** *******/ /****************define the constants:***************************************/ /*******************************************/ FILE *fp; #define A_ef 5.0e-3 /*effective area of valve*/ #define V_d 5.0 /*volume of deposit*/ #define R 287.0 /*id. gas cst. for air*/ #define gam 1.4 /*ratio of spec. heat*/ #define cp R*gam/(gam-1) /*spec. heat*/ #define p_atm 1.01325e5 /*atm. pressure*/ /* variables used to compute new boundary condition (GLOBAL!!)*/ real m_d2; /*mass inside deposit(after)*/ real p_d2; /*pressure inside deposit(after)*/ real T_d2; /*temperature inside deposit(after)*/ /* variable for applying macro only at first iteration (GLOBAL!!)*/ int last_ts = -1; int counter = 0; DEFINE_PROFILE(pressure_realiment,t,i) { /**************************************************/ /*****************define the variables***************************************/ /**********************************************/ /* fluent variable */ face_t f; /*face variablenly face, thread already provided as argument*/ /* variables used to initialize the mass-area averaged function loop */ real A_3D = 0.0; /* total area */ real ma_sum = 0.0; /*mass-area sum*/ real p_sum = 0.0; /*pressure sum*/ real T_sum = 0.0; /*temperature sum*/ real mf_sum = 0.0; /*mass flow sum*/ real A[ND_ND]; /*array of all face area*/ real mf_i; /*local mass flow through each face*/ int warning = 0; /*cell number with zero-mass flow*/ /* variables used to compute new boundary condition*/ real m_d1; /*mass inside deposit(first)*/ real p_3D; /*pressure out of 3D*/ real T_3D; /*temperature out of 3D*/ real mf_3D; /*mass flow out of 3D*/ real mf_v; /*mass flow though valve*/ real p_d1; /*pressure inside deposit(first)*/ real T_d1; /*temperature inside deposit*/ real exp_arg; /*argument of exp-function*/ /*index of timesteps*/ int n = RP_Get_Integer("time-step"); real dt = RP_Get_Real("physical-time-step"); printf("\nlast_ts=%i\n",last_ts); if (n!=last_ts) { counter = counter + 1; printf("\napplying macro for the %ith time\n",counter); last_ts = n; printf("\n##### OUTPUT OF 3D SIMULATION: #####\n"); printf("current timestep n=%i\n",n); printf("timestep size dt=%f\n",dt); /*************************************************/ /***********compute the average value (i.e. the sum)*************************/ /*********************************************/ begin_f_loop(f,t) { /*obtain the area (=vector) of each face*/ F_AREA(A,f,t); /*substitute local mass flow variable*/ mf_i = F_FLUX(f,t); /*warning if zero mass flow in cellossible division by zero!*/ if (mf_i == 0.) { warning = warning+1; printf("\n::::: WARNING: THERE IS A ZERO MASS FLOW IN CELL %i :::::\n",warning); } p_sum = p_sum + (F_P(f,t) * NV_MAG(A) * mf_i); T_sum = T_sum + (F_T(f,t) * NV_MAG(A) * mf_i); ma_sum = ma_sum + NV_MAG(A)*mf_i; A_3D = A_3D + NV_MAG(A); /*tot area of 3D outlet boundary*/ mf_sum = mf_sum + mf_i; /*tot mass flow*/ } end_f_loop(f,t) /* warning to avoid division by zero */ if (ma_sum==0) { printf("\n::::: WARNING: THERE IS A ZERO TOTAL MASS FLOW :::::\n"); } /*assign them to the averaged values: */ p_3D=p_sum/ma_sum; /*mass-area averaged pressure out of 3D*/ T_3D=T_sum/ma_sum; /*mass-area averaged temperature out of 3D*/ mf_3D= mf_sum; /*mass flow out of 3D*/ /* test: write result in console */ printf("A_3D=%f\n",A_3D); printf("mf_3D=%f\n",mf_3D); printf("T_3D=%f\n",T_3D); printf("p_3D=%f\n",p_3D); /************************************************** **************************/ /*****************initialise the pressure in deposit ************************/ /************************************************** **************************/ if (n==0 || n==1) /*only at the 2 first timesteps:because boundary condition doesn't work at onlt the first one (???)*/ { p_d1 = p_3D; /*pressure of deposit = 3D*/ T_d1 = T_3D; /*temp. of deposit = 3D*/ printf("\n::::: TEMPERATURE AND PRESSURE INITIALIZED AT FIRST TIMESTEP :::::\n"); printf("p_d1=%f\n",p_d1); printf("T_d1=%f\n",T_d1); } else { p_d1 = p_d2; /*takes the output value of the last timestep*/ T_d1 = T_d2; } /**********************************************/ /******************compute the new values************************************/ /*****************************************/ printf("\n##### RESULTS OF THE PREVIOUS SIMULATION: #####\n"); mf_v = A_ef*p_d1/sqrt(R*T_d1)*sqrt(2*gam/(gam-1))*sqrt(pow(p_atm/p_d1,2/gam)-pow(p_atm/p_d1,(gam+1)/gam)); m_d1 = p_d1*V_d/R/T_d1; /*mass inside deposit*/ m_d2 = m_d1+(mf_3D-mf_v)*dt; /*argument of exp-function*/ exp_arg = mf_3D*dt/p_d1/V_d*(0.5*SQR(mf_3D*R*T_3D/p_3D/A_3D) + cp*(T_3D-T_d1)); T_d2 = T_d1*pow(m_d2/m_d1*exp(exp_arg),gam-1); p_d2 = m_d2*R*T_d2/V_d; printf("p_d1=%f\n",p_d1); printf("T_d1=%f\n",T_d1); printf("m_d1=%f\n",m_d1); printf("\n##### RESULTS OF THE COMPUTATION (REALIMENT FOR THE NEXT TIMESTEP): #####\n"); printf("mf_v=%f\n",mf_v); printf("m_d2=%f\n",m_d2); printf("T_d2=%f\n",T_d2); printf("p_d2=%f (=REALIMENT)\n\n",p_d2); /*write the results in a txt. file*/ /*write column titles*/ if (n==0) { fp = fopen("deposit_output.txt","a"); fprintf(fp,"tstep\tTd_1\tp_d1\tm_d1\tmf_v\tm_d2\tT _d2\tp_d2\tT_3D\tp_3D\tmf_3D\n"); fclose(fp); } fp = fopen("deposit_output.txt","a"); fprintf(fp,"%d\t%12.6f\t%12.6f\t%12.6f\t%12.6f\t%1 2.6f\t%12.6f\t%12.6f\t%12.6f\t%12.6f\t%12.6f\n", n,T_d1,p_d1,m_d1,mf_v,m_d2,T_d2,p_d2,T_3D,p_3D,mf_ 3D); fclose(fp); /************************************************** */ /***********define the new pressure value over the whole face****************/ /*************************************************/ begin_f_loop(f,t) /*loop over the whole boundary */ { F_PROFILE(f,t,i) = p_d2; /*output for re-alimentation */ /*printf("p_outlet= %f\n",F_P(f,t));*/ } end_f_loop(f,t) } else {printf("\nnot applying macro!!!\n");} } |
|
December 18, 2007, 06:16 |
Re: compatibility problem of UDF on LINUX
|
#2 |
Guest
Posts: n/a
|
hi, save your UDF with a different name and deletes all the libudf in your working directory before compiling. It is a problem of text editor
|
|
December 18, 2007, 06:29 |
Re: compatibility problem of UDF on LINUX
|
#3 |
Guest
Posts: n/a
|
You should also check the end-of-line delimiter (try notepad++ http://notepad-plus.sourceforge.net for example). In this text editor, you will change EOF to UNIX. Also, when you compile on unix, you use generally use the gcc compiler instead of visual c++ which might be less tolerant to coding abuses (even if vs seems more restrictive in my own limited experience).
|
|
December 18, 2007, 07:29 |
Re: compatibility problem of UDF on LINUX
|
#4 |
Guest
Posts: n/a
|
Thanks very much. Now I can compile it without problem. But compiling is a point, activating it in Fluent is another issue. On windows it works perfectly and here when I define my UDF in by (pressure outlet) Boundary Conditions I get the error message: fatal signal (Bus Error) Error Object: #f
|
|
December 19, 2007, 05:58 |
Re: compatibility problem of UDF on LINUX
|
#5 |
Guest
Posts: n/a
|
Next time just do binairy transfer between your systems. Think this wil help a lot for the futher. Are you compiling on a Linux system or on an Unix? This can give problems if you try to run it in parallel.
|
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
ATTN ALL: SOLUTON TO UDF COMPILE PROBLEM | Rizwan | Fluent UDF and Scheme Programming | 40 | March 18, 2018 07:05 |
UDF using problem, error happens-heip!! | Michael | FLUENT | 1 | December 9, 2008 08:51 |
udf compiling problem | akr | FLUENT | 3 | August 22, 2007 08:14 |
UDF PROBLEM | anant | FLUENT | 2 | January 17, 2007 01:15 |
I have problem of UDF with turbulent premx source. | Z | FLUENT | 0 | February 16, 2005 04:34 |