|
[Sponsors] |
![]() |
![]() |
#1 |
Senior Member
Flavio
Join Date: Sep 2011
Location: Brescia, Italy
Posts: 181
Rep Power: 16 ![]() |
Hi everybody,
I'm trying to parallelize my udf: there are a DEFINE_ADJUST and a DEFINE_PROFILE (that depends on the first) I put the basic compiler directives like #if !RP_HOST but I had some problem! this is my UDF: Code:
#include "udf.h" real tm=0.00; DEFINE_ADJUST(tsensor,d) { real trif=0.0; real nt; #if !RP_HOST real trif_coordinate[ND_ND]; real x,y,z; Thread *t=Lookup_Thread(d,120573); cell_t c; printf("Node è %d", myid); nt=0.0; begin_c_loop(c,t) { C_CENTROID(trif_coordinate,c,t); x=trif_coordinate[0]; y=trif_coordinate[1]; z=trif_coordinate[2]; if (sqrt(ND_SUM(pow(x+1.900,2.),pow(y+1.000,2.),pow(z-1.400,2.))) < 0.04) { trif=trif + C_T(c,t); nt=nt+1.0; printf("trif somma = %f\n", trif); printf("nr celle = %f\n", nt); } } end_c_loop(c,t) #if RP_NODE trif=PRF_GRSUM1(trif); nt=PRF_GRSUM1(nt); printf("trif = %f\n", trif); printf("nt = %f\n", nt); #endif #endif node_to_host_real_2(trif,nt); #if !RP_NODE if (nt!=0) { tm=trif/nt; } printf("tm vale %f\n", tm); #endif } DEFINE_PROFILE(twall, thread, position) { real tlim; face_t f; tlim=291.65; if (tm>tlim) begin_f_loop(f,thread) { F_PROFILE(f, thread, position) = 291.15-(tm-291.15); } end_f_loop(f, thread) else begin_f_loop(f,thread) { F_PROFILE(f, thread, position) = 291.15; } end_f_loop(f, thread) } ERROR: /Fluent/..../.... line 175: function "mpnode_to_host_double_2" not found (pc=19) ERROR: /Fluent/..../.... line 175: function "mpnode_to_host_double_2" not found (pc=399) ERROR: /Fluent/..../.... line 175: function "mpnode_to_host_double_2" not found (pc=399) ... etc... why the macro node_to_host does not work? Last edited by Bionico; December 29, 2011 at 12:24. |
|
![]() |
![]() |
![]() |
![]() |
#2 |
Member
Join Date: Nov 2011
Location: Czech Republic
Posts: 97
Rep Power: 15 ![]() |
Working for me (Fluent header files version 12.1 & GCC 4.6.2). Are you compiling or interpreting it?
|
|
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Flavio
Join Date: Sep 2011
Location: Brescia, Italy
Posts: 181
Rep Power: 16 ![]() |
Interpreting! Should I compile my udf?
|
|
![]() |
![]() |
![]() |
![]() |
#4 |
Member
Join Date: Nov 2011
Location: Czech Republic
Posts: 97
Rep Power: 15 ![]() |
Definitely! Interpreted UDF are useful only for very simple problems. The only their advantage is you don't need to bother with configuration of a compiler. On the other hand compiled UDF can use whole potential of C programming language and also their performance is better. Here is lovely tutorial how to setup a compiler on a Windows platform.
|
|
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Flavio
Join Date: Sep 2011
Location: Brescia, Italy
Posts: 181
Rep Power: 16 ![]() |
Thank you! I'll try to compile my UDF!
![]() Can you give me some advice for Linux platform? |
|
![]() |
![]() |
![]() |
![]() |
#6 |
Member
Join Date: Nov 2011
Location: Czech Republic
Posts: 97
Rep Power: 15 ![]() |
For compiling on Linux systems just follow Fluent's UDF manual. It is really straightforward. Basically it consists of 2 files, which you need to customize. Personally I prefer compiling on Linux machines, because it is working out of the box and with little extra effort you can link an UDF against external libraries (e.g. GSL) and use it in your code.
|
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
polynomial thermophysical properties II | sebastian | OpenFOAM Running, Solving & CFD | 54 | November 21, 2019 08:12 |
error while running paraFoam! | padmanathan | OpenFOAM | 9 | October 13, 2009 06:17 |
How to get the max value of the whole field | waynezw0618 | OpenFOAM Running, Solving & CFD | 4 | June 17, 2008 06:07 |
DecomposePar links against liblamso0 with OpenMPI | jens_klostermann | OpenFOAM Bugs | 11 | June 28, 2007 18:51 |
Problems of Duns Codes! | Martin J | Main CFD Forum | 8 | August 15, 2003 00:19 |