|
[Sponsors] |
converting instructions of a wall to instructions of a domain |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
March 29, 2018, 11:20 |
converting instructions of a wall to instructions of a domain
|
#1 |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
hello everybody,
Can any one help me please. I'm working with an UDF that makes the velocity inlet in a pipe varies with respect to the average temperature of a wall (THREAD_ID(t)==2 in my UDF). The UDF works perfectly when the thread_id concerned is a wall, but when I change the wall by a surface (2d domain) by changing the THREAD_ID(t) in the code, Fluent generate this error: Error: FLUENT received fatal signal (ACCESS_VIOLATION) 1. Note exact events leading to error. 2. Save case/data under new name. 3. Exit program and restart to continue. 4. Report error to your distributor. Error Object: () This is my udf code: #include "udf.h" DEFINE_PROFILE(unsteady_velocity_profile, th, position) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ face_t f; real tavg = 0.; Thread *t; real tempe,volume,vol_tot,area; real A[ND_ND]; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Loop over all cell threads in the domain */ thread_loop_f(t,d) { /* only use thread with id=2 */ if (THREAD_ID(t)==2) { /* Loop over all cells */ begin_f_loop(f,t) { tempe = F_T(f,t); area=NV_MAG(A); vol_tot += area; tavg += (tempe*area); } end_f_loop(f,t) tavg /= vol_tot; } } begin_f_loop(f, th) { if ( tavg <= 298. ) F_PROFILE(f, th, position) = 0.5; if ( tavg > 301.4 ) F_PROFILE(f, th, position) = 0.; } end_f_loop(f, th) } |
|
March 30, 2018, 19:45 |
|
#2 |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Any helps please !!
|
|
March 31, 2018, 12:46 |
|
#3 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
This version is working, but what exactly do you change in the version where it not working?
|
|
April 2, 2018, 20:15 |
|
#4 | |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Quote:
Yes exactly, when I use the THREAD_ID(t) of a wall, the code work perfectly, but when I want to use the THREAD_ID(t) of a domain ( interior_air in the pictures) either the code generate this error: FLUENT received fatal signal (ACCESS_VIOLATION) when the ID is got from the boundary conditions (ID=2 here) like in this picture: Or the code does not generate errors when the ID is got from the cell zone conditions (ID=9 here) like in this picture: But even if the code does not generate errors when the ID is got from the cell zone conditions, the velocity defined is always equal to 0.5 , that's mean that the T_average is not well calculated from the interior_air. Can you help me please ? |
||
April 3, 2018, 05:58 |
|
#5 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
The problem is simple to explain: you wrote a UDF to calculate average temperature on a wall. But now you apply it on an interior. An interior is not a wall...
I can't give you a solution. I mean, I can give you many 'solutions' that will get rid of the error, but I can't guess which one is relevant for you, because I don't understand what you are trying to achieve. |
|
April 3, 2018, 11:04 |
|
#6 | |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Quote:
So could you help me please? |
||
April 4, 2018, 02:55 |
|
#7 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
Part of your code is this:
Code:
/* Loop over all cells */ begin_f_loop(f,t) So rewrite your code to work with cells instead of faces. |
|
April 4, 2018, 09:46 |
|
#8 | |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Quote:
#include "udf.h" DEFINE_PROFILE(unsteady_velocity_profile, th, position) { Domain *d; /* declare domain pointer since it is not passed as an argument to the DEFINE macro */ face_t f; real tavg = 0.; Thread *t; real tempe,volume,vol_tot; cell_t c; d = Get_Domain(1); /* Get the domain using Fluent utility */ /* Loop over all cell threads in the domain */ thread_loop_f(t,d) { /* only use thread with id=11 */ if (THREAD_ID(t)==9) { /* Loop over all cells */ begin_c_loop(c,t) { volume = C_VOLUME(c,t); /* get cell volume */ tempe = C_T(c,t); /* get cell temperature */ vol_tot += volume; tavg += (tempe*volume); } end_c_loop(c,t) tavg /= vol_tot; } } begin_f_loop(f, th) { if ( tavg <= 298. ) F_PROFILE(f, th, position) = 0.5; if ( tavg > 298. ) F_PROFILE(f, th, position) = 0.; } end_f_loop(f, th) } |
||
April 4, 2018, 09:49 |
|
#9 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
Code:
/* Loop over all cell threads in the domain */ thread_loop_f(t,d) But what do you mean with "no results"??? Program crashed, error warning, strange results, compilation error... What? |
|
April 4, 2018, 10:05 |
|
#10 | |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Quote:
thread_loop_c(t,d) { /* only use thread with id=9 */ if (THREAD_ID(t)==9) { /* Loop over all cells */ begin_c_loop(c,t) { volume = C_VOLUME(c,t); /* get cell volume */ tempe = C_T(c,t); /* get cell temperature */ vol_tot += volume; tavg += (tempe*volume); } end_c_loop(c,t) tavg /= vol_tot; the velocity is always 0. that's mean that tavg is always above 298 k. and that's not true. I initialised with 291 k. |
||
April 4, 2018, 10:07 |
|
#11 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
If you are running in serial mode (not parallel), then I can't see where the problem is.
|
|
April 4, 2018, 10:17 |
|
#12 | |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Quote:
But please Mr. Pakk, if you can tell me instructions to write the tavg in a separate file or either in the fluent window in every time step, then I can maybe recognize where the problem is. |
||
April 4, 2018, 10:19 |
|
#13 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
Message("tavg=%f\n",tavg);
|
|
April 4, 2018, 10:30 |
|
#14 |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
Excuse me but that gives this error in the fluent window:
unsteady_velocity_profile.c: line 59: function "CX_Message" not found (pc=140). that what I puted in the code: begin_c_loop(c,t) { volume = C_VOLUME(c,t); /* get cell volume */ tempe = C_T(c,t); /* get cell temperature */ vol_tot += volume; tavg += (tempe*volume); } end_c_loop(c,t) tavg /= vol_tot; Message("tavg=%f\n",tavg); } |
|
April 4, 2018, 10:32 |
|
#15 |
Senior Member
Join Date: Nov 2013
Posts: 1,965
Rep Power: 26 |
You should (as always) be compiling, not interpreting.
|
|
April 4, 2018, 10:40 |
|
#16 |
Member
youhane kha
Join Date: Sep 2017
Posts: 36
Rep Power: 9 |
||
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Centrifugal fan | j0hnny | CFX | 13 | October 1, 2019 14:55 |
Periodic Pressure drop | cfd_begin | CFX | 10 | May 25, 2017 08:09 |
Centrifugal fan-reverse flow in outlet lesds to a mass in flow field | xiexing | CFX | 3 | March 29, 2017 11:00 |
Difficulty In Setting Boundary Conditions | Moinul Haque | CFX | 4 | November 25, 2014 18:30 |
Error finding variable "THERMX" | sunilpatil | CFX | 8 | April 26, 2013 08:00 |