Parallel UDF problem
Hi,
Im having a couple of problems with running a UDF in parallel. When I compile the UDF on 2 processors, the library's are built and loaded but the simulation does not start. I receive a couple of warning signs during the build. -In the host build: modified_drag.c: In function `modified_drag_EMMS': modified_drag.c:5: warning: 'k_g_s' might be used uninitialized in this function -In the node build: modified_drag.c: In function `modified_drag_EMMS': modified_drag.c:80: warning: control reaches end of non-void function modified_drag.c:10: warning: 'w' might be used uninitialized in this function modified_drag.c:10: warning: 'cd' might be used uninitialized in this function Firstly, I have initialised 'k_g_s', 'w' and 'cd' which confused me a bit and secondly I thought the 'warning: control reaches end of non-void function' might be why the simulation seems to stop before producing the first line of iteration. The UDF is given as follows: #include "udf.h" DEFINE_EXCHANGE_PROPERTY(modified_drag_EMMS,cell,m ix_thread,s_col,f_col) { real k_g_s; #if !RP_HOST Thread *thread_g, *thread_s; real x_vel_g, x_vel_s, y_vel_g, y_vel_s, abs_v, slip_x, slip_y, rho_g, mu_g, Re, vf_g, vf_s, dp, w, cd; /* find the threads for the gas (primary) */ /* and solids (secondary phases) */ thread_g = THREAD_SUB_THREAD(mix_thread, s_col); /* gas phase */ thread_s = THREAD_SUB_THREAD(mix_thread, f_col); /* solid phase*/ /* find phase velocities and properties*/ x_vel_g = C_U(cell, thread_g); y_vel_g = C_V(cell, thread_g); x_vel_s = C_U(cell, thread_s); y_vel_s = C_V(cell, thread_s); slip_x = x_vel_g - x_vel_s; /* velocity slip in the x direction */ slip_y = y_vel_g - y_vel_s; /* velocity slip in the y direction */ rho_g = C_R(cell, thread_g); /* gas density */ mu_g = C_MU_L(cell, thread_g); /* viscosity of gas */ dp = C_PHASE_DIAMETER(cell, thread_s); /* particle diameter */ vf_g = C_VOF(cell, thread_g); /* gas volume fraction */ vf_s = C_VOF(cell, thread_s); /* solid volume fraction */ /* Absolute slip velocity */ abs_v = sqrt(slip_x*slip_x + slip_y*slip_y); /* Reynold's number */ Re = vf_g*rho_g*abs_v*dp/mu_g; /* Reynolds conditions */ if (Re < 960) cd = (24./(vf_g*Re))*(1+0.15*pow(vf_g*Re,0.687)); if (Re > 960) cd = 0.44; /* compute drag coefficient for dilute region */ if (0.74 < vf_g <= 0.82) w = -0.1680+(0.0679/(4*pow(vf_g-0.7463,2)+0.0044)); if (0.82 < vf_g <= 0.97) w = -0.8601+(0.0823/(4*pow(vf_g-0.7789,2)+0.0040)); if (0.97 < vf_g) w = -31.8295+32.9895*vf_g; k_g_s = 0.75*cd*((rho_g*vf_s*abs_v)/dp)*w; /* drag coefficient for the dense region */ if(vf_g <= 0.74) k_g_s = 150*((pow(vf_s,2)*mu_g)/(pow(vf_g,2)*pow(dp,2)))+1.75*((vf_s*rho_g*abs_v)/(vf_g*dp)); node_to_host_real_1(k_g_s); #endif #if !RP_NODE return k_g_s; #endif } I would really appreciate some guidence as to why the iterations are not starting as I am new to all this. Thanks in advance, Lindsay |
I have the same problem
Quote:
|
I'll assume you use the same code as Lindsay, because you did not supply any other information.
This code uses compiler directives. Look for this term in the Fluent manual. In the host build, RP_HOST is true and RP_NODE is false. So the code simplifies to: Code:
#include "udf.h" In the node build, RP_HOST is false and RP_NODE is true. So the code simplifies to: Code:
#include "udf.h" Furthermore, you have a problem when Re is exactly 960: cd is undefined. And when vf is smaller than 0.74, w is undefined. I guess that your first problems can be solved by changing RP_NODE to RP_HOST. I don't really see why that one was used. And the other problems: define cd when Re is exactly 960, and define w when vf is smaller than 0.74. |
Thank you very much!!
I have code like this, it is strange that before I didn't have any error, but now I have same problem as mentioned before. Code:
#include <stdio.h> |
Quote:
|
All times are GMT -4. The time now is 01:34. |