UDF for output temperature
Hi I am attempted to use UDF to define dimensionless temperature in order to use it in post processing results I wrote it as below :
#include "udf.h" DEFINE_ON_DEMAND(on_demand_calc) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ real th = 298.3899; real tc = 297.6101; real temp; Thread *t; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Compute temperature function and store in user-defined memory*/ /*(location index 0) */ begin_c_loop(c,t) { temp = C_T(c,t); C_UDMI(c,t,0) = (temp-tc)/(th-tc); } end_c_loop(c,t) } I interpreted it successfully but when I select execute for demand it give me the following error: Warning: E:\\Project current year\\paper work\\output.C: line 9: Error: received a fatal signal (Segmentation fault). So is there problem with the UDF? any reply please? regards, mariam |
Did you allocate memory to store the UDM? Go to "User Defined" -> "Memory" and the set "Number of User-Defined Memory Locations" to 1.
|
1 Attachment(s)
Hi Thanks for the reply. I set the memory to 1 from the user defined menu but nothing appear at display >contours>User defined memory see pict? what the problem?
|
User defined memory indices start at 0. Assuming to did re-run the simulation,
You can also (in Fluent) go to File > Export > Solution Data... The set "CFD-Post Compatible" as File Type. And choose User Memory 0 in the "Quantities list" (and whatever other things you want to store). Then click write and store in somewhere you want. The use the CFD-Post to read that file. |
I interpreted the UDF at first then change the memory to 1 then I initialize the solution and run the case after that when I view the user memory contours nothing appears to me same as the pict I sent in my previous reply?
|
User Memory 1 (the one you're trying to draw contours for in the picture) shouldn't even exist for your simulation. As I said, User Defined memory Indices start at 0, so you should have a User Memory 0. Can you find this or not?
|
Quote:
|
Ok, so you have your UDF exactly as you posted, it is correct.
First you allocate the User Defined Memory Location (For you UDF you only need to allocate 1 memory location for UDMI(c,t,0)). Second, you interpret (or compile, whatever you prefer) your UDF. Third, run the code. It is a execute on command, so go to User Defined > Execute on command... then select your code and hit "execute". Now it should be written. Also after viewing your first post again, I see that you use Fluent to also draw the contours. You have not selected a surface for fluent to draw them on, so it wont draw anything. You'll probably want to select "Interior_surface_body". I hope this will work for you. |
Quote:
it still give me the error I mentioned at my first post i.e. Warning: E:\\Project current year\\kefayati paper\\output.C: line 9: Error: received a fatal signal (Segmentation fault). |
I assume line 9 is "real temp;", nothing seems to be wrong there at all.
What I think is going wrong now is that the thread pointer (*t) is never actually set to anything. I will assume that you want to loop over all cells in the domain. To do this try the following code: #include "udf.h" DEFINE_ON_DEMAND(on_demand_calc) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ real th = 298.3899; real tc = 297.6101; real temp; Thread *t; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Compute temperature function and store in user-defined memory*/ /*(location index 0) */ thread_loop_c(t,d) /* This will loop over all threads in the domain */ { begin_c_loop(c,t) /* This will loop over all cells in a thread */ { temp = C_T(c,t); C_UDMI(c,t,0) = (temp-tc)/(th-tc); } end_c_loop(c,t) } } Use as I described before. |
All times are GMT -4. The time now is 05:43. |